[通用8051核FLASH系列] 【HC89S003P套件试用】低功耗掉电模式5.4μA外部中断INT1唤醒

[复制链接]
1386|2
 楼主| hayden0 发表于 2019-3-23 15:09 | 显示全部楼层 |阅读模式
本帖最后由 芯圣电子官方QQ 于 2023-7-25 10:40 编辑

现在的单片机,没有低功耗模式你都不好意思拿出手,今天测试了一下HC89S003的低功耗掉电模式,使用外部中断INT1下降沿按键唤醒。掉电模式仅有5.4μA的电流。

没进入低功耗之前,点亮LED:

P90323-144131.jpg

进入掉电模式后电流:

P90323-144157.jpg

关键代码:
  1. void System_Init(void)
  2. {
  3.         /************************************系统初始化****************************************/
  4.         WDTCCR = 0x00;                                                //关闭看门狗
  5.         while((CLKCON&0x20)!=0x20);                        //等待内部高频RC起振
  6.         CLKSWR = 0x51;                                                //选择内部高频时钟为主时钟,内部高频RC2分频,Fosc=16MHz
  7.         while((CLKSWR&0xC0)!=0x40);                        //等待内部高频切换完成
  8.         CLKDIV = 0x01;                                                //Fosc1分频得到Fcpu,Fcpu=16MHz
  9.         /************************************系统初始化****************************************/
  10.         BORC = 0x00;
  11.         T3CON=0x00;
  12. }

  13. void Power_Down_Mode(void)
  14. {

  15.         /***********************************进入掉电模式***************************************/
  16.         FREQ_CLK = 0x10;                                        //本例程涉及掉电模式,需指明当前系统时钟        
  17.         
  18.         while(1)
  19.         {
  20.                 PCON |= 0x02;                                        //进入掉电模式        
  21.         }
  22. }
  1. // ----------------------------------- INT--------------------------
  2. void EXTI_Init(void)
  3. {
  4.         P0M0 = P0M0&0x0F|0x60;//P0.1输入(施密特)
  5.         P01DBC = 0xFF;                                                //设置消抖时间
  6.         //消抖时间计算
  7.         //分频系数*Tosc*P0xDBCT[5:0]-Tosc<消抖时间<分频系数*Tosc*(P0xDBCT[5:0]+1)-Tosc
  8.         //                  64*0.0625us*63-0.0625us<消抖时间<64*0.0625us*(63+1)-0.0625us
  9.         //                                           251.9375us<消抖时间<255.9375us
  10.         INT01_PINS |= 0x00;                                        //INT1选择P01端口
  11.         PITS0 |= 0x04;                                                //INT1下降沿中断
  12.         IE |= 0x04;                                                        //打开INT1中断
  13.         EA = 1;                                                                //打开总中断
  14. }



  15. /***************************************************************************************
  16.   * @说明          INT1中断服务函数
  17.   *        @参数        无
  18.   * @返回值 无
  19.   * @注                无
  20. ***************************************************************************************/
  21. void INT1_Rpt() interrupt INT1_VECTOR
  22. {
  23.         PINTF0 &= ~0x02;                        //清除INT1中断标志位
  24.         LED = ~LED;        
  25. }


PS:千万别忘了加上BORC = 0x00; 这句关闭BOR,否则BOR会耗电
亲测没有关闭BOR之前,电流13.1μA




零三翟邢止胃 发表于 2019-3-25 11:23 | 显示全部楼层
多谢分享啊! 感谢啊!
dqqqqqq 发表于 2019-3-27 15:39 | 显示全部楼层
支持一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

296

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部