单片机的掉电功能是怎么实现的啊6
发布网友
发布时间:2023-10-19 17:24
我来回答
共2个回答
热心网友
时间:2024-11-25 15:01
使用 EEPROM 功能;
EEPROM 是 Electrically Erasable Programmable Read-Only Memory(电可擦写可编程只读存储器)的简写,具备掉电保持能力。
程序控制思路:
①上电读取 EEPROM 的记忆地址内容,获取掉电前的记忆。
②在需要修改记忆值的操作处(如按键修改、时间修改),重新改写记忆值(一般需先擦除后填写);
延伸:
传统51单片机没有EEPROM,一般都需要外置IC,采用特定通讯时序来操作EEPROM(如AT24C01、采用IIC通讯等);
现多数单片机都会内置EEPROM,直接根据手册要求的固定指令/时序即可操作EEPROM;
热心网友
时间:2024-11-25 15:01
你的开发板上要用P3.2,外部中断INT0作中断触发,测试时,在10秒,要有中断,当外部没有中断,等待10秒后就会进入掉电模式了。程序修改如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
uchar i;
uchar temp;
uchar second; //必须单独用一个变量秒计时,计10秒
void main()
{
TMOD=0X01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA =1;
IT0=1;//外部中断用下降沿触发中断
EX0=1;
ET0=1;
TR0=1;
temp=0Xfe;
P2=temp;
while(1)
{
if(i>=20)
{
i=0;//1秒到,i回0
temp=_crol_(temp,1);
P2=temp;
second++; //加1秒
if(second>=10)
{
second=0;
P2=0xFF; //进入掉电模式之前,先关闭所有二极管,以省电,如果是0关灯,就换成P2=0;是全关
PCON=0X02;//进入掉电模式
P2=temp;//唤醒后从这开始继续执行,恢复掉电前的状态
}
}
}
}
void T0_timer() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
i++;
}
//外部中断,有中断就对秒计时second清0,掉电后,由外部中断唤醒
void Ex0_int() interrupt 0
{
second=0; //中断一次,秒计时就初清0,这样,10秒内无外部中断,second才能累加到10秒,进入掉电模式
}
这是经开发板测试通过的。