個人總結單片機省電的兩個模式的使用: 單片機正常工作時的功耗通常是4mA~7mA,進入空閑模式是其功耗降至2mA,進入掉電模式是的功耗可降至0.1uA以下。 當單片機進入空閑模式時,除CPU處于休眠狀態外,其他硬件全部都處于活動狀態,芯片內部程序所設計的寄存器都保持原值。 當單片機進入掉電模式時,外部晶振停振,CPU,定時器、串行口全部停止工作,只有外部中斷繼續工作。同樣芯片內部程序所設計的寄存器都保持原值。 值得注意的是,兩者使用中斷喚醒單片機時,程序從原來停止處繼續運行;當使用硬件復位喚醒單片機時,程序將從頭開始執行。 運行效果圖:
 運行視頻:(當數碼管走到5時,就自動停止,需要外部中斷0才能激活程序,數碼管繼續運行下去)
附上程序: #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--); }
|