1樓:你我悖道各蒼涼
當接收到資料時,rcif會被置1,如果讀了接收結果rcreg,則系統自動會把rcif清0。
程式把清rcif語句遮蔽了,但txreg=rcreg;這一句就是讀接收結果(把接收結果rcreg送到傳送暫存器txreg裡),所以會自動讓rcif清0,只有新資料來時,rcif才會置1,才能再進入中斷。
如果把傳送的語句改為txreg=0x12(或其他不是rcreg的暫存器的變數),因此中斷後沒有讀取接收資料,也就不能清rcif,rcif仍然為1,即中斷服務程式退出後,還存在的中斷請求,因此就會馬上進入中斷,從而出現不停的傳送資料的現象。
解決的辦法有2:
1、讓原來遮蔽的語句rcif=0有效;
2、空讀rcreg,如定義一個變數a(unsigned char a),在傳送資料後或前,增加a=rcreg就可以了。
2樓:
oid uartinit(void)//初始化函式當我傳送sendtoprin(tmp,3);時void sendtoprin(uchar* sentdata,uchar totalsend)
中斷處理:
void low_isr(void)
else}}
3樓:匿名使用者
這個問題是這樣的,當接收到資料時,rcif會被置1,如果你讀了接收結果rcreg,則系統自動會把rcif清0。
你這程式把清rcif語句遮蔽了,但txreg=rcreg;這一句就是讀接收結果(把接收結果rcreg送到傳送暫存器txreg裡),所以會自動讓rcif清0,只有新資料來時,rcif才會置1,才能再進入中斷。
如果你把傳送的語句改為txreg=0x12(或其他不是rcreg的暫存器的變數),因此中斷後沒有讀取接收資料,也就不能清rcif,rcif仍然為1,即中斷服務程式退出後,還存在的中斷請求,因此就會馬上進入中斷,從而出現不停的傳送資料的現象。
解決的辦法有2:
1、讓原來遮蔽的語句rcif=0有效;
2、空讀rcreg,如定義一個變數a(unsigned char a),在傳送資料後或前,增加a=rcreg就可以了。
51微控制器串列埠接收資料十進位制,51微控制器在串列埠問題,我們從串列埠上傳送資料是以16進位制的,在微控制器上接收是10進位制的,
即便是傳送ascii碼形式的字元,也可以傳送數字啊,如1234,mcu將收到4個ascii值,然後在mcu端判斷每個是否 0 9 以確保是數字的ascii碼,如果是就將收到的ascii值減去 0 不就得到它的十進位制值了麼。可以這樣 向微控制器傳送非壓縮bcd碼0x01,0x02,0x03,0x04...
keil除錯串列埠通訊怎麼傳送資料給微控制器
可以 用 vpsd 虛擬串列埠 和 protues 一起用 你這個 接bai收串列埠數du據屬於外部訊號,純軟體肯zhi定不行的 如有高 dao手行,我也來學學 回你需要實答 不連線硬體,bai開串列埠除錯助手也沒du有用zhi啊,串列埠除錯助手是把資料發dao送到硬版 件串列埠的。你在keil中用...
51微控制器怎麼通過串列埠傳送小數,51微控制器怎麼通過串列埠傳送小數?
方法多的去了,把數字37.5轉換為字串 37.5 傳送可以,用壓縮bcd碼0x37 0x05傳送也可以,多得是。不一定一定要浮點處理。你自己定一個協議,1次發6個資料,選擇其中的2個作為資料,其他作為驗證碼,另一個微控制器接收到就演算法處理 微控制器不支援浮點運算的,你可以申請兩個變數,把整數和小數...