在使用pic單片機時(pic18f25k80),發現串口沒有空閑判斷,以下是結合網上和自己看手冊的延遲方法。
1、根據字節+定時器判斷
一個字節,按傳統的算:一個起始位+8個數據位+一個結束位 = 10位 波特率如果為 B , 一個字節所需要時間 t = (1/B) * 10
定時器時間定為: T = 1.5 t ,一般情況是如此,根據實際情況設定,但不會超2t.
在中斷里每接收完一個字節,接收完一字節時間應該為t,如果定時器沒為0 ,將定時器重新恢復初值(1.5t),如果為0,說明這一幀已經接收完了。
后來調試發現一個問題,就是在485通信時,多個叢機發給主機,就會出現接收到一幀數據,兩個從機數據在一起,為什么請自己思考一下?
2、根據位+定時器判斷
如圖2所示,會有一個起始位和停止位,這個方法,網上講述最多。這個就是解決上面兩個從機發送的數據在主機接收的同一幀中,
這種現象稱為黏包。
根據停止位為高,延遲3.5個位 的時間,判斷是否一直為高,如果 是 一幀接收完全,否,繼續接收。
以上兩種我是都用的,具體講述第一種:根據字節+定時器判斷 。
|