51单片机串口发送中文字符到PC调试助手,发生乱码求指点!

时光自此有温度 2013-03-23 12:20:37
51单片机程序如下:
/***************   writer:shopping.w   ******************/
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint id=0;
uchar data table[100];
void Delay(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
void send(uchar *dis)
{
while(*dis!='\0') {
SBUF=*dis;
dis++;
while(!TI);
TI=0; //软件请发送中断
}
}
/***********************************************
串行口初始化波特率9600定时器1工作方式2
*************************************************/
void serial_init(void)
{
TMOD=0x20;//计时器1作为比特率发生器方式2
TH1=0xfd;
TL1=0xfd; //装入初值
TR1=1;//计时中断允许
SM0=0;
SM1=1;//串行口工作于方式2
ES=1;//串行口中断允许
REN=1;//接收允许
EA=1;// 总中断允许
}
void main()
{
serial_init();
Delay(100);
send("Receiving From 8051...\r\n");
while(1) ;
}

void Serial_INT() interrupt 4
{
if(RI)
{
ES=0; //关串口中断
table[id++]=SBUF;//命令存到命令数组
RI=0; //软件清除接收中断
if(table[id-1]==0x0a)
{
table[id]='\0';
id=0;
send(table); //将单片机接收完成的字符串发送回计算机
}
ES=1;//开串口中断
}
// else
// TI=0;
}

硬件接线如图:

观察串口调试助手显示是一堆乱码,然而将汉字改为英文字符或数字后显示是正常的,这说明发送部分的程序应该是没有问题的,请问如何解决?
...全文
4730 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
zatree 2015-05-13
  • 打赏
  • 举报
回复
一个汉字是两次发送的
chenweixi623 2013-12-27
  • 打赏
  • 举报
回复
楼主怎么解决的啊
  • 打赏
  • 举报
回复
问题已经解决,楼主自己解决了,感谢各位的热情回帖,送分了。
tyj_3 2013-04-15
  • 打赏
  • 举报
回复
引用 16 楼 lym11023 的回复:
引用 15 楼 tyj_3 的回复:一个汉字的长度大于一个字符长度造成的 引用 15 楼 tyj_3 的回复:一个汉字的长度大于一个字符长度造成的 如果是如此,为何有时却能完整返回数据呢?
>>能返回完全是偶然
  • 打赏
  • 举报
回复
引用 12 楼 our540453026 的回复:
太强了51能发送汉字
51为何不能发送中文字符?
  • 打赏
  • 举报
回复
引用 8 楼 xujianxiang 的回复:
应该是0a 0d吧
与此无关,兄弟可以自己试验一下
  • 打赏
  • 举报
回复
引用 15 楼 tyj_3 的回复:
一个汉字的长度大于一个字符长度造成的
引用 15 楼 tyj_3 的回复:
一个汉字的长度大于一个字符长度造成的
如果是如此,为何有时却能完整返回数据呢?
tyj_3 2013-04-10
  • 打赏
  • 举报
回复
一个汉字的长度大于一个字符长度造成的
ymm198606 2013-04-09
  • 打赏
  • 举报
回复
貌似是可以的吧;乱码可以检查下波特率、停止位等;如都没问题,可根据RS485的电气特性,测下电压
夜里行舟 2013-03-30
  • 打赏
  • 举报
回复
太强了51能发送汉字
hooeoo 2013-03-30
  • 打赏
  • 举报
回复
u010092286 2013-03-30
  • 打赏
  • 举报
回复
顶起,我也有这样的问题
gxtheone 2013-03-30
  • 打赏
  • 举报
回复
串口助手解析不出来汉字
xujianxiang 2013-03-25
  • 打赏
  • 举报
回复
应该是0a 0d吧
lin0119 2013-03-24
  • 打赏
  • 举报
回复
用十六进制显示不就能看出来是哪里出问题了吗
schlafenhamster 2013-03-24
  • 打赏
  • 举报
回复
看图,乱码在 行 头。 补发一个 0a 看看, 严格的 说 应该是 0d 0a
  • 打赏
  • 举报
回复
没有啊?这个有关系?
schlafenhamster 2013-03-24
  • 打赏
  • 举报
回复
if(table[id-1]==0x0a) { table[id]='\0'; id=0; send(table); //将单片机接收完成的字符串发送回计算机 } send(table);中有没有再补上 ‘\n' ?
dceacho 2013-03-23
  • 打赏
  • 举报
回复
....... 你发汉字过去,你让VT1,VT2怎么办呢
dceacho 2013-03-23
  • 打赏
  • 举报
回复
串口助手在WINDOWS下运行的支持汉字显示 VT1,VT2能支持汉字?
加载更多回复(1)

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧