请教一下大家一个8位单片机采样,我用的单片机是12位AD,现在对AD采样,采样处理后转换出来的温度要精确到小数点后一位即转换出来是AA.X, AA.X是处理好后看到的十进制温度值。因为12位AD中是分两个寄存器存放的,一个存放8位AD值,另一个存放4位AD值,现在我把8位AD值采样32次求得平均值用作AA,即整数部分显示,把另外4位用作.X显示,问题出来了,那4位转换成10进制数后跳动很很厉害,一时间显示个“0”,又一舜间显示个“9”或8 或其它数,请问大家有没有什么好的方法处理一下这个4位AD?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
- unsigned int getad(void) {
- unsigned int adres_ad0 = 0;
- ADON = 1; //使能AD
- NOP();
- NOP();
- NOP(); //采样电容充电
- ADGO = 1; //开启AD
- while (ADGO); //等待AD转换完成
- adres_ad0 = ADRESH; //00000000 00001111 12位AD的高4位存到adres_ad0
- adres_ad0 = adres_ad0 << 8 | ADRESL; //取完整的12位结果
- ADON = 0;//关AD
- return (adres_ad0);//返回12位AD值
- }
复制代码LZ取AD值有问题,要完整取出12位。
如果抖动厉害的话,可以加上软件滤波,如限幅平均值法
一周热门 更多>