单片机串口调试问题

#include<reg52.h>
#define uchar unsigned char
//#define uint unsigned int
unsigned char flag,a,i;
uchar code table[]="i get";

void init()
{
{

TMOD = 0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;

}

}

void main()
{
init();
while(1)
{
if(flag==1)
{
ES=0;
for(i=0;i<6;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
SBUF=a;
while(!TI);
TI=0;
ES=1;
P2=0x11;
flag=0;

}
}

}

void ser() interrupt 4
{
RI=0;
a=SBUF;
flag=1;
}
程序如上,stc89c52,晶振12m,isp版本v6.77,原本希望发出x,得到i get x,结果

返回的是A9 BA D5 D4 8A;菜鸟请教问题出在哪儿?如何改正

第1个回答  2014-08-04
首先,文本模式发送就应该文本模式接收。16进制模式发送,就应该16进制模式接收。这样发送什么显示什么。
再者,12M晶振,串口调试不合适,但是你要像上面一样试试,还是可以的。
第2个回答  2014-08-04
串口助手的显示方式改为字符(文本)形式就可以了。追问

改后是这样的

追答

返回值应该是69 20 67 65 74 61出现这种情况应该是波特率不对造成的,你改一下初始化:
void init()
{
TMOD = 0x20;

SCON = 0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1;

ES=1;
}

如果还不行的话,可能是你的晶振有问题,频率不是12M,换一个晶振试试。

追问

上面不行,但我换了俩12m晶振,都一样,应该不是晶振问题。换2400波特率,初始化
void init()
{
TMOD = 0x20;
TH1=0xf3;
TL1=0xf3;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
得到69 3A 95 74 0A和 i:晅,即第一个数据正确,之后不对。

目前手头没有11.0592的,不换晶振能解决吗。

追答

从这情况看来肯定是波特率不一致造成的结果,你的电容是多大,换成27P的试试。还有就是你换一个其他串口助手试试。

本回答被提问者采纳
第3个回答  2014-08-04
你选择文本模式发送和接收。。16进制显示的是16进制码追问

改后是这样的

追答

你这个文本现在发现显示成中文了。。另外你对应下英文内码,先看下收到的数据对不对。因为9600的波特率,实际应该用11.0592M的晶振而你用的12M的。。

相似回答
大家正在搜