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