本帖最后由 芯圣电子官方QQ 于 2023-7-25 10:40 编辑
现在的单片机,没有低功耗模式你都不好意思拿出手,今天测试了一下HC89S003的低功耗掉电模式,使用外部中断INT1下降沿按键唤醒。掉电模式仅有5.4μA的电流。
没进入低功耗之前,点亮LED:
进入掉电模式后电流:
关键代码:- void System_Init(void)
- {
- /************************************系统初始化****************************************/
- WDTCCR = 0x00; //关闭看门狗
- while((CLKCON&0x20)!=0x20); //等待内部高频RC起振
- CLKSWR = 0x51; //选择内部高频时钟为主时钟,内部高频RC2分频,Fosc=16MHz
- while((CLKSWR&0xC0)!=0x40); //等待内部高频切换完成
- CLKDIV = 0x01; //Fosc1分频得到Fcpu,Fcpu=16MHz
- /************************************系统初始化****************************************/
- BORC = 0x00;
- T3CON=0x00;
- }
- void Power_Down_Mode(void)
- {
- /***********************************进入掉电模式***************************************/
- FREQ_CLK = 0x10; //本例程涉及掉电模式,需指明当前系统时钟
-
- while(1)
- {
- PCON |= 0x02; //进入掉电模式
- }
- }
- // ----------------------------------- INT--------------------------
- void EXTI_Init(void)
- {
- P0M0 = P0M0&0x0F|0x60;//P0.1输入(施密特)
- P01DBC = 0xFF; //设置消抖时间
- //消抖时间计算
- //分频系数*Tosc*P0xDBCT[5:0]-Tosc<消抖时间<分频系数*Tosc*(P0xDBCT[5:0]+1)-Tosc
- // 64*0.0625us*63-0.0625us<消抖时间<64*0.0625us*(63+1)-0.0625us
- // 251.9375us<消抖时间<255.9375us
- INT01_PINS |= 0x00; //INT1选择P01端口
- PITS0 |= 0x04; //INT1下降沿中断
- IE |= 0x04; //打开INT1中断
- EA = 1; //打开总中断
- }
- /***************************************************************************************
- * @说明 INT1中断服务函数
- * @参数 无
- * @返回值 无
- * @注 无
- ***************************************************************************************/
- void INT1_Rpt() interrupt INT1_VECTOR
- {
- PINTF0 &= ~0x02; //清除INT1中断标志位
- LED = ~LED;
- }
PS:千万别忘了加上BORC = 0x00; 这句关闭BOR,否则BOR会耗电
亲测没有关闭BOR之前,电流13.1μA
|