应广PMS171B单片机有很实用的功能,就是可以用内部的分压电阻,Band-gap 电路提供 1.2V 参考电压,和比较器一起,测试单片机VDD电压.不使用任何外部器件,不占用端口就可以测试供电的电源电压.!当电池低压的时候可以做相应的动作.比如休眠,进入低功耗等。本章就写一个实例,当低于4.2V时候,LED输出低电平,高于4.2V时候,LED输出高电平。
在这里插入图片描述
gpcc寄存器是比较器 比较器控制寄存器,需要打开时需要7位配置为1,本文使用内部1.20V的band-gap参考电压,需配置3-1位为010,gpcc配置如下所示:
gpcc=0b1_0_0_0_010_0;
在这里插入图片描述
在这里插入图片描述
gpcs寄存器是配置比较电压,本文中以测试4.2V电压为例,将VDD=4.2V带入,得到N只为0.14、5.85、2.43、8.14;由于N为整数,所以Case 4模式较为适合,即gocs寄存器4-5位配置为11,切换为Case4模式,N为8,3-0位设置为1000,gpcs配置如下所示:
gpcs=0B0_0_11_1000;//检测4.2V
#include "extern.h"//是程序的头文件。
BIT LED : PA.7;
#define f_Com !p_Com_Out
BIT p_Com_Out : gpcc.6
BIT f_getBat;
/*比较器初始化*/
void InitCompare ( void )
{
/*b7@1=开启比较器
b6@0=负输入大于正输入
b5@0=比较器不用tm2_ck采样
b4@0=比较结果没有极性相反
b3:1@ 010=内部Band-gap电压
b0@1=PA4输入0=内部电阻输入*/
gpcc=0b1_0_0_0_010_0;
//$ padier 0b111_0_100_1;
/*
b7@0=不输出到PA0
b6@0保留
b5@0=高R
b4@0=低R
b3:0@0000-1111内部r值
*/
gpcs=0B0_0_0_0_0000;
}
void GetBat ( void )
{
/*设置模式为Case 4,检测4.2V*/
gpcs=0B0_0_11_1000;
.delay 10;
if ( f_Com )
{
/*电压低于4.2V,执行LED低电平*/
f_getBat=1;
}
else//LED高电平
{
f_getBat=0;
}
}
void FPPA0 (void)//相当于程序的 main() 函数。
{
/*单片机内部RC震动时钟为 IHRC默认为16M,因此,IHRC/4=4M,系统时钟为4M*/
.ADJUST_IC SYSCLK=IHRC/4, IHRC=16MHz, VDD=5V;
/*端口设置为输出*/
pa.7=0;
pac.7=1;/*输入*/
paph.7=0;/*上拉*/
/***********电压比较器****************/
InitCompare();
while (1)
{
GetBat();
if(f_getBat)
LED = 0;
else
LED = 1;
.delay 4000*10;
}
}
可以看到,4.2V以上为LED输出高电平,4.2以下为LED输出低电平,由于4.2V左右会抖动,建议后期加防抖保证稳定运行。
在这里插入图片描述
在这里插入图片描述
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !