|
判斷從串口接收到的兩個字節(jié),即4位16進制的數據,如果第一個字節(jié)對了led1亮然后判斷第二個,第二個字節(jié)對了led3亮。
但是令我很好奇的是某些數據是對的,另一些卻不能正確判斷
如fafb, e1d1 ,等,燈可以正常亮起。f開頭的字節(jié)都可以
但是數字開頭的字節(jié),比如5a7b,1111等就不行。
0.png (61.26 KB, 下載次數: 30)
下載附件
2023-6-7 18:07 上傳
正常
以下是我的單片機程序(初學者,很拉,不同的地方很多)
#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; //第一個字節(jié)對了之后led1亮
while(!RI);
led2=0;
RI=0;
num2=SBUF;
if(num2==0xA5)
led3=0; //第二個字節(jié)對了之后led3亮
}
else {led1=1;led2=1;led3=1;}
}
|
|