標題: 求單片機大神指教,手機發(fā)送字符無法改變led的亮滅 [打印本頁]

作者: 探路    時間: 2017-11-23 19:26
標題: 求單片機大神指教,手機發(fā)送字符無法改變led的亮滅
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned int
#define uint unsigned char
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
uchar temp,c;
void init() //串口初始化
{
  ES=0;//關(guān)中斷
  TMOD=0x20;//定時器工作方式2,8位自動重裝模式,用于產(chǎn)生波特率
  TH1=0xfd;//波特率位9600.晶振位11.059
  TL1=0xfd;
  SCON=0x50;//REN=1允許串行接受狀態(tài),串口口工作方式1
  PCON=0x00;//波特率不加倍
  TR1=1;//定時器1開始工作,產(chǎn)生波特率
//  TI=0;//發(fā)送標志位置0
//  RI=0;//接受標志位置0
  EA=1;
  ES=1;//開串口中斷
  led1=0;
  led2=0;
  led3=0;
  }
void send(uchar a)//單字節(jié)數(shù)據(jù)發(fā)送
{
  TI=0;
  SBUF=a;
  while(TI==0);     
  TI=0;
  if(c%2)
  led3=1; //發(fā)送指示燈標志,每接收一次,此燈亮滅交替
  else
  led3=0;
  c++;
  }
void ctrl()//接收處理函數(shù)
{
  switch(temp)
  {
    case '1':led1=1;
send(temp);
break;
case '2':led2=1;
send(temp);
break;
case '3':led1=0;led2=0;
send(temp);
break;
case '4':led1=1;led2=1;
send(temp);
break;
case '5':led3=0;
send(temp);
break;
default:
led1=1;
led2=1;
led3=1;
send(temp);
}
}
void main()
{
//  led1=0;
//  led2=0;
//  led3=0;
  init();
  while(1)
  {
//    if(RI==1)//是否有數(shù)據(jù)到來
// {
//   RI=0;
//   temp=SBUF;   //暫存接收到的數(shù)據(jù)
   ctrl();
//   }
}
}
void ser() interrupt 4
{
  RI=0;
  temp=SBUF;   //暫存接收到的數(shù)據(jù)
}     

作者: hange_v    時間: 2017-11-23 20:09
很簡單,串口收到的是ASCII,把你收到的字符temp-'0'才是真正的數(shù)字。。。
作者: ljn123123    時間: 2017-11-23 22:37
手機發(fā)送的是ascall,還有,注意一下發(fā)送的是hex還是文本模式




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