微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 谁能看出来下面程序有什么问题。

谁能看出来下面程序有什么问题。

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
uchar buf[10]=0;  //接收缓存数组
uchar  r_x=0;//接收计数
uchar  r_flag=0;//接收成功标志
sbit DA =  P2^7;//继电器1
sbit DB =  P2^6;//继电器2
sbit DC =  P2^5;//继电器3
sbit DD =  P2^4;//继电器4
sbit FM =  P0^4;//蜂鸣器
void delay(uint z) //延时函数
{
   uint x,y;
   for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}
uchar read_data(void)//读取接收数据
{
   uchar temp = 0;
        if(r_flag == 1)
        {
         r_flag = 0;
         temp = buf[2];
         FM =  0;//蜂鸣器响
         delay(50);
         FM = 1;//蜂鸣器关
        }
        return temp;
}
void uart_init()
{
  TMOD=0x20;
  TH1=0xfd;          //波特率9600
  TL1=0xfA;
  TR1=1;
  SM0=0;
  SM1=1;
  REN=1;
  EA=1;
  ES=1;
}
void main()
{
  uchar key=0;
  uart_init(); //串口初始化
  FM = 1;//蜂鸣器关
  DA=1;
  DB=1;
  DC=1;
  DD=1;
  while(1)
  {       
          key =   read_data();//读取接收数据
        if(key == 'A') DA =0;//打开A
        else if(key == 'B') DA =1;//关闭A
        else if(key == 'C') DB =0;//打开B
        else if(key == 'D') DB =1;//关闭B
        else if(key == 'E') DC =0;//打开C
        else if(key == 'F') DC =1;//关闭C
        else if(key == 'G') DD =0;//打开D
        else if(key == 'H') DD =1;//关闭D
  }
}
void ser()interrupt 4  //接收中断
{
   RI=0; //清除接收标志
   buf[r_x] = SBUF;//接收数据至缓存区
   r_x++;
   if(buf[0]!='O'){r_x=0;}
   if(r_x == 3)        //接收完成
   {
    r_x=0;
        r_flag=1;
   }
}

小编可以补充一下,你的代码功能吗?

是编译不了还是不实现不了功能,能具体把问题描述清楚吗

是功能。用手机发字符ONA没反回值。但用其它程序有反回值得。不知道是字符没有对上,没是什么。?

手机蓝牙控制继电器。编译上没有出错了,但是用手机发字符ONA,ONB, ONC等都没有反应。用的是安卓蓝牙串口发的。不知道是那里出了问题。

会不会是手机发字符有错?不太明白?

先把串口接收到的数据打印出来看看啊

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top