熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時(shí)間: 2019-2-6 00:12
正文摘要:為啥給單片機(jī)發(fā)送包好+CI就會(huì)引發(fā)顯示亂碼,不管+CI前面后面是否有字符,都能引起顯示亂碼。 還有一種情況 單獨(dú)CI一直發(fā)送也會(huì)一起亂碼。其他字符均不會(huì)引起亂碼,包括中文。只有單片機(jī)接收到+CI或者單獨(dú)CI才會(huì)亂碼 ... |
yaoji123 發(fā)表于 2019-2-8 15:11 這個(gè)我明白,現(xiàn)在的問(wèn)題不在這。問(wèn)題是+cI會(huì)引起我屏幕顯示亂碼。 你說(shuō)我不可能每發(fā)送兩三次,就重新初始化LCD吧。 當(dāng)然也沒(méi)這個(gè)必要,因?yàn)槌?CI外其他字符,包括中文也不會(huì)導(dǎo)致顯示亂碼,哪怕我5ms向單片機(jī)發(fā)送數(shù)據(jù),也不會(huì)引起任何問(wèn)題。 . |
| LCD12864串口通訊對(duì)接收數(shù)據(jù)有處理時(shí)間的,用單片機(jī)串口通訊給它傳送數(shù)據(jù)要注意間隔時(shí)間,不能連續(xù)不斷的摶。最好做好應(yīng)答機(jī)制。便于LCD2864處理數(shù)據(jù)。 |
yzwzfyz 發(fā)表于 2019-2-7 01:44 就是串口接收到+I就開始接收數(shù)據(jù),遇到#就結(jié)束接收。如果是+開頭與者I開頭就存入緩沖區(qū)(數(shù)據(jù)幀頭)。不是就不接收,如果遇到#( 數(shù)據(jù)幀尾) 就停止接收。 顯示亂碼,跟接收的esp返回值代碼有關(guān),跟我數(shù)據(jù)代碼無(wú)關(guān)。還有數(shù)據(jù)丟失一次,跟跟覆蓋沒(méi)有關(guān)系,因?yàn)橹灰野l(fā)送第一次,第二次不管多久間隔都能接收到,你連續(xù)發(fā)送多次,也是會(huì)每?jī)纱谓邮盏揭淮巍?br /> 應(yīng)該問(wèn)題出在解析代碼上,但是我也沒(méi)有發(fā)現(xiàn)有啥不對(duì)。 |
|
把你的程序畫成流程圖看看,邏輯上有何不妥? 寫程序的習(xí)慣不好,記住要領(lǐng): 1、串行中斷只接收數(shù)據(jù),并存入緩沖區(qū),做個(gè)收到的標(biāo)記就好。盡可能不要在中斷中做其它任何事情。 2、數(shù)據(jù)處理,如顯示等等地,在主程序中進(jìn)行。 道理如下:串行數(shù)據(jù)是一個(gè)個(gè)串來(lái)的,一個(gè)數(shù)據(jù)到來(lái)后,你收到了,但處理它可能需要花一些時(shí)間,如顯示中的硬件等待...,如果執(zhí)行時(shí)間超過(guò)的一個(gè)字節(jié)的串行時(shí)間,則下一個(gè)串行數(shù)據(jù)就能丟失,因?yàn)檫@時(shí)你的串行中斷還未退出,新的數(shù)據(jù)來(lái)了無(wú)法再次進(jìn)入中斷,如此就可以丟失后面的串行數(shù)據(jù)!所以中斷服務(wù)程序要盡可能的用時(shí)短! |
| 這是我編寫的串口接收代碼。 |
Powered by 單片機(jī)教程網(wǎng)