咱们知道单片机内部有一个电源办理寄存器PCON,这个寄存器的最低两位,IDL和PD这两位别离用来设定是否使单片机进入闲暇形式和掉电形式。
1. 闲暇形式
2.
【例】:敞开两个外部中止,设置低电平触发中止,用定时器计数而且显现在数码管的前两位,当计到5时,使单片机进入闲暇(休眠)形式,一起封闭定时器,当单片机呼应外部中止后,从闲暇(休眠)形式回来,一起敞开定时器。
程序代码如下:
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar num;
void delayms(uint);
void display(uchar shi,uchar ge) //显现子函数
{
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);
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i–)
}
void main()
{
uchar a,b,num1;
TMOD=0x01; //设置定时器0为作业方法1(0000 0001)
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
EA=1;
ET0=1;
EX0=1;
EX1=1;
P0=1;
while(1)
{
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
num++;
}
void ex_int0() interrupt 0
{
PCON=0;
ET0=1;
}
void ex_int1() interrupt 2
{
PCON=0;
ET0=1;
}
剖析:
(1) EA=1;
ET0=1;
EX0=1;
EX1=1;
P0=1;
(2)主程序中有“ET0=0;”下句是“PCON=0x02;”意思是在进入休眠形式之前要先把定时器封闭,这样方可一向等候外部中止的发生,假如不封闭定时器,定时器的中止相同也会唤醒单片机,使其退出休眠形式,这样咱们便看不出进入休眠形式和回来的进程。
(3)void ex_int0() interrupt 0
{
}
这是外部中止0服务程序,当进入外部中止服务程序后,首先将PCON中原先设定的休眠操控位铲除(假如不铲除,程序也能够正常运转,咱们最好亲身做试验验证),接下来再从头敞开定时器0。在运用是仍是保存中止唤醒的中止服务程序为好。
(4)下载程序后,试验现象如下:数码管从“00”开端递加显现,到“05”后,再过一秒后,数码管变成只显现一个“5”,单片机进入休眠或闲暇形式,用导线一端连接地,另一端触摸P3.2或P3.3,数码管从头从“06”开端显现,递加下去。整个进程演示了单片机从正常作业形式进入休眠形式或闲暇形式,然后再从休眠形式或闲暇形式回来到正常作业形式。
(5)测验进程咱们可将数字万用表调理到电流档,然后串接入电路中,调查单片机在正常作业形式、休眠形式、闲暇形式下流过体系的总电流改变状况,经测验可发现成果如下:正常作业电流>闲暇形式电流>休眠形式电流。
电源办理寄存器PCON
PCON主要是为CHMOS型单片机的电源操控而设置的专用寄存器,单元地址是87H,其结构格局如下:
表2 PCON电源办理寄存器结构
PCON D7 D6 D5 D4 D3 D2 D1 D0
位符号 SMOD – – – GF1 GF0 PD IDL
在CHMOS型单片机中,除SMOD位外,其他位均为虚设的,SMOD是串行口波特率倍增位,当SMOD=1时,串行口波特率加倍。体系复位默以为SMOD=0。
各位的界说: SMOD:该位与串口通讯有关。
SMOD=0; 串口方法1,2,3时,波特率正常。
SMOD=1; 串口方法1,2,3时,波特率加倍。
GF1,GF0:两个通用作业标志位,用户能够自在运用。
PD:掉电形式设定位。
PD=0 单片机处于正常作业状况。
PD=1 单片机进入掉电(Power Down)形式,可由外部中止或硬件复位形式唤醒,进入掉电形式后,外部晶振停振,CPU、定时器、串行口悉数中止作业,只要外部中止作业。
IDL:闲暇形式设定位。
IDL=0 单片机处于正常作业状况。
IDL=1 单片机进入闲暇(Idle)形式,除CPU不作业外,其他仍持续作业,在闲暇形式下可由任一个中止或硬件复位唤醒。