STC8H1K08 ADC问题请教
用ADC0测电池电压,ADC1测电机电流,单独在主函数内工作正常;如果用10mS扫描则只有一路ADC工作,另一路不工作,请教是哪出了问题。谢谢! if(Time_10ms == 1){
Time_10ms = 0;
BAT_AD_Action();
MOT_AD_Action();
}
void BAT_AD_Action(void) //电量显示
{
ADC0_Data = ADC_OUT(0);
if((ADC0_Data > (ADC0_Sbuf + 15)) || (ADC0_Data < (ADC0_Sbuf - 15)))
{
ADC0_Sbuf = ADC0_Data;
}
if(ADC0_Sbuf > 603) //大于18V
{
LED1 = LED2 = LED3 = 1;
}
else if(ADC0_Sbuf > 537) //大于16V小于18V
{
LED1 = LED2 = 1;LED3 = 0;
}
else if(ADC0_Sbuf > 455) //大于13.5V小于16V
{
LED1 = 1;LED2 = LED3 = 0;
}
else //小于13.5V
{
cnt++;
if(cnt > 29)
{
cnt = 0;
LED1 = LED2 = LED3 = 0;
ON_OFF = 0;
OUT_BLOW = 0;
BATEN = 0;
ADEN = 1;
LED1 = 1;
// Flag_On = 1; //电压恢复不能使用
}
}
}
void MOT_AD_Action(void) //电机电流检测
{
ADC1_Data = ADC_OUT(1);
if((ADC1_Data > (ADC1_Sbuf + 5)) || (ADC1_Data < (ADC1_Sbuf - 5)))
{
ADC1_Sbuf = ADC1_Data;
}
if(ADC1_Sbuf > 75) //70约是22A
{
cnt++;
if(cnt > 4)
{
if(ADC1_Sbuf > 75)
{
cnt = 0;
LED1 = LED2 = LED3 = 0; //电量显关闭
OUT_BLOW = 0; //输出低电平
BATEN = 0; //电池使能关闭
ADEN = 1; //NTC使能关闭
ON_OFF = 0; //开关标志置0,并进入睡眠状态
}
}
}
}
uint ADC_OUT(uchar ch)
{
uint ADC_TEMP = 0;
ADC_CONTR |= 0x80; //打开ADC电源
Delay1ms();
ADC_CONTR |= ch; //选择ADC通道
ADC_CONTR |= 0x40; //启动AD转换
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
while(!(ADC_CONTR & 0x20)); //查询ADC完成标志
ADC_CONTR &=~0x20; //清完成标志
ADC_TEMP = (uint)(ADC_RES << 8) | ADC_RESL; //读取ADC结果,右对齐左移8位,左对齐左移2位
return ADC_TEMP;
}
wnagming 发表于 2024-8-5 20:53
还有一个办法
这一行
ADC_CONTR |= 0x80; //打开ADC电源
十分感谢!真的是这里没有配置好!{:4_250:}{:4_250:}{:4_250:} 学习学习
页:
[1]