本帖最后由 芯圣电子官方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
|