<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 用PIC16C54做一個(gè)LED電子鐘

用PIC16C54做一個(gè)LED電子鐘

作者: 時(shí)間:2016-12-02 來(lái)源:網(wǎng)絡(luò ) 收藏
對于很多電子愛(ài)好者來(lái)說(shuō),自己制作一款LED電子鐘,是很有意思的一件事情,LED的

電子鐘雖然耗電一點(diǎn),但在夜間也不用打開(kāi)照明就可以看得清清楚楚,還是很方便的了.

PIC16C54內部有512字節(準確的說(shuō)是可以放512條指令)的指令空間,對于電子鐘的

應用項目來(lái)說(shuō),資源已經(jīng)足夠了.它具有12個(gè)I/O口,剛好可以用來(lái)做一個(gè)四個(gè)數碼管的電

子鐘.其中PORTA口用作位碼輸出,PORTB用作段碼輸出和按鍵輸入.

54內部有一個(gè)8位的定時(shí)器,但沒(méi)有中斷溢出功能,對于用慣了中斷的人來(lái)說(shuō),可能覺(jué)

得定時(shí)基準不好做,比如51系列的,只要設定好中斷溢出時(shí)間,一般取整數指令周期,如每

次溢出時(shí)間為50mS,每次溢出時(shí)累加器加一,當加到20次時(shí)就有1S了,很方便進(jìn)行系統時(shí)鐘

的處理.但PIC16C54沒(méi)有中斷功能,只能用判斷定時(shí)器溢出的方式來(lái)確定定時(shí)器的定時(shí).判

斷定量器溢出可以采用比較的方式,當采集到TMR0的計數值為0-5時(shí),可以認為定時(shí)器溢出

了,另一種方式是測試TMR0的最高位是否為1,也就是把TMR0當作7位定時(shí)器來(lái)用,這樣,就

不會(huì )出現前一種方式由于程序錯過(guò)捕獲到TMR0的值為0-5的時(shí)機而使定時(shí)出現誤差了.比

較好的方法是用一個(gè)存儲器X0跟蹤TMR0的計數值,在正常情況下,X0總是會(huì )小于TMR0的計

數值,因為在讀取TMR0的值并把這個(gè)值賦值給X0之后,TMR0的計數值又在累加了,但TMR0是

一個(gè)循環(huán)計數器,當加到255后,其值將會(huì )變?yōu)榱?這樣就為判斷TMR0提供了依據,即只要測

試到X0>=TMR0,即可認為T(mén)MR0已經(jīng)溢出,這樣就可以進(jìn)行相應的處理了.如時(shí)鐘頻率為

4MHz,則一條指令的執行時(shí)間為1uS,TMR0溢出對應于256uS,當測試到TMR0溢出之后,不對

TMR0進(jìn)行任何賦值操作,因為對TMR0進(jìn)行寫(xiě)入,會(huì )使TMR0延遲三個(gè)指令周期,而每次往

TMR0寫(xiě)入的時(shí)候,不可能它的計數值都是同一個(gè)值,所以只能采用加一個(gè)預定值的方法,如

果TMR0不采用分頻器,則對TMR0執行 TMR0=TMR0+9的操作,將使每次TMR0的計數溢出周期

等效為250個(gè)指令周期,也就是250uS,需要注意的是,每次讀入TMR0的值與X0進(jìn)行比較時(shí)的

時(shí)間間隔一定不能大于TMR0的溢出時(shí)間,否則錯過(guò)溢出時(shí)刻.判斷TMR0溢出的最短指令為:

MOVF TMR0,W

SUBWF X0,F

MOVWF X0

SKPC

GOTO 沒(méi)有溢出...

溢出處理...

對應的C語(yǔ)言語(yǔ)句為:

i=TMR0;

x0=x0-i;

x0=i;

if(CARRY)

{TMR0+=9;
}
這里借用了一個(gè)臨時(shí)存儲器i,如果沒(méi)有它,則語(yǔ)句編譯不會(huì )最短,程序執行會(huì )了出錯

,不能保證每次溢出為250uS.

如果選用32768晶振的話(huà),程序的設計上,不需要再對TMR0作任何寫(xiě)入,只需用上述程

序判斷TMR0溢出就可以了.因為T(mén)MR0每次溢出的時(shí)間為0.03125秒,再對其進(jìn)行32分頻即可

得到秒信號了.

這樣,整個(gè)程序的核心部分就完成了,剩下的應該不難寫(xiě)出來(lái).

本文引用地址:http://dyxdggzs.com/article/201612/324733.htm


關(guān)鍵詞: PIC16C54LED電子

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>