18系列内部AD连续采样的问题
为什么我的AD采样一次就是正常的啊程序如下:
//===================================================================================//
// 采样AD初始化
//===================================================================================//
void adyqint(void)
{
ADON=0;
GODONE=0;
ADCON0=0x69; //选择A/D通道为RE0,
//选择A/D通道为RE0,打开A/D转换器0110,1001
ADCON1=0X8A; //转换结果右移,及ADRESH寄存器的高6位为"0"
delayms(200);
}
//===================================================================================//
// 采样显示
//===================================================================================//
void ad_yq(void)
{
GODONE=0;
ADIF=0;
GODONE=1;
while(1)
if(GODONE==0) break;
dy_cj.adre=ADRESL;
dy_cj.adre=ADRESH;
o2value=dy_cj.dy;
}
而我连续采样32次就变的不正常拉啊
//===================================================================================//
// 采样AD初始化
//===================================================================================//
void adyqint(void)
{
ADON=0;
GODONE=0;
ADCON0=0x69;
//选择A/D通道为RE0,打开A/D转换器0110,1001
ADCON1=0X8A; //转换结果右移,及ADRESH寄存器的高6位为"0"
delayms(50);
}
//===================================================================================//
// 采样显示
//===================================================================================//
void read_yqad( void )
{
unsigned char loop;
for(loop=32;loop>0;loop--)
{
GODONE=0;
ADIF=0;
GODONE=1;
while(1)
if(GODONE==0) break;
dy_cj.adre=ADRESL;
dy_cj.adre=ADRESH;
acdyqval=acdyqval+dy_cj.dy;
delayms(5); //延时5ms
}
}
//===================================================================================//
// 采样显示
//===================================================================================//
void ad_yq(void)
{ read_yqad();
acdyqval=acdyqval>>5;
o2value=acdyqval;
acdyqval=0;
}
显示的o2value好像 就是一次的采样值除以32的来的.好像有31次都没有采到. AD采样数值一般是有浮动的,建议采样多次,去掉最大最小值,然后求平均显示。 问题解决···把接受32次采样值的变量定义成CHAR型拉
页:
[1]