电源管理特殊功能寄存器 PCON
介绍:
CMOS 型的MCS-51单片机 具有空闲和掉电两种低功耗方式,其中空闲状态也称作cpu睡眠状态
PCON 字节地址是0x87
有6个功能位:SMOD X X X GF1 GF0 PD IDL
SMOD:波特率加倍位
GF1,GF0:通用标志位
PD,IDL:低功耗工作方式选择控制位
PD | IDL | 单片机状态 | 特点 |
---|---|---|---|
0 | 0 | 正常工作状态 | cpu正常工作 |
0 | 1 | 空闲状态(cpu睡眠状态) | cpu停止工作睡眠,其他都正常 |
1 | 0 | 掉电方式 | 其他都停止工作,变量,特殊功能寄存器值不变,P0-P3口输出状态不变 |
注意点:
1.单片机复位后为0x00,单片机处于正常工作
2.PCON的位是无位状态,不能用位访问方式将PCON某个位置1或0清0,只能用按位操作置1,清0或者取反
睡眠cpu:PCON = PCON|0X01 或者 PCON |=0X01
掉电状态:PCON = PCON|0X02 或者 PCON |=0X02
最好不要用赋值等号,可能会导致串行口不正常
解除方法:不能使用软件解除,只能依赖硬件
(1)解决掉电方式-》硬件复位 //全部初始化
(2)退出空闲状态方式-》1.用中断唤醒cpu 2.复位单片机
代码实现: 进入cpu睡眠方式
1.查询方式
//任务7 睡眠CPU(查询方式)
#include <reg51.h> //1 将特殊功能寄存器定义头文件reg51.h包含至本程序中
#define uchar unsigned char //2 宏定义:uchar代表unsigned char
#define ledport P2 //3 宏定义:ledport代表P2
uchar idata keycnt; //4 在idata区定义全局变量keycnt(按键计数器)
void main(void) //5 main函数
{ keycnt=0; //6 按键计数器初始化:初值为0
IT0=1; //7 外部中断0的触发方式为下降沿触发
while(1) //8 while死循环,语句9~14是while的循环体
{ if(IE0) //9 有键按下吗?
{ IE0=0; //10 IE0位清0。
keycnt++; //11 按键计数值加1
} //12 if语句块结束
ledport=~keycnt; //13 计数值按位取反后送led控制口显示
//------------------相对任务6查询方式增加的语句-------------------
PCON|=0x01; //14 睡眠CPU
//-----------------------------------------------------------------
} //15 while循环体结束
} //16 main函数结束
2.中断方式
//任务7 睡眠CPU(中断方式)
#include <reg51.h> //1 包含特殊功能寄存器定义头文件reg51.h
#define ledport P2 //2 宏定义:ledport代表P2(发光二极管接P2口)
#define uchar unsigned char //3 宏定义:uchar代表unsigned char
uchar idata keycnt; //4 定义全局变量,keycnt在中断服务函数和main中均可使
void count() interrupt 0 using 1//5 定义中断服务函数:中断号为0,用第1组寄存器组
{ keycnt++; //6 按键计数值加1
ledport=~keycnt; //7 按键计数值送led口显示
} //8 中断服务函数结束
void main(void) //9 main函数
{ keycnt=0; //10 按键计数值初始化:赋初值0
IT0=1; //11 设置外部中断0的触发方式:下降沿触发
EX0=1; //12 开外部中断0
EA=1; //13 开全局中断
while(1); //14 死循环,语句15为循环体
//------------------相对任务6中断方式增加的语句------------------
{ PCON|=0x01; } //15 睡眠CPU
//----------------------------------------------------------------
} //16 main函数结束
c51中的存储类型
code :程序存储区(64KB),
data :可直接寻址的内部数据存储区(128B)
idata:不可直接寻址的内部数据存储区(256B)
bdata:可位寻址内部数据存储区(16B)
xdata:外部数据存储区(64KB)
pdata:分页的外部数据存储区
可以加群一起学习:891507813