8051單片機串口波特率和定時器1的初值計算


在模式0和模式2下,串口波特率固定,模式0為Fosc/12。模式2為Fosc/32或Fosc/64,具體由PCON寄存器的SMOD位決定。

在模式1和模式3下,波特率是一個可變值,波特率可以由定時器1產生(8052可以由定時2產生),那么波特率到底為多少呢?波特率由定時器1的溢出率來決定:
Baud Rate = (2SMOD/32)*(Timer 1 Overflow Rate)
注意:2SMOD這里的SMOD是指數,SMOD為波特率雙倍波特率位,該位在PCON寄存器中。
當使用timer 1作為波特率產生器時,通常需要將timer 1配置成8位自動重裝的工作模式下,同時還要禁止timer 1中斷,那么timer 1的溢出率是怎樣計算的呢?溢出率即溢出的頻率,假設晶振頻率為12MHz,TH1值為0xFE,則只需要兩個時鍾脈沖就會溢出,溢出的周期為2us,那么溢出的頻率就為500KHz。根據定時器一節,定時時間有如下計算公式:
定時時間=(最大計數值-計數器初值)*機器周期=(最大計數值-計數器初值)*(12/晶振頻率(Hz))(s)=(256-TH1)*(12/OSC_FREQ(Hz))(s)。
那么溢出頻率自然就為:
OSC_FREQ(Hz)/((256-TH1)*12)。
所以最后推到出波特率為:
(2SMOD/32)*(OSC_FREQ(Hz)/((256-TH1)*12))。

波特率的計算公式有了,那自然就可以根據波特率推導出TH1的初值了:
BAUD_RATE=(2SMOD/32)*(OSC_FREQ(Hz)/((256-TH1)*12))
32*12*(256-TH1)=(2SMOD*OSC_FREQ(Hz))/BAUD_RATE
256-TH1=(2SMOD*OSC_FREQ(Hz))/(BAUD_RATE*32*12)
TH1=256-(2SMOD*OSC_FREQ(Hz))/(BAUD_RATE*32*12)
假設晶振頻率為11.0592MHz,波特率為9600,SMOD=0,TH1初值應該為多少呢?根據上面公式可以計算得TH1=256-11059200/(9600*32*12)=0xFD。

 

轉自:http://blog.csdn.net/mcgrady_tracy/article/details/18665733


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM