关于51单片机AD转换初级问题

自己调试AD转换的时候老是复位才能显示转换数据
求帮看问题,下面是图片个代码。
//主函数中的循环显示
while(1)
{
startad();
adadval();
display();
}
//启动AD转换,为了解决这个问题我每次在循环显示的始终都关闭并在打开AD,但是事实证明这样也解决不了
void startad()
{
csad=1;
delayms(5);
csad=0;
wr=1;
_nop_();
wr=0;
_nop_();
wr=1;
delayms(20);//延时从段到长调到20ms也不行
}
//读取ad的值
void adadval()
{
rd=1;
_nop_();
rd=0;
_nop_();
advl=P1;
rd=1;

}
//显示函数
void display()
{
bai=advl/100;
shi=advl/10%10;
ge=advl%100%10;
write_com(0x80+0x40);
write_date(0x30+bai);
write_date(0x30+shi);
write_date(0x30+ge);
}

#define ad0_7 P0 //AD数据口
sbit cs=P1^0; //芯片选择信号,控制芯片的启动和结果读取,低电平有效
sbit rd=P1^1; //读数据控制,低电平有效
sbit wr=P1^2; //AD转换起动控制,上升沿有效
sbit intr=P1^3; //AD转换结束输出低电平

void start_ad(void)
{ cs=0; //允许进行A/D转换
wr=0;_nop_();wr=1; //WR由低变高时,AD开始转换
while(intr); //查询转换结束产生INTR 信号(低电平有效)
cs=1; //停止AD转换
}
//读A/D数据子程序///////////////////////////////////////
read_ad()
{ uint ad_data;
ad0_7=0xff;
cs=0; //允许读
rd=0; //读取转换数据结果数据结果
_nop_();
ad_data=ad0_7; //把数据存到ad_data中
rd=1;cs=1; //停止A/D读取
return(ad_data);
}
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答