新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 一個關于單片定時器中斷的典型錯誤

        一個關于單片定時器中斷的典型錯誤

        作者: 時間:2016-11-18 來源:網絡 收藏
        分析一下以下程序以下程序為什么會間斷的現實40(本想編成40S倒計時)提示:問題出在延時子程序
        #include
        #define uchar unsigned char
        #define uint unsigned int
        sbit p14=P1^4;
        sbit p13=P1^3;
        uint i,t,z=50;
        void delay()
        {
        while(z--); }
        unsigned char code tab[] =
        {
        0XC0,//;0
        0XF9,//;1
        0XA4,//;2
        0XB0,//;3
        0X99,//;4
        0X92,//;5
        0X82,//;6
        0XF8,//;7
        0X80,//;8
        0X90,//;9
        };
        void main()
        {i=40;
        t=0;
        TMOD=1;//設置定時器0為工作方式1
        TH0=(65536-46080)/256;//定時50ms高8位求模
        TL0=(65536-46080)%256;//定時50ms低8位求余
        EA=1;//開總中斷
        ET0=1;//定時器0中斷
        TR0=1;//啟動定時器0
        while(1)
        {
        if(t==20)//50ms中斷20次
        {
        t=0;
        i--;//倒計時總數每秒減1
        }
        if(i>0)
        {
        p14=0;//數碼管個位位選關閉
        p13=1;//數碼管十位位選選通
        P0=tab[i/10];//顯示十位數據
        delay();
        P0=0xff;//關閉數碼管段選
        p14=1;//數碼管個位位選選通
        p13=0;//數碼管十位位選關閉
        P0=tab[i%10];//顯示個位數據
        delay();
        P0=0xff;//關閉數碼管段選
        }
        else{i=40;}
        }
        }

        void timer0() interrupt 1//定時器0中斷入口
        {TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        t++;
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 昭苏县| 株洲县| 上高县| 同仁县| 沾益县| 招远市| 永德县| 建瓯市| 荥经县| 耿马| 兰坪| 当涂县| 江西省| 夏津县| 楚雄市| 南岸区| 临夏县| 岳普湖县| 佛学| 南华县| 阳东县| 祁门县| 缙云县| 和林格尔县| 淮南市| 西贡区| 洛川县| 靖西县| 朝阳市| 资阳市| 凉城县| 娄底市| 佛教| 广德县| 西畴县| 无极县| 德州市| 鹤庆县| 前郭尔| 肇州县| 桐柏县|