关于51单片机掉电模式的问题

2019-03-24 18:14发布

一个关于中断的问题!麻烦好心人解答下!

例子的要求是,开启两个外部中断,设置低电平触发中断,用定时器技术并且显示在数码管的前两位,当技术到5是,使单片机进入空闲模式,同时关闭定时器,当单片机响应外部中断后,从空闲模式返回,同时开启定时器。

我的问题是:为什么程序只能让数码管在十位和个位上闪来闪去,但是不能计数


#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar num;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x03,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};

void delay1ms()
{
        uint i,j;
        for(i=1100;i>0;i--)
                for(j=255;j>0;j--);
}

void disp(uchar shi,uchar ge)
{
        dula=1;
        P0=table[shi];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfe;
        wela=0;
        delay1ms();
        dula=1;
        P0=table[ge];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfd;
        wela=0;
        delay1ms();

}

void main()
{       
        uchar a,b,num1;
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        EX0=1;
        EX1=1;
        TR0=1;
        {       
                if(num>=20)
                {
                        num=0;
                        num1++;
                        if(num1==6)
                        {        
                                ET0=0;
                                PCON=0x02;
                        }
                        a=num1/10;
                        b=num1%10;
                }
                disp(a,b);
        }
}

void time0()interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        num++;
}

void ex_int0()interrupt 0
{
        PCON=0;
        ET0=1;
}

void ex_int1()interrupt 2
{
        PCON=0;
        ET0=1;
}


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
h496097962
2019-03-24 22:54
随风暗影 发表于 2014-8-2 17:23
在主函数中你没有死循环,程序一下子就执行完了,你的数码管上显示的是乱码

其实我后来也看到了,而且改了,但是效果还是在两个数码管显示的都是B   ,而且只是跳来跳去,不能实现功能

一周热门 更多>