51單片機串口通信錯誤的原因
之前發(fā)過(guò)一篇博文《MCU-51串口通信程序》,程序挺好用的,之后一直把串口當做測試用途,像正在調試USB,用的是CH372,PC通過(guò)CH372(USB)發(fā)一個(gè)字符到單片機,單片機再通過(guò)串口回傳這個(gè)字符,從而驗證CH372是否收到字符,結果出現意想不到的錯誤,錯誤還挺有規律的。就是發(fā)16位字符0A,接收到字符用16位顯示是8A;發(fā)2A,顯示AA;發(fā)2B,顯示AB,就是最高位(第8位)0變?yōu)?了,試驗了幾個(gè)都是一樣。

之前老板也是同樣的問(wèn)題(可見(jiàn)這事是多么普遍),不過(guò)當時(shí)由于不是我的事,就沒(méi)管。問(wèn)了一下老板,才知道是晶振的問(wèn)題,之前板子是用11.0952MHz晶振,現在的板子是12MHz,程序中串口通信也沒(méi)改預置值,直接就下載了,結果是誤差太多,前面的碼沒(méi)事,但誤差積累,最后的碼0就變成1了。敲響警鐘!
評論