C51编程:adc0809问题 急!
我搞过C52+AD574和C52+7135,在搞C52+ADC0809时遇到问题,请各位指教。
1)C52晶振6M,0809的时钟接C52的ALE(1M),0809的D0-D7接P0,通道选择的地址ABC接
P0.0-2。0809的START,EOC,OE,ALE分别接P1的4个引脚(见源程序) ;
2)运行后,从示波器可以看到EOC的负脉冲,0809的VERF为+5V,VERF-接地,CLOCK端也有
时钟。OE在程序控制也有正脉冲;
3)PC上接收的数据,要么采集的数据就是通道号,要么比通道号小的数,不管输入的模拟量
是多少。源程序如下,请各位高手指点,我已经困惑好久了。
#include <at89x52.h>
#define unchar unsigned char
#define unint unsigned int
sbit LedFlash = P3^7; /*LED闪烁*/
sbit ad_start =P1^0; /*AD启动 */
sbit eoc =P1^1; /* 转换结束*/
sbit oute =P1^2; /*oUT ENABLED*/
sbit ale=P1^3; /*ALE地址锁存*/
sbit pwm1=P1^4;
sbit pwm2=P1^5;
/*************************/
/*主函数 */
/*************************/
void main(void )
{
ale=0;
ad_start =1; /*0809复位*/
oute=0;
LedFlash=1;
initcomm(); /*串口初试化 */
while(1)
{
for (jj=0;jj<=7;jj++)
{ LedFlash=0;
P0=jj; /* 通道号*/
jj=jj;
ale=1; /* 上升沿0809 锁存通道号*/
jj=jj;
jj=jj;
ad_start =1; /* 0809复位 */
jj=jj;
jj=jj;
ale=0; /* */
ad_start =0; /*AD启动 */
jj=jj;
jj=jj;
jj=jj;
jj=jj;
jj=jj;
jj=jj;
jj=jj;
jj=jj;
while(eoc==0); /* 等待转换结束*/
oute=1; /*三态门打开*/
jj=jj;
temp1=P0;
LedFlash=1;
oute=0;
SBUF=jj; /* 发送通道号*/
while(TI==0) ;
TI=0;
SBUF=temp1; /*发送采集的数据*/
while(TI==0) ;
TI=0;
delay (delaytime);
}
}
}
/*主函数结束 */
发表时间:2002年11月15日19:16:00