每接收一个字节,都会产生中断,只不过是在底层处理了。都是有协议处理的 |
/*************************************/ void Uart_Receive() interrupt 4 { static uchar ch=0; //静态计数变量 RI=0; //接收中断请求标志位清0 rev_buf[ch]=SBUF; //接收到的数据串保存在缓存数组 if(rec_buf[0]=='$') //验证数据头,如果错误,被后续数据覆盖 { ch++; if(rec_buf[ch-1]=='\n')//结束 { flag=1; //接收完成标志置1 ch=0; //计数变量清0 } } } |
字符串不定长,以\n作为结束标志,你又不知道具体长度怎么循环??? |
![]() ![]() |
软硬结合,两手都要抓,要手都要硬,就能更好理解代码了。 |
看来楼主对底层不了解。每接收一个字节数据,中断都触发一次,因此,当你意识到这个串口无法一次性识别一帧数据的时候,应该差不多明白了,需要用一个变量自加建立索引,来存储每个字节数据。 |
先理解中断是啥概念,别一上来就看程序 |
串口硬件收到一个字节,发出一个中断执行这段程序,字节存入rev_buf数组,数组标号+1,程序转入主程序,中断一次存一个,不用for。 |