现象:三路采集引脚加不同电压,但是A/D转换数据相同,为何?程序如下:
#include <reg52.h> //51芯片管脚定义头文件
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define nop _nop_()
sbit led=P3^5;
sbit out1=P1^0;
sbit out2=P1^1;
sbit clk=P2^0;
sbit ale=P2^1;
sbit oed=P1^4;
sbit eoc=P3^2;
sbit start=P1^5;
sbit chaa =P2^2;
sbit chbb =P2^3;
sbit chcc =P2^4;
bit flag;
uchar ch1,ch2,ch3;
/**********************************************************
延时t毫秒
**********************************************************/
void delay(uint s)
{
uchar k;
while(--s)
{
for(k=0; k<125; k++);
}
}
/**********************************************************
读通道3
**********************************************************/
read_ch3(void)
{
oed=0;
P0=0xff;
start=0;
chaa=0;
chbb=1;
chcc=0;
ale=0;
start=1;
nop;
start=0;
nop;
while(eoc); //AD结束?
oed=1;
nop;
ch3=P0;
oed=0;
}
/**********************************************************
读通道2
**********************************************************/
read_ch2(void)
{
oed=0;
P0=0xff;
start=0;
chaa=0;
chbb=0;
chcc=1;
ale=0;
start=1;
nop;
start=0;
nop;
while(eoc);
oed=1;
nop;
ch2=P0;
oed=0;
}
/**********************************************************
读通道1
**********************************************************/
read_ch1(void)
{
oed=0;
P0=0xff;
start=0;
chaa=0;
chbb=0;
chcc=0;
ale=0;
start=1;
nop;
start=0;
nop;
while(eoc);
oed=1;
nop;
ch1=P0;
oed=0;
}
/**********************************************************
读3通道AD数据
**********************************************************/
read_3ch_adc(void)
{
read_ch1();
read_ch2();
read_ch3();
}
/**********************************************************
数据发送到电脑
**********************************************************/
void send_to_pc(void)
{
TI=0;
SBUF=ch1;
while(!TI);
TI=0;
SBUF=ch2;
while(!TI);
TI=0;
SBUF=ch3;
while(!TI);
TI=0;
}
/**********************************************************
主函数
**********************************************************/
void main( void)
{
uchar i,j;
i=0;j=0;
out1=0;
out2=0;
led=0;
TMOD =0X21;
TL0=0XFA;
TH0=0X00;
TH1=0XFD;
TL1=0XFD;
SCON=0X50;
IE=0X82;
TR1=1;
TR0=1;
ch1=0,ch2=0,ch3=0;
delay(1000);
led=1;
while(1)
{
if(flag==1)
{
led=0;
read_3ch_adc();
led=1;
}
send_to_pc();
delay(15);
}
}
/**********************************************************
T0中断函数
**********************************************************/
void time0(void) interrupt 1 using 1
{
uint i;
i++;
clk=!clk;
if(i==10)
{
i=0;
flag=1;
}
TL0=0XFA;
TH0=0X00;
} |