51单片机串口通信达不到预期效果

用串口调试助手接受和发送的不一致,怎么回事,程序没有问题

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
	
void UsartInit()
{
	TMOD=0x20;
	TH1=0XF3;
	TL1=0XF3;
	PCON=0X80;
	TR1=1;
	SCON=0X50;
	ES=1;
	EA=1;
}
void main()
{
	UsartInit();
	while(1);
}
void Usart() interrupt 4
{
	uchar receiveData;
	receiveData=SBUF;
	RI=0;
	SBUF=receiveData;
	while(!TI);
	TI=0;
}

 

很早没看51了,你能确定程序没问题的话确认是不是晶振的问题,51记得要精确调节特定频率不能使用12MHZ晶振,而是使用11.0592MHZ晶振

刚好前两天也在弄这个串口问题,我的也出现过接收到和发送的不一致的情况,可以从几个方面查一下:

1、串口助手中,接收和发送的模式要一致,例如,都是文本模式、或者都是HEX模式

2、晶振问题,我只有12MHz的晶振,单片机型号是STC89C52RC,我也改过程序中的晶振频率,发送的和接收到的还是不一致,然后我换了STC15W204S(它可以不用外部晶振),同样的程序,我在下载的时候将“输入用户程序运行时的IRC频率”设置成12MHz就能正常运行

这是初始化程序

/**********************************
函数名:InitUART
参  数:无
返回值:无
功  能:初始化串口设置
**********************************/
void UartInit(void)        //9600bps@12MHz
{
    SCON  = 0x50;   //配置串口为模式1
    S2CON = 0x50;   //8位数据,可变波特率
    AUXR |= 0x04;    //定时器2时钟为Fosc,即1T
//    T2L = 0xE0;        //设定定时初值,11MHz
//    T2H = 0xFE;        //设定定时初值
    T2L = 0xC7;        //设定定时初值,12MHz
    T2H = 0xFE;        //设定定时初值
    //ES  = 1;       //使能串口中断
    AUXR |= 0x10;        //启动定时器2
}