单片机中断后无法回归主程序,求解。。

2019-07-15 09:22发布

最初设定是P0口控制8盏灯以1秒的频率慢闪,中断控制中间的一个灯以500ms的频率快闪。结果编译出来后只有一个灯在中断后长亮,好像没有再切回主程序了。。这是什么情况?求解
//C51单片机头文件
#include <reg51.H>

//宏定义,定义IO口名称
sbit LED_power=P0^5        ;

//函数声明
void timer0_Init(void);
void Delay_ms(unsigned int ms);

//定义数据类型
static unsigned char sun;
unsigned char i;

//主函数
void main(void)
{
   P0=0x00;
        Timer0_Init();
        while(1);
        {
        
                LED_power=0;
                Delay_ms(1000);
      P0=0xff;
                Delay_ms(1000);
        }
}


void Timer0_Init(void)
{
        TMOD=0X01;    //设置定时器T0和T1工作方式,0000 0001
        TH0=0X4C;      //十六位计数器中的高8位赋值
        TL0=0x00;       //十六位计数器中的低8位赋值
        EA=1;           //全局中断控制
        ET0=1;          //打开T0中断
        TR0=1;           //允许T0

}

void Timer0_ISR(void) interrupt 1         //定时器0的序号为1,若用定时器2需要写成 interrupt 3
{
        TH0=0X4C;     //重装定时器
        TL0=0x00;

        sun++;
        if(sun==20)
        {
                sun=0;
               
                LED_power=1;
        }

}

//延时
void Delay_ms(unsigned int ms)
{
        unsigned int i;
        while((ms--)!=0)
        {
                for(i=0;i<600;i++);
        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
悟Θ岩
2019-07-16 03:39
chenwei6991627 发表于 2017-11-10 11:08
如果灯是低电平亮的话,那就很正常,中断的时间很多,看不出来的

灯是高电平点亮的,我本是想主程序循环P0=0x00将所有灯灭掉,然后中断时间到了将其中一个灯点亮,中断执行完后回到主程序再次灭到所有的灯等待下个中断,这样来实现LED闪烁。问题是我现在灯亮后就没有灭掉了,这说明中断后没有回主程序还是继续中断。(我把中断的LED亮改成取反就能闪烁)

一周热门 更多>