标题: 可通过电脑串口助手发送中文姓名给单片机 求帮助 [打印本页]

作者: czeyg    时间: 2018-6-29 15:49
标题: 可通过电脑串口助手发送中文姓名给单片机 求帮助
实现功能:
1、可通过电脑串口助手发送中文姓名给单片机。
2、单片机接收到姓名后发学号给串口助手。
用c语言编程

作者: czeyg    时间: 2018-6-29 19:55
#include<reg52.h>                
#include<string.h>                       

typedef unsigned char uchar;

void SendOne(uchar);
void SendStr(uchar *ptr);

uchar name[]="刘小明";//匹配姓名
uchar number[]="16990332";//匹配学号
uchar Re=0;//记录接受字符数
uchar receivesbuf[10];//接受的字符串

void main()
{
    uchar i=0;
    TMOD = 0x20;    //定时器1,模式2工作模式          
    SCON = 0x50;    //串口工作模式1,允许REN   /* SCON: 模式 1,  8-bit UART, 使能接收         */
    TH1 =  0xFD;               
    TL1 = TH1;                //波特率9600
    PCON = 0x00;         //波特率不倍增
        EA = 1;//允许中断
    ES = 1;//允许串行口中断
    TR1 = 1;    //启动定时器1
        while(name[i]!='\0')//发送姓名给单片机
        {
          SendOne(name[i++]);
        }
    while(1)
        {
           if((strcmp(name,receivesbuf)==0))  //判断字符串是否相等
              {
                 SendStr(number);
                 for(i=0;receivesbuf[i]!='\0';i++)          //接收清0
                 {
                    receivesbuf[i]=0;
                 }
               Re=0;
                          }
        }
}

void UART_ISR(void) interrupt 4
{
    if(RI)
    {
           if(Re<10)
           receivesbuf[Re++]=SBUF;
       RI = 0;        //清除接受中断标志位
    }
   else
     TI = 0;                //串口发中断是发送完缓冲区数据之后产生
}

void SendOne(uchar c)
{
    ES = 0;                        //禁止中断
    SBUF = c;
    while(!TI);                //等待发送完毕
    TI = 0;                        //清TI中断
    ES = 1;                        //打开中断
}

void SendStr(uchar *ptr)
{
   
        for(;*ptr!='\0';ptr++)
        {
           SendOne(*ptr);
        }
}
自己写了一段代码 不知道哪里错了
作者: 小猫猫爱吃鱼    时间: 2018-6-30 11:33
有个关键问题, 有的串口助手,不支持中文发送




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1