|
原本使想要判断多个字节的数据,但是在处理一个字节的数据时就发生了错误(串口助手和单片机波特率均为9600,且数据位停止位校验位均为81N)
(1)用8个led显示接收到的数据,刚开始什么也没发送,但是LED灯却显示接收到了7F(01111111)
(2)当我用串口助手发送数据时。若判断接收到的数据是否为0x51,则会失败,且显示为FF(如果添加延时函数,会显示小段时间的D1,然后自动变成FF)
当用串口助手发送0xA5时,接受到的数据正确且正常显示A5,LED1也在正常亮起
在尝试过后发现似乎如A8,FA如此字母开头的字节都可以识别正确,但是数字很多都不行
以下是我的程序
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led0 = P0^0; //两个LED灯判断接收到的数据
sbit led1 = P0^1;
uchar num1,flag;//读取SBUF
void UART_init()
{ //TR1=0;
TMOD =0x20; //T1工作模式2 8位自动重装
TH1 = 0xFD;
TL1 = 0xFD; //0xfd波特率9600。
ET1 = 0;
IE=0x90; //启动定时器1
TR1 = 1; //启动T1定时器
PCON =0x00; //若0x80 SMOD置1,波特率加倍;但此时的波特率为9600;
REN=1; //看似无用实则不可缺失
SCON = 0x50; //串口允许接收
//SM0 = 0;SM1 = 1;
EA = 1; //开总中断
ES = 1; //串口中断打开
}
void main()
{ flag = 0;
UART_init();
while(1)
{ if(flag == 1)
{
switch (num1)
{ case 0x51: //若接收到的是0x51,则LED0亮,下同
led0=0; break;
case 0xA5:
led1=0; break;
}
}
// else led1=1;
}
}
void UART() interrupt 4 //串口中断函数
{ //EA=0;
if(RI==1) //检测是否接收完成
{RI = 0;
P1=~SBUF;
num1=SBUF; //P1有8个共阳极LED灯,方便判断接收到的数据。SBUF给num1;
flag = 1;
}
//EA=1;
}
求告知问题出在哪里以及解决方式,感谢万分
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|