[通用8051核FLASH系列]

【HC89S003P套件试用】低功耗掉电模式5.4μA外部中断INT1唤醒

[复制链接]
851|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

关键代码:
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




使用特权

评论回复
零三翟邢止胃| | 2019-3-25 11:23 | 显示全部楼层
多谢分享啊! 感谢啊!

使用特权

评论回复
dqqqqqq| | 2019-3-27 15:39 | 显示全部楼层
支持一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

279

帖子

3

粉丝