PIC16F628A进入休眠模式总是复位,请问大家知道是什么原因吗?

2020-02-08 09:30发布

现在在做个项目,用PIC16F628A来做,因为是小型产品,要求有低功耗功能。当我在中断里加入SLEEP();指令时单片机就复位了,设置的配置字为0x0038,不知道大家有没遇到到这个问题呀。用外部中断RB0/INT引脚
下面是部分程序:
__CONFIG (0x0038);//配置位
void interrupt time0()
{
                if(flagtime2min)//进入睡眠模式
                {
                        counter2min++;
                        if(counter2min==20000)//2min240000
                        {
                                flagtime2min=0;
                                counter2min=0;                               
                                PORTB=0xfe;
                                TRISB=0x01;
                                TRISA=0x23;
                                PORTA=0xe7;
                                INTE=1;
                                INTF=0;
                                GIE=1;
                                PEIE=1;
                                NOP();
                                NOP();
                                SLEEP();//睡眠模式
                               
                        }
                }
        }
        if(INTF)//外部中断唤醒睡眠
        {
                INTF=0;
                INTE=0;

                TRISB=0x0;
                PORTB=0xfe;
                counter=0;
               
                T0IF=0;
                TMR0=252;
                counter=0;

        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
285915046
1楼-- · 2020-02-08 14:09
SLEEP();后面加几个空指令
还有为什么要在中断里休眠??
spark123
2楼-- · 2020-02-08 18:04
 精彩回答 2  元偷偷看……
racemaker
3楼-- · 2020-02-08 20:02
有可能是堆栈溢出,一般不在ISR中进入sleep,可以设置一个标志,然后再主程序中sleep。


另外: __CONFIG (0x0038);//配置位
--------------------------------------
这种写法不直观,例如:没法看出来是不是使能了堆栈溢出复位功能。
JQ_Lin
4楼-- · 2020-02-08 21:29
中断唤醒休眠,唤醒后的去向,应由程序指定。

一周热门 更多>