单片机返回汉字乱码

2019-07-16 05:55发布

本帖最后由 zcfirst 于 2012-5-1 19:29 编辑

我想做一个单片机接受pc指令并返回特定内容的程序,下面的程序是我弄的,预期是单片机返回“命令确认”四个字,但是用串口调试助手收到的确是8个问号,把汉字改成英语单词就能正常显示,但是问什么不能显示汉字啊,求大神指导
#include <AT89X52.H>                                        //包含头文件

unsigned char date[];
unsigned char recFlag;                                        //接收数据标识,0 未接收数据 1 接收数据
unsigned char back[2][20]={"命令确认","命令接收"};
unsigned int i;
void init_serial();                                                //声明初始化函数
void send(unsigned char i,unsigned char j);                                                        //声明发送函数(MCU->PC)
void receive();                                                        //声明接收函数(PC->MCU)
void delay(unsigned int i);
main()
{
    unsigned char j;
        init_serial();                                                //串口初始化
        IE=0;                                                                 //屏蔽中断
    while(1)
        {
                receive();                                                //调用两个函数实现收发扫描
                for(j=0;j<20;j++)
                {
              send(0,j);
                  delay(600);
                }
        }
}
void init_serial()                                            //初始化串口
{
        TMOD=0x20;                                                    //定时器T1使用工作方式2
        TH1=0xfd;                                                     //设置初值
        TH0=0xfd;
        TR1=1;                                                      //开始计时
        PCON=0x00;                                                     //SMOD=0;
        SCON=0x50;                                                     //工作方式1,波特率9600bit/s,允许接收
        ti=1;
        EA=1;
}
void send(unsigned char i,unsigned char j)                                                               
{
        if(TI==1)                                                     //检测输出是否READY
        {
                if(recFlag==1)                                     //是否接收过数据
                {
                        SBUF=back[j];                          //发送数据
                        if(j==19)
                        {
                          recFlag=0;
                        }
                    TI=0;
                }
        }
}

void receive()
{
        if(RI==1)                                                    //检测是否有数据接收
        {
                date=SBUF;                                              //接收数据
                recFlag=1;                                     //设置接收标识符
                RI=0;                                                        //清除标志位
        }
}
void delay(unsigned int i)
{
   while(i--);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。