标题:
STC51单片机为啥向PC发送汉字会出现乱码?
[打印本页]
作者:
baiyun1234
时间:
2019-9-10 16:45
标题:
STC51单片机为啥向PC发送汉字会出现乱码?
程序:(这是网上下载的,刚开始我的程序也这样,排查不出来原因,直接在网上下载了一个,还是这样,求大神指点。_下面还有串口接收的信息。)
//#include <reg52.h>
#include <stdio.h>
#include <stc89.h>
#define uint unsigned int
#define uchar unsigned char
//毫秒级延时函数定义
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
//串口初始化
void UARTInit()
{
SM0 = 0; SM1 = 1;//串口工作方式1,8位UART波特率可变
TR1 = 1;//启动定时器1
TMOD = 0x20;//定时器1,工作模式2 8位自动重装
TH1 = 0xfd;
TL1 = 0xfd;//设置比特率9600
}
void main()
{
UARTInit(); //串口初始化
while(1)
{
TI = 1;//发送请求标志位
puts("大家好!欢迎学习单片机");//发送的汉字
while(!TI);//判断是否发送完成 发送完成出循环
TI = 0;
delay(1000);//延迟1秒
}
}
串口接收内容:
大家好!欢?暗テ?
大家好!欢迎学习单片??
大家好!欢迎学习单片机
大家好!欢迎学习单片机
大家?茫』队暗テ?机
作者:
没有你
时间:
2019-9-10 17:04
你这个函数时无法打印汉字的,需要自己搞个printf函数,我这里有参考的程序
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
/**********************************************
名称:Uart_write
功能:串口发送函数
参数:*pBuf--> 待发送数据指针 len-->数据长度
返回:void
**********************************************/
void Uart_write(uint8 *pBuf,int ulLen)
{
int i;
for(i = 0; i < ulLen; i++)
{
SBUF=*pBuf; //数据加载到发送缓冲区
while(!TI); //等待发送完成
TI=0; //发送标志清零
pBuf++; //数据指针指向下一组数据
}
}
/*********************************************
名称:printfs
功能:类似printf串口打印函数(采用数组缓存数据)
参数:fmt-->不定参数标志位。如%d,%s等
返回:发送数据长度
注意:在IAR平台正常使用;
但在keil平台,如果输出为以下类型,需要改为动,否则数据不正常。
显示long类型 %d ===> %ld
显示char类型 %d ===> %bd
*********************************************/
int printfs(char*fmt,...)
{
char pBuf[50];
int ulen;
va_list ap;
va_start(ap, fmt);
ulen = vsprintf(pBuf, fmt, ap);
va_end(ap);
Uart_write((uint8*)pBuf, ulen);
return ulen;
}
然后初始化串口后,直接调用printfs函数:比如printfs("大家好!\r\n");
作者:
wzl-mcu
时间:
2019-9-10 17:16
51单片机串口发送应该要用到sbuf吧
作者:
tyrl800
时间:
2019-9-10 18:07
程序没错,估计是硬件,比如晶振不对,地线没接好的原因吧
作者:
baiyun1234
时间:
2019-9-11 08:33
恩,谢谢大家,已经解决,给大家分享下原因,我使用keil_5,补丁了一个“keil+汉字+FD补丁”,就OK啦。
1.谢谢1楼的帮助。
2.二楼说的SBUF,我也使用过,是PC或者上位机发送指令字节,printf & puts我是发送汉字,都可以使用,自己习惯,但是使用printf & puts得需要#include <stdio.h>。
作者:
yzwzfyz
时间:
2019-9-11 22:22
发送函数是引用它人的,未知道应用时是有限制条件的。
作者:
通过但收购
时间:
2020-5-25 15:21
用了楼主的程序,发现在我这是可行的。
网上找到的其他的一些程序在我这会显示部分乱码或者多出一些字。还没找到问题所在。
学习了。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1