電源管理特殊功能寄存器 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