找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2385|回復: 4
打印 上一主題 下一主題
收起左側

單片機串口通訊中的字符

[復制鏈接]
跳轉到指定樓層
樓主
ID:717594 發(fā)表于 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;           //電腦發(fā)送的信息進入單片機緩沖器
  controller=recv;
  RI=0;     //接收中斷標志位清零
  SBUF=recv;   //將接收到的數(shù)據(jù)重新發(fā)送回電腦
  while(!TI);   //TI發(fā)送中斷標志位,TI=1,發(fā)送中斷申請通過TI發(fā)送中斷
  TI=0;         //發(fā)送中斷清零
  if(controller==0)
    {led0=~led0;}
   else if(controller==1)
    {led1=~led1;}   
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:393699 發(fā)表于 2020-4-12 16:50 | 只看該作者
你發(fā)送的是字符串'1'吧,對應接收的HEX碼是0x31。有疑問可以看看ASCII碼。
可以這樣改一下
  recv=SBUF;           //電腦發(fā)送的信息進入單片機緩沖器
  controller=recv - 0x30;  //減去0x30后的值為真正的數(shù)字
回復

使用道具 舉報

板凳
ID:717594 發(fā)表于 2020-4-12 17:19 | 只看該作者
1092648746 發(fā)表于 2020-4-12 16:50
你發(fā)送的是字符串'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 發(fā)表于 2020-4-12 20:09 | 只看該作者
改把HEX選中再發(fā)送試試。
回復

使用道具 舉報

5#
ID:367369 發(fā)表于 2020-4-13 00:39 | 只看該作者
你可以把controller的值通過串口返回電腦看看值是否正確
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表