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