求助:c51单片机 ADC0804转换问题!

请高手帮忙,我写的ad转换,在rd=0到rd=1的时间感觉有些长了,我是根据pdf资料查的时间,才200ns,时间竟然到了100ms,。也就是下到单片机之后改的时间短了,... 请高手帮忙,我写的ad转换,在rd=0到rd=1的时间感觉有些长了,我是根据pdf资料查的时间,才200ns,时间竟然到了100ms,。也就是下到单片机之后改的时间短了,调整电位器,输出发光二级管不变化,而改的时间很长的时候,调整电位器,感觉输出的反应时间(调整结束后到发光二级管稳定)很长。请高手帮忙看看是哪里出了毛病?
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit adcs=P2^2;
sbit rd=P3^7;
sbit wr=P3^6;
uint a;
void delay(uint z);
void main()
{
adcs=0;
while(1)
{
wr=1;
wr=0;
wr=1;

rd=1;
rd=0;
delay(100);
rd=1;
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
展开
 我来答
大草原黄花菜
2011-10-02 · TA获得超过1587个赞
知道小有建树答主
回答量:1479
采纳率:40%
帮助的人:866万
展开全部

试试这个程序调电位器看是不是你想要的效果

#include<reg52.h>

sbit rd=P3^7;

sbit wr=P3^6;

sbit csad=P3^5;

int t;

main()

{

while(1)

{

csad=0;

rd=0;

wr=0;

wr=1;

 for(t=10000;t>0;t--);

}

}

百度网友cf286434c
2011-09-23 · TA获得超过195个赞
知道小有建树答主
回答量:163
采纳率:0%
帮助的人:89.7万
展开全部
首先确认0804 CS脚为低电平,
第二建议你在 WR=1;=0;=1之间各加一点延时,1MS即可。
第三,RD不是你控制的信号,应该是你读取判断的信号,如果采用读取判断那应该增加 whil(rd == 1);即读取RD为高时不动作,一直等到为低才继续。或者采用延时读取的方式,开始转换后即 WR 由低-高后,延时足够长时间后,直接读取数据(D0-D7)。
所有的AD转换的速度是由你给予他的时钟信号速度决定的,不能单纯看PDF,要针对自己的时钟计算出转换时间。
最后没看到你程序里有控制灯的语句。
追问
while(1)
{
wr=1;
delay(1);
wr=0;
delay(1);
wr=1;
delay(1);

rd=1;
delay(1);
rd=0;
delay(20);
while(rd==1);

delay(50);
rd=1;

}
是这样吗?我试了,发光二级管只保持,复位后才变化。但是把50改成80就好了。但是消耗的时间太长了浪费。
我这个开发板是把ad的输出接到流水灯上。
PDF资料中的0804是9引脚和4引脚接在一起,串联一个150pF电容接地。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
435117580
2011-09-23 · TA获得超过767个赞
知道小有建树答主
回答量:569
采纳率:0%
帮助的人:437万
展开全部
delay(100);就延时了100毫秒啊!!!
提示你:使用定时器去定时扫描(如100毫秒AD模块),主程序只做显示!!!!
更多追问追答
追问
那样岂不很麻烦,加重了单片机负载(如果程序很长的话)
追答
怎么会了,节拍法知道吗!!就是多任务调度,它只是定时去转换AD吗?定时100毫秒的基准时间,先是去启动装换,推出定时器中断服务,第二次中断服务,去读数据就OK
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小皮鹿J
2011-09-23
知道答主
回答量:37
采纳率:0%
帮助的人:20.1万
展开全部
当你写while(rd); 可以把前后两个的延时去掉;
更多追问追答
追问
试了,当while(rd) 还是while(rd==1)发光二级管光度不强,并且调节电位器,发光二极管没有反应。
追答
刚看了芯片手册,上说发现上次给你说错了;
CS:片选信号输入端,低电平有效,一旦CS有效,表明A/D转换器被选中,可启动工作。

WR:写信号输入,接受微机系统或其它数字系统控制芯片的启动输入端,低电平有效,当CS、 WR同时为低电平时,启动转换。

RD:读信号输入,低电平有效,当CS、RD同时为低电平时,可读取转换输出数据。

INTR:转换结束输出信号,低电平有效。输出低电平表示本次转换已完成。该信号常作为向微机系统发出的中断请求信号。
在这里可以判断INTR是否为0,为0读取数据,否则等待;while(!INTR);你的原理图上INTR引脚悬空,你只有判断时间,这个芯片转换时间在100US,
ARM9(2440) AVR 51单片机讨论群54134552
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式