程序能采到数据,但是 得到的数据, 比如 在输入量程的三分之一处,而采集到的数据 在转换后结果的二分之一处,对应的关系不对,而且 我固定输入的时候(采的是同一电阻的电压值),转换的倒数第三位在跳,(我采集到的是六位数据),不知道 我的程序哪里有问题,请教大家。 #include "pic.h"
#define AD_SDI RA2
#define AD_SDO RA3
#define AD_CLK RA4
#define AD_CS RA5
#define uchar unsigned char
#define ulng unsigned long
ulng target;
void AD_TranData(uchar tran_data)
{
uchar i;
for(i=8;i!=0;i--)
{
if(tran_data&0x80)
AD_SDI=1;
else
AD_SDI=0;
AD_CLK=1;
tran_data<<=1;
AD_CLK=0;
}
}
void ADCmd (uchar command)
{
AD_CS=0;
AD_TranData(command);
AD_CS=1;
}
ulng ADRead(uchar address)
{
uchar i,j,sync_1;
ulng ret_value;
AD_CS=0;
AD_TranData(address);
for(i=3;i!=0;i--)
{
sync_1=SYNC;
for(j=8;j!=0;j--)
{
if(sync_1&0x80)
AD_SDI=1;
else
AD_SDI=0;
AD_CLK=1;
ret_value<<=1;
if(AD_SDO)
ret_value++;
AD_CLK=0;
}
}
AD_CS=1;
return(ret_value);
}
void main(void)
{
uchar status;
ADWrite(0x1e,0xffffff);//清除状态位,ADWrite函数未写出
ADWrite(0x74,0x100000);//允许中断
ADCmd(0xe0);//启动转换
while(RC5)//等待中断信号,低电平有效
{;}
status=ADRead(0x1e);//读状态寄存器
AdWrite(0x74,0);//禁止中断
target=AdRead(0x16);//读AIN1有效值寄存器的值
}
|