波特率基本概念:波特率是一個(gè)衡量通信速度的參數(shù),它表示每秒鐘傳送的bit的個(gè)數(shù)(來自:http://baike.haosou.com/doc/5430972-5669264.html)。
在單片機(jī)串口通信的設(shè)置中,絕大多數(shù)情況下,波特率是通過編程人員編寫程序設(shè)定的。那么我們?nèi)绾稳ダ斫獠ㄌ芈实挠?jì)算原理呢。
本文引用地址:http://www.eepw.com.cn/article/201611/322095.htm
傳統(tǒng)51單片機(jī)串口通信時(shí)(定時(shí)器1作為波特率發(fā)生器)波特率的計(jì)算公式是這樣的:
首先我們要完全理解這個(gè)公式,然后我們才能更好的去運(yùn)用它。其中,‘SMOD’是PCON寄存器中的一個(gè)bit,可以通過對PCON賦值,設(shè)置‘SMOD’為0(波特率不加倍)或1(波特率加倍);再看上式中的‘32’,‘32’指的是溢出信號經(jīng)過32分頻,當(dāng)然,并不是所有的單片機(jī)的溢出信號都要經(jīng)過32分頻。對上式的理解關(guān)鍵的地方是‘T1的溢出率’,這里的溢出率指的是定時(shí)器在單位時(shí)間內(nèi)溢出的次數(shù),所謂溢出,就是定時(shí)器從開始計(jì)數(shù)到計(jì)數(shù)達(dá)到最大值時(shí),如果再加1,定時(shí)器就會溢出。這樣就有以下的溢出率計(jì)算公式:
傳統(tǒng)51單片機(jī)(12T)計(jì)數(shù)時(shí)鐘是晶振的12分頻,所以對于傳統(tǒng)的51單片機(jī)而言,單位時(shí)間內(nèi)單片機(jī)可以計(jì)數(shù)的次數(shù)=晶振頻率/12;定時(shí)器溢出一次單片機(jī)計(jì)數(shù)的次數(shù)=定時(shí)器計(jì)數(shù)的最大值-初值;舉個(gè)例子說明:現(xiàn)在我們選用的晶振為12M,定時(shí)器是8位的,計(jì)數(shù)的最大值為256(2的8次方),我們賦予定時(shí)器的初值為156,那么就有:
這樣,我們就可以根據(jù)第一個(gè)式子計(jì)算出相應(yīng)的波特率了。同理,如果一開始我們就確定了波特率,那么我們也可以通過以上第一和第二個(gè)式子把定時(shí)器的初值計(jì)算出來。其實(shí)很多時(shí)候,波特率的計(jì)算,其實(shí)就是定時(shí)器初值的計(jì)算。
最后啰嗦幾句,波特率的計(jì)算不能一概而論,比如有些單片機(jī)對定時(shí)器的溢出信號的處理不是32分頻而是4分頻(比如STC15系列單片機(jī)),而且用12T單片機(jī)時(shí)單位時(shí)間內(nèi)單片機(jī)可以計(jì)數(shù)的次數(shù)=晶振頻率/12;如果用的是1T單片機(jī)時(shí),則有:單位時(shí)間內(nèi)單片機(jī)可以計(jì)數(shù)的次數(shù)=晶振頻率。所以我們根據(jù)實(shí)際情況出發(fā),實(shí)事求是。