单片机空闲模式和掉电模式的设定方法

我们知道单片机内部有一个电源管理寄存器pcon,这个寄存器的最低两位,idl和pd这两位分别用来设定是否使单片机进入空闲模式和掉电模式。
1.空闲模式
当单片机进入空闲模式时,除cpu处于休眠状态外,其余硬件全部处于活动状态,芯片中程序未涉及到的数据存储器和特殊功能寄存器中的数据在空闲模式期间都将保持原值。但假若定时器正在运行,那么计数器寄存器中的值还将会增加。单片机在空闲模式下可由任一个中断或硬件复位唤醒,需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复位唤醒单片机时,程序将从头开始执行。
让单片机进入空闲模式的目的通常是为了降低系统的功耗,举个很简单的例子,大家都用过数字万用表,在正常使用的时候表内部的单片机处于正常工作模式,当不用时,又忘记了关掉万用表的电源,大多数表在等待数分钟后,若没有人为操作,它便会自动将液晶显示关闭,以降低系统功耗,通常类似这种功能的实现就是使用了单片机的空闲模式或是掉电模式。以stc89系列单片机为例,当单片机正常工作时的功耗通常为4ma~7ma,进入空闲模式时其功耗降至2ma,当进入掉电模式时功耗可降至0.1μa以下。
2.休眠模式
当单片机进入掉电模式时,外部晶振停振、cpu、定时器、串行口全部停止工作,只有外部中断继续工作。使单片机进入休眠模式的指令将成为休眠前单片机执行的最后一条指令,进入休眠模式后,芯片中程序未涉及到的数据存储器和特殊功能寄存器中的数据都将保持原值。可由外部中断低电平触发或由下降沿触发中断或者硬件复位模式换醒单片机,需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复位唤醒单片机时,程序将从头开始执行。
下面的例子演示单片机进入空闲和休眠模式,并且演示出从空闲和休眠模式中唤醒的过程。
【例】:在tx-1c实验板上完成如下描述,开启两个外部中断,设置低电平触发中断,用定时器计数并且显示在数码管的前两位,当计到5时,使单片机进入空闲(休眠)模式,同时关闭定时器,当单片机响应外部中断后,从空闲(休眠)模式返回,同时开启定时器。
新建文件part3.4.1.c,程序代码如下:
#include//52系列单片机头文件
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=p2^6;//申明u1锁存器的锁存端
sbitwela=p2^7;//申明u2锁存器的锁存端
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
ucharnum;
voiddelayms(uint);
voiddisplay(ucharshi,ucharge)//显示子函数
{
dula=1;
p0=table[shi];//送十位段选数据
dula=0;
p0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时
wela=1;//原来段选数据通过位选锁存器造成混乱
p0=0xfe;//送位选数据
wela=0;
delayms(5);//延时
dula=1;
p0=table[ge];//送个位段选数据
dula=0;
p0=0xff;
wela=1;
p0=0xfd;
wela=0;
delayms(5);
}
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i》0;i--)//i=xms即延时约xms毫秒
for(j=110;j》0;j--);
}
voidmain()
{
uchara,b,num1;
tmod=0x01;//设置定时器0为工作方式1(00000001)
th0=(65536-50000)/256;
tl0=(65536-50000)%256;
ea=1;
et0=1;
ex0=1;
ex1=1;
tr0=1;
while(1)
{
if(num》=20)
{
num=0;
num1++;
if(num1==6)
{
et0=0;
pcon=0x02;(或pcon=0x01;)
}
a=num1/10;
b=num1%10;
}
display(a,b);
}
}
voidtimer0()interrupt1
{
th0=(65536-50000)/256;
tl0=(65536-50000)%256;
num++;
}
voidex_int0()interrupt0
{
pcon=0;
et0=1;
}
voidex_int1()interrupt2
{
pcon=0;
et0=1;
}
分析:
(1)ea=1;开总中断
et0=1;开定时器0中断
ex0=1;开外部中断0
ex1=1;开外部中断1
tr0=1;启动定时器0
(2)主程序中有“et0=0;”下句是“pcon=0x02;”意思是在进入休眠模式之前要先把定时器关闭,这样方可一直等待外部中断的产生,如果不关闭定时器,定时器的中断同样也会唤醒单片机,使其退出休眠模式,这样我们便看不出进入休眠模式和返回的过程。
(3)voidex_int0()interrupt0
{
pcon=0;
et0=1;
}
这是外部中断0服务程序,当进入外部中断服务程序后,首先将pcon中原先设定的休眠控制位清除(如果不清除,程序也可以正常运行,大家最好亲自做实验验证),接下来再重新开启定时器0。
(4)下载程序后,实验现象如下:数码管从“00”开始递增显示,到“05”后,再过一秒后,数码管变成只显示一个“5”,单片机进入休眠或空闲模式,用导线一端连接地,另一端接触p3.2或p3.3,数码管重新从“06”开始显示,递增下去。整个过程演示了单片机从正常工作模式进入休眠模式或空闲模式,然后再从休眠模式或空闲模式返回到正常工作模式。
(5)测试过程大家可将数字万用表调节到电流档,然后串接入电路中,观察单片机在正常工作模式、休眠模式、空闲模式下流过系统的总电流变化情况,经测试可发现结果如下:正常工作电流》空闲模式电流》休眠模式电流。

网络安全 | 巧合?严重RCE漏洞竟被意外修复...
简析DLP大屏幕的安装和保养知识
联发科技CES 2011曝光首款120Hz偏光/快门式3D电
万丰科技超3亿美元收购美国焊接机器人公司PASLIN
开关电源基本知识科普
单片机空闲模式和掉电模式的设定方法
联发科称今年重点推3G及智能手机芯片
美国斯普林特通信推4G手机 传输速度远超3G
LabVIEW入门第二天
iPhone 14 Pro五种配色可选 渐变紫登场
运放与比较器有什么区别?
动环主机监控解决方案
工业设备压力数据监测物联网解决方案
模糊控制的迟早门同步器及其FPGA设计实现及介绍
18650锂电池和软包电池谁更适合电动汽车
适用于汽车和工业传感器应用的高性能集成雷达收发器芯片组
通用机器人什么时候上线
Atos和NVIDIA宣布成立卓越人工智能实验室
中国移动最新非骨架式带状光缆产品集采中标候选名单公布 预估采购规模约2.98万皮长公里
如何利用物联网应用在竞争中领先?