新聞中心

        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++;
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 大荔县| 高雄市| 弥渡县| 灯塔市| 长乐市| 光泽县| 伊春市| 离岛区| 深圳市| 克东县| 龙陵县| 南江县| 新乡县| 景泰县| 澄迈县| 任丘市| 蒙阴县| 万山特区| 塔河县| 新安县| 吉首市| 榕江县| 云南省| 宿松县| 盐边县| 渝中区| 谢通门县| 德钦县| 西安市| 珠海市| 桐庐县| 曲阳县| 清镇市| 太湖县| 尖扎县| 乐至县| 阳谷县| 聂荣县| 友谊县| 上思县| 张北县|