單片機(jī)電源管理寄存器PCON的用法
1. 空閑模式
2.
【例】:開啟兩個(gè)外部中斷,設(shè)置低電平觸發(fā)中斷,用定時(shí)器計(jì)數(shù)并且顯示在數(shù)碼管的前兩位,當(dāng)計(jì)到5時(shí),使單片機(jī)進(jìn)入空閑(休眠)模式,同時(shí)關(guān)閉定時(shí)器,當(dāng)單片機(jī)響應(yīng)外部中斷后,從空閑(休眠)模式返回,同時(shí)開啟定時(shí)器。
程序代碼如下:
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
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) //顯示子函數(shù)
{
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(5); //延時(shí)
dula=1;
P0=table[ge]; //送個(gè)位段選數(shù)據(jù)
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--)
}
void main()
{
uchar a,b,num1;
TMOD=0x01; //設(shè)置定時(shí)器0為工作方式1(0000 0001)
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
EA=1;
ET0=1;
EX0=1;
EX1=1;
P0=1;
while(1)
{
}
}
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;
EX0=1;
EX1=1;
P0=1;
(2)主程序中有“ET0=0;”下句是“PCON=0x02;”意思是在進(jìn)入休眠模式之前要先把定時(shí)器關(guān)閉,這樣方可一直等待外部中斷的產(chǎn)生,如果不關(guān)閉定時(shí)器,定時(shí)器的中斷同樣也會(huì)喚醒單片機(jī),使其退出休眠模式,這樣我們便看不出進(jìn)入休眠模式和返回的過程。
(3)void ex_int0() interrupt 0
{
}
這是外部中斷0服務(wù)程序,當(dāng)進(jìn)入外部中斷服務(wù)程序后,首先將PCON中原先設(shè)定的休眠控制位清除(如果不清除,程序也可以正常運(yùn)行,大家最好親自做實(shí)驗(yàn)驗(yàn)證),接下來再重新開啟定時(shí)器0。在使用是還是保留中斷喚醒的中斷服務(wù)程序?yàn)楹谩?br />(4)下載程序后,實(shí)驗(yàn)現(xiàn)象如下:數(shù)碼管從“00”開始遞增顯示,到“05”后,再過一秒后,數(shù)碼管變成只顯示一個(gè)“5”,單片機(jī)進(jìn)入休眠或空閑模式,用導(dǎo)線一端連接地,另一端接觸P3.2或P3.3,數(shù)碼管重新從“06”開始顯示,遞增下去。整個(gè)過程演示了單片機(jī)從正常工作模式進(jìn)入休眠模式或空閑模式,然后再從休眠模式或空閑模式返回到正常工作模式。
(5)測試過程大家可將數(shù)字萬用表調(diào)節(jié)到電流檔,然后串接入電路中,觀察單片機(jī)在正常工作模式、休眠模式、空閑模式下流過系統(tǒng)的總電流變化情況,經(jīng)測試可發(fā)現(xiàn)結(jié)果如下:正常工作電流>空閑模式電流>休眠模式電流。
電源管理寄存器PCON
PCON主要是為CHMOS型單片機(jī)的電源控制而設(shè)置的專用寄存器,單元地址是87H,其結(jié)構(gòu)格式如下:
表2 PCON電源管理寄存器結(jié)構(gòu)
PCON D7 D6 D5 D4 D3 D2 D1 D0
位符號(hào) SMOD - - - GF1 GF0 PD IDL
在CHMOS型單片機(jī)中,除SMOD位外,其他位均為虛設(shè)的,SMOD是串行口波特率倍增位,當(dāng)SMOD=1時(shí),串行口波特率加倍。系統(tǒng)復(fù)位默認(rèn)為SMOD=0。
各位的定義: SMOD:該位與串口通信有關(guān)。
SMOD=0; 串口方式1,2,3時(shí),波特率正常。
SMOD=1; 串口方式1,2,3時(shí),波特率加倍。
GF1,GF0:兩個(gè)通用工作標(biāo)志位,用戶可以自由使用。
PD:掉電模式設(shè)定位。
PD=0 單片機(jī)處于正常工作狀態(tài)。
PD=1 單片機(jī)進(jìn)入掉電(Power Down)模式,可由外部中斷或硬件復(fù)位模式喚醒,進(jìn)入掉電模式后,外部晶振停振,CPU、定時(shí)器、串行口全部停止工作,只有外部中斷工作。
IDL:空閑模式設(shè)定位。
IDL=0 單片機(jī)處于正常工作狀態(tài)。
IDL=1 單片機(jī)進(jìn)入空閑(Idle)模式,除CPU不工作外,其余仍繼續(xù)工作,在空閑模式下可由任一個(gè)中斷或硬件復(fù)位喚醒。
評(píng)論