• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    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;

    }

    }

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


    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 宣汉县| 黔东| 西林县| 张家港市| 谷城县| 肇源县| 潼关县| 荣昌县| 平陆县| 新建县| 东光县| 永川市| 电白县| 肥东县| 青浦区| 特克斯县| 同心县| 菏泽市| 玛纳斯县| 图木舒克市| 土默特右旗| 谢通门县| 青冈县| 昌宁县| 关岭| 什邡市| 龙门县| 丹寨县| 石棉县| 泰兴市| 仪陇县| 凤台县| 五华县| 伊吾县| 依兰县| 周口市| 台中县| 宕昌县| 石屏县| 峨山| 通辽市|