生活上有很多東西都搭載著單片機(jī)而進(jìn)行工作的,而且有相當(dāng)一部分的設(shè)備、儀器、產(chǎn)品都是靠蓄電池來提供電源的,往往這些靠蓄電池供電的設(shè)備、儀器、產(chǎn)品都能夠用上一大段時(shí)間。例如我們經(jīng)常接觸到的遙控器,假若MCU一直不停地運(yùn)行,不出一段時(shí)間,電池的能量會(huì)很快耗光。當(dāng)然在8051系列單片機(jī)搭載的系統(tǒng)中,不光有單片機(jī)需要耗電,同時(shí)還有其他外圍部件耗電的,因此,我們?cè)谶m當(dāng)?shù)臅r(shí)候關(guān)閉設(shè)備的運(yùn)行同時(shí)將8051系列單片機(jī)的運(yùn)行模式進(jìn)入空閑模式或者掉電模式,以節(jié)省不必要的能源,達(dá)到低功耗的目的。
平時(shí)8051系列單片機(jī)正常工作的電流為4毫安~7毫安;當(dāng)8051系列單片機(jī)進(jìn)入掉電模式下,它的工作電流小于1微安。由此可見,低功耗設(shè)備的功耗控制很有必要在適當(dāng)?shù)臅r(shí)候?qū)?051系列單片機(jī)運(yùn)行在掉電模式。
【例子】要求MCU默認(rèn)進(jìn)入掉電模式,通過按鍵中斷來喚醒MCU,閃爍LED燈一段時(shí)間,然后MCU重新進(jìn)入掉電模式。
中斷喚醒代碼:
1#include"stc.h"23#defineLED_PORTP2//定義LED控制端口為P2口45/********************************************6*函數(shù)名稱:Delay7*輸入:無8*輸出:無9*說明:延時(shí)一段時(shí)間10********************************************/11voidDelay(void)12{13unsignedchari,j;1415for(i=0;i<130;i++)16for(j=0;j<255;j++);17}18/********************************************19*函數(shù)名稱:PCONToPD20*輸入:無21*輸出:無22*說明:設(shè)置MCU模式為掉電模式23********************************************/24voidPCONToPD(void)25{26PCON=0x02;27}28/********************************************29*函數(shù)名稱:EXTInit30*輸入:無31*輸出:無32*說明:外部中斷初始化33********************************************/34voidEXTInit(void)35{36EX1=1;//允許外部中斷1中斷37IT1=0;//低電平觸發(fā)38EA=1;//允許所有中斷39}40/********************************************41*函數(shù)名稱:main42*輸入:無43*輸出:無44*說明:函數(shù)45********************************************/46voidmain(void)47{48unsignedchari;4950EXTInit();//外部中斷初始化5152while(1)53{54for(i=0;i<20;i++)//循環(huán)閃爍LED燈55{56LED_PORT=~LED_PORT;57Delay();58}5960PCONToPD();//進(jìn)入掉電模式61}62}63/********************************************64*函數(shù)名稱:EXT1IRQ65*輸入:無66*輸出:無67*說明:外部中斷1中斷服務(wù)函數(shù)68********************************************/69voidEXT1IRQ(void)interrupt270{71//空操作,用于中斷喚醒MCU72}73
代碼分析
PCONToPD函數(shù)主要將當(dāng)前單片機(jī)正常工作模式轉(zhuǎn)變?yōu)榈綦娔J?,?jié)省能耗。
在main函數(shù)中,進(jìn)入while(1)死循環(huán)之前首先要對(duì)外部中斷進(jìn)行初始化,當(dāng)進(jìn)入while(1)后第
一步首先進(jìn)行LED閃爍操作,第二步就是將單片機(jī)正常工作模式轉(zhuǎn)變?yōu)榈綦娔J剑敲催@時(shí)LED燈保持當(dāng)前狀態(tài),直到單片機(jī)的工作方式為正常方式才會(huì)發(fā)生變化,即通過中斷來喚醒單片機(jī),從掉電模式轉(zhuǎn)變?yōu)檎9ぷ髂J健?/p>
外部中斷1中斷服務(wù)函數(shù)EXT1IRQ中是空操作,其實(shí)這個(gè)函數(shù)是可有可無的,為什么這樣說呢?因?yàn)楫?dāng)外部中斷1被觸發(fā)時(shí),單片機(jī)的內(nèi)部機(jī)制會(huì)將其喚醒,從掉電模式轉(zhuǎn)變?yōu)檎9ぷ髂J健K酝獠恐袛?中斷服務(wù)函數(shù)屬于軟件處理部分,在進(jìn)入該函數(shù)之前,單片機(jī)模式已經(jīng)變更了。