找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3275|回复: 6
收起左侧

LCD12864串行接法使用单片机串口乱码问题

[复制链接]
ID:383374 发表于 2019-2-6 00:12 来自手机 | 显示全部楼层 |阅读模式
为啥给单片机发送包好+CI就会引发显示乱码,不管+CI前面后面是否有字符,都能引起显示乱码。
还有一种情况 单独CI一直发送也会一起乱码。其他字符均不会引起乱码,包括中文。只有单片机接收到+CI或者单独CI才会乱码(要发很多很多次)。c51优化关闭也是一样的结果。只要碰到这两种组合,就会引起乱码。
有人遇到过这种问题吗。求指教一下,因为我使用esp8266的tcp协议发送数据后就会返回AT+CIPSEND.....
单片机接收到这个就会显示乱码。当然单片机工作是正常的。



回复

使用道具 举报

ID:383374 发表于 2019-2-6 01:54 来自手机 | 显示全部楼层
这是我编写的串口接收代码。
回复

使用道具 举报

ID:383374 发表于 2019-2-6 01:57 来自手机 | 显示全部楼层
这是我编写的串口接收代码。这个代码有个问题,就是上位机发送两次,才能接收到一次。
希望代码大神指教一下,感激不尽
Screenshot_2019-02-06-01-53-43-638_com.tencent.mobileqq.png
回复

使用道具 举报

ID:123289 发表于 2019-2-7 01:44 | 显示全部楼层
把你的程序画成流程图看看,逻辑上有何不妥?
写程序的习惯不好,记住要领:
1、串行中断只接收数据,并存入缓冲区,做个收到的标记就好。尽可能不要在中断中做其它任何事情。
2、数据处理,如显示等等地,在主程序中进行。
道理如下:串行数据是一个个串来的,一个数据到来后,你收到了,但处理它可能需要花一些时间,如显示中的硬件等待...,如果执行时间超过的一个字节的串行时间,则下一个串行数据就能丢失,因为这时你的串行中断还未退出,新的数据来了无法再次进入中断,如此就可以丢失后面的串行数据!所以中断服务程序要尽可能的用时短!
回复

使用道具 举报

ID:383374 发表于 2019-2-8 12:57 来自手机 | 显示全部楼层
yzwzfyz 发表于 2019-2-7 01:44
把你的程序画成流程图看看,逻辑上有何不妥?
写程序的习惯不好,记住要领:
1、串行中断只接收数据,并存 ...

就是串口接收到+I就开始接收数据,遇到#就结束接收。如果是+开头与者I开头就存入缓冲区(数据帧头)。不是就不接收,如果遇到#(
数据帧尾)
就停止接收。
显示乱码,跟接收的esp返回值代码有关,跟我数据代码无关。还有数据丢失一次,跟跟覆盖没有关系,因为只要我发送第一次,第二次不管多久间隔都能接收到,你连续发送多次,也是会每两次接收到一次。
应该问题出在解析代码上,但是我也没有发现有啥不对。
回复

使用道具 举报

ID:432823 发表于 2019-2-8 15:11 | 显示全部楼层
LCD12864串口通讯对接收数据有处理时间的,用单片机串口通讯给它传送数据要注意间隔时间,不能连续不断的抟。最好做好应答机制。便于LCD2864处理数据。
回复

使用道具 举报

ID:383374 发表于 2019-2-8 18:37 来自手机 | 显示全部楼层
yaoji123 发表于 2019-2-8 15:11
LCD12864串口通讯对接收数据有处理时间的,用单片机串口通讯给它传送数据要注意间隔时间,不能连续不断的抟 ...

这个我明白,现在的问题不在这。问题是+cI会引起我屏幕显示乱码。
你说我不可能每发送两三次,就重新初始化LCD吧。
当然也没这个必要,因为除了+CI外其他字符,包括中文也不会导致显示乱码,哪怕我5ms向单片机发送数据,也不会引起任何问题。



.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表