微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > 电源设计讨论 > ADC0809转换错误

ADC0809转换错误

时间:10-02 整理:3721RD 点击:

用51单片机  想在AD0809转换后用LCD1602显示出来  AD输出接P3口 ST与ALE接p1.2 OE接p1.0 EOC接p1.1 CLK接p1.3  ADDA B C分别接1.4 1.5 1.6 用IN3口输入电压   LCD接P0口  还没有接电压显示屏上就一直跳数   这是什么原因 程序应该怎么改啊   LCD程序是对的  主函数里注释了AD()输出正常    大神们救我啊
#include<reg51.h>        
#include"lcd.h"
#include<math.h>
unsigned char table1[]=" The voltage is: ";
unsigned char getdata;
sbit OE  = P1^0;                                
sbit EOC = P1^1;                           
sbit ST  = P1^2;                                
sbit CLK = P1^3;
unsigned int temp;
void TimeInit()
{
    TMOD = 0x02;
         TH0  =  216;
        TL0  =  216;
         IE   = 0x82;
         TR0  = 1;
         P1   = 0x3f;
}

void AD(void)
{
    ST = 0;
        ST = 1;
        ST = 0;
        OE = 0;
        Lcd1602_Delay1ms(1);
        while(EOC==0);
        OE = 1;
        getdata = P3;                                                
        OE = 0;
}
void main()
{        
        unsigned char k,bai,shi,ge;
        unsigned int i;
           LcdInit();
        TimeInit();
        while(1)
        {
           AD();
           LcdWriteCom(0x80);
           for(i=0;i<16;i++)
           {
               LcdWriteData(table1);
           }
           temp = getdata*1.0/255*500;
           bai=temp/100;
           shi=temp%100/10;
           ge=temp%10;
           LcdWriteCom(0x80+0x40+6);
           LcdWriteData(bai+0x30);
           LcdWriteData(0x2e);
           LcdWriteData(shi+0x30);
           LcdWriteData(ge+0x30);
           LcdWriteData('V');
           Lcd1602_Delay1ms(50);
        }
}
void Timer0_INT() interrupt 1
{
         CLK = !CLK;
}

AD输入浮空跳数很正常啊。
建议你先接地看看采集是否正常,然后程序里面操作最好加一点延时。

原来接地线没接上地0.0  不过我用电源给个电压示数偏差好大

不要用电源给,用校准过的DAC给。

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

网站地图

Top