用串口调试助手接受和发送的不一致,怎么回事,程序没有问题
#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
}