单片机:STC89C52RC
模数转换:ADC0832CCN
本人第一次使用模数转换,自己做了一个最小系统,CH0单通道工作,数码管显示,可是在使用过程中数码管一直显示0;不清楚什么原因,测量ADC0832CCN电压状态全部正常,怀疑是ADC0832CCN初始化不正常或数据转换有问题,希望使用过的前辈帮帮忙!!指点一下;
还想请教一下,看模数或数模转换芯片的DATASHEET时除了看时序图外,还需要看那个部分,那部分对芯片初始话有影响!是否需要一定的延时处理!
部分代码:
unsigned char A_D()
{
unsigned char i;
unsigned char dat=0;
DI=1;
_nop_();
CLK=0;
_nop_();
CS=0;//片选有效
CLK=0;//时钟初始化
_nop_();
DI=1;//起始位
_nop_();
CLK=1;//时钟1上升沿
CLK=0;//时钟1下降沿
_nop_();
DI=1;//单通道选择 CH0
_nop_();
CLK=1;//时钟2上升沿
CLK=0;//时钟2下降沿
_nop_();
DI=0;//单通道选择 CH0
_nop_();
CLK=1;//时钟3上升沿
CLK=0;//时钟3下降沿
_nop_();
DI=1;
CLK=1;//时钟4上升沿
for(i=0;i<8;i++) //处理读入8位数据
{
CLK=0;
_nop_();
dat=(dat<<1)|DO;
_nop_();
CLK=1;
}
CS=1;//片选无效
return(dat); //返回转换值
}
主函数:
main(void)
{
float AD_val; //储存A/D转换后的值
unsigned int x[3];
while(1)
{
AD_val=A_D(); //进行A/D转换
x[0]=(int)(AD_val*(5/256))%10;
x[1]=(int)((AD_val*(5/256))*10)%10;
x[2]=(int)((AD_val*(5/256))*100)%10;
P2=DSY_CODE[x[0]];
P3=DSY_CODE[x[1]];
P0=DSY_CODE[x[2]];
}
}
|