當初學ModBus的時候寫的,代碼不怎么好,但也算是正確,你參考一下
void Uart1_Isr() interrupt 4 //串口1中斷函數
{
static unsigned RX_Count=0; //接收到的字節數
if(TI) //發送中斷
{
TI=0;
busy=0;
}
//────────────────────────────────────────────────────
if(RI) //接收中斷
{
RI=0;
if((New_Cmd)) //新命令
{
New_Cmd=0; //新命令標志位清除
TR0 = 1; //接收到串口信號后,定時器0開始計時
RX_Count=0; //重新指定指針位置
Buffer0.cnt_Byte=0; //接收字節數清除
}
Buffer0.buf_uart[RX_Count]=SBUF; //把接收到的數據保存
RX_Count++; //數組指針加1
Buffer0.cnt_Byte++; //接收字節數+1
T0_1ms_uart=0; //接收完一個字節數據,重新計時
}
//───────────────────────────────────────────────────────────
}
|