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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 15. 定時(shí)計(jì)數(shù)器T0作定時(shí)應(yīng)用技術(shù)(一)

          15. 定時(shí)計(jì)數(shù)器T0作定時(shí)應(yīng)用技術(shù)(一)

          作者: 時(shí)間:2016-11-18 來(lái)源:網(wǎng)絡(luò) 收藏
          1.實(shí)驗(yàn)任務(wù)
          用AT89S51單片機(jī)的定時(shí)/計(jì)數(shù)器T0產(chǎn)生一秒的定時(shí)時(shí)間,作為秒計(jì)數(shù)時(shí)間,當(dāng)一秒產(chǎn)生時(shí),秒計(jì)數(shù)加1,秒計(jì)數(shù)到60時(shí),自動(dòng)從0開(kāi)始。硬件電路如下圖所示
          2.電路原理

          圖4.15.1
          3.系統(tǒng)板上硬件連線
          (1.把“單片機(jī)系統(tǒng)”區(qū)域中的P0.0/AD0-P0.7/AD7端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個(gè)a-h(huán)端口上;要求:P0.0/AD0對(duì)應(yīng)著a,P0.1/AD1對(duì)應(yīng)著b,……,P0.7/AD7對(duì)應(yīng)著h。
          (2.把“單片機(jī)系統(tǒng)”區(qū)域中的P2.0/A8-P2.7/A15端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個(gè)a-h(huán)端口上;要求:P2.0/A8對(duì)應(yīng)著a,P2.1/A9對(duì)應(yīng)著b,……,P2.7/A15對(duì)應(yīng)著h。
          4.程序設(shè)計(jì)內(nèi)容
          AT89S51單片機(jī)的內(nèi)部16位定時(shí)/計(jì)數(shù)器是一個(gè)可編程定時(shí)/計(jì)數(shù)器,它既可以工作在13位定時(shí)方式,也可以工作在16位定時(shí)方式和8位定時(shí)方式。只要通過(guò)設(shè)置特殊功能寄存器TMOD,即可完成。定時(shí)/計(jì)數(shù)器何時(shí)工作也是通過(guò)軟件來(lái)設(shè)定TCON特殊功能寄存器來(lái)完成的。
          現(xiàn)在我們選擇16位定時(shí)工作方式,對(duì)于T0來(lái)說(shuō),最大定時(shí)也只有65536us,即65.536ms,無(wú)法達(dá)到我們所需要的1秒的定時(shí),因此,我們必須通過(guò)軟件來(lái)處理這個(gè)問(wèn)題,假設(shè)我們?nèi)0的最大定時(shí)為50ms,即要定時(shí)1秒需要經(jīng)過(guò)20次的50ms的定時(shí)。對(duì)于這20次我們就可以采用軟件的方法來(lái)統(tǒng)計(jì)了。
          因此,我們?cè)O(shè)定TMOD=00000001B,即TMOD=01H
          下面我們要給T0定時(shí)/計(jì)數(shù)器的TH0,TL0裝入預(yù)置初值,通過(guò)下面的公式可以計(jì)算出
          TH0=(216-50000)/256
          TL0=(216-50000)MOD256
          當(dāng)T0在工作的時(shí)候,我們?nèi)绾蔚弥?0ms的定時(shí)時(shí)間已到,這回我們通過(guò)檢測(cè)TCON特殊功能寄存器中的TF0標(biāo)志位,如果TF0=1表示定時(shí)時(shí)間已到。
          5.程序框圖
















          圖4.15.2
          6.匯編源程序(查詢法)
          SECONDEQU30H
          TCOUNTEQU31H
          ORG00H
          START:MOVSECOND,#00H
          MOVTCOUNT,#00H
          MOVTMOD,#01H
          MOVTH0,#(65536-50000)/256
          MOVTL0,#(65536-50000)MOD256
          SETBTR0
          DISP:MOVA,SECOND
          MOVB,#10
          DIVAB
          MOVDPTR,#TABLE
          MOVCA,@A+DPTR
          MOVP0,A
          MOVA,B
          MOVCA,@A+DPTR
          MOVP2,A
          WAIT:JNBTF0,WAIT
          CLRTF0
          MOVTH0,#(65536-50000)/256
          MOVTL0,#(65536-50000)MOD256
          INCTCOUNT
          MOVA,TCOUNT
          CJNEA,#20,NEXT
          MOVTCOUNT,#00H
          INCSECOND
          MOVA,SECOND
          CJNEA,#60,NEX
          MOVSECOND,#00H
          NEX:LJMPDISP
          NEXT:LJMPWAIT
          TABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
          END
          7.C語(yǔ)言源程序(查詢法)
          #include

          unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,
          0x66,0x6d,0x7d,0x07,
          0x7f,0x6f,0x77,0x7c,
          0x39,0x5e,0x79,0x71,0x00};
          unsignedcharsecond;
          unsignedchartcount;

          voidmain(void)
          {
          TMOD=0x01;
          TH0=(65536-50000)/256;
          TL0=(65536-50000)%256;
          TR0=1;
          tcount=0;
          second=0;
          P0=dispcode[second/10];
          P2=dispcode[second%10];
          while(1)
          {
          if(TF0==1)
          {
          tcount++;
          if(tcount==20)
          {
          tcount=0;
          second++;
          if(second==60)
          {
          second=0;
          }
          P0=dispcode[second/10];
          P2=dispcode[second%10];
          }
          TF0=0;
          TH0=(65536-50000)/256;
          TL0=(65536-50000)%256;
          }
          }
          }
          1.匯編源程序(中斷法)
          SECONDEQU30H
          TCOUNTEQU31H
          ORG00H
          LJMPSTART
          ORG0BH
          LJMPINT0X
          START:MOVSECOND,#00H
          MOVA,SECOND
          MOVB,#10
          DIVAB
          MOVDPTR,#TABLE
          MOVCA,@A+DPTR
          MOVP0,A
          MOVA,B
          MOVCA,@A+DPTR
          MOVP2,A
          MOVTCOUNT,#00H
          MOVTMOD,#01H
          MOVTH0,#(65536-50000)/256
          MOVTL0,#(65536-50000)MOD256
          SETBTR0
          SETBET0
          SETBEA
          SJMP$
          INT0X:
          MOVTH0,#(65536-50000)/256
          MOVTL0,#(65536-50000)MOD256
          INCTCOUNT
          MOVA,TCOUNT
          CJNEA,#20,NEXT
          MOVTCOUNT,#00H
          INCSECOND
          MOVA,SECOND
          CJNEA,#60,NEX
          MOVSECOND,#00H
          NEX:MOVA,SECOND
          MOVB,#10
          DIVAB
          MOVDPTR,#TABLE
          MOVCA,@A+DPTR
          MOVP0,A
          MOVA,B
          MOVCA,@A+DPTR
          MOVP2,A
          NEXT:RETI

          TABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
          END
          2.C語(yǔ)言源程序(中斷法)
          #include

          unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,
          0x66,0x6d,0x7d,0x07,
          0x7f,0x6f,0x77,0x7c,
          0x39,0x5e,0x79,0x71,0x00};
          unsignedcharsecond;
          unsignedchartcount;

          voidmain(void)
          {
          TMOD=0x01;
          TH0=(65536-50000)/256;
          TL0=(65536-50000)%256;
          TR0=1;
          ET0=1;
          EA=1;
          tcount=0;
          second=0;
          P0=dispcode[second/10];
          P2=dispcode[second%10];
          while(1);
          }

          voidt0(void)interrupt1using0
          {
          tcount++;
          if(tcount==20)
          {
          tcount=0;
          second++;
          if(second==60)
          {
          second=0;
          }
          P0=dispcode[second/10];
          P2=dispcode[second%10];
          }
          TH0=(65536-50000)/256;
          TL0=(65536-50000)%256;
          }


          評(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); })();