| 
 
| 本帖最后由 y18370990546 于 2019-3-2 18:38 编辑 
 最近,在做低功耗的项目,用到了单片机sleep休眠,唤醒方式采用按键,电平变化触发。晶振采用内部4M
 采用3节7号南孚电池大概是4.8V供电
 
 
 出现问题:长时间休眠之后,按键触发无法唤醒,需重新上电,休眠能被按键唤醒才可以。(目前猜测是用电过大,导致电池没电造成)
 
 程序如下:
 void init()
 {
 OSCCONbits.SCS = 0x2;       //选择内部4M晶振
 OSCCONbits.IRCF = 0xd;
 OSCCON = 0b11101010;
 TRISD = 0;
 TRISC = 0;
 TRISB = 0b00111011;          //RB0,RB1,RB3,RB4,RB5输入
 ANSELB = 0;
 ANSELD = 0;
 PORTB = 0;
 LATB = 1;
 LATD = 0;
 LATC = 0;
 }
 
 void main()
 {
 init();                                    //相应I0口配置
 OPTION_REG |= 0b0000000;  //INT选择上升沿触发唤醒休眠
 IOCBP = 0x1;                        //电平上升沿触发
 IOCBN = 0x0;
 INTCON |=  0b11000000;       //全局中断GIE,外围PIE1使能
 INTCONbits.IOCIE = 1;          //电平变化中断使能
 SLEEP();                               //休眠
 NOP();                                 //空
 while(INT_value == 1)         //中断唤醒
 {........}
 }
 void interrupt ISR (void)
 {
 if(INTCONbits.IOCIF && PORTBbits.RB0 == 1)  //开关机键外部中断唤醒单片机,
 {
 if(PORTBbits.RB0==1)//开机键按下
 {
 __delay_ms(50);
 if(PORTBbits.RB0==1)//再次判断
 {
 INTCONbits.IOCIF=0;
 INT_value++;                                  //外部中断变量++
 INT_value=(INT_value==1)? 1:0;     //通过INT_value变量控制while()循环,开关机
 }
 }
 }
 
 求教各位!!!帮忙解惑答疑。
 | 
 |