久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 關于51單片機串口數據丟失問題

關于51單片機串口數據丟失問題

作者: 時間:2016-11-18 來源:網絡 收藏
關于51單片機串口通訊程序 丟失數據的問題,用串口調試工具發現,100個數據包里面有10個左右有丟失第一個或者第二個數據的現象,調試多次情況一樣,用實驗板將接受到的數據顯示出來,沒有發現丟失數據的現象,關鍵就是在發送階段,后來發現,有一個關鍵的細節,在串口初始化中用到定時器T1,并且打開了定時器使能,這樣一旦有溢出就發生中斷。并且優先級高于串口,所以既有可能丟失數據。一次分析,關掉T0定時器的溢出中斷。也可以將串口優先級至最高,PS=1;于此同時,每次發送數據都要清零發送標志位 while(!TI); TI=0;

本文引用地址:http://cqxgywz.com/article/201611/315768.htm

init_serial_A() //方式3,SCON=0xd8;ren=1;允許接受串口中斷TMOD=0x20; T1=FD: 9600 T1=FA:4800 兩種波特率都調試通過。
{ TMOD|=0x20;
SCON|=0xd8;
TL1=0xfA;
TH1=0xfA;
TR1=1; ET1=0;
ES=1;PS=1;
EA=1;
}

init_serial_B() // 方式1,SCON=0x40;ren=0;不允許接受串口中斷 T1=FD: 9600 T1=FA:4800 兩種波特率都調試通過。
{
TMOD|=0x20;
SCON=0x50;
PCON=0X00; //及smod=0;波特率不加倍
TL1=0xFD;
TH1=0xFf;PS=1;

TR1=1;
ES=1; EA=1; ET1=0;
}

init_serial_C() // 方式1,ren=0;不允許接受串口中斷T2定時器9600 波特率都調試通過。
{ SCON|=0X50;
T2CON|=0x1C;
RCAP2H=0XFF;
RCAP2L=0XDB;PS=1;
ES=1; EA=1; ET2=0;
}

init_serial_D() // 0方式 9216 調試未通過。調試助手的波特率不匹配
{SCON|=0X00;
PCON|=0X80; //及smod=1;波特率加倍
ES=1; EA=1; ET1=0;PS=1;
}

init_serial_E() // 方式3,ren=0;不允許接受串口中斷T2定時器9340,用9600的波特率有誤差。 波特率都調試通過。
{ SCON|=0XC0;
T2CON|=0x1C;
RCAP2H=0XFF;
RCAP2L=0XDb; ET2=0;PS=1;
}
init_serial_F() //方式2 定時器1,波特率9600 波特率都調試通過。
{
SCON=0x50;
TMOD|=0x20;
PCON&=0x00; PS=1;
TL1=0xfd;
TH1=0xfd;
TR1=1; ET1=0;
ES=1; EA=1;
}
init_serial_G() //方式2 定時器1,波特率9600 波特率都調試通過。
{
SCON=0x50;
TMOD|=0x20;
PCON&=0x00; PS=1;
TL1=0xfd;
TH1=0xfd;
TR1=1; ET1=0;
ES=1; EA=1;
}



評論


技術專區

關閉