有没有大佬帮忙看一下,我写的是传感器采集信号然后通过adc0809发给串口, 在循环里发送, 结果 串口收到的数据一直不变(我要它实时显示) 有没有大佬帮忙看看啥问题
单片机源程序如下:
#include<reg52.h>
#include <stdio.h>
#include <stdlib.h>
#define uchar unsigned char
#define uint unsigned int
sbit STR=P1^0; //ad0808的端口定义
sbit OE=P1^2;
sbit EOC=P1^1;
sbit CLK=P1^3;
sbit ADDA=P3^3; //通道选择
sbit ADDB=P3^4;
sbit ADDC=P3^5;
float ad_date1,ad_date2;
uchar ad_1,ad_2;
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void uart()
{
//?????
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
TI=1;
EA=1;
ES=1;
}
void temr0() //9600bps@11.0592MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x02; //设置定时器模式
TL0 = 0xFF; //设置定时初值
TH0 = 0xFF; //设置定时重载值
TF0 = 0; //清除TF0标志
ET0=1;
TR0 = 1; //定时器0开始计时
}
void temr_o() interrupt 1
{
CLK=~CLK;
}
void ad_date()
{
ADDA=0;
ADDB=0;
ADDC=0;
STR=0;
STR=1;
delayms(1);
STR=0;
while(EOC==0)
OE=1;
ad_1=P2;
ad_date1=(float)ad_1*5.0/256.0;
delayms(10);
ADDA=0;
ADDB=0;
ADDC=1;
STR=0;
STR=1;
STR=0;
while(EOC==0)
OE=1;
ad_2=P2;
ad_date2=(float)ad_2*5.0/256.0;
}
void main()
{
uart();
temr0();
while(1)
{
ad_date();
printf("%2.2f\r",ad_date1);
delayms(100);
printf("%2.2f\n",ad_date2);
delayms(100);
}
}
|