新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 定時計數器T0作定時應用技術(二)

        定時計數器T0作定時應用技術(二)

        作者: 時間:2011-02-27 來源:網絡 收藏

        1. 實驗任務

        AT89S51的定時/計數器T0產生2秒鐘的定時,每當2秒定時到來時,更換指示燈閃爍,每個指示閃爍的頻率為0.2秒,也就是說,開始L1指示燈以0.2秒的速率閃爍,當2秒定時到來之后,L2開始以0.2秒的速率閃爍,如此循環下去。0.2秒的閃爍速率也由定時/計數器T0來完成。

        2. 電路原理圖

        4.16.1

        3. 系統板硬件連線

        (1. 把“系統”區域中的P1.0P1.3用導線連接到“八路發光二極管指示模塊”區域中的L1L4

        4. 程序設計內容

        (1. 由于采用中斷方式來完成,因此,對于中斷源必須它的中斷入口地址,對于定時/計數器T0來說,中斷入口地址為000BH,因此在中斷入口地方加入長跳轉指令來執行中斷服務程序。書寫匯編源程序格式如下所示:

        ORG 00H

        LJMP START

        ORG 0BH ;定時/計數器T0中斷入口地址

        LJMP INT_T0

        START: NOP ;主程序開始

        .

        .

        INT_T0: PUSH ACC ;定時/計數器T0中斷服務程序

        PUSH PSW

        .

        .

        POP PSW

        POP ACC

        RETI ;中斷服務程序返回

        END

        (2. 定時2秒,采用16位定時50ms,共定時40次才可達到2秒,每50ms產生一中斷,定時的40次數在中斷服務程序中完成,同樣0.2秒的定時,需要4次才可達到0.2秒。對于中斷程序,在主程序中要對中斷開中斷。

        (3. 由于每次2秒定時到時,L1L4要交替閃爍。采用ID來號來識別。當ID0時,L1在閃爍,當ID1時,L2在閃爍;當ID2時,L3在閃爍;當ID3時,L4在閃爍

        5. 程序框圖

        T0中斷服務程序框圖

        主程序框圖

        4.16.2

        6. 匯編源程序

        TCOUNT2S EQU 30H

        TCNT02S EQU 31H

        ID EQU 32H

        ORG 00H

        LJMP START

        ORG 0BH

        LJMP INT_T0

        START: MOV TCOUNT2S,#00H

        MOV TCNT02S,#00H

        MOV ID,#00H

        MOV TMOD,#01H

        MOV TH0,#(65536-50000) / 256

        MOV TL0,#(65536-50000) MOD 256

        SETB TR0

        SETB ET0

        SETB EA

        SJMP $

        INT_T0: MOV TH0,#(65536-50000) / 256

        MOV TL0,#(65536-50000) MOD 256

        INC TCOUNT2S

        MOV A,TCOUNT2S

        CJNE A,#40,NEXT

        MOV TCOUNT2S,#00H

        INC ID

        MOV A,ID

        CJNE A,#04H,NEXT

        MOV ID,#00H

        NEXT: INC TCNT02S

        MOV A,TCNT02S

        CJNE A,#4,DONE

        MOV TCNT02S,#00H

        MOV A,ID

        CJNE A,#00H,SID1

        CPL P1.0

        SJMP DONE

        SID1: CJNE A,#01H,SID2

        CPL P1.1

        SJMP DONE

        SID2: CJNE A,#02H,SID3

        CPL P1.2

        SJMP DONE

        SID3: CJNE A,#03H,SID4

        CPL P1.3

        SID4: SJMP DONE

        DONE: RETI

        END

        7. C語言源程序

        #include AT89X51.H>

        unsigned char tcount2s;

        unsigned char tcount02s;

        unsigned char ID;

        void main(void)

        {

        TMOD=0x01;

        TH0=(65536-50000)/256;

        TL0=(65536-50000)%256;

        TR0=1;

        ET0=1;

        EA=1;

        while(1);

        }

        void t0(void) interrupt 1 using 0

        {

        tcount2s++;

        if(tcount2s==40)

        {

        tcount2s=0;

        ID++;

        if(ID==4)

        {

        ID=0;

        }

        }

        tcount02s++;

        if(tcount02s==4)

        {

        tcount02s=0;

        switch(ID)

        {

        case 0:

        P1_0=~P1_0;

        break;

        case 1:

        P1_1=~P1_1;

        break;

        case 2:

        P1_2=~P1_2;

        break;

        case 3:

        P1_3=~P1_3;

        break;

        }

        }

        塵埃粒子計數器相關文章:塵埃粒子計數器原理


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 隆林| 阜宁县| 吉水县| 武城县| 土默特右旗| 上犹县| 惠来县| 彭阳县| 景东| 汪清县| 杨浦区| 正安县| 铁岭市| 漳州市| 鄂伦春自治旗| 阳西县| 寿宁县| 朝阳区| 皮山县| 巩义市| 亳州市| 民乐县| 普格县| 漳浦县| 榆中县| 贵阳市| 井冈山市| 广河县| 新安县| 仲巴县| 乌兰县| 巴林左旗| 库尔勒市| 宿州市| 潮安县| 九寨沟县| 皋兰县| 宕昌县| 玛纳斯县| 襄汾县| 焉耆|