找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1731|回复: 4
收起左侧

单片机串口通讯中的字符

[复制链接]
ID:717594 发表于 2020-4-12 16:38 | 显示全部楼层 |阅读模式
电脑和单片机通讯时,由电脑输入到单片机的字符信息,能否直接调用,用于单片机的条件判断

我用电脑输入的信息做判断,控制LED灯,结果LED灯没变化。


#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit led0=P0^0;
sbit led1=P0^1;

u8 recv;
u8 controller;
void UsartInit()    //串口初始化
{ SCON=0X50;
   TMOD=0x20;     //0010000,选择工作方式2
   PCON=0X80;
   TH1=0XF3;     //波特率4800,SMOD=1(倍频)
   TL1=0XF3;
   ES=1;
   TR1=1;
   EA=1;
   }
void main()
{
   UsartInit();
   while(1);
    }

void Usart() interrupt 4   
{      
  recv=SBUF;           //电脑发送的信息进入单片机缓冲器
  controller=recv;
  RI=0;     //接收中断标志位清零
  SBUF=recv;   //将接收到的数据重新发送回电脑
  while(!TI);   //TI发送中断标志位,TI=1,发送中断申请通过TI发送中断
  TI=0;         //发送中断清零
  if(controller==0)
    {led0=~led0;}
   else if(controller==1)
    {led1=~led1;}   
}
51hei图片_20200412163753.png

回复

使用道具 举报

ID:393699 发表于 2020-4-12 16:50 | 显示全部楼层
你发送的是字符串'1'吧,对应接收的HEX码是0x31。有疑问可以看看ASCII码。
可以这样改一下
  recv=SBUF;           //电脑发送的信息进入单片机缓冲器
  controller=recv - 0x30;  //减去0x30后的值为真正的数字
回复

使用道具 举报

ID:717594 发表于 2020-4-12 17:19 | 显示全部楼层
1092648746 发表于 2020-4-12 16:50
你发送的是字符串'1'吧,对应接收的HEX码是0x31。有疑问可以看看ASCII码。
可以这样改一下
  recv=SBUF;  ...

void Usart() interrupt 4   
{              
  recv=SBUF;
  controller=recv-0x30;
  RI=0;                  
  SBUF=recv;   
  while(!TI);   
  TI=0;
  if(controller==0)
    {led0=0;}
   else if(controller==1)
        {led1=0;}   
}

改了下。刚烧录完可以。输入信息的控制还是不行。
回复

使用道具 举报

ID:230975 发表于 2020-4-12 20:09 | 显示全部楼层
改把HEX选中再发送试试。
回复

使用道具 举报

ID:367369 发表于 2020-4-13 00:39 | 显示全部楼层
你可以把controller的值通过串口返回电脑看看值是否正确
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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