关于for循环里面涉及到读取值的问题

2019-07-15 09:40发布

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;???
         


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
wulinwl
1楼-- · 2019-07-15 16:03
1.如果被测电压极其稳定,可能10次读取的是同一个值,但事实是不可能的。
2.for循环里每次循环都执行一次读adc0804()和累加运算。直到x=10才跳出for循环。
人中狼
2楼-- · 2019-07-15 21:22
你后面的理解是对的,adc0804()是个函数,每次调用的时候都会执行一次这个函数,在这个程序里,循环10次,就会调用10次这个函数。
addata是adc0804()返回的数值,如果电压稳定,而电压的纹波,干扰等在adc0804转换中不会体现的话,是有可能是相同的值,但这也只是表示做了10次转换,而每次转换的数值都相同而已。
另外,在程序里,个人觉得unsigned int dianya="0";这句没明白,因为如果是赋值0的话,应该是unsigned int dianya=0;就可以了,这里adc0804转换的应该是二进制数据,dianya是存储累加计算的结果,如果有了不为0的初始值,那么最后的累加结果也就不对了。
寒758264068
3楼-- · 2019-07-16 01:15
人中狼 发表于 2017-9-14 09:41
你后面的理解是对的,adc0804()是个函数,每次调用的时候都会执行一次这个函数,在这个程序里,循环10次,就会调用10次这个函数。
addata是adc0804()返回的数值,如果电压稳定,而电压的纹波,干扰等在adc0804转换中不会体现的话,是有可能是相同的值,但这也只是表示做了10次转换,而每次转换的数值都相同而已。
另外,在 ...

多谢指点,你知道这句dianya=dianyal*20+dianyah*320; 这个20   320是怎么来的??
寒758264068
4楼-- · 2019-07-16 06:14
 精彩回答 2  元偷偷看……

一周热门 更多>