中微芯片SC8P052,比较器监测电源电压
4.检测电池电压函数,将此函数放到主函数while()循环里面。CMPCON1 寄存器,用来改变检测电压值。CMPCON0寄存器,输出比较结果。3.上面初始化我用的的是3.6v。
·
1.比较强初始化
uint8_t gpc_flag=0;//0,是关闭电量检测,1是开启电量检测
void GPC_Init(void)
{
/***************************************************
比较器控制寄存器 CMPCON0(0FH)
Bit7 CMPEN: CMP使能位
1= 使能CMP
0= 禁止CMP
Bit6 CMPPS: CMP正端输入选择位
1= CMP+端口电压
0= VDD经过内部电阻分压后的电压
Bit5~Bit3 CMPNS<2:0>: CMP负端输入选择位
000= CMP0- 端口电压
001= CMP1- 端口电压
010= CMP2-端口电压
011= CMP3-端口电压
100= VDD经过内部电阻分压后的电压
101= BG
11x= BG
Bit2 CMPNV: CMPO端口输出取反控制位
1= CMPOUT在CMPO端口取反输出
0= CMPOUT在CMPO端口正常输出
Bit1 CMPOUT: CMP结果位
Bit0 CMPOEN: CMPO端口输出使能位
1= 使能CMPO端口输出CMPOUT
0= 禁止CMPO端口输出CMPOUT
*****************************************************/
CMPCON0 = 0B00111000; //配置比较器正端为VDD分压,负端为BG1.2V,使能比较器输出
/***************************************
比较器控制寄存器 CMPCON1(10H)
Bit7 CMPIM: CMP中断触发边沿选择
1= CMP输出的下降沿触发中断
0= CMP输出的上升沿触发中断
Bit6 ANSEL: 模拟选择位,选择CMP+、CMPX-的模拟或数字功能
1= 模拟口
0= 数字口
Bit5 RBIAS_H: 具体用法参考比较器框图
Bit4 RBIAS_L: 具体用法参考比较器框图
Bit3~Bit0 LVDS<3:0>: 内部电阻分压比选择位
****************************************************/
CMPCON1 = 0B10010111; // 测试VDD电压低于3.6V中断,故为下降沿触发
//Bit5~0对应的电压值可参考芯片说明书
CMPEN = 1; //比较器使能
gpc_flag=0;//关闭电量检查标志位
}
//开启比较器检测
void GPC_ON(void)
{
gpc_flag=1;
}
//关闭比较器检测
void GPC_OFF(void)
{
gpc_flag=0;
}
2.CMPCON1 寄存器,用来改变检测电压值

3.上面初始化我用的的是3.6v

4.检测电池电压函数,将此函数放到主函数while()循环里面。
//检测 GPC 比较器
void GPC_Compare(void)
{
if(gpc_flag)//电池电量检查标志位
{
if(CMPCON0&0x02)//bit1=1时进入
{
}else//低于设置电压进入
{
//当电池电压低于设置电压3.6v就会执行下面这两句程序,也可以换成别的
charge_led_blink_ON();//led闪烁
GPC_OFF();
}
}
}
5.CMPCON0寄存器,输出比较结果

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)