uchar adc0804( void ) //读AD0804子程序
{
unsigned char addata,i;
ADC_RD =1;
ADC_WR =1;
ADC_INIT =1; //读ADC0804 前准备
P0=0xff; //P0全部置一准备
ADC_CS =0;
ADC_WR =0;
ADC_WR =1; //启动ADC0804开始测电压
while(ADC_INIT==1); //查询等待A/D转换完毕产生的INT(低电平有效)信号
ADC_RD=0; //开始读转换后数据
// i=i;
// i="i"; //无意义语句,用于延时等待ADC0804 读数完毕
delay_us(50);
addata=P0; //读出的数据赋与addate
ADC_RD=1;
ADC_CS=1; //读数完毕
return(addata); //返回最后读出的数据
}
uint datpro(void) //ADC0804 读出的数据处理
{
unsigned char x;
unsigned int dianyah,dianyal; //用于存储读出数据的高字节和低字节
unsigned int dianya="0"; //存储最后处理完的结果 注意数据类型
for(x=0;x<10;x++) //将 10次测得的结果存储在dianya中
{
dianya=adc0804()+dianya;
}
dianya=dianya/10; //求平均值
dianyah=dianya&0xf0; //屏蔽低四位
dianyah=dianyah>>4; //右移四位 取出高四位
dianyal=dianya&0x0f; //屏蔽高四位 取出低四位
dianya=dianyal*20+dianyah*320; //最后的结果是一个四位数,便于显示
return(dianya); //返回最后处理结果
}
void mian()
{
ADCdata=datpro() ;
}
问题:datpro() 10次累加会不会读取到的 addata 值是同一个???
还是在for循环里面,x加1后就会跳出去进行一次adc0804( void )运行算 取实时检测到的电压addata 值,再进行dianya=adc0804()+dianya;???
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2.for循环里每次循环都执行一次读adc0804()和累加运算。直到x=10才跳出for循环。
addata是adc0804()返回的数值,如果电压稳定,而电压的纹波,干扰等在adc0804转换中不会体现的话,是有可能是相同的值,但这也只是表示做了10次转换,而每次转换的数值都相同而已。
另外,在程序里,个人觉得unsigned int dianya="0";这句没明白,因为如果是赋值0的话,应该是unsigned int dianya=0;就可以了,这里adc0804转换的应该是二进制数据,dianya是存储累加计算的结果,如果有了不为0的初始值,那么最后的累加结果也就不对了。
多谢指点,你知道这句dianya=dianyal*20+dianyah*320; 这个20 320是怎么来的??
一周热门 更多>