|
判断从串口接收到的两个字节,即4位16进制的数据,如果第一个字节对了led1亮然后判断第二个,第二个字节对了led3亮。
但是令我很好奇的是某些数据是对的,另一些却不能正确判断
如fafb, e1d1 ,等,灯可以正常亮起。f开头的字节都可以
但是数字开头的字节,比如5a7b,1111等就不行。
正常
以下是我的单片机程序(初学者,很拉,不同的地方很多)
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit led0 = P0^0; //接收到数据时闪烁
sbit led1 = P0^1;
sbit led2 = P0^2;
sbit led3 = P0^3;
sbit led4 = P0^4;
uchar num1,num2;//读取SBUF
void UART_init(){ TR1=0;
TMOD =0x20; //T1工作模式2 8位自动重装
TH1 = 0xfd;
TL1 = 0xfd; //0xfd波特率9600。
ET1 = 0;
TR1 = 1; //启动T1定时器
PCON =0x00; //若0x80 SMOD置1,波特率加倍
REN=1; //看似无用实则不可缺失
SCON = 0x50; //串口允许接收
EA = 1; //开总中断
ES = 1; //串口中断打开
}
void main()
{
UART_init(); //串口初始化
while(1)
{
}
}
void UART() interrupt 4
{
while(!RI); //检测是否接收完成
RI = 0;
led0 = ~led0;
num1 = SBUF;
P1 = ~num1;
if(num1==0x5A)
{ led1=0; //第一个字节对了之后led1亮
while(!RI);
led2=0;
RI=0;
num2=SBUF;
if(num2==0xA5)
led3=0; //第二个字节对了之后led3亮
}
else {led1=1;led2=1;led3=1;}
}
|
|