本帖最后由 hero245 于 2009-12-15 15:55 编辑
#include<STC12C5410AD.H>
#include <INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
float bdre_tmp;
float pv;
uint bdre;
uchar bdreh,bdrel;
uint cy=620;//假如对3V采样为 620 10位AD转换
void main()
{
pv=3072/cy; //pv=4.9548...,电源参考电压pv(float),3*1024/cy
bdre_tmp=1.5/pv*1024; //求1.5V时的采样值(float) ,理念计算值为bdre_tmp=1.5/4.9548....*1024=310=0x136=0B00000001 00110110
bdre=bdre_tmp; //bdre是uint
bdreh=(uchar)(bdre>>8); //bdre高位
bdrel=(uchar)(bdre); //bdre低位
P1=bdreh; //高位送到P1口
P2=bdrel; //低位送到P2口
}
这个程序主要是标定AD转换的电源参考值,通过对基准的3V采样后,再求出1.5V时,相对与参考电源的采样值:bdre,想从P1口和P2口读出bdre的值,但我从keil仿真看到的是0x0180,不是理论0x136.不知问题出在哪里。是不是程序有问题?还是我对float的运算理解有误。请各位高手指点一下。
|