我们知道单片机内部有一个电源管理寄存器PCON,这个寄存器的最低两位,IDL和PD这两位分别用来设定是否使单片机进入空闲模式和掉电模式。
1. 空闲模式
当单片机进入空闲模式时,除CPU处于休眠状态外,其余硬件全部处于活动状态,芯片中程序未涉及到的数据存储器和特殊功能寄存器中的数据在空闲模式期间都将保持原值。但假若定时器正在运行,那么计数器寄存器中的值还将会增加。单片机在空闲模式下可由任一个中断或硬件复位唤醒,需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复位唤醒单片机时,程序将从头开始执行。
让单片机进入空闲模式的目的通常是为了降低系统的功耗,举个很简单的例子,大家都用过数字万用表,在正常使用的时候表内部的单片机处于正常工作模式,当不用时,又忘记了关掉万用表的电源,大多数表在等待数分钟后,若没有人为操作,它便会自动将液晶显示关闭,以降低系统功耗,通常类似这种功能的实现就是使用了单片机的空闲模式或是掉电模式。以STC89系列单片机为例,当单片机正常工作时的功耗通常为4mA~7mA,进入空闲模式时其功耗降至2mA,当进入掉电模式时功耗可降至0.1μA以下。
2. 休眠模式
当单片机进入掉电模式时,外部晶振停振、CPU、定时器、串行口全部停止工作,只有外部中断继续工作。使单片机进入休眠模式的指令将成为休眠前单片机执行的最后一条指令,进入休眠模式后,芯片中程序未涉及到的数据存储器和特殊功能寄存器中的数据都将保持原值。可由外部中断低电平触发或由下降沿触发中断或者硬件复位模式换醒单片机,需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复位唤醒单片机时,程序将从头开始执行。
【例】:开启两个外部中断,设置低电平触发中断,用定时器计数并且显示在数码管的前两位,当计到5时,使单片机进入空闲(休眠)模式,同时关闭定时器,当单片机响应外部中断后,从空闲(休眠)模式返回,同时开启定时器。
程序代码如下:
#include //52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6; //申明U1锁存器的锁存端
sbit wela=P2^7; //申明U2锁存器的锁存端
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) //显示子函数
{
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);
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}
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)
{
if(num>=20)
{
num=0;
num1++;
if(num1==6)
{
ET0=0;
PCON=0x02; (或PCON=0x01;)
}
a=num1/10;
b=num1;
}
display(a,b);
}
}
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; 开定时器0中断
EX0=1; 开外部中断0
EX1=1; 开外部中断1
P0=1; 启动定时器0
(2)主程序中有“ET0=0;”下句是“PCON=0x02;”意思是在进入休眠模式之前要先把定时器关闭,这样方可一直等待外部中断的产生,如果不关闭定时器,定时器的中断同样也会唤醒单片机,使其退出休眠模式,这样我们便看不出进入休眠模式和返回的过程。
(3)void ex_int0() interrupt 0
{
PCON=0;
ET0=1;
}
这是外部中断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不工作外,其余仍继续工作,在空闲模式下可由任一个中断或硬件复位唤醒。
关键字:单片机 电源管理 寄存器 PCON
引用地址:
单片机电源管理寄存器PCON的用法
推荐阅读最新更新时间:2024-03-16 14:39
C51单片机的压缩BCD码相加程序
设被加数 NA 及加数 NB 均为三字节压缩BCD码,分别存放于内部 RAM 的 20H~22H 及 30H~32H 单元中,低位在前,高位在后。 要求计算两数之和,并将和存放到内部 RAM 中 3FH~42H 单元,仍然是低位在前,高位在后。 编写完整的汇编语言源程序。 ;---------------------------------------------------------------------- 最佳答案: ;这个程序当然是楼主要求的C51单片机程序。 ;下面增加一些调试时使用的数据。 ORG 0000H MOV 20H, #12H ;假设被加数NA是563412 MOV 21H, #34H
[单片机]
蓝桥杯单片机设计与开发笔记(三)
数码管显示几乎是每次蓝桥杯单片机设计与开发组竞赛的必考部分,相对于使用LCD1602作为显示设备,使用数码管来显示能够更好的考察参赛选手的单片机基本功,因为CT107D开发平台的设计使得数码管的显示不仅牵扯到数码管显示的 基本内容,还涉及到74HC573锁存器,74HC02异或门,74HC138译码器,以及中断的知识,所以这是值得我们重视的一个部分。 一、原理分析 根据CT107D的原理图我们可以看出,数码管显示同样涉及到74HC573、74HC138和74HC02,这与上一节中的LED灯、继电器和蜂鸣器的控制大同小异。如下图,蓝色标注为位选控制端口,由锁存器U6来控制,需配置红色标注的Y6C来控制锁存;黄色标注为段选控制端口
[单片机]
单片机AT89C51--7.按键(独立按键,矩阵按键)
1.键盘类型 1.1 编码键盘 通过硬件电路产生被按按键的键值码,程序简单但是硬件电路复杂 如计算机键盘 1.2 非编码键盘 软件编程来识别的称为非编码键盘,非编码键盘硬件电路简单,单片机中最常是非编码键盘 2.独立键盘和矩阵键盘 非编码键盘分为独立键盘和矩阵键盘 2.1 独立键盘 一开始线寄存器默认都是高电平,G为0V,G,S不导通。管脚为5V 这就是上拉电阻。 按下按键,管脚和地导通,电压变为0V 未按下按键,管脚和Vcc连接,电压为5V 2.2 矩阵键盘 3. 按键特性 4. 编程 4.1 独立键盘 按下S2按钮,数字加1,按下S3数字减1,最高不超过9,最低不低于0.高于9变为0.小
[单片机]
ROHM旗下蓝碧石半导体推出适用于家电和工业设备的微控制器
概要 球知名半导体制造商ROHM集团旗下的蓝碧石半导体(LAPIS Semiconductor)面向功能多样化的白色家电、厨房小家电和工业设备,开发出搭载蓝碧石半导体独有的16bit CPU内核的通用微控制器系列“ML62Q1000系列”。 “ML62Q1000系列”是由6个系列共96个型号组成的新系列,通过蓝碧石半导体的低功耗技术和抗噪技术继承了“低功耗&强化”的特点。除了一直以来广受好评的特点之外,此次新搭载了可感知微控制器内部故障的自我诊断等安全功能,支持14个安全项目(IEC60730规定),可在微控制器发生意外故障时保护设备和系统。 此次作为第一批样品的ML62Q1200系列、ML62Q1400系列、ML62Q
[单片机]
提高单片机系统抗干扰能力的主要手段
1.接地 这里的接地指接大地,也称作保护地。为单片机系统提供良好的地线,对提高系统的抗干扰能力极为有益。特别是对有防雷击要求的系统,良好的接地至关重要。上面提到的一系列抗干扰元件,意在将雷击、浪涌式干扰以及快脉冲群干扰去除,而去除的方法都是将干扰引入大地,如果系统不接地,或虽有地线但接地电阻过大,则这些元件都不能发挥作用。为单片机供电的电源的地俗称逻辑地,它们和大地的地的关系可以相通、浮空、或接一电阻,要视应用场合而定。不能把地线随便接在暖气管子上。绝对不能把接地线与动力线的火线、零线中的零线混淆。 2.隔离与屏蔽 典型的信号隔离是光电隔离。使用光电隔离器件将单片机的输入输出隔离开,一方面使干扰信号不得进入单
[单片机]
锂离子电池太阳能充电器设计技巧
最近几年,使用电池供电的小型设备发展迅速,例如:平板电脑、掌上游戏机、视频播放器、数字相框等。一般而言,这些设备都使用可再充锂离子 (Li-Ion) 电池作为电源。一些常见的充电解决方案包括墙上适配器类充电器和通用串行总线 (USB) 类充电器。尽管这些充电器解决方案是为锂离子电池充电的一种低成本的解决方案,但是这些充电器也都存在一个共同的缺点:依靠主电源才能工作运行。这种对主电源的依赖性增加了用户的电费开销,同时也增加了温室气体排放。而且由于对主电源有依赖性,这些充电解决方案的便携性也大打折扣。要想以一种有益环境的方式来延长电池使用时间,利用太阳能板收集自然光能量的太阳能充电器或许是一种理想的方案。太阳能充电器的另一个好处是它提
[电源管理]
使用普通IO口自定义协议实现两个51单片机互相通讯
因为想使两个51单片机通讯,又不能使用串口,因为STC89C52单片机只有一个串口,己被占用了,没有串口可以用。所以编写了这个程序。 使用仿真软件进行测试,工作正常。 在电路上实际测试,运行正常。 对控制线,进行短接干扰,测试,都按照预想的结果运行。 测试代码: 发送端不停的发送自定义数据帧,每发送一次,将第数据帧中的2个字节数加 1,再发送。 接收端使用LCD1602 将接收的据据帧中的第2个字节,显示出来。 对两根控制线进行断线,和对地短路干扰测试,也按照预想,干扰消除后,恢复正常工作。 下面是说明文档,附件源代码,和仿真电路图下载。 双单片机通信协议说明文档 一、通信协议的作用 功能:实现两片51单片机互相通
[单片机]
HC89S103K6T6单片机的简单介绍
HC89S103K6T6是芯圣兼容STM8S系列Flash单片机,内置增强型8051内核,拥有32K的Flash内存以及1K+256Bytes的RAM;HC89S103K6T6拥有丰富的外设资源,包括5个16位的定时/计数器、3组12位带死区控制以及1路8位的PWM、16+2路12位的ADC、1个SPI、2个UART、1个IIC以及26个外部中断源;HC89S103K6T6还支持2.0~5.5V的工作电压与-40℃~+85℃的工作温度。 以下为该系列目前在售的型号及对应参数: HC89S103K6T6作为芯圣兼容STM8S系列Flash产品,资源非常丰富,客户无需更改PCB,直接替换STM8S103K3产品。可以广泛应用于
[单片机]