51单片机长时间待机设计-附程序

上传人:woxinch****an2018 文档编号:38630713 上传时间:2018-05-05 格式:DOC 页数:12 大小:57KB
返回 下载 相关 举报
51单片机长时间待机设计-附程序_第1页
第1页 / 共12页
51单片机长时间待机设计-附程序_第2页
第2页 / 共12页
51单片机长时间待机设计-附程序_第3页
第3页 / 共12页
51单片机长时间待机设计-附程序_第4页
第4页 / 共12页
51单片机长时间待机设计-附程序_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《51单片机长时间待机设计-附程序》由会员分享,可在线阅读,更多相关《51单片机长时间待机设计-附程序(12页珍藏版)》请在金锄头文库上搜索。

1、AT89S52 可降至 0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下,CPU 停止工作,允许 RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM 内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。单片机空闲与掉电模式 2009-04-23 00:03 特别对于电池供电系统来说,功耗是首要考虑的问 题.我们知道单片机内部有一个电源管理寄存器 PCON,这个寄存器的最低两位,IDL 和 PD 这两位分别用来设定是否使单片机进入 空闲模式和掉电模式。1. 空闲模式空闲模式当单片机进入空闲模式时,除 CPU 处于休眠状态外,其余硬件全部

2、处于活动状态, 芯片中程序未涉及到的数据存储器和特殊功寄存器中的数据在空闲模式期间都将保持原值。 但假若定时器正在运行,那么计数器寄存器中的值还将会增加。单片机在空闲模式下可由 任一个中断或硬件复位唤醒,需要注意的是,使用中断唤醒单片机时,程序从原来停止处 继续运行,当使用硬件复位唤醒单片机时,程序将从头开始执行。让单片机进入空闲模式的目的通常是为了降低系统的功耗,举个很简单的例子,大家 都用过数字万用表,在正常使用的时候表内部的单片机处于正常工作模式,当不用时,又 忘记了关掉万用表的电源,大多数表在等待数分钟后,若没有人为操作,它便会自 动将液晶显示关闭,以降低系统功耗,通常类似这种功能的实

3、现就是使用了单片机的空闲 模式或是掉电模式。以 STC89 系列单片机为例,当单片机正常工作时的功耗通常为 4mA7mA,进入空闲模式时其功耗降至 2mA,当进入掉电模式时功耗可降至 0.1A 以下。2. 休眠模式当单片机进入掉电模式时,外部晶振停振、CPU、定时器、串行口全部停止工作,只 有外部中断继续工作。使单片机进入休眠模式的指令将成为休眠前单片机执行的最后一条 指令,进入休眠模式后,芯片中程序未涉及到的数据存储器和特殊功能寄存器中的数据都 将保持原值。可由外部中断低电平触发或由下降沿触发中断或者硬件复位模式换醒单片机, 需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使

4、用硬件复位唤 醒单片机时,程序将从头开始执行。可将数字万用表调节到电流档,然后串接入电路中, 观察单片机在正常工作模式、休眠模式、空闲模式下流过系统的总电流变化情况,经测试 可发现结果如下:正常工作电流空闲模式电流休眠模式电流。51 进空闲模式 2007-10-24 14:36 进入空闲模式:PCON=0x01; 之前执行 AUXR=0xFF;定义空闲模式下看门狗 WDT 不计数。PCON:电源控制器及波特率选择寄存器:电源控制器及波特率选择寄存器字节地址87H,不可位寻址 SMOD-POFGF1GF0PDIDLSMOD波特率倍增位GF1、GF0用户通用标记PD掉电方式控制位,PD1 时进入掉

5、电模式IDL空闲方式控制位,IDL=1 时进入空闲方式在 AT89S51 中 PCON.4 是电源断电标记位 POF,上电是为 1对 PCON(电源控制寄存器)的有关位来设置实现控制: 当第 0 位 IDL 为 1 时,进入待机模式,此时单片机功耗很低,振荡器继续运行,可用中断来唤醒 当第 1 为 PD 为 1 时,进入掉电模式在程序中执行下面指令就达目的:setb idl ;待机模式 setb pd ;掉电模式 【转转】使用使用 TX-1CTX-1C 开发板学习开发板学习 5151 单片机的空闲与掉电模式单片机的空闲与掉电模式已有 22 次阅读 2009-08-27 10:51 标签: 单片

6、机 模式 开发 学习 我们知道单片机内部有一个电源管理寄存器 PCON,这个寄存器的最低两位,IDL 和 PD 这两位分别用来设定是否使单片机进入空闲模式和掉电模式。1.1. 空闲模式空闲模式当单片机进入空闲模式时,除 CPU 处于休眠状态外,其余硬件全部处于活动状态,芯片中程序未涉及到的数据存储器和特殊功能寄存器中的数据在空闲模式期间都将保持原值。但假若定时器正在运行,那么计数器寄存器中的值还将会增加。单片机在空闲模式下可由任一个中断或硬件复位唤醒,需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复位唤醒单片机时,程序将从头开始执行。让单片机进入空闲模式的目的通常是为

7、了降低系统的功耗,举个很简单的例子,大家都用过数字万用表,在正常使用的时候表内部的单片机处于正常工作模式,当不用时,又忘记了关掉万用表的电源,大多数表在等待数分钟后,若没有人为操作,它便会自动将液晶显示关闭,以降低系统功耗,通常类似这种功能的实现就是使用了单片机的空闲模式或是掉电模式。以 STC89 系列单片机为例,当单片机正常工作时的功耗通常为 4mA7mA,进入空闲模式时其功耗降至 2mA,当进入掉电模式时功耗可降至 0.1A 以下。2.2. 休眠模式休眠模式当单片机进入掉电模式时,外部晶振停振、CPU、定时器、串行口全部停止工作,只有外部中断继续工作。使单片机进入休眠模式的指令将成为休眠

8、前单片机执行的最后一条指令,进入休眠模式后,芯片中程序未涉及到的数据存储器和特殊功能寄存器中的数据都将保持原值。可由外部中断低电平触发或由下降沿触发中断或者硬件复位模式换醒单片机,需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复位唤醒单片机时,程序将从头开始执行。下面的例子演示单片机进入空闲和休眠模式,并且演示出从空闲和休眠模式中唤醒的过程。【例例】:】:在 TX-1C 实验板上完成如下描述,开启两个外部中断,设置低电平触发中断,用定时器计数并且显示在数码管的前两位,当计到 5 时,使单片机进入空闲(休眠)模式,同时关闭定时器,当单片机响应外部中断后,从空闲(休眠)模

9、式返回,同时开启定时器。新建文件 part3.4.1.c,程序代码如下:#include /52 系列单片机头文件#define uchar unsigned char#define uint unsigned int sbit dula=P26; /申明 U1 锁存器的锁存端sbit wela=P27; /申明 U2 锁存器的锁存端uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar num;void delayms(uint);void d

10、isplay(uchar shi,uchar ge) /显示子函数dula=1;P0=tableshi; /送十位段选数据dula=0;P0=0xff; /送位选数据前关闭所有显示,防止打开位选锁存时wela=1; /原来段选数据通过位选锁存器造成混乱P0=0xfe; /送位选数据wela=0;delayms(5); /延时dula=1;P0=tablege; /送个位段选数据dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delayms(5);void delayms(uint xms) uint i,j;for(i=xms;i0;i-) /i=xms 即延时约 x

11、ms 毫秒for(j=110;j0;j-);void main()uchar a,b,num1;TMOD=0x01; /设置定时器 0 为工作方式 1(0000 0001)TH0=(65536-50000)/256; TL0=(65536-50000)%256;EA=1;ET0=1;EX0=1;EX1=1;TR0=1;while(1) if(num=20)num=0;num1+;if(num1=6)ET0=0;PCON=0x02; (或 PCON=0x01;)a=num1/10;b=num1%10;display(a,b);void timer0() interrupt 1TH0=(65536

12、-50000)/256;TL0=(65536-50000)%256;num+; void ex_int0() interrupt 0PCON=0;ET0=1;void ex_int1() interrupt 2PCON=0;ET0=1;分析:(1) EA=1; 开总中断ET0=1; 开定时器 0 中断EX0=1; 开外部中断 0EX1=1; 开外部中断 1TR0=1; 启动定时器 0(2)主程序中有 “ET0=0;”下句是 “PCON=0x02;”意思是在进入休眠模式之前要先把定时器关闭,这样方可一直等待外部中断的产生,如果不关闭定时器,定时器的中断同样也会唤醒单片机,使其退出休眠模式,这样我

13、们便看不出进入休眠模式和返回的过程。(3)void ex_int0() interrupt 0 PCON=0;ET0=1;这是外部中断0 服务程序,当进入外部中断服务程序后,首先将PCON 中原先设定的休眠控制位清除 (如果不清除,程序也可以正常运行,大家最好亲自做实验验证),接下来再重新开启定时器 0。(4)下载程序后,实验现象如下:数码管从“00”开始递增显示,到 “05”后,再过一秒后,数码管变成只显示一个 “5”,单片机进入休眠或空闲模式,用导线一端连接地,另一端接触P3.2 或 P3.3,数码管重新从 “06”开始显示,递增下去。整个过程演示了单片机从正常工作模式进入休眠模式或空闲模

14、式,然后再从休眠模式或空闲模式返回到正常工作模式。(5)测试过程大家可将数字万用表调节到电流档,然后串接入电路中,观察单片机在正常工作模式、休眠模式、空闲模式下流过系统的总电流变化情况,经测试可发现结果如下:正常工作电流空闲模式电流 休眠模式电流。STC51 的休眠模式以及唤醒的休眠模式以及唤醒2008-04-02版权声明 :转载时请以超链接形式标明文章原始出处和作者信息及本声明http:/ 确实是块好芯片,性能好,功耗低环境适应能力强(不过据说潮湿环境下flash 容易丢失)。 STC51 的休眠和唤醒功能已经在datasheet 有示例代码了,因为pdf 被加密了,所以不能复制。贴个代码,

15、并且已经在STC12C5204 上调试通过。/* 中断唤醒测试程序 */#include /#include #include #define SHUTDOWN_MASHINE() do Is_Power_Down = 1; PCON = 0x02; _nop_();_nop_();_nop_();_nop_(); while (0);void Rest_Soft(void) ISP_CONTR = 1 0;-uiI)if (INT1 = 1)SHUTDOWN_MASHINE();return;/while (Power_Down_Wakeup_Pin_INT1 = 0)/* 等待变高 */Is_Power_Down_Led_INT1 = 1; / 关闭外部中断1 掉电唤醒指示灯Rest_Soft();elseNot_Power_Down_Led_INT1 = 0;/*for (uiI=0x1efff;uiI0;-uiI)if (INT1 = 1)return;*/while (Power_Down_Wakeup_Pin_INT1 = 0)/* 等待变高 */Not_Power_Down_Led_INT1 = 1;SHUTDOWN_MASHINE();void delay (void)unsigned

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 高中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号