
在單片機當(dāng)中晶振起著非常重要的作用,單片機的內(nèi)部電路配合晶振運行,產(chǎn)生單片機所需的時鐘頻率。而單片機發(fā)出的一切指令都是在時鐘頻率的基礎(chǔ)上的,所以晶振對單片機來說非常重要。波特率是指單位時間內(nèi)載波參數(shù)的變化次數(shù)。那么在單片機設(shè)計過程中,這兩者有什么關(guān)系?晶振對波特率的影響有多大呢?
在串行通信中,MCS—51串口可約定四種工作方式。其中,方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可變的,由定時器T1的溢出率決定。
波特率是指串行端口每秒內(nèi)可以傳輸?shù)牟ㄌ匚粩?shù)。這里所指的波特率,如標(biāo)準(zhǔn)9600不是每秒種可以傳送9600個字節(jié),而是指每秒可以傳送9600個二進位,而一個字節(jié)要8個二進位,如用串口模式1來傳輸,那么加上起始位和停止位,每個數(shù)據(jù)字節(jié)就要占用10個二進位,9600波特率用模式1傳輸時,每秒傳輸?shù)淖止?jié)數(shù)是9600÷10=960字節(jié)。
方式0和方式2的波特率
方式0的波特率是固定的,為fosc/12,以一個12M 的晶振來計算,那么它的波特率可以達到1M。
方式2的波特率是固定在fosc/64 或fosc/32,具體用那一種就取決于PCON 寄存器中的SMOD位,如SMOD 為0,波特率為focs/64,SMOD 為1,波特率為focs/32。
方式1和方式3的波特率
模式1和模式3的波特率是可變的,取決于定時器1或2(對于52芯片)的溢出速率,就是說定時器1每溢出一次,串口發(fā)送一次數(shù)據(jù)??梢杂靡韵碌墓饺ビ嬎悖?
上式中如設(shè)置了PCON寄存器中的SMOD位為1時就可以把波特率提升2倍。通常會使用定時器1工作在定時器工作模式2下,這時定時值中的TL1做為計 數(shù),TH1做為自動重裝值,這個定時模式下,定時器溢出后,TH1的值會自動裝載到TL1,再次開始計數(shù),這樣可以不用軟件去干預(yù),使得定時更準(zhǔn)確。在這個定時模式2下定時器1溢出速率的計算公式如下:
溢出速率=(計數(shù)速率)/(256-TH1初值)
溢出速率=fosc/[12*(256-TH1初值)]
上式中的“計數(shù)速率”與所使用的晶體振蕩器頻率有關(guān),在51 芯片中定時器啟動后會在每一個機器周期使定時寄存器TH的值加1,一個機器周期等于十二個振蕩周期,所以可以得知51芯片的計數(shù)速率為晶體振蕩器頻率的1/12,一個12M 的晶振用在51芯片上,那么51的計數(shù)速率就為1M。通常用11.0592M 晶體是為了得到標(biāo)準(zhǔn)的無誤差的波特率,那么為何呢?計算一下就知道了。如我們要得到9600 的波特率,晶振為11.0592M 和12M,定時器1 為模式2,SMOD 設(shè)為1,分別看看那所要求的TH1 為何值。代入公式:
11.0592M:
9600=(2÷32)×((11.0592M/12)/(256-TH1))
TH1=250
12M:
9600=(2÷32)×((12M/12)/(256-TH1))
TH1≈249.49
上面的計算可以看出使用12M晶體的時候計算出來的TH1不為整數(shù),而TH1的值只能取整數(shù),這樣它就會有一定的誤差存在不能產(chǎn)生精確的9600波特率。當(dāng)然一定的誤差是可以在使用中被接受的,就算使用11.0592M 的晶體振蕩器也會因晶體本身所存在的誤差使波特率產(chǎn)生誤差,但晶體本身的誤差對波特率的影響是十分之小的,可以忽略不計。
本篇文章介紹了51單片機當(dāng)中晶振和波特率的關(guān)系,并用數(shù)值進行了計算。希望大家在閱讀過本篇文章之后能對兩者的聯(lián)系有進一步的了解。
聲明:本內(nèi)容為作者獨立觀點,不代表電源網(wǎng)。本網(wǎng)站原創(chuàng)內(nèi)容,如需轉(zhuǎn)載,請注明出處;本網(wǎng)站轉(zhuǎn)載的內(nèi)容(文章、圖片、視頻)等資料版權(quán)歸原作者所有。如我們采用了您不宜公開的文章或圖片,未能及時和您確認(rèn),避免給雙方造成不必要的經(jīng)濟損失,請電郵聯(lián)系我們,以便迅速采取適當(dāng)處理措施;歡迎投稿,郵箱∶editor@netbroad.com。
微信關(guān)注 | ||
![]() |
技術(shù)專題 | 更多>> | |
![]() |
技術(shù)專題之EMC |
![]() |
技術(shù)專題之PCB |