您的位置:網站首頁 > 電器維修資料網 > 正文 >
基于AT89S51的波特率制定方法
★★★★★【文章導讀】:基于AT89S51的波特率制定方法具體內容是:在串行通信中,收、發雙方發送或接收的波特率必須一致。通過軟件對at89s51的串行口可設定4種工作方式。其中方式0和方式2的波特率是固定的;方式1和方式3的波特率是可變的,由定時器t1的溢出率(t1每秒溢出的次數)來…
來源: 日期:2013-12-18 14:01:02 人氣:標簽:
在串行通信中,收、發雙方發送或接收的波特率必須一致。通過軟件對at89s51的串行口可設定4種工作方式。其中方式0和方式2的波特率是固定的;方式1和方式3的波特率是可變的,由定時器t1的溢出率(t1每秒溢出的次數)來確定。
波特率的定義
串行口每秒發送(或接收)的位數稱為波特率。設發送一位所需要的時間為t,則波特率為1/t。
對于定時器的不同工作方式,得到的波特率的范圍是不一樣的,這是由定時器/計數器t1在不同工作方式下計數位數的不同所決定的。
定時器t1產生波特率的計算
波特率和串行口的工作方式有關。
(1)串行口工作在方式o時,波特率固定為時鐘頻率fosc的1/12,且不受smod位值的影響。若fosc=12 mhz,波特率為fosc/12,即1 mbit/s。
(2)串行口工作在方式2時,波特率僅與smod位的值有關。其關系式為
若fosc=12 mhz:smod=0,波特率=187.5 kbit/s;smod=1,波特率=375 kbit/s。
(3)串行口工作在方式1或方式3時,常用定時器tl作為波特率發生器,其關系式為(1)
由式(1)可見,tl的溢出率和smod的值共同決定波特率。
在實際設定波特率時,tl常設置為方式2定時(自動裝初值),即tl1作為8位計數器,th1存放備用初值。這種方式不僅使操作方便,也可避免因軟件重裝初值帶來的定時誤差。
設定時器tl方式2的初值為x,則有(2)
將式(2)代入式(1),則有(3)
由式(3)可見,這種方式下波特率隨fosc、smod和初值x而變化。
在實際使用時,經常根據已知波特率和時鐘頻率fosc來計算定時器tl的初值x。為避免繁雜的初值計算,常用的波特率和初值x間的關系常列成下表形式,以供查用。
表 用定時器tl產生的常用波特率
對上表有以下兩點需要注意:
(1)在使用的時鐘振蕩頻率fosc為12 mhz或6 mhz時,將初值x和,fosc帶入式(7-3)中,分子除以分母不能整除,因此計算出的波特率有一定誤差。要消除誤差可以通過調整時鐘振蕩頻率fosc實現,例如采用的時鐘頻率為11.0592 mhz。因此,當使用串行口進行串行通信時,為減小波特率誤差,應該使用的時鐘頻率必須為11.0592 mhz。
(2)如果串行通信選用很低的波特率,如波特率選為55,可將定時器tl設置為方式1定時。但在這種情況下,tl溢出時,需在中斷服務程序中重新裝入初值。中斷響應時間和執行指令時間會使波特率產生一定的誤差,可用改變初值的方法加以調整。
例如:若at89s51單片機的時鐘振蕩頻率為11.0592 mhz,選用tl的方式2定時作為波特率發生器,波特率為2400 bit/s,求初值。
設t1為方式2定時,選smod=0。
將已知條件帶入式(3)中,有
從中解得x=244=f4h。
只要把f4h裝入th1和tl1,則tl發出的波特率為2400 bit/s。該結果也可直接從上表中查到。
這里時鐘振蕩頻率選為11.0592 mhz,就可使初值為整數,從而產生精確的波特率。
【看看這篇文章在百度的收錄情況】
相關文章
- 上一篇: 基于AT89S51的多機通信
- 下一篇: 基于AT89S51的雙機串行通信的硬件連接