如题,一个数据采集系统中的AD部分,仿真时,AD没有反映,还请大虾们帮忙看看程序哪里出了问题。
硬件部分连接比较简单, CS接P3.5; CLK接P3.7; DIN接P3.4; DOUT接P3.3;
驱动程序为: uint ad_read() {uchar i,ADHigh,ADLow; uint adResult; CS=1; CLK=0; DIN=0; DOUT=0; adResult=0; ADHigh=0; ADLow=0; CS=0; for(i=0;i<=11;i++) /*12位输入控制字,取0通道,12位输出,故均为0*/ {DIN=0; CLK=1; CLK=0; } CS=1; Delay(); /*延时,转换时间*/ CS=0; for(i=0;i<4;i++) /*输出高4位*/ { CLK=1; ADHigh=DOUT; ADHigh<<=1; if(DOUT) ADHigh|=0x01; CLK=0; } for(i=0;i<8;i++) /*输出低8位*/ {CLK=1; ADLow=DOUT; ADLow<<=1; if(DOUT) ADLow|=0x01; CLK=0; } CS=1; adResult=(uint)ADHigh; /*合成16位的转换结果*/ adResult<<=8; adResult|=ADLow; return(adResult); }
|