|
判斷從串口接收到的兩個(gè)字節(jié),即4位16進(jìn)制的數(shù)據(jù),如果第一個(gè)字節(jié)對(duì)了led1亮然后判斷第二個(gè),第二個(gè)字節(jié)對(duì)了led3亮。
但是令我很好奇的是某些數(shù)據(jù)是對(duì)的,另一些卻不能正確判斷
如fafb, e1d1 ,等,燈可以正常亮起。f開頭的字節(jié)都可以
但是數(shù)字開頭的字節(jié),比如5a7b,1111等就不行。
0.png (61.26 KB, 下載次數(shù): 30)
下載附件
2023-6-7 18:07 上傳
正常
以下是我的單片機(jī)程序(初學(xué)者,很拉,不同的地方很多)
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit led0 = P0^0; //接收到數(shù)據(jù)時(shí)閃爍
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位自動(dòng)重裝
TH1 = 0xfd;
TL1 = 0xfd; //0xfd波特率9600。
ET1 = 0;
TR1 = 1; //啟動(dòng)T1定時(shí)器
PCON =0x00; //若0x80 SMOD置1,波特率加倍
REN=1; //看似無用實(shí)則不可缺失
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; //第一個(gè)字節(jié)對(duì)了之后led1亮
while(!RI);
led2=0;
RI=0;
num2=SBUF;
if(num2==0xA5)
led3=0; //第二個(gè)字節(jié)對(duì)了之后led3亮
}
else {led1=1;led2=1;led3=1;}
}
|
|