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

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条回答
悟Θ岩
1楼-- · 2019-07-16 06:43
 精彩回答 2  元偷偷看……
人中狼
2楼-- · 2019-07-16 09:12
你应该好好理一理程序,你的源程序的主程序里并没有P0=0x00,主程序的循环只包括while(1)里的部分

评分

参与人数 2积分 +8 收起 理由 ElecFans王岑 + 5 悟Θ岩 + 3 虽然你的回答不是最让我满意的,但你提醒了.

查看全部评分

fight281
3楼-- · 2019-07-16 14:26
一楼正解。多写了WHILE(1) 死循环了。

一周热门 更多>