欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 單片機(jī)串口通訊中的字符 [打印本頁]

作者: azure1986    時(shí)間: 2020-4-12 16:38
標(biāo)題: 單片機(jī)串口通訊中的字符
電腦和單片機(jī)通訊時(shí),由電腦輸入到單片機(jī)的字符信息,能否直接調(diào)用,用于單片機(jī)的條件判斷

我用電腦輸入的信息做判斷,控制LED燈,結(jié)果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ā)送的信息進(jìn)入單片機(jī)緩沖器
  controller=recv;
  RI=0;     //接收中斷標(biāo)志位清零
  SBUF=recv;   //將接收到的數(shù)據(jù)重新發(fā)送回電腦
  while(!TI);   //TI發(fā)送中斷標(biāo)志位,TI=1,發(fā)送中斷申請(qǐng)通過TI發(fā)送中斷
  TI=0;         //發(fā)送中斷清零
  if(controller==0)
    {led0=~led0;}
   else if(controller==1)
    {led1=~led1;}   
}



作者: 1092648746    時(shí)間: 2020-4-12 16:50
你發(fā)送的是字符串'1'吧,對(duì)應(yīng)接收的HEX碼是0x31。有疑問可以看看ASCII碼。
可以這樣改一下
  recv=SBUF;           //電腦發(fā)送的信息進(jìn)入單片機(jī)緩沖器
  controller=recv - 0x30;  //減去0x30后的值為真正的數(shù)字

作者: azure1986    時(shí)間: 2020-4-12 17:19
1092648746 發(fā)表于 2020-4-12 16:50
你發(fā)送的是字符串'1'吧,對(duì)應(yīng)接收的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;}   
}

改了下。剛燒錄完可以。輸入信息的控制還是不行。
作者: hmgqljz111    時(shí)間: 2020-4-12 20:09
改把HEX選中再發(fā)送試試。
作者: game灬boy    時(shí)間: 2020-4-13 00:39
你可以把controller的值通過串口返回電腦看看值是否正確




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1