单片机与电脑串口通信显示乱码的问题解决方法
用 51 开发板,测试串口通信程序时,在串口通信助手,返回的字符显示乱码,如以下
程序,如果用红色标注的部分,串口通信的内容就会显示乱码,主要原因是开发板用的 12M
的晶振,12M 的晶振在波特率为 9600 比特的情况先,通信就会显示乱码,4800 比特,并且
波特率加倍就不会显示乱码,本人实践得出的结论,以下程序可以下载下来试试:
#include <reg52.h>
void ConfigUART(unsigned int baud);
void main ()
{
ConfigUART(9600); //配置波特率为 9600
while(1);
}
void ConfigUART(unsigned int baud) //串口配置函数,baud 为波特率
{ /*
SCON = 0x50; //配置串口为模式 1
TMOD &= 0x0F; //清零 T1 的控制位
TMOD |= 0x20; //配置 T1 为模式 2
TH1 = 256 - (12000000/12/32) / baud; //计算 T1 重载值 FD
TL1 = TH1; //初值等于重载值
ET1 = 0; //禁止 T1 中断
TR1 = 1; //启动 T1
ES = 1; //打开串口中断
EA = 1; //打开总中断
*/
SCON=0X50; //设置串口为工作方式 1
TMOD|=0X20; //设置计数器 T1 工作方式 2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,晶振12M,注意波特率是 4800 的
TL1=0XF3;
ES=1;
EA=1;
TR1=1;
}
void InterruptUART() interrupt 4
{
if (RI) //接收到字节
//打开接收中断
//打开总中断
//打开计数器