|
有沒有大佬幫忙看一下,我寫的是傳感器采集信號(hào)然后通過adc0809發(fā)給串口, 在循環(huán)里發(fā)送, 結(jié)果 串口收到的數(shù)據(jù)一直不變(我要它實(shí)時(shí)顯示) 有沒有大佬幫忙看看啥問題
單片機(jī)源程序如下:
#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位數(shù)據(jù),可變波特率
TMOD &= 0x0F; //清除定時(shí)器1模式位
TMOD |= 0x20; //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式
TL1 = 0xFD; //設(shè)定定時(shí)初值
TH1 = 0xFD; //設(shè)定定時(shí)器重裝值
ET1 = 0; //禁止定時(shí)器1中斷
TR1 = 1; //啟動(dòng)定時(shí)器1
TI=1;
EA=1;
ES=1;
}
void temr0() //9600bps@11.0592MHz
{
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TMOD |= 0x02; //設(shè)置定時(shí)器模式
TL0 = 0xFF; //設(shè)置定時(shí)初值
TH0 = 0xFF; //設(shè)置定時(shí)重載值
TF0 = 0; //清除TF0標(biāo)志
ET0=1;
TR0 = 1; //定時(shí)器0開始計(jì)時(shí)
}
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);
}
}
|
|