找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1547|回复: 2
收起左侧

可通过电脑串口助手发送中文姓名给单片机 求帮助

[复制链接]
ID:361831 发表于 2018-6-29 15:49 | 显示全部楼层 |阅读模式
实现功能:
1、可通过电脑串口助手发送中文姓名给单片机。
2、单片机接收到姓名后发学号给串口助手。
用c语言编程
回复

使用道具 举报

ID:361831 发表于 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);
        }
}
自己写了一段代码 不知道哪里错了
回复

使用道具 举报

ID:303383 发表于 2018-6-30 11:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表