#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;菜鸟请教问题出在哪儿?如何改正
返回值应该是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的试试。还有就是你换一个其他串口助手试试。
本回答被提问者采纳