我这个51单片机AD转换电路错在哪里呢,怎么老是运行不起

#include<reg51.h>
#define uchar unsigned char
sbit ST=P2^0;
sbit EOC=P2^1;
sbit OE=P2^2;
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;
sbit LED4=P1^3;
sbit LED5=P1^4;
sbit LED6=P1^5;
sbit LED7=P1^6;
sbit LED8=P1^7;
uchar DATA;
uchar h1;
void delay(uchar i)
{
uchar j;
while(i--)
{
for(j=125;j>0;j--);
}
}
uchar AD(void)
{
ST=0;
delay(10);
ST=1;
delay(10);
ST=0;
while(0==EOC);
OE=1;
DATA=P0;
OE=0;
return DATA;
}

void penquan()
{
h1=AD();
delay(h1);
if(h1>30) LED1=0; else LED1=1;
if(h1>70) LED2=0; else LED2=1;
if(h1>100) LED3=0; else LED3=1;
if(h1>130) LED4=0; else LED4=1;
if(h1>160) LED5=0; else LED5=1;
if(h1>180) LED6=0; else LED6=1;
if(h1>200) LED7=0; else LED7=1;
if(h1>230) LED8=0; else LED8=1;
delay(h1);
}
void main()
{
while(1)
{
penquan();
}
}

仿真图中,用单片机的ALE输出信号,又用D触发器分频后送到ADC0809上,要是实物这种做法还可以。但是,用proteus 仿真就不行了,单片机的ALE是没有信号输出的,所以ADC电路无时钟信号。其实,仿真时,可以直接用时钟信号的,在proteus 左边工具栏中选信号源,就是S字母那个,从中选DCLOCK,就是时钟脉冲信号,放到仿真图中后与ADC0809的CLOCK连接,并把信号频率改为500K即可。把分频的D触发器都删掉,这样,仿真图就简单多了,而且也是对的。最后,顺便说一句,那程序要显示出标准的英文字母,看得清楚,别弄些乱七八糟的英文字体,显示的像鸟文,实在是看不清楚。追问

不好意思 真没想到字体。。仿真中我用的是0808,那个频率我根据网友提示也弄出来了输出500khz,我用频率计测了的。但P0口始终接收不了数据,我把软件重发一下,麻烦你帮我看看嘛。拜托了

追答

就不能把那源程序复制上来吗?为什么非要截图?你自己看看那图片上字,你能看清什么?

追问

我重新上传了问题,希望您能看一下。。。

追答

是又重新提问了吗?没有找到。

你的程序是没有问题的,我用仿真图测试了。问题还是出在那个ADC0808的时钟信号上,用ALE是不行的。还有就是IN0不能加模拟信号,要用一个电位器调试电压来测试ADC转换过程。根据你的仿真图和程序,仿真的结果如下图,可以正常出结果的。

用电脑补充回答的,用手机看不到,APP有错误啊。

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-03-23
硬件电路而言,AD电路没有问题,要说有点问题的话,你的复位电路可能会有,看你的电压在1.3V左右。这是仿真,所以我觉得如果无法仿真出结果的话,更大的可能是你的软件有问题,你仔细检查软件吧,看看时序控制上是不是写的不对,这是难免的,软件编译没有error,没有alarm了,就认为OK,那是大错特错的,这只能说明软件没有语法错误,其他的说明不了什么,真正的还是要看是否达到预期的效果。所以目前你最好的办法是查找软件的问题。

我这个51单片机AD转换电路错在哪里呢,怎么老是运行不起
但是,用proteus 仿真就不行了,单片机的ALE是没有信号输出的,所以ADC电路无时钟信号。其实,仿真时,可以直接用时钟信号的,在proteus 左边工具栏中选信号源,就是S字母那个,从中选DCLOCK,就是时钟脉冲信号,放到仿真图中后与ADC0809的CLOCK连接,并把信号频率改为500K即可。把分频的D触发器都删掉,...

51单片机AD转换不稳定
我觉得很有可能是下述原因之一:1.是不是电平有跳动的不稳定,比如输入电平抖动(干扰导致),你只是肉眼没看出来而已,所以认为它是稳定的。这个解决方法如果输入是稳定电压(直流),那就在电压之间加上个电容就完事了。2.是不是输入电压的范围超了?如果是范围超了,加个分压电路,然后在单片机程序...

51单片机和ADC0809配合时出现错误现象,求解
你把adc的CLK接单片机的ALE 试试。定时器 就 不用了。我之前遇到的问题是这样的(可能和你有点不一样):用proteus 仿真 是好的(也用的是定时器控制CLK)但是,实际线路中,开机第一次转换是好的,接下来改变电位器就没反应了。改变电位器后,再重启就又有一次好的(此时电位器的值)。下面是...

用51系列单片机做个A\/D转换器,具体该怎么做?
这需要什么接口,没有分串口并口的。而你后边补充问的那是单片机外接一个AD转换芯片,这个AD转换器就不是单片机自带的。这种芯片有串口和并口之分,但一般10位及其以上的AD芯片都是用串行接口。也有另类的,用并口连接的,那也比如说12位芯片使用并口也就是12个引脚和八位的51单片机连接,那单片机可以...

求解决一个51单片机ad转换的问题
万用表是积分型AD,通常比逐次比较型的AD稳定,解决办法是用速度换精度,软件上可以多次平均或其它数字滤波算法,硬件上可接简单低通滤波如下图所示:允许的话,可以考虑将C2两端接到 PCF8591的差分输入端

为什么51单片机中的ADC转换。没有输入电压。他也一直变动?
只要启动转换了就会有AD转换的结果,你没加AD电压,那么输出有值,说明电源电压的地不太干净,或者你的AD电路有写问题。

51单片机有外部数据存储器的时候怎么开始AD转换?
movx @dptr,A,开启AD转换会与外部数据存储器发生冲突,那是因为DPTR中的地址没有指向AD转换器的端口地址,或者AD端口地址与外部数据存储器的地址重复了。没有具体电路,真正原因不好确定。单片机可采用端口模式与AD转换器连接比较好,见下图。

普中的51单片机stc90C516RD+中的AD转换怎么用(买了一个风速传感器)_百度...
对于使用51单片机STC90C516RD+进行AD转换的问题,您可以按照以下步骤进行操作:1. 连接传感器:将风速传感器与单片机进行连接。通常,风速传感器会有两个输出引脚,其中一个是信号引脚,用于连接到单片机的ADC输入引脚。2. 配置引脚:在编程之前,您需要将相应的引脚配置为ADC输入模式。通过查阅STC90C516RD+...

51单片机采集的AD值的转换程序问题?
0~11111...1111(24位二进制);那么1V就是:6710886(十进制)。用24位值AD_data除以6710886,得到的整数部分就是0~5,即为电压的整数部分。再把刚才除得的余数,再除以10,取整数将得到0~9,即为电压的第一位小数;余数,再除以10,取整数将得到0~9,即为电压的第二位小数;……想要取多少...

51单片机PCF8591的AD转换程序在stc12c5a60s2上运行出现问题
12 系列跟90 系列指令周期不一样,理论上12系列比90系列速度快12倍,也就是说程序在90系列中12ms的延时,在12系列里运行只有1ms。这个用示波器观察下很明显。问题出在现在液晶屏的时序太快了,你把延时或者定时函数做相应的修改 就行了

相似回答