如何在6M晶振下得到更高的波特率
下面先來看看用T1做波特率發(fā)生器時的情況,晶振為6M:
本文引用地址:http://butianyuan.cn/article/201611/317915.htm若用T1作波特率發(fā)生器,它只能作為8位定時器使用,為得到更高的波特率,可以設置SMOD=1,則它的波特率公式為:BAUND=2*fOSC/(32*12*(256-X)),其中X為定時器T1的初值。若BAUND=4800,則X=249.5,取整為0xf9,或舍入為0xfa,發(fā)送10個s,在超級終端觀察,得到一個字母k或空。在選擇BAUND=9600,則X=252.7,取整為0xfc或舍入為0xfd,在超級終端得到“]iM”或“^^”,而且出現(xiàn)的結果也不是必然的,可以預期用T1作波特率發(fā)生器不能得到4800及以上穩(wěn)定的波特率。
仍然以6M晶振來討論,而改用T2作波特率,情況大有改觀:
先寫出T2一段初始化程序:
voidInitialSerialPort()
{
SCON=0x50;//方式1,允許接收
C_T2=0;
RCLK=1;
TCLK=1;
RCAP2H=0xff;
RCAP2L=0xd8;//波特率=4800的設置值
TR2=1;
}
T2的波特率公式為:BAUND=fOSC/[32*65536-(RCAP2H,RCAP2L)],以下是各種波特率下RCAP2L的取值:
RCAP2H=0xff;
RCAP2L=0xd8;//波特率=4800
//RCAP2L=0xec;//波特率=9600
//RCAP2L=0xf6;//波特率=19200
//RCAP2L=0xfb;//波特率=38400
上述各種波特率情況下串口超級中斷顯示接收數(shù)據(jù)正常:都為10個s。
選用8952中的T2作波特率發(fā)生器可以得到比T1高得多的波特率。
評論