ADC0809和89C52数据采集问题求助 要求:ADC0809和AT89C52完成数据采集,通过串口发送到PC机在电脑界面上显示出来。(PC机显示界面和接收程序用VB编写)
我先描述一下硬件电路的连接:单片机的PO口依次和74LS373的D0~D7口同时和ADC0809的D0~D7口相连。373的Q0,Q1,Q2依次和ADC0809的A,B,C端口相连。89C52的ALE端口连接373端口的G端,同时ALE端口通过分频器连接到ADC0809的CLK端口。89C52的P2.7端口和/WR经过或非门连接到ADC0809的ALE和START端口,P2.7和/RD经过或非门连接到OE端口。ADC0809的EOC端口通过非门连接到89C52的/INTO端口。剩下的89C52端口都是标准的接法,用的11.0592MHZ,ADC0809的Vref(+)和VCC连接到+5V,Vref(-)和GND连接到地。
程序如下:
/* 从ADC0809的8个通道轮流采集一次数据,采集的结果放在数组ad中.其程序如下: */
#include <absacc.h>
#include <reg51.h>
#define uchar unsigned char
#define IN0 XBYTE[0x7ff8] //设置ADC0809的通道0地址
sbit ad_busy=P3^2;//EOC状态
void ad0809(uchar idata *x)
{uchar i;
uchar xdata *ad_adr;
ad_adr=&IN0;
for(i=0;i <8;i++)//处理8个通道
{*ad_adr=0;//启动转换
i=i;//延时等待EOC变低
i=i;
while(ad_busy==0);//查询等待是否结束
x[i]=*ad_adr;//存转换结果
ad_adr++;//下一个通道
}
}
void main(void)
{unsigned char a;
static uchar idata ad[10];
ad0809(ad);//采样ADC0809通道的值
TMOD=0x20;
TL1=0xfd;TH1=0xfd;//串口初始化,设置波特率9600Kb
SCON=0xd8;PCON=0x00;//串行工作方式3,无奇偶校验位,1位停止位
TR1=1;
while(1)
{
a=ad[0];//发送0通道的采样值
SBUF=a;
while(TI==0);
TI=0;
}
}
VB端接收程序:
Private Sub Form_Load()
MSComm1.CommPort = 1 '选择COM1端口
MSComm1.Settings = "9600,N,8,1" '波特率9600,无奇偶校验,8位数据位,1位停止位
MSComm1.InBufferSize = 1024 '接受缓冲区大小位1024字节
MSComm1.InBufferCount = 0 '清接收缓冲区
MSComm1.OutBufferCount = 0 '清发送缓冲区
MSComm1.PortOpen = True '打开COM1端口
End Sub
Private Sub Receivecmd_Click()
Receivebuf = Trim(MSComm1.Input)
If Len(Receivebuf) = 0 Then
txtreceive.Text = "空"
Else
txtreceive.Text = Receivebuf
End If
End Sub
那个串口发送和接收部分的我测试过了,但是和数据采集部分结合起来,什么也收不到。希望达人能给些指导。
同时附件里面是我用VB做的接收程序和界面。