PIC16F616的AD转换后结果不对啊?????

2020-02-08 09:10发布

本帖最后由 hmg6681 于 2012-6-16 15:37 编辑

程序:

uint vAD_get()
{
         uint ADval;
         uint ADvalf;
         asm("clrwdt");
       
         C1ON=0;
         TRISA2=1;  //定义RA0、RA2为输入
         ANS2=1;        //定义RA0、RA2为模拟输入口
         ADRESL=0;
         ADRESH=0;
         ADCON1=0x40;        //选择AD采样频率Fosc/4
         ADCON0=0x89;        //右对齐、参考电压=VDD、模拟通道AN2、使能AD采样
           delay(20,12);    //延时210us
         GO=1;                //启动AD
         while(GO);                //等待ADGO位0,表示转换已经完成
         /////////ADRESH=ADRESH;
         //////////ADRESL=ADRESL;
         ADval=ADRESH;        //读出高两位
         ADval=(ADval<<8)|ADRESL;   //把高两位和低八位合成一个数据
       
         ADvalf=(ADval/1023)*5*11;   //转化为实际值
         ADval=ADvalf*1000;         //取三位小数,电压单位由V变为mV
        return(ADval);
       
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
yklstudent
1楼-- · 2020-02-08 14:06
看着没什么问题 感觉是结果误差大吧
epwwm
2楼-- · 2020-02-08 15:02
基准电压稳定不?
hmg6681
3楼-- · 2020-02-08 15:48
基准电压是稳定的,我也觉得没什么问题,但是单片机输出的数值就是不对啊。。。。。
hmg6681
4楼-- · 2020-02-08 17:21
 精彩回答 2  元偷偷看……
gaolf_2012
5楼-- · 2020-02-08 18:01
10bitad,55<64,改成这样吧,估计能成,ADvalf=(ADval*5*11/1023)
BG4RFF
6楼-- · 2020-02-08 19:25
  ADval=ADval*54; 估计行
或者
  ADval=ADval*53+ADval*7/10

一周热门 更多>