|
發布時間: 2019-2-8 22:57
正文摘要:這是串口通信的問題,發送一個數字 0 led燈就會反轉。我想一次發送123456789一共9個數字才能讓led反轉要怎么寫? |
|
如果你是用字符串進行控制,我也是有程序的。 /* 長字符串控制 */ #include<reg51.h> sbit LED0=P2^0; unsigned char i=0,k; unsigned char DD[11]; void UsartConfiguration(); void Delay10ms(unsigned int c); void main() { UsartConfiguration(); Delay10ms(10); while(1) { } } void UsartConfiguration()//設置串口12M\4800 { SCON=0X50; TMOD=0X20; PCON=0X80; TH1=0XF3; TL1=0XF3; TR1=1; ES=1; EA=1; } void Delay10ms(unsigned int c) { unsigned char a, b; for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } } void CKTX() interrupt 4 { RI=0; k=SBUF; if (k!='\n') { DD[i]=k; i++; if (i>11) { i=0; } } else { DD[i]=k; i=0; if ((DD[0]=='1')&&(DD[1]=='2')&&(DD[2]=='3')&&(DD[3]=='4')&&(DD[4]=='5')&&(DD[5]=='6')&&(DD[6]=='7')&&(DD[7]=='8')&&(DD[8]=='9')&&(DD[9]==0x0d)&&(DD[10]==0x0a)) { LED0=~LED0; } } } 程序要求,字符串必須以回車結束,字符串長度最大九位 |
|
我做了一個程序,滿足123456789的數字,控制LED燈開關。 /* 長數字控制控制 */ #include<reg51.h> sbit LED0=P2^0; unsigned char i=0,k; //unsigned char DD[5]; void UsartConfiguration(); void Delay10ms(unsigned int c); void main() { UsartConfiguration(); Delay10ms(10); while(1) { } } void UsartConfiguration()//9600bps@11.0592MHz { SCON=0X50; TMOD=0X20; PCON=0X80; TH1=0XFa; TL1=0XFa; TR1=1; ET1=0; ES=1; EA=1; } void Delay10ms(unsigned int c) { unsigned char a, b; for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } } void CKTX() interrupt 4 { RI=0; k=SBUF; if (k==0x12) { if (i==0) { i++; } else { i=0; } } if (k==0x34) { if (i==1) { i++; } else { i=0; } } if (k==0x56) { if (i==2) { i++; } else { i=0; } } if (k==0x78) { if (i==3) { i++; } else { i=0; } } if (k==0x09) { if (i==4) { i++; } else { i=0; } } if (i==5) { LED0=~LED0; i=0; } } |
| 樓主這是自定義通訊協議問題。首先要把收到的字符按序分別保存在緩存中,1幀字符接收完畢后產生一個結束標志。然后對緩存中保存的字符解析判斷,正確:執行相應任務。錯誤:清除緩存,重新等待接收。1幀數據通常由數據頭、有效數據、驗證碼、數據尾等組成。其目的是為了保證傳輸信號的準確性。 |
| 接收9個字符,用字符連接函數將其連接后作判斷。 |