『壹』 51單片機串口通信上位機接收數據丟失,怎麼解決
數據丟失多半是因為中斷造成的,當串口通訊時,系統被其他中斷佔用了,那麼就會出現數據丟失的情況,所以為了保險,可以採取以下措施:
1、將串口中斷優先順序設為最高。
2、增加反饋信號,DTR和DSR兩個信號可以用起來。
『貳』 請教51單片機使用串口中斷發送和非中斷發送有
51單片機串口發送數據,有兩種方式,中斷方式和查詢方式。就發送數據的結果而言沒有任何區別,也都很簡單容易。要找區別,中斷方式適合於稍復雜的系統,單片機執行程序需要完成的任務比較多,就不能采有查詢方式發送,這樣會白白浪費單片機大量的時間而影響完成其它任務了。
所以,中斷方式,節省單片機的時間,效率是最高的,也是正式產品採用的方式。
查詢方式,要整個發送數據期間內,除了發送數據是有效的指令,其餘時間都是在循環等待,浪費了大量的時間,效率極低。但是,很適合一個小題目小程序採用,對於初學者編程比較容易。
『叄』 單片機中,比如51單片機有五個中斷源,兩個外部中斷源,兩個定時器中斷源,一個串口中斷。它們都在什麼情
MCS-51單片機中斷系統的結構:
5個中斷源的符號、名稱及產生的條件如下。
INT0:外部中斷0,由P3.2埠線引入,低電平或下跳沿引起。
INT1:外部中斷1,由P3.3埠線引入,低電平或下跳沿引起。
T0:定時器/計數器0中斷,由T0計滿回零引起。
T1:定時器/計數器l中斷,由T1計滿回零引起。
TI/RI:串列I/O中斷,串列埠完成一幀字元發送/接收後引起。
整個中斷系統的結構框圖見下圖一所示。
<51單片機中斷系統結構>
如圖所示,由與中斷有關的特殊功能寄存器、中斷入口、次序查詢邏輯電路等組成,包括5個中斷請求源,4個用於中斷控制的寄存器IE、IP、ECON和SCON來控制中斷類弄、中斷的開、關和各種中斷源的優先順序確定。
教你詳細認識!看看網址吧!
『肆』 請問51單片機如何解決多位元組串口接收問題
串口的收發可以用查詢和中斷兩個辦法來實現。
1、查詢方法更適合於半雙工機制,編寫的思路簡單,程序結構簡單,在全雙工通信中易出問題。
2、中斷方法則更高效。你的程序把兩種方法混搭使用,容易出錯。
以你的程序為例,一旦收到首個23H字元,就停止在中斷服務中for循環裡面等待5個剩餘字元。假設感測器只發了3個字元,你的程序就停止在for循環裡面。
以你的程序為例改進,在中斷服務接收中,每次接收中斷只收1個字元,完成後退出。
void uart_interrupt(void) interrupt 4 using 0
{
static unsigned char i=0;
unsigned char buf;
if(RI==1)
{
buf=SBUF;
switch(i)
{
case 0:
if(buf==0x23)i=1;
break;
case 1:
case 2:
case 3:
case 4:
case 5:
buffer[i-1]=buf;
i++;
if(buf==0x23)
i=1;
if(i==5)
{
do_something_here(buffer);
i=0;
}
break;
default: i=0;break;
}
RI = 0; //RI清零
}
if(TI==1) TI=0; //TI清零
}
這樣改符合你的思維習慣嗎?實際串口協議解析與協議密切相關,用狀態機做比較好。程序中i把它變成狀態機的狀態,思考一下,改改程序更佳。