个人总结单片机省电的两个模式的使用: 单片机正常工作时的功耗通常是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--); }
|