为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

51单片机空闲和掉电模式详解

2019-08-19 9页 doc 25KB 77阅读

用户头像

is_266065

暂无简介

举报
51单片机空闲和掉电模式详解51单片机空闲和掉电模式应用 我们知道单片机内部有一个电源管理寄存器PCON,这个寄存器的最低两位,IDL和PD这两位分别用来设定是否使单片机进入空闲模式和掉电模式。 1. 空闲模式 当单片机进入空闲模式时,除CPU处于休眠状态外,其余硬件全部处于活动状态,芯片中程序未涉及到的数据存储器和特殊功能寄存器中的数据在空闲模式期间都将保持原值。但假若定时器正在运行,那么计数器寄存器中的值还将会增加。单片机在空闲模式下可由任一个中断或硬件复位唤醒,需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复位唤醒单片...
51单片机空闲和掉电模式详解
51单片机空闲和掉电模式应用 我们知道单片机内部有一个电源管理寄存器PCON,这个寄存器的最低两位,IDL和PD这两位分别用来设定是否使单片机进入空闲模式和掉电模式。 1. 空闲模式 当单片机进入空闲模式时,除CPU处于休眠状态外,其余硬件全部处于活动状态,芯片中程序未涉及到的数据存储器和特殊功能寄存器中的数据在空闲模式期间都将保持原值。但假若定时器正在运行,那么计数器寄存器中的值还将会增加。单片机在空闲模式下可由任一个中断或硬件复位唤醒,需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复位唤醒单片机时,程序将从头开始执行。 让单片机进入空闲模式的目的通常是为了降低系统的功耗,举个很简单的例子,大家都用过数字万用,在正常使用的时候表内部的单片机处于正常工作模式,当不用时,又忘记了关掉万用表的电源,大多数表在等待数分钟后,若没有人为操作,它便会自动将液晶显示关闭,以降低系统功耗,通常类似这种功能的实现就是使用了单片机的空闲模式或是掉电模式。以STC89系列单片机为例,当单片机正常工作时的功耗通常为4mA~7mA,进入空闲模式时其功耗降至2mA,当进入掉电模式时功耗可降至0.1μA以下。 2.   休眠-掉电模式 当单片机进入掉电模式时,外部晶振停振、CPU、定时器、串行口全部停止工作,只有外部中断继续工作。使单片机进入休眠模式的指令将成为休眠前单片机执行的最后一条指令,进入休眠模式后,芯片中程序未涉及到的数据存储器和特殊功能寄存器中的数据都将保持原值。可由外部中断低电平触发或由下降沿触发中断或者硬件复位模式换醒单片机,需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复位唤醒单片机时,程序将从头开始执行。 【例】:开启两个外部中断,设置低电平触发中断,用定时器计数并且显示在数码管的前两位,当计到5时,使单片机进入空闲(休眠)模式,同时关闭定时器,当单片机响应外部中断后,从空闲(休眠)模式返回,同时开启定时器。 程序代码如下: /******************************************************************** 说明:开启两个外部中断,设置低电平触发中断, 用定时器计数并且显示在数码管的前两位,当计到5时, 使单片机进入空闲(休眠)模式,同时关闭定时器,当单片机响应外部中断后, 从空闲(休眠)模式返回,同时开启定时器 ********************************************************************/ /*************头文件专区*************/ #include      //单片机52头文件,存放着单片机的寄存器 /*************宏定义专区*************/ #define uint unsigned int #define uchar unsigned char /*************变量定义专区*************/ Uchar code table0[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //数码管字型码 uchar code table1[6]={0xf8,0xf4,0xec,0xdc,0xbc,0x7c};  //位选数码管数组 uchar num;//定时计数 /*************函数申明专区*************/ void delay_ms(uint z);        //1ms延时 void timer0_init(void);        //定时器初始化函数 void EX_init(void);          //外部中断初始化函数  void display(uchar shi,uchar ge); //数码管显示 /******************************** *函数名称:main*输入:无*输出:无 *功能说明:主函数 *********************************/ void main(void) { uchar num1,a,b;    //定义局部变量 timer0_init();    //定时器初始化 EX_init();      //外部中断初始化 EA=1;          //开总中断 while(1) { if(++num>=100) { num=0; num1++; if(num1==6) { ET0=0;      //关定时器 PCON=0X02; //PD=1,进入掉电模式 //或 PCON=0X01;//IDL=1,进入空闲模式 } a=num1/10;    //十位 b=num1%10;    //个位 } display(a,b);  //显示    } } /******************************** *函数名称:delay_ms *输入:uint z延时时间*输出:无 *功能说明:毫秒级延时 *********************************/ void delay_ms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /******************************** *函数名称:display *输入:shi 十位,ge 个位*输出:无 *功能说明:数码管显示计数值 *********************************/ void display(uchar shi,uchar ge) { P2=table1[1];    //显示位 P0=table0[shi];        //显示百位 delay_ms(3); P2=table1[0];    //显示位 P0=table0[ge];        //显示百位    delay_ms(3);        } /******************************** *函数名称:time0_int*输入:无*输出:无 *功能说明:定时器0初始化,50ms *********************************/ void timer0_init(void) { TMOD=0X01;                //定时器工作方式设置为,定时器0,方式1 TH0=(65536-50000)/256;    //计数寄存器高8位 TL0=(65536-50000)%256;    //计数寄存器低8位 TR0=1;                      //开启定时器0运行 ET0=1;                      //开定时器0中断    } /******************************** *函数名称:EX_init*输入:无*输出:无 *功能说明:外部中断初始化 *********************************/ void EX_init(void) { EX0=1;    //开外部中断0 EX1=1;  //开外部中断1 } /******************************** *函数名称:EX0_IRQ*输入:无*输出:无 *功能说明:外部中断0中断服务程序 *********************************/ void EX0_IRQ(void) interrupt 0 { PCON=0;//清除之前的掉电(空闲)模式 ET0=1; //开定时器0 } /******************************** *函数名称:EX1_IRQ*输入:无*输出:无 *功能说明:外部中断1中断服务程序 *********************************/ void EX1_IRQ(void) interrupt 2 { PCON=0;    //清除之前的掉电(空闲)模式 ET0=1; //开定时器0 } /******************************** *函数名称:Time0_IRQ*输入:无*输出:无 *功能说明:定时器0中断服务程序 *********************************/ void Time0_IRQ(void) interrupt 1 { TH0=(65536-50000)/256;  //计数寄存器高8位重载 TL0=(65536-50000)%256; //计数寄存器低8位重载 num++; } 说明:用万用表串接入电路中,可发现:正常工作电流>空闲模式电流>掉电模式电流
/
本文档为【51单片机空闲和掉电模式详解】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索