兩個51微控制器485串列埠通訊接收資料出錯原因?大概傳送五次會有一次全部接收正確。程式如下

時間 2021-08-30 10:34:40

1樓:匿名使用者

1.有人在傳送資料之前,先關閉了串列埠中斷!等待傳送完畢後,再開啟串列埠中斷。

這樣,在傳送資料的等待期間內,如果收到了資料,將不能進入中斷函式,也就不會儲存的這個新收到的資料。

這種處理方法,就會遺漏收到的資料。

2.有人在傳送資料之前,並沒有關閉串列埠中斷,當 ti = 1 時,是可以進入中斷程式的。

但是,卻在中斷函式中,將 ti 清零!

這樣,在主函式中的while(ti ==0);,將永遠等不到傳送結束的標誌。

3.還有人在中斷程式中,並沒有區分中斷的**,反而讓傳送引起的中斷,執行了接收中斷的程式。

對此,做而論道發表自己常用的方法:

接收資料時,使用「中斷方式」,清除 ri 後,用乙個變數通知主函式,收到新資料。

傳送資料時,也用「中斷方式」,清除 ti 後,用另乙個變數通知主函式,資料傳送完畢。

這樣一來,收、發兩者基本一致,編寫程式也很規範、易懂。

更重要的是,主函式中,不用在那兒死等傳送完畢,可以有更多的時間檢視其它的標誌。

2樓:匿名使用者

按你說的,要看你的資料長度及波特率,有可能是傳送頻率過快。

注意一下你的傳送端的資料長度以及傳送頻率

3樓:

最近在做乙個類似的實驗,一開始總是出錯,微控制器用的12mhz晶振,設定9600的波特率,誤差很大,每個位元組的高四的經常出錯。後來把波特率設定為4800,修改計數器t1的初值f3,這個精度更高,居然沒有出錯了。希望有人可以借鑑一下。

51微控制器串列埠通訊波特率問題,51微控制器串列埠波特率問題

anyway中國 usb轉串列埠上的晶振12mhz,對波特率的準確度有一定影響。但是,微控制器通訊的波特率設定,還是得採用與微控制器相連的11.0582mhz晶振進行計算。11.0592mhz設定的的大部分波特率理論誤差為零,但是,串列埠轉usb會有為了減小誤位元速率,可按照12mhz晶振波特率設定...

微控制器串列埠通訊問題,51微控制器串列埠通訊問題

修者世界 p3 0xff的作用其實很簡單,就是為了更好的完成 讀 修改 寫 這個過程,其實對於p3口是沒有必要的,對於p0口這樣做是應該的。 革玉花戚雪 微控制器串列埠通訊的問題,其實你只有乙個問題,就是 p0 0xf0 s2buf 0xfc p0 s2buf 為什麼這裡p0是0x00 你覺得p0應...

51微控制器,通過串列埠助手向微控制器傳送字串,微控制器將字串逆序傳送回計算機,用C語言程式設計

電腦通過串列埠助手向微控制器傳送字串,微控制器定義一個可以儲存7個字元的陣列,依次儲存接收的字串,當接收到7個字串後,就可以從陣列的最後一個字元向前傳送每一個字元給電腦就可以了。剩下的就是串列埠初始化,串列埠接收和傳送程式了,就比較好寫了。其實,電腦傳送任意的7個字元的字串都可以,微控制器收到後就可...