在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

            定時計數(shù)器T0作定時應(yīng)用技術(shù)(一)

            作者: 時間:2011-02-27 來源:網(wǎng)絡(luò) 收藏

            1.實驗任務(wù)

            AT89S51的定時/計數(shù)器T0產(chǎn)生一秒的定時時間,作為秒計數(shù)時間,當一秒產(chǎn)生時,秒計數(shù)加1,秒計數(shù)到60時,自動從0開始。硬件電路如下圖所示

            2.電路原理圖

            4.15.1

            3.系統(tǒng)板上硬件連線

            (1. 把“系統(tǒng)”區(qū)域中的P0.0/AD0P0.7/AD7端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個ah端口上;要求:P0.0/AD0對應(yīng)著a,P0.1/AD1對應(yīng)著b,……P0.7/AD7對應(yīng)著h。

            (2. 把“系統(tǒng)”區(qū)域中的P2.0/A8P2.7/A15端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個ah端口上;要求:P2.0/A8對應(yīng)著a,P2.1/A9對應(yīng)著b,……,P2.7/A15對應(yīng)著h。

            4.程序設(shè)計內(nèi)容

            AT89S51單片機的內(nèi)部16位定時/計數(shù)器是一個可編程定時/計數(shù)器,它既可以工作在13位定時方式,也可以工作在16位定時方式和8位定時方式。只要通過設(shè)置特殊功能寄存器TMOD,即可完成。定時/計數(shù)器何時工作也是通過軟件來設(shè)定TCON特殊功能寄存器來完成的。

            現(xiàn)在我們選擇16位定時工作方式,對于T0來說,最大定時也只有65536us,即65.536ms,無法達到我們所需要的1秒的定時,因此,我們必須通過軟件來處理這個問題,假設(shè)我們?nèi)?/SPAN>T0的最大定時為50ms,即要定時1秒需要經(jīng)過20次的50ms的定時。對于這20次我們就可以采用軟件的方法來統(tǒng)計了。

            因此,我們設(shè)定TMOD00000001B,即TMOD01H

            下面我們要給T0定時/計數(shù)器的TH0,TL0裝入預(yù)置初值,通過下面的公式可以計算出

            TH0=(21650000/ 256

            TL0=(21650000MOD 256

            T0在工作的時候,我們?nèi)绾蔚弥?/SPAN>50ms的定時時間已到,這回我們通過檢測TCON特殊功能寄存器中的TF0標志位,如果TF01表示定時時間已到。

            5.程序框圖

            4.15.2

            6.匯編源程序(查詢法)

            SECOND EQU 30H

            TCOUNT EQU 31H

            ORG 00H

            START: MOV SECOND,#00H

            MOV TCOUNT,#00H

            MOV TMOD,#01H

            MOV TH0,#(65536-50000) / 256

            MOV TL0,#(65536-50000) MOD 256

            SETB TR0

            DISP: MOV A,SECOND

            MOV B,#10

            DIV AB

            MOV DPTR,#TABLE

            MOVC A,@A+DPTR

            MOV P0,A

            MOV A,B

            MOVC A,@A+DPTR

            MOV P2,A

            WAIT: JNB TF0,WAIT

            CLR TF0

            MOV TH0,#(65536-50000) / 256

            MOV TL0,#(65536-50000) MOD 256

            INC TCOUNT

            MOV A,TCOUNT

            CJNE A,#20,NEXT

            MOV TCOUNT,#00H

            INC SECOND

            MOV A,SECOND

            CJNE A,#60,NEX

            MOV SECOND,#00H

            NEX: LJMP DISP

            NEXT: LJMP WAIT

            TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

            END

            7.C語言源程序(查詢法)

            #include AT89X51.H>

            unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,

            0x66,0x6d,0x7d,0x07,

            0x7f,0x6f,0x77,0x7c,

            0x39,0x5e,0x79,0x71,0x00};

            unsigned char second;

            unsigned char tcount;

            void main(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. 匯編源程序(中斷法)

            SECOND EQU 30H

            TCOUNT EQU 31H

            ORG 00H

            LJMP START

            ORG 0BH

            LJMP INT0X

            START: MOV SECOND,#00H

            MOV A,SECOND

            MOV B,#10

            DIV AB

            MOV DPTR,#TABLE

            MOVC A,@A+DPTR

            MOV P0,A

            MOV A,B

            MOVC A,@A+DPTR

            MOV P2,A

            MOV TCOUNT,#00H

            MOV TMOD,#01H

            MOV TH0,#(65536-50000) / 256

            MOV TL0,#(65536-50000) MOD 256

            SETB TR0

            SETB ET0

            SETB EA

            SJMP $

            INT0X:

            MOV TH0,#(65536-50000) / 256

            MOV TL0,#(65536-50000) MOD 256

            INC TCOUNT

            MOV A,TCOUNT

            CJNE A,#20,NEXT

            MOV TCOUNT,#00H

            INC SECOND

            MOV A,SECOND

            CJNE A,#60,NEX

            MOV SECOND,#00H

            NEX: MOV A,SECOND

            MOV B,#10

            DIV AB

            MOV DPTR,#TABLE

            MOVC A,@A+DPTR

            MOV P0,A

            MOV A,B

            MOVC A,@A+DPTR

            MOV P2,A

            NEXT: RETI

            TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

            END

            2. C語言源程序(中斷法)

            #include AT89X51.H>

            unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,

            0x66,0x6d,0x7d,0x07,

            0x7f,0x6f,0x77,0x7c,

            0x39,0x5e,0x79,0x71,0x00};

            unsigned char second;

            unsigned char tcount;

            void main(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);

            }

            void t0(void) interrupt 1 using 0

            {

            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;

            }

            塵埃粒子計數(shù)器相關(guān)文章:塵埃粒子計數(shù)器原理


            評論


            相關(guān)推薦

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

            關(guān)閉