proteus的AT89C51+ADC0809仿真出不来读取的数据,跪求大神帮忙

P1口用来将ADC0809通道0的数据用蓝红色表示出来。但是用传统的P2.7与-WR或非控制START,P1口只是低电平,没有任何变化。如果用外部开关控制START就有结... P1口用来将ADC0809通道0的数据用蓝红色表示出来。但是用传统的P2.7与-WR或非控制START,P1口只是低电平 ,没有任何变化。如果用外部开关控制START就有结果。请问是什么问题,要怎么改。
(因为0809没有仿真模型,所以用0808代的)
展开
 我来答
liuchanfeng165
2013-12-07
知道答主
回答量:30
采纳率:0%
帮助的人:8.9万
展开全部

  首先要明白NOR功能:有1则0;并且确认1和0的转变,使ST电平变化由0-1-0变化;以上如果没有问题的话,那么看看于是控制的延时是否合理,一般我是用1ms;其实自动化过程应该利用端口控制,那么可以通过位定义来控制ST的电平变化,很方便——可以参考一下我的制作,希望各自交流一下……


  

追问
电平变化没问题,变化时间也用改变延时各种试,但都出不来结果。改用P3.0控制ST的状态,也没效果。。就是用外接电源或地来控制有用。。。哭了。。。明明是按照书上画的。。MOVX @DPTR,A令--WR为0,使ST为1,这么一个小脉冲没问题吧。。是脉冲太短了吗?你的图看不清楚,只能看个大概,还能理解,就是不懂三个空白的芯片状的矩形是什么。。(新手)
追答
我觉得还是C语言简便,移植性好,拓展方便-——我建议你去看看C语言的应用——我用的ADC0809的C语言——
*#include "reg51.h"
#define uint unsigned int
#define uchar unsigned char

uchar code dispcode[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};
sbit ST = P1^0;
sbit EOC = P1^1;
sbit OE = P1^2;
sbit CLK = P1^3;

void DelayMS(uint ms)
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}

void Display_Result(uchar d)
{
P0 = 0xfb; //3wei
P2 = dispcode[d%10];
DelayMS(4);
P0 = 0xfd;
//2wei
P2 = dispcode[d%100/10];
DelayMS(4);
P0 = 0xfe;//1wei
P2 = dispcode[d/100]&0x7f;//共阳显示加小数点
P2=0x7f;
DelayMS(4);
}

void main()
{
TMOD = 0x02;
TH0 = 0x14; //
TL0 = 0x00;
IE = 0x82;
TR0 = 1;
P1 = 0x3f; //选择通道三,CBA:011;即P16=0,P15=1,P14=1,最高位为0或者1;其他端口为1
while(1)
{
ST = 0;
//DelayMS(1);
ST = 1;
//DelayMS(1);
ST = 0;
while(EOC == 0); //等待转换结束
//DelayMS(1);
OE = 1; //允许输出
//DelayMS(1);
Display_Result(P3);
OE = 0; //关闭输出
}
}

void Timer0_INT() interrupt 1
{
CLK = !CLK; //中断产生方波,周期6ms
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式