第六週 睡眠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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章