大虾好,我想通过 52单片机 AD0809 对两路电压输入进行AD转换,然后再通过串口 RS232 传到PC机,求C语言。

如题所述

#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
uint data Date;
/***************************************/
/* 延时子程序 */
/***************************************/
void delay1(uint i) //delay
{
while(i--)
{}
}
/*****************主函数*******************/
void main(void)
{
while(1)
{
delay1(1);
ST=0;
OE=0;
ST=1;
ST=0;
while(EOC==0);

OE=1;
Date=P1;
OE=0;
display();
}
}
上面是0809的程序

#include "reg51.h"
unsigned char UART_RX; //定义串口接收数据变量
unsigned char RX_flag; //定义穿行接收标记
/*备 注:振荡晶体为12MHz,PC串口端设置 [ 4800,8,无,1,无 ]*/
/******************************************************************************************

****/
void UART_init (void)
{
EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
ES = 1; //允许UART串口的中断
TMOD = 0x20; //定时器T/C1工作方式2
SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
TH1 = 0xF3; //定时器初值高8位设置
TL1 = 0xF3; //定时器初值低8位设置
PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400)
TR1 = 1; //定时器启动
}
/******************************************************************************************

****/
void UART_T (unsigned char UART_data)
{
ES=0;
SBUF = UART_data;
while(TI == 0);
TI = 0;
ES=1;
}
/******************************************************************************************

****/
void UART_S(unsigned char *str)
{
while(1)
{
if(*str=='\0')
break;
UART_T(*str++);
}
}
/******************************************************************************************

****/
void main()
{
unsigned char Buf_data[]={"welcome to MCU world.\n\r"};
UART_init();
while(1)
{
UART_S(Buf_data);
}
}
这个是实现串口发送到PC
你组和一下就可以了,希望对你有帮组,记得给我加点分啊!追问

大虾哥哥呀,这个程序好像不能实现两路AD转换呀??我还想问,为什么0809程序和串口的是分开的?我自己不会组合呢!!希望你能帮帮我,无尽感激呀!!!还有,0809程序里display()这个函数哪里来的?

追答

display()是我用数码管的显示子程序,忘了去掉。要两路转换的话用单片机的I/O口来控制0809的选择通道口,我这个是直接接到000上去所以是选择了一通道。还有哪个0809的时钟口记得接到51单片机的30口(ALE)啊!我就没时间帮你组合了,你会单片机的程序运行就知道怎样组合了。或有时间再帮你吧

追问

你好,请问你能把display()是我用数码管的显示子程序也发给我吗?谢谢....

追答

/********************静态数码管显示*******************/
void Display(void)
{
uchar L;
dis_buff[0]=temp/1000;
dis_buff[1]=(temp%1000)/100;
dis_buff[2]=(temp%100)/10;
dis_buff[3]=temp%10;
for(L=0;L<4;L++)
{
GET_OUT=tab[dis_buff[L]];
switch(L)
{
case 0: IN0=0;break;
case 1: IN1=0;break;
case 2: IN2=0;break;
case 3: IN3=0;break;
default: break;
}
if (L==2)
{
dot=0;
} //小数点显示
Delay(4);
IN0=1;
IN1=1;
IN2=1;
IN3=1;
}
}四位数码管的显示程序,没定义的你再自己定了

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答