<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 用PIC16C54做一個(gè)LED電子鐘

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

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

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

          PIC16C54內(nèi)部有512字節(jié)(準(zhǔn)確的說是可以放512條指令)的指令空間,對(duì)于電子鐘的

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

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

          54內(nèi)部有一個(gè)8位的定時(shí)器,但沒有中斷溢出功能,對(duì)于用慣了中斷的人來說,可能覺

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

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

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

          斷定量器溢出可以采用比較的方式,當(dāng)采集到TMR0的計(jì)數(shù)值為0-5時(shí),可以認(rèn)為定時(shí)器溢出

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

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

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

          數(shù)值,因?yàn)樵谧x取TMR0的值并把這個(gè)值賦值給X0之后,TMR0的計(jì)數(shù)值又在累加了,但TMR0是

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

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

          4MHz,則一條指令的執(zhí)行時(shí)間為1uS,TMR0溢出對(duì)應(yīng)于256uS,當(dāng)測(cè)試到TMR0溢出之后,不對(duì)

          TMR0進(jìn)行任何賦值操作,因?yàn)閷?duì)TMR0進(jìn)行寫入,會(huì)使TMR0延遲三個(gè)指令周期,而每次往

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

          果TMR0不采用分頻器,則對(duì)TMR0執(zhí)行 TMR0=TMR0+9的操作,將使每次TMR0的計(jì)數(shù)溢出周期

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

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

          MOVF TMR0,W

          SUBWF X0,F

          MOVWF X0

          SKPC

          GOTO 沒有溢出...

          溢出處理...

          對(duì)應(yīng)的C語言語句為:

          i=TMR0;

          x0=x0-i;

          x0=i;

          if(CARRY)

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

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

          如果選用32768晶振的話,程序的設(shè)計(jì)上,不需要再對(duì)TMR0作任何寫入,只需用上述程

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

          得到秒信號(hào)了.

          這樣,整個(gè)程序的核心部分就完成了,剩下的應(yīng)該不難寫出來.

          本文引用地址:http://www.ex-cimer.com/article/201612/324733.htm


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

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();