设置一个AD采样子函数,如果连续读取每个通道,则数值正确,但是如果每个循环读取一个通道,第一个通道数值就错误。附上程序,请帮忙看下:
//PIC16F914
#include <pic.h>
#include <stdlib.h>
#define uchar unsigned char
#define uint unsigned int
uchar chn;
uint PV,LOWBATT,SYSTEM;//气压,低电压,主板温度
__CONFIG( 0X3724);
void init(void);
uint getad(uchar channel);
void main()
{
init();
while(1)
{
switch(chn)//每次取一个通道,则chn=0时,数值都不对
{
case 0:{PV=getad(0);break;}
case 1:{LOWBATT=getad(1);break;}
case 2:{SYSTEM=getad(2);break;}
}
chn++;
if(chn>=3) {chn=0;}
//如果连续去读则正确
//PV=getad(0);
//LOWBATT=getad(1);
//SYSTEM=getad(2);
delay_ms(50);
}
}
uint getad(uchar channel)
{
uint adval;
if(channel==0)//压力
{
ADCON0=0B10000001;
ADON=1;
__delay_us(121);
GODONE=1;
while(GODONE);
adval=(ADRESH<<8)+ADRESL;
}
if(channel==1)//低电压
{
ADCON0=0B10000101;
ADON=1;
__delay_us(121);
GODONE=1;
while(GODONE);
adval=(ADRESH<<8)+ADRESL;
}
if(channel==2)//系统主板温度
{
ADCON0=0B10001001;
ADON=1;
__delay_us(121);
GODONE=1;
while(GODONE);
adval=(ADRESH<<8)+ADRESL;
}
return (adval);
}
|