描述:
本帖最后由 u012842154 于 2016-07-29 16:05:21 编辑
adc080851单片机proteus仿真
大神们好,下面是小弟仿真得 adc0808 测量输入电压后 将值用16进制数反馈给 串口调试助手,但是只有在测量+5V 和 0V得时候 反馈ff 和 00 是正确得 别的中间得值都不对(我加了个直流电压表看输入电压 再把得出得数据 * 5/256 但是值都对应不上)#include<reg51.h>
#include"hbx.h"
void initTimer0(void);
void SendOneByte(uchar c);
uchar date;
sbit add_a = P3^5;
sbit add_b = P3^6;
sbit add_c = P3^7;
sbit ale = P3^4;
sbit clo = P3^3;
sbit sta = P1^0;
sbit eoc = P1^1;
sbit oe = P3^2;
void main(void){
initTimer0();
add_a = add_b =add_c = 0;
while(1){
oe = 0;
sta = 0;
sta = 1;
sta = 0;
ale = 1;
while( eoc == 0 );
oe = 1;
date = P2;
oe = 0;
SendOneByte(date);
}
}
void initTimer0(){
TMOD = 0x22;
TH0 = 0xfb;
TL0 = 0xfb;
EA = 1;
ET0 = 1;
TR0 = 1;
SCON = 0x40;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
TR1 = 1;
}
void timer0Interrupt(void) interrupt 1{
clo =~ clo;
}
void SendOneByte(unsigned char c)
{
SBUF = c;
while(!TI);
TI = 0;
}

解决方案1:
            #include<reg51.h>
void initTimer0(void);
void SendOneByte(unsigned char c);
unsigned char date;
sbit add_a = P3^5;
sbit add_b = P3^6;
sbit add_c = P3^7;
sbit ale = P3^4;
sbit clo = P3^3;
sbit sta = P1^0;
sbit eoc = P1^1;         
sbit oe = P3^2;
 
 
void main(void){
 
	int timeout;
   initTimer0();
 
   add_a = add_b =add_c = 0;
  while(1){
   oe = 0;
 
   sta = 0;
   sta = 1;
   sta = 0;
 
   ale = 1;
 
   	timeout=0;
    while ((eoc == 0)&&(timeout++<5000));
 
    oe = 1;
    date = P2;
    oe = 0;
    SendOneByte(date);
    }
 
}
 
 
void initTimer0(){
 
    TMOD = 0x22;
    TH0 = 0xfb;
    TL0 = 0xfb;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
    SCON = 0x40;
    TH1 = 0xFD;
    TL1 = TH1;
    PCON = 0x00;
    TR1 = 1;
}
 
void timer0Interrupt(void) interrupt 1{
 
    clo =~ clo;
 
}
 
 
void SendOneByte(unsigned char c)
{
    SBUF = c;
    while(!TI);
    TI = 0;
}
            ADC0808的21脚是高位P2.7才对的,17脚接P2.0,输出是16进码,
所以对口要用16进码才看到东西的,
还有这程序没有timeout,这有机会Halt的。
while ((eoc == 0)&&(timeout++<5000));
还有其它问题的。
#include<reg51.h>
void initTimer0(void);
void SendOneByte(unsigned char c);
unsigned char date;
sbit add_a = P3^5;
sbit add_b = P3^6;
sbit add_c = P3^7;
sbit ale = P3^4;
sbit clo = P3^3;
sbit sta = P1^0;
sbit eoc = P1^1;         
sbit oe = P3^2;
 
 
void main(void){
 
   initTimer0();
 
   add_a = add_b =add_c = 0;
  while(1){
   oe = 0;
 
   sta = 0;
   sta = 1;
   sta = 0;
 
   ale = 1;
 
    
    while( eoc == 0 );
 
    oe = 1;
    date = P2;
    oe = 0;
    SendOneByte(date);
    }
 
}
 
 
void initTimer0(){
 
    TMOD = 0x22;
    TH0 = 0xfb;
    TL0 = 0xfb;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
    SCON = 0x40;
    TH1 = 0xFD;
    TL1 = TH1;
    PCON = 0x00;
    TR1 = 1;
}
 
void timer0Interrupt(void) interrupt 1{
 
    clo =~ clo;
 
}
 
 
void SendOneByte(unsigned char c)
{
    SBUF = c;
    while(!TI);
    TI = 0;
}
        

