#include <intrins.h>
#include "config.h"
#include "stdio.h"//用于調(diào)用printf函數(shù)原型
/* 串口配置函數(shù),baud-通信波特率 */
void ConfigUART(unsigned int baud)
{
RS485_DIR = 0; //RS485設(shè)置為接收方向
g_rs485_uart_pop_ptr = 0; //當 g_uart_pop_ptr + 1 = g_uart_push_ptr 時緩存為空
g_rs485_uart_push_ptr = 1; //此處加1是指針加1,即計算下一個指針
rs485_sbuf.out_index = 0; //----
rs485_sbuf.in_index = 1;
rs485_sbuf.send_runing = FALSE;
ACC = P_SW1;
ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0
P_SW1 = ACC; //(P3.0/RxD, P3.1/TxD)
SCON = 0x50; //配置串口為模式1
AUXR = 0x40; //定時器1為1T模式
AUXR &= 0xFE;
TMOD = 0x00; //定時器1為模式0(16位自動重載)
TL1 = (65536 - (FOSC/4/baud)); //設(shè)置波特率重裝值
TH1 = (65536 - (FOSC/4/baud))>>8;
ET1 = 0; //禁止T1中斷
ES = 1; //使能串口中斷
TR1 = 1; //啟動T1
EA=1;
}
當調(diào)用這個ConfigUART(unsigned int baud);寫入9600、57600時通過串口助手接收發(fā)關(guān)送數(shù)據(jù)正確,當寫入115200時通過串口助手接收發(fā)關(guān)送數(shù)據(jù)不對
如果把上面的
TL1 = (65536 - (FOSC/4/baud)); //設(shè)置波特率重裝值
TH1 = (65536 - (FOSC/4/baud))>>8;
改為:
TL1 = (65536 - (FOSC/4/115200)); //設(shè)置波特率重裝值
TH1 = (65536 - (FOSC/4/115200))>>8;
時通過串口助手接收發(fā)關(guān)送數(shù)據(jù)正確。
請各位大神指教函數(shù)那里錯了。。。!
|