永发信息网

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

答案:1  悬赏:80  手机版
解决时间 2021-11-08 07:41
  • 提问者网友:沉默菋噵
  • 2021-11-07 17:21
proteus的AT89C51+ADC0809仿真出不来读取的数据,跪求大神帮忙
最佳答案
  • 五星知识达人网友:迷人又混蛋
  • 2021-11-07 18:16
首先要明白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
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯