![]() |
發布時間: 2017-4-15 11:49
正文摘要:在使用串口調試軟件時,發送數據后會不斷重復數據的最后一個字符,如下圖。波特率一致,為4800bps,程序如下,我檢查了很多次也不知道什么原因,故發帖專心請教。 程序: #include<reg51.h> void comsetting( ... |
poseidon 發表于 2017-4-15 12:22 TH1=0xf3;TL1=0xf3和TH1=0xf4;TL1=0xf4有什么差別嗎! |
每次串口中斷后,你都會從SBUF中取一個數字發出; 收到最后一個時SBUF讀到“o”,你發“o”。 注意:串口中斷響應是不管收還是發,都會發生中斷,所以發完最后一個“o”后,也會生產中斷,當然你取到的SBUF一定是上次的SBUF也就是“o”,所以你又發一次“o”,發生后還會再中斷(發送中斷)…… 實際上,當你收到“h”時,在發出“h”后也會產生發送中斷,但這個中斷不會被立即響應,因為這時程序還在中斷服務程序中尚未返回,當你中斷返回后,響應發送中斷時,接收中斷也收到了,新發來了下一個“e”(接收中斷與發送中斷幾乎同時到達),所以你并未再發一次“h”,而是新收到的“e”。也就是說你已丟了一次中斷,但丟掉的洽洽是重復的那一個! 讀懂以上后,程序修改一下就好了,應當很簡單了! |
應該是TH1=0xf3;TL1=0xf3 |