当前位置: 代码迷 >> 单片机 >> 51单片机串口发送中文字符到PC调试助手,产生乱码求指点
  详细解决方案

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

热度:53   发布时间:2016-04-28 15:03:55.0
51单片机串口发送中文字符到PC调试助手,发生乱码求指点!
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;
}

硬件接线如图:

观察串口调试助手显示是一堆乱码,然而将汉字改为英文字符或数字后显示是正常的,这说明发送部分的程序应该是没有问题的,请问如何解决?
------解决方案--------------------
.......
你发汉字过去,你让VT1,VT2怎么办呢
------解决方案--------------------
串口助手在WINDOWS下运行的支持汉字显示
VT1,VT2能支持汉字?
------解决方案--------------------
     if(table[id-1]==0x0a) 
      {
          table[id]='\0';
        id=0; 
        send(table); //将单片机接收完成的字符串发送回计算机
      }           
send(table);中有没有再补上 ‘\n' ?
------解决方案--------------------
看图,乱码在 行 头。
补发一个 0a 看看,
严格的 说 应该是 0d 0a
------解决方案--------------------
用十六进制显示不就能看出来是哪里出问题了吗
------解决方案--------------------
应该是0a 0d吧
------解决方案--------------------
串口助手解析不出来汉字
------解决方案--------------------
顶起,我也有这样的问题
------解决方案--------------------

------解决方案--------------------
太强了51能发送汉字
------解决方案--------------------
貌似是可以的吧;乱码可以检查下波特率、停止位等;如都没问题,可根据RS485的电气特性,测下电压
------解决方案--------------------
一个汉字的长度大于一个字符长度造成的
------解决方案--------------------
引用:
引用:一个汉字的长度大于一个字符长度造成的

引用:一个汉字的长度大于一个字符长度造成的
如果是如此,为何有时却能完整返回数据呢?


>>能返回完全是偶然
  相关解决方案