各位高手帮忙解决一下,串行口老是输出同样的数据0f ef 0f ef。。。谢谢了!!!

#include <absacc.h>
#include <reg52.h>
#define uint unsigned int
#define ADCOM3 XBYTE[0X7FFC]
#define ADL3 XBYTE[0X7FFF]
#define ADH3 XBYTE[0X7FFE]
#define ADCOM4 XBYTE[0XBFFC]
#define ADL4 XBYTE[0XBFFF]
#define ADH4 XBYTE[0XBFFE]
sbit adbusy3=P3^2;
sbit adbusy4=P3^3;
sbit r=P3^7;
sbit w=P3^6;
sbit c0=P2^7;
sbit conv=P0^1;
sbit a0=P0^0;
uint result3,result4,ad;
int i;
char ad1;
uint read3(void) /*读取U3即AD1674的转换值*/
{
w=0;
r=0;
c0=0;
conv=0;
a0=0;
ADCOM3=0;

while(adbusy3==1);
return((uint)(ADH3<<4)+(ADL3&0X0F));
//return(0xbbaa);
//c0=1;
}
uint read4(void) /*读取U4即AD1674的转换值*/
{
ADCOM4=0;
while(adbusy4==1);
return((uint)(ADH4<<4)+(ADL4&0X0F));
}
void adtxd(tx_data) /*串行口输出程序*/
{
ad=tx_data;
SCON= 0x40; /*串口方式1*/
PCON=0; /*SMOD=0*/
/*REN=1; /*允许接收*/
TMOD=0X20;
TH1=0XE6;
TL1=0XE6;
TR1=1; /*高八位*/
ad1=ad/256;
SBUF=ad1;
while(!TI);TI=0;
SBUF=ad%256; /*低八位*/
while(!TI);TI=0; /*等待发送完毕 */
}
void timer0(void)interrupt 1 using 1
{
i++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(i==1)
{
result3=read3();
//result3=0xbbaa;
adtxd(result3);
}
// if(i==2)
//{
//i=0;
//result4=read4();
//adtxd(result4);
//}
}
main()
{
i=0;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
do{}while(1);
}

输入的模拟信号约5V,经过AD1674转换后,输入单片机,单片机经串行口出入计算机。结果通过串行口助手,接收到的数据一直是0F EF 0F EF.....求高手帮忙解决一下问题!

第1个回答  2011-08-27
单片机 跟 串口 需要232 芯片来转换电平吧追问

有232芯片的,而且接线应该是没错误的,参考过很多资料了。目前发现的两个问题,一时ad1674发热比较严重,二是ad转换结束的标志sts没有自动置零,所以,我采用延时程序来读取的数据。结果读出来后一直是0f ef,可是输入信号很小,只有0.5v,放大5/3倍,应该不是0f ef的才对啊

本回答被提问者采纳
相似回答