新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 采用定時器0產生多個時間間隔

        采用定時器0產生多個時間間隔

        作者: 時間:2012-12-01 來源:網絡 收藏

        采用單片機產生多個。程序中使用每50ms中斷一次,然后用tt,t1,t2,t3,t4,t5對中斷次數計數,獲得100ms,1s,2s,4s,8s,16s間隔,在各個定時間隔內,分別使LED燈亮滅一次。源程序如下:
        #include AT89X51.H>
        unsigned char tt,t1,t2,t3,t4,t5; //全局時間隔變量
        unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,
        0x82,0xF8,0x80,0x90}; //七段數碼管譯碼表
        void main(void) //主函數
        {
        TMOD=0x01; //運行在工作模式1,GATE=0,C/T=0
        TH0=(65536-15536)/256; //設置定時器0高8位初值
        TL0=(65536-15536)%256; //設置定時器0低8位初值
        //若是機器周期為1μs,則計數50000,相當于50ms。
        TR0=1; //啟動定時器
        ET0=1; //允許定時器0中斷
        EA=1; //允許總中斷
        while(1) //無限循環
        {
        if(t1>5) P2_0=0; else P2_0=1; //根據變量值閃爍LED燈
        if(t2>10) P2_1=0; else P2_1=1;
        if(t3>20) P2_2=0; else P2_2=1;
        if(t4>40) P2_3=0; else P2_3=1;
        if(t5>80) P2_4=0; else P2_4=1;
        P1=dispcode[t4/10]; //顯示間隔變量t4的十位
        P0=dispcode[t4%10]; //顯示間隔變量t4的個位
        }}
        void t0(void) interrupt 1 //定時器0中斷服務程序
        {
        TH0=(65536-15536)/256; //設置定時器0高8位初值(3CH)
        TL0=(65536-15536)%256; //設置定時器0低8位初值(B0H)
        tt++; //每中斷一次,tt加1
        if(tt==2) //如果tt等于2,相當于100ms,執行如下語句
        {
        tt=0; //將tt清0,所以tt的計數值為0---1---2(0),每個間隔為50ms
        t1++;
        if(t1==10){t1=0;}
        t2++;
        if(t2==20){t2=0;}
        t3++;
        if(t3==40){t3=0;}
        t4++;
        if(t4==80){t4=0;}
        t5++;
        if(t5==160){t5=0;}
        P2_6=~P2_6; //每100ms,P2_6連接的LED燈閃爍一次
        } }



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 丰原市| 茶陵县| 宁河县| 区。| 唐山市| 墨竹工卡县| 连平县| 中宁县| 牙克石市| 咸丰县| 阿拉尔市| 禹州市| 鹰潭市| 兴宁市| 马山县| 咸丰县| 柘荣县| 彰武县| 大港区| 花莲市| 凤庆县| 洛川县| 陆川县| 湖州市| 广平县| 贞丰县| 阿城市| 大兴区| 桃江县| 鄂托克旗| 湘乡市| 金秀| 巢湖市| 浪卡子县| 林西县| 霍邱县| 枣庄市| 万宁市| 资源县| 双流县| 兴仁县|