不太懂什么叫IOC中断,我的设计就是单片机外部中断0引脚接一开关,开关接地,边沿触发中断,这应该是GPIO中断吧?
谢谢各位的帮助,我的长按开关机已经实现了,看起来比较麻烦,方法如下:
int wg_flag;//定义一个喂狗标志位
int main()
{
init_timer1(); //定时器1初始化
init_int0(); //外部中断0 初始化
deep_sleep(); //开机进入休眠
wg_flag=1;
if(开关按下不足3s) wg_flag=0; // 如果 长按不足3秒 wg=0,不喂狗,复位
//如果 长按3秒 wg不变,依然为1,喂狗,不复位
while(1)
{
if(开关按下超过3S) wg=0; // 如果 长按3秒 wg=0,喂狗,复位,然后休眠
}
}
void __attribute__((interrupt,no_auto_psv)) _T1Interrupt() //定时器一中断函数 25ms中断一次
{
if(wg_flag) ClrWdt(); 如果Wg为真,定时执行喂狗程序,程序运行正常
}
上面的程序大概意思如下:
在配置位中打开看门狗,开机后立马进入休眠。如果长按一个开关不足三秒,喂狗标志位为0,在定时器中断服务函数中的喂狗程序不会执行,看门狗复位,程序重头执行,再次进入休眠。如果超过3S ,喂狗标志位为1,在定时器中断服务函数中的喂狗程序正常执行,所有程序正常工作,这就是长按3S开机。在主函数while(1)中,长按超过3S,喂狗标志位为0,在定时器中断服务函数中的喂狗程序不会执行,看门狗复位,程序重头执行,进入休眠,这就是这就是长按3S关机.
|