/*********************************************************************
* @fn zmain_vdd_check
* @brief Check if the Vdd is OK to run the processor.
* @return Return if Vdd is ok; otherwise, flash LED, then reset
*********************************************************************/
static void zmain_vdd_check( void )
{
uint8 cnt = 16;
do {
while (!HalAdcCheckVdd(VDD_MIN_RUN));
} while (--cnt);
* @fn zmain_vdd_check
* @brief Check if the Vdd is OK to run the processor.
* @return Return if Vdd is ok; otherwise, flash LED, then reset
*********************************************************************/
static void zmain_vdd_check( void )
{
uint8 cnt = 16;
do {
while (!HalAdcCheckVdd(VDD_MIN_RUN));
} while (--cnt);
}
从代码上来看,是对while (!HalAdcCheckVdd(VDD_MIN_RUN));(电压检测)判断16次,至于如何判断的,我们接着看HalAdcCheckVdd(VDD_MIN_RUN)的源码;//VDD_MIN_RUN是一个宏,实际等于74有个转换公式其实就相当于2V。公式为:(Vdd / 3) / 1.15 X 127。实际就是检测电压是否超过2V。检测16次。
bool HalAdcCheckVdd(uint8 vdd)
{
ADCCON3 = 0x0F; //配置ADC
while (!(ADCCON1 & 0x80)); //等待ADC转换结束
return (ADCH > vdd); //返回布尔型值到调用处,ADCH为ADC值的高8位
}