個(gè)人總結(jié)單片機(jī)省電的兩個(gè)模式的使用: 單片機(jī)正常工作時(shí)的功耗通常是4mA~7mA,進(jìn)入空閑模式是其功耗降至2mA,進(jìn)入掉電模式是的功耗可降至0.1uA以下。 當(dāng)單片機(jī)進(jìn)入空閑模式時(shí),除CPU處于休眠狀態(tài)外,其他硬件全部都處于活動(dòng)狀態(tài),芯片內(nèi)部程序所設(shè)計(jì)的寄存器都保持原值。 當(dāng)單片機(jī)進(jìn)入掉電模式時(shí),外部晶振停振,CPU,定時(shí)器、串行口全部停止工作,只有外部中斷繼續(xù)工作。同樣芯片內(nèi)部程序所設(shè)計(jì)的寄存器都保持原值。 值得注意的是,兩者使用中斷喚醒單片機(jī)時(shí),程序從原來停止處繼續(xù)運(yùn)行;當(dāng)使用硬件復(fù)位喚醒單片機(jī)時(shí),程序?qū)念^開始執(zhí)行。 運(yùn)行效果圖:
 運(yùn)行視頻:(當(dāng)數(shù)碼管走到5時(shí),就自動(dòng)停止,需要外部中斷0才能激活程序,數(shù)碼管繼續(xù)運(yùn)行下去)
附上程序: #include<reg52.h> #define uint unsigned int #define uchar unsigned char void delayms(uint); void display(uchar shi,uchar ge); uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x98}; uchar num; void main() { uchar a,b,num1; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; EX0=1; TR0=1; while(1) { if(num>=20) { num=0; num1++; if(num1==6) { ET0=0; PCON=0x02; } a=num1/10; b=num1%10; } display(a,b); } } void display(uchar a,uchar b) { P2=0xbf; P0=table[a]; delayms(5); P2=0x7f; P0=table; delayms(5); } void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; num++; } void ex_int0() interrupt 0 { PCON=0; ET0=1; } void delayms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }
|