這段代碼要改成這樣,例如:發送01 06 00 01 00 17 接收01 06 00 01 00 17
有大神幫我改改嗎,剛學還有很多不懂
void Uart3_Init(void)
{
S3CON |= 0x50; //串口3選擇定時器3為波特率發生器,啟動串行接收器
S3CON &= 0x70; //8位數據,可變波特率
T3H=(65536-(MAIN_Fosc/12/4/BAUD))/256;
T3L=(65536-(MAIN_Fosc/12/4/BAUD))%256;
T4T3M |= 0x08; //允許定時器3運行
IE2 |= 0x08; // 串口3中斷打開
IE2 &= 0xDF; // 關閉定時器3中斷
EA = 1; // 總中斷打開
}
void SendDataByUart3(uint8 dat)
{
S3BUF = dat; //寫數據到UART數據寄存器
while(!(S3CON&S3TI)); //在停止位沒有發送時,S3TI為0即一直等待
S3CON&=~S3TI; //清除S3CON寄存器對應S3TI位(該位必須軟件清零)
}
void U3SendString(uint8 *s)
{
IE2 &= 0xF7; // 串口3中斷關閉
while (*s) //檢測字符串結束標志
{
SendDataByUart3(*s++); //發送當前字符
}
IE2 |= 0x08; // 串口3中斷打開
}
int main()
{
P0M1 &= 0xFE; P0M0 &= 0xFE; //設置P0.0為準雙向口
P0M1 &= 0xFD; P0M0 |= 0x02; //設置P0.1為推挽輸出
rs485_dr=0; //控制485接收
Uart3_Init();
while(1)
{
if(temp1==50) //接收到的數為“2”
{
rs485_dr=1; //控制485發送
U3SendString("Hello World\r\n"); //通過串口2發送字符串“FIYU”
uart3_rflage=0; //清零串口2接收標識符
rs485_dr=0; //控制485接收
delay_ms(10); //初始化后延時
temp1=0; //清零接收的臨時數據
}
}
}
void Uart3() interrupt 17 using 1
{
IE2 &= 0xF7; // 串口3中斷關閉
if (S3CON & S3RI) //串行接收到停止位的中間時刻時,該位置1
{
S3CON &= ~S3RI; //清除S3CON寄存器對應S3RI位(該位必須軟件清零)
temp1 = S3BUF; //把串口3緩存SBUF寄存器數據存放到數組temp1中
uart3_rflage = 1;
}
if (S3CON & S3TI) //在停止位開始發送時,該位置1
{
S3CON &= ~S3TI; //清除S3CON寄存器對應S3TI位(該位必須軟件清零)
}
IE2 |= 0x08; // 串口3中斷打開
}
|