本帖最后由 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--);
}
程序错在哪了,为什么会不管发送什么都是指令错误
一周热门 更多>