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;
}
硬件接线如图:

观察串口调试助手显示是一堆乱码,然而将汉字改为英文字符或数字后显示是正常的,这说明发送部分的程序应该是没有问题的,请问如何解决?
c 工作
------解决方案--------------------
.......
你发汉字过去,你让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的电气特性,测下电压
------解决方案--------------------
一个汉字的长度大于一个字符长度造成的
------解决方案--------------------
>>能返回完全是偶然