![]() |
發布時間: 2023-6-7 17:23
正文摘要:判斷從串口接收到的兩個字節,即4位16進制的數據,如果第一個字節對了led1亮然后判斷第二個,第二個字節對了led3亮。 但是令我很好奇的是某些數據是對的,另一些卻不能正確判斷 如fafb, e1d1 ,等,燈可以正常亮起 ... |
劉宇杰找實訓 發表于 2023-6-7 21:04 謝謝解答 |
串口中斷函數接收第一個字節之后,開啟定時器計數。接受下一個字節的時候清空定時器計數。如此,當沒有數據接收后,計時器無法清零,當計時器計數超過設定的數值之后,觸發定時器溢出中斷,此時數據即接收完畢 |
xuyaqi 發表于 2023-6-7 18:27 判斷和LED處理已放進主循環,并且僅判斷一個字節。 仍只有部分數據led1可正常亮起,如ff.fb等 請問這是什么原因呢?我該如何解決嘞。求大佬指點 這是修改后的程序 void main() { UART_init(); //串口初始化 while(1) { if(num1==0x5A) { led1=0; //第一個字節對了之后led1亮 } else led1=1; } } void UART() interrupt 4 { while(!RI); //檢測是否接收完成 RI = 0; num1 = SBUF; } |
在串口中斷里應該只處理數據接收,LED處理放在main循環里,不要因為LED處理影響數據接收。 |