掉电模式:将PCON第二位设置为1,单片机将进入掉电模式,内部晶振停振,所以CPU、定时器、看门狗、串口等都将价值工作,如果外部中断INT0和INT1被允许中断(90C52RC),则可以低电平或者下降沿触发,否则也将停止工作。
复位也是从掉电模式唤醒,只是程序会重新从0000H开始
进入掉电模式之后 PCON 寄存器第5位会被设置为1,需要软件内设置为0
在进入掉电模式时,是有IO口和SFR特殊功能寄存器维持掉电模式前那一刻。
掉电模式唤醒之后,继续执行原程序。
经过研究,掉电模式好像就是为了省电,如果真的是没电了重启的话应该还是会从0000H开始执行程序
注意:掉电模式需要开启对应中断允许。
以下是代码:
!code=
#include <reg52.h>
#define GPIO_DIG P0 //段选
sbit LED1 = P1^3;
unsigned char code DIG_CODE[17] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x01};
char num;
void Delay10ms(unsigned int);
void main(void){
unsigned char n,i;
IT0 = 1;
EX0 = 1;
EA = 1;
while(1){
for(n=0;n<10;n++){
num = n;
LED1 = 1;
GPIO_DIG = DIG_CODE[n]; //显示段码
for(i=0;i<10;i++);
//GPIO_DIG = 0x00; //消影
if(n == 5){
PCON = PCON | 0x2 ; //正常来讲是进入掉电模式,然后可以通过P3.2 P3.3 中断唤醒
}
Delay10ms(100);//延时1秒
}
}
}
void int0_name() interrupt 0{
PCON = 0x10 ; //外部中断0 从吊带你模式唤醒
}
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a,b;
for(;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
!codend=