|
型号 是Stc8h1k08我看手册上没有关于这个的说明 Adc切换的时候我直接默认是换通道 但是正常使用的时候是读数正常,一切换通道读数马上异常,甚至固定在一个值不变,工作在异常状态 翻了一下手册没说明,不知道什么原因 想了一下,会不会跟adc电源有关系?然后在结果返回那里加了一个关闭adc电源 后续切换通道读书就正常了
这是以下代码:
#include <STC8H.h>
#include <intrins.h>
void AdcSetRate(bit t);
float adcRes(int num,float voltage );
void Delay1ms(void) //@24.000MHz
{
unsigned char data i, j;
_nop_();
i = 32;
j = 40;
do
{
while (--j);
} while (--i);
}
float adc(bit ch, float voltage)
{
int res;
if (ch==1)
{
AdcSetRate(1);//1是温度 选择p36
}
else
{
AdcSetRate(0);//0是电压 选择p33
}
ADC_CONTR |= 0x80; // 开启ADC电源
Delay1ms(); // 延时
EA = 0;
ADC_CONTR |= 0x40; // 启动转换
_nop_(); _nop_(); // 等待硬件响应
while (!(ADC_CONTR&0x20));
ADC_CONTR &= ~0x20;
EA = 1;
res=(ADC_RES << 8) | ADC_RESL; // 将ADC_ //读取ADC结果
return adcRes(res,voltage);
}
void AdcSetRate(bit t) //300ksps@24.000MHz
{
ADCCFG &= ~0x0f; //SPEED(0)
ADCCFG |= 0x20; //RESFMT(1) 结果右对齐
ADCTIM = 0x38; //CSSETUP(0), CSHOLD(1), SMPDUTY(24)
if (t==1)
{
ADC_CONTR |=0x0E;
}
else
{
ADC_CONTR |=0x0B;
}
}
float adcRes(int num,float voltage )
{
float res;
res = voltage * (num / 1024.0f);
ADC_CONTR &= 0X10;
return res;
} |
|