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