yaoji123 发表于 2019-2-8 15:11 这个我明白,现在的问题不在这。问题是+cI会引起我屏幕显示乱码。 你说我不可能每发送两三次,就重新初始化LCD吧。 当然也没这个必要,因为除了+CI外其他字符,包括中文也不会导致显示乱码,哪怕我5ms向单片机发送数据,也不会引起任何问题。 . |
| LCD12864串口通讯对接收数据有处理时间的,用单片机串口通讯给它传送数据要注意间隔时间,不能连续不断的抟。最好做好应答机制。便于LCD2864处理数据。 |
yzwzfyz 发表于 2019-2-7 01:44 就是串口接收到+I就开始接收数据,遇到#就结束接收。如果是+开头与者I开头就存入缓冲区(数据帧头)。不是就不接收,如果遇到#( 数据帧尾) 就停止接收。 显示乱码,跟接收的esp返回值代码有关,跟我数据代码无关。还有数据丢失一次,跟跟覆盖没有关系,因为只要我发送第一次,第二次不管多久间隔都能接收到,你连续发送多次,也是会每两次接收到一次。 应该问题出在解析代码上,但是我也没有发现有啥不对。 |
|
把你的程序画成流程图看看,逻辑上有何不妥? 写程序的习惯不好,记住要领: 1、串行中断只接收数据,并存入缓冲区,做个收到的标记就好。尽可能不要在中断中做其它任何事情。 2、数据处理,如显示等等地,在主程序中进行。 道理如下:串行数据是一个个串来的,一个数据到来后,你收到了,但处理它可能需要花一些时间,如显示中的硬件等待...,如果执行时间超过的一个字节的串行时间,则下一个串行数据就能丢失,因为这时你的串行中断还未退出,新的数据来了无法再次进入中断,如此就可以丢失后面的串行数据!所以中断服务程序要尽可能的用时短! |
| 这是我编写的串口接收代码。 |