在接收中断理,只能读一次SBUF,第二次的数值就不确定是什么了,因为这时串口是空的。
你可以设置一个状态代表是否接收到了“I”
你好,关于你问的问题,你可以参考我这个程序试一下:
其中:5A A5是帧头,发送数据的格式是:5A A5 长度 数据(N位)那么在数组里面的第一个数据就是代表长度,如果你要接受"I",那么只需要在数据的第一位放I就好了。
void UART_ISR(void) interrupt 4 //串口中断接受 { if(RI) { DataTemp = SBUF; RI = 0; if(RXFRMOK==0) { if(RX5AOK) { if(RXA5OK) { RecData[LEN]=DataTemp; LEN++; if(LEN==(RecData[0]+1)) { RXFRMOK=1; RX5AOK=RXA5OK=0; } } else { if(DataTemp==0xA5) { RXA5OK=1; LEN=0; } } } else { if(DataTemp==0x5A) { RX5AOK=1; } } } } else { TI = 0; } }