<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發(fā)網(wǎng)

      電子開發(fā)網(wǎng)電子設(shè)計(jì) | 電子開發(fā)網(wǎng)Rss 2.0 會(huì)員中心 會(huì)員注冊(cè)
      搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> EDA開發(fā)應(yīng)用 >> Keilc >> 正文

      利用Keil C51實(shí)現(xiàn)T0精確定時(shí)

      作者:佚名    文章來(lái)源:本站原創(chuàng)    點(diǎn)擊數(shù):    更新時(shí)間:2008/10/31

          利用89C51設(shè)計(jì)一個(gè)簡(jiǎn)易日歷時(shí)鐘系統(tǒng),時(shí)鐘系統(tǒng)硬件主要由單片機(jī)控制的計(jì)時(shí)電路、復(fù)位等輔助電路、按鍵電路、數(shù)碼管顯示電路、電源系統(tǒng)等組成。日歷時(shí)鐘可以顯示年、月、時(shí)、分、秒;可以設(shè)置年、月、時(shí)、分 其中計(jì)時(shí)控制電路由AT89C51單片機(jī)控制;按鍵電路包含時(shí)間設(shè)置;時(shí)間顯示屏電路由7個(gè)數(shù)碼管組成;電源系統(tǒng)由小功率整流濾波穩(wěn)壓電路組成,輸出直流電壓5 V,向主電路及顯示電路供電。系統(tǒng)框圖如圖1所示。
       
      圖1 日歷時(shí)鐘系統(tǒng)框圖
          在計(jì)時(shí)過(guò)程中,系統(tǒng)利用89C51自身的計(jì)時(shí)器T0作為時(shí)鐘基準(zhǔn),計(jì)時(shí)器中斷的準(zhǔn)確度直接關(guān)系到整個(gè)系統(tǒng)的精度,因此獲取精確的定時(shí)時(shí)鐘信號(hào)成為該系統(tǒng)的關(guān)鍵。MCS-51單片機(jī)內(nèi)有2個(gè)可編程的16位定時(shí)器/計(jì)數(shù)器,在本系統(tǒng)設(shè)計(jì)中采用AT89C51的定時(shí)器T0,并工作在方式1下,晶振頻率為12 MHz。

      1 T0定時(shí)中斷
          定時(shí)器/計(jì)數(shù)器T0工作方式1的電路邏輯結(jié)構(gòu)如圖2所示。T0定時(shí)特性功能寄存器由TL0(低8位)和TH0(高8位)構(gòu)成。特殊功能寄存器TMOD控制定時(shí)寄存器的工作方式;TCON則用于控制定時(shí)器T0和T1的啟動(dòng)和停止計(jì)數(shù),同時(shí)管理定時(shí)器T0和T1的溢出標(biāo)志等。程序開始時(shí)需對(duì)TL0和TH0進(jìn)行初始化編程,以定義它們的工作方式,并控制T0和T1的計(jì)數(shù)。在系統(tǒng)的設(shè)計(jì)中,計(jì)時(shí)單位以s為基準(zhǔn),并要求日誤差≤10 s,如果用循環(huán)去做,無(wú)法滿足精度要求。選用12 MHz的晶體可得到1 s的精度,經(jīng)分析確定使用定時(shí)器0的方式1。這個(gè)方式下,定時(shí)器0是16位定時(shí)器,也就是最大定時(shí)值為FFFFH,12 MHz晶體的每個(gè)定時(shí)周期為1 s,最多可以定時(shí)FFFFH×1 s=65635 us,即使使用最大值也無(wú)法一次定時(shí)1 s,設(shè)計(jì)中使用1次定時(shí)20 ms,50次定時(shí)中斷得到1 s。20 ms定時(shí)中斷的定時(shí)值為:FFFFH-20 ms/1 s= B1DFH。
       
      圖2 定時(shí)器/計(jì)數(shù)器工作方式1邏輯結(jié)構(gòu)

      2 程序測(cè)試與調(diào)整
      在Keil uVision3平臺(tái)下利用C語(yǔ)言實(shí)現(xiàn)如下代碼:
      #include<reg52.h>
      #define uchar unsigned char
      uchar data MScond= 0;//ms
      uchar data Scond= 0; //s
      uehar data M inute= 0;//min
      uchar data Hour= 0;//h
      void main(void){
      EA =1; //允許CPU中斷
      ET0 = 1; //定時(shí)器0中斷打開
      TMOD =0x1; //設(shè)定時(shí)器0為方式1
      TH0= 0xB1;
      TL0= 0xDF; //設(shè)定時(shí)值為20 000 us(20 ms)
      TR0 = 1; //開始定時(shí)
      while(1);
      }
      void Time0(void) interrupt 1 using 1
      {
      TH0=0xB1; //20 ms斷點(diǎn) (1)
      TL0=0xDF; //設(shè)定時(shí)值
      MScond= MScond+ 1;
      if(MScond == 50)
      {MScond=0;
      Scond= Scond+ 1;
      if(Scond == 60)
      {Scond=0;
      Minute=Minute+1; //分?jǐn)帱c(diǎn)   (2)
      if(Minute == 60)
      {Minute=0;
      Hour=Hour+1; //d,時(shí)斷點(diǎn)   (3)
      if(Hour == 24)
      { Hour=0; }}}}
          首先調(diào)試每20 ms中斷時(shí)的精度,在選項(xiàng)中設(shè)定調(diào)試晶振為12 MHz,在(1)處設(shè)置一個(gè)斷點(diǎn)再運(yùn)行,這時(shí)記錄下每次中斷時(shí)的時(shí)間,如圖3所示。在初始化中費(fèi)時(shí)為551 s,每一次中斷時(shí)間應(yīng)該考慮該項(xiàng)的影響。在實(shí)際處理中可以利用兩次中斷時(shí)間的差來(lái)作為定時(shí)器的中斷時(shí)
      間間隔。
          通過(guò)測(cè)試,得到第一次為0.020 568 00 s,第二次為0.040 580 00 s,第三次為0.060 592 00 s。可以看出,每中斷一次會(huì)比定時(shí)值長(zhǎng)了12 s。如果將斷點(diǎn)設(shè)定在(2)處,并通過(guò)Logic Analyzer tool,得到分鐘第一次中斷的時(shí)間為60.036 57 S,第二次中斷的時(shí)間為120.072 57 s,則每分鐘的實(shí)際時(shí)間為60.036 S。再將斷點(diǎn)設(shè)定在(3)處,得到小時(shí)第一次中斷的時(shí)間為3 602.160 576 S,第二次中斷的時(shí)間為7204.320 576 S,可以得到小時(shí)的實(shí)際時(shí)間為3602.16 S,如圖4所示。
          為什么會(huì)產(chǎn)生這些誤差呢?通過(guò)對(duì)中斷程序的匯編源碼進(jìn)行分析,實(shí)際上中斷程序入堆棧時(shí)使用了兩條語(yǔ)句:PUSH ACC和PUSH PSW。執(zhí)行人棧指令花費(fèi)了4個(gè)機(jī)器周期,加上重新對(duì)TH0和TL0的加載又用去2個(gè)機(jī)器周期,計(jì)數(shù)值加1花費(fèi)了2個(gè)機(jī)器周期,中斷返回約4個(gè)機(jī)器周期共約12個(gè)機(jī)器周期。為了消除這些因素的影響,需要在對(duì)T0設(shè)置計(jì)數(shù)值時(shí)減去12個(gè)機(jī)器周期,將計(jì)算得到的初始值B1DFH加上12(0CH)得到:B1DFH+12=B1EBH作為新的定時(shí)器初值,修改后的程序?yàn)椋?BR>#include<reg52.h>
      #define uchar unsigned char
      uchar data MScond=0; //ms
      uchar data Scond=0; //s
      uchar data Minute=0; //min
      uchar data Hour=0; //h
      void main(void){
      EA = 1; //允許CPU 中斷
      ET0= 1; //定時(shí)器0中斷打開
      TMOD = 0x1; //設(shè)定時(shí)器0為方式1
      TH0= 0xB1;
      TL0=0xEB; //設(shè)定時(shí)值為20 000 (20 ms)減去12
      TR0= 1; //開始定時(shí)
      while(1);
      }
      void Time0(void) interrupt 1 using 1
      {TH0=0xB1; //20 ms斷點(diǎn) (1)
      TL0=0xDF; //設(shè)定時(shí)值
      MScond= MScond+ 1;
      if(MScond == 50)
      {MScond=0;
      Scond= Scond+ 1;
      if rScond == 60)
      {Scond=0;
      Minute=Minute+1; //分?jǐn)帱c(diǎn) (2)
      if(Minute == 60)
      {Minute=0;
      Hour=Hour+1; //時(shí)斷點(diǎn) (3)
      if(Hour == 24)
      { Hour=0;}}}}
          重新調(diào)試程序,仍然在選項(xiàng)中設(shè)定調(diào)試晶振為12 MHz,重新測(cè)試20 ms定時(shí)器的實(shí)際時(shí)間,在(1)處設(shè)置一個(gè)斷點(diǎn)后運(yùn)行,重新記錄下每次中斷時(shí)的時(shí)間,如圖5所示。初始化時(shí)間為556 s,為消除其影響,使用兩次中斷時(shí)間間隔來(lái)作為定時(shí)器實(shí)際獲得的基準(zhǔn)時(shí)鐘。得到一次中斷時(shí)的時(shí)間為0.020 556 00 S,第二次為0.040 556 000,第二次為0.060 556 00 s,可以看出每次中斷間隔剛好20 ms。如果將斷點(diǎn)設(shè)定在(2)處.并通過(guò)Logic Analyzer tool,得到第一次中斷時(shí)時(shí)間為60.000 57 s,第二次為120.000 57 s,間隔剛好60 s。將斷點(diǎn)設(shè)定在(3)處,得到第一次中斷的時(shí)間為3600.000 578 s,第二次中斷時(shí)間為7200.000 578 s,時(shí)間間隔為3 600 s,測(cè)試結(jié)果如圖6所示,完全可以滿足系統(tǒng)設(shè)計(jì)的需要。

      3 總結(jié)
          通過(guò)對(duì)定時(shí)器的誤差分析和校正.可以提高系統(tǒng)的精確度。當(dāng)然.上面的分析是在軟環(huán)境下理想晶振頻率下實(shí)現(xiàn)的,在現(xiàn)實(shí)中會(huì)因晶振偏差等因素而造成誤差。在該測(cè)試中,主程序沒有進(jìn)行其他處理,而在日歷設(shè)計(jì)中還要涉及到計(jì)時(shí)器T1的中斷來(lái)完成對(duì)掃描顯示電路的處理,還包括外部中斷對(duì)時(shí)鐘進(jìn)行了調(diào)整,加上一些鬧鐘功能,這必然會(huì)對(duì)T0的定時(shí)精確性產(chǎn)生影響。另外.當(dāng)中斷程序中語(yǔ)句越多,占用的機(jī)器周期也越多,因此在設(shè)計(jì)中應(yīng)充分利用Keil uVision3的分析工具,通過(guò)多次調(diào)整計(jì)數(shù)初值以獲取精確的時(shí)鐘信號(hào),這對(duì)于要求精確時(shí)鐘信號(hào)的應(yīng)用具有重要的意義。

      Tags:單片機(jī)時(shí)鐘,單片機(jī)日歷,keil c,單片機(jī)  
      責(zé)任編輯:admin
    4. 上一篇文章: 沒有了
    5. 下一篇文章:
    6. 請(qǐng)文明參與討論,禁止漫罵攻擊,不要惡意評(píng)論、違禁詞語(yǔ)。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個(gè)字
      [ 查看全部 ] 網(wǎng)友評(píng)論
      關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁(yè)面
      下到頁(yè)底
      晶體管查詢
      主站蜘蛛池模板: 狠狠色丁香婷婷综合久久来| 色噜噜狠狠色综合中国| 国产精品激情综合久久| 激情五月综合综合久久69| 狠狠亚洲婷婷综合色香五月排名| 亚洲av无码国产综合专区| 五月综合色婷婷在线观看 | 亚洲婷婷天堂在线综合| 狠狠色狠狠色综合日日五| 国产综合久久久久久| 亚洲综合一区二区精品久久| 色婷婷综合缴情综免费观看| AV色综合久久天堂AV色综合在| 亚洲国产精品成人AV无码久久综合影院 | 色综合久久夜色精品国产| 伊人婷婷色香五月综合缴激情 | 丁香伊人五月综合激激激| 亚洲国产精品综合久久久| 国产成人综合亚洲亚洲国产第一页| 天天综合在线观看| 亚洲a∨国产av综合av下载| 激情综合色五月丁香六月亚洲| 亚洲国产综合久久天堂| 色综合天天综合网国产国产人| 国产综合视频在线观看一区 | 久久婷婷五月综合色奶水99啪 | 伊人久久大香线蕉综合影| 日韩亚洲国产综合久久久| 天啪天天久久天天综合啪| 色综合视频一区二区三区| 八区精品色欲人妻综合网| 99久久综合精品五月天| 青草久久精品亚洲综合专区| 亚洲狠狠色丁香婷婷综合| 狠狠做深爱婷婷久久综合一区| 色综合久久中文字幕网| 综合国产在线观看无码| 日韩人妻无码一区二区三区综合部| 久久综合狠狠色综合伊人| 色久综合网精品一区二区| 亚洲欧美熟妇综合久久久久|