|
發布時間: 2019-2-6 00:12
正文摘要:為啥給單片機發送包好+CI就會引發顯示亂碼,不管+CI前面后面是否有字符,都能引起顯示亂碼。 還有一種情況 單獨CI一直發送也會一起亂碼。其他字符均不會引起亂碼,包括中文。只有單片機接收到+CI或者單獨CI才會亂碼 ... |
yaoji123 發表于 2019-2-8 15:11 這個我明白,現在的問題不在這。問題是+cI會引起我屏幕顯示亂碼。 你說我不可能每發送兩三次,就重新初始化LCD吧。 當然也沒這個必要,因為除了+CI外其他字符,包括中文也不會導致顯示亂碼,哪怕我5ms向單片機發送數據,也不會引起任何問題。 . |
| LCD12864串口通訊對接收數據有處理時間的,用單片機串口通訊給它傳送數據要注意間隔時間,不能連續不斷的摶。最好做好應答機制。便于LCD2864處理數據。 |
yzwzfyz 發表于 2019-2-7 01:44 就是串口接收到+I就開始接收數據,遇到#就結束接收。如果是+開頭與者I開頭就存入緩沖區(數據幀頭)。不是就不接收,如果遇到#( 數據幀尾) 就停止接收。 顯示亂碼,跟接收的esp返回值代碼有關,跟我數據代碼無關。還有數據丟失一次,跟跟覆蓋沒有關系,因為只要我發送第一次,第二次不管多久間隔都能接收到,你連續發送多次,也是會每兩次接收到一次。 應該問題出在解析代碼上,但是我也沒有發現有啥不對。 |
|
把你的程序畫成流程圖看看,邏輯上有何不妥? 寫程序的習慣不好,記住要領: 1、串行中斷只接收數據,并存入緩沖區,做個收到的標記就好。盡可能不要在中斷中做其它任何事情。 2、數據處理,如顯示等等地,在主程序中進行。 道理如下:串行數據是一個個串來的,一個數據到來后,你收到了,但處理它可能需要花一些時間,如顯示中的硬件等待...,如果執行時間超過的一個字節的串行時間,則下一個串行數據就能丟失,因為這時你的串行中斷還未退出,新的數據來了無法再次進入中斷,如此就可以丟失后面的串行數據!所以中斷服務程序要盡可能的用時短! |
| 這是我編寫的串口接收代碼。 |