pc机与单片机通讯的问题

2019-07-16 05:55发布

本帖最后由 zcfirst 于 2012-5-2 10:05 编辑

#include <AT89X52.H>                                        //包含头文件
#include<string.h>
unsigned char date[];
unsigned char recFlag;                                        //接收数据标识,0 未接收数据 1 接收数据
unsigned char back[3][20]={"命令接收 ","热水器已开 ","指令错误 "};
unsigned char rec[2][20]={"家电管家","打开热水器"};
unsigned char flag,flag1;
unsigned int i;
void init_serial();                                                //声明初始化函数
void send(unsigned char i,unsigned char j);                                                        //声明发送函数(MCU->PC)
void receive();                                                        //声明接收函数(PC->MCU)
void delay(unsigned int i);
main()
{
    unsigned char j;
        init_serial();                                                //串口初始化
        IE=0;                                                                 //屏蔽中断
    while(1)
        {
                receive();                                                //调用两个函数实现收发扫描
                flag=strcmp(date,rec[0]);
                flag1=strcmp(date,rec[1]);
                if(flag==0)
                {
                  for(j=0;j<20;j++)
                  {
                send(0,j);
                    delay(350);
                  }
                }
                else if(flag1==0)
                {
                  for(j=0;j<20;j++)
                  {
                send(1,j);
                    delay(350);
                  }
                }
                else
                {
                  for(j=0;j<20;j++)
                  {
                send(2,j);
                    delay(350);
                  }
                }
        }
}
void init_serial()                                            //初始化串口
{
        TMOD=0x20;                                                    //定时器T1使用工作方式2
        TH1=0xfd;                                                     //设置初值
        TH0=0xfd;
        TR1=1;                                                      //开始计时
        PCON=0x00;                                                     //SMOD=0;
        SCON=0x50;                                                     //工作方式1,波特率9600bit/s,允许接收
        ti=1;
        EA=1;
}
void send(unsigned char i,unsigned char j)                                                                //把接收到的内容原封不动发送出去
{
        if(TI==1)                                                     //检测输出是否READY
        {
                if(recFlag==1)                                     //是否接收过数据
                {
                        SBUF=back[j];                          //发送数据
                        if(j==19)
                        {
                          recFlag=0;
                        }
                    TI=0;
                }
        }
}

void receive()
{
    unsigned char key;
        if(RI==1)                                                    //检测是否有数据接收
        {                                                     //接收数据
          key=SBUF;  
          date =key;
          i++;
          if(i>=15)
          i=0;
          recFlag=1;
      RI = 0;
        }
}
void delay(unsigned int i)
{
   while(i--);
}
程序错在哪了,为什么会不管发送什么都是指令错误
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。