微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 用AT89S52和ADC0809做一个模数转换的最小系统

用AT89S52和ADC0809做一个模数转换的最小系统

时间:10-02 整理:3721RD 点击:
用AT89S52和ADC0809做一个模数转换的最小系统,可是实物做完以后对0~5v进行模数转换时,在数码管上显示的结果一直再跳,不稳定,只有0v和5v是稳定不动的。但是同样的方式用proteus仿真就能非常稳定的实现模数转换。这是为什么?


#include< reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar aa,qian,bai,shi,ge;
uint temp,h;
sbit led1=P1^6;
sbit led2=P1^7;
sbit led3=P3^6;
sbit led4=P3^7;
sbit clock=P3^0;
sbit start=P3^1;
sbit eoc=P3^2;
sbit oe=P3^3;
//sbit ale=P2^4;
sbit adda=P2^5;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
};
//void display(uchar bai,uchar shi,uchar ge);
void delay(uint z);
void main()
{
    TMOD=0x20;  //设置定时器1为工作方式2
    TH1=0x216;    //216
    TL1=0x216;    //216
    EA=1;       //开总中断
    ET1=1;        //开t1中断
    TR1=1;         
    start=0;    //复位
    oe=0;         //输出
    //adda=0;
    //eoc=0;
  //  ale=0;           //关闭地址选择
    while(1)
    {
         
        start=0;
        ///delay(10);
        start=1;     //        复位
        //ale=1;           //     打开地址选择
      //  adda=0;
        ///delay(10);
     
        start=0;         //     开始转换
       // ale=0;             //      关地址
        //delay(1);     
        while(eoc==0);         //       等待eoc变为1
        //delay(1);
        oe=1;             //       打开输出
        //delay(1);
        //P1=0xff;
         
        temp=P2;             //      取p1到p3
        oe=0;             //      关输出
         
  temp=temp*50;
  temp=temp/256;
   
  qian=temp/1000;
  bai=temp%1000/100;
  shi=temp%100/10;
  ge=temp%10;
   
        P0=table[qian];
        h=0;
        led1=0;
        delay(110);
        led1=1;
        P0=table[bai];
        led2=0;
        delay(110);
        led2=1;
        P0=table[shi];
        led3=0;
        delay(110);
        led3=1;
        P0=table[ge];
        led4=0;
        delay(110);
        led4=1;
  }
}
void delay(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=1;y>0;y--);
}
void cl() interrupt 3
{
    clock=!clock;
}  
这个是程序

仿真和实物是有区别的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top