第六周 睡眠CPU 电源管理特殊功能寄存器 PCON

电源管理特殊功能寄存器 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章