一;低功耗主要有两种方式:
1;空闲模式:系统不给CPU提供时钟,除了CPU以外一切外设正常运行。
空闲模式下外设工作正常,IO口保持进入空闲之前的正常状态。
2;掉电模式:时钟全部停止震荡。由内部供应时钟的外设全部关断。
此时可以通过外部中断、CCP中断、内部掉电唤醒计时器等方式唤醒。
掉电模式下RAM、SFR和IO等都保持不变。唤醒以后会直接从进入掉电模式的下一个指令开始执行。
二;看寄存器配置
B0置1配置为空闲模式,B1置1配置为掉电模式。
三;唤醒,进入的低功耗模式,单片机会一直保持低功耗状态,通常用外中断或定时器唤醒。
1,外中断唤醒,触发外中断3的按钮,单片机就被唤醒了。
2,定时器唤醒,需要配置掉电计时器,设置掉电计时器唤醒的时间。
这个掉电唤醒寄存器的速度和单片机主频没有关系;
计算公式如下:
如果32766次换算成16进制7FFE,即 WKTCL = 0X7F; WKTCH = 0XEH;
假设Fwt = 32Kmz;
在初始化里配置一下就行,下面就是1秒唤醒一次,WKTCL里面写的就算计数次数。
如果想精确设置唤醒时间,需要在idata区读出实际Fwt的准确值。
获得的x就是精确的Fwt值,但是他有可能是负数,我们要使用绝对值来计算。
//if(x>>31)和if(x<0)是一个意思。
取x绝对值 :(((x) >> 31) ? -(x) : (x)) //如果x小于0,则x= 负x,负负得正;如果x大于于0则x=x。