熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時(shí)間: 2019-2-8 22:57
正文摘要:這是串口通信的問(wèn)題,發(fā)送一個(gè)數(shù)字 0 led燈就會(huì)反轉(zhuǎn)。我想一次發(fā)送123456789一共9個(gè)數(shù)字才能讓led反轉(zhuǎn)要怎么寫? |
wulin 發(fā)表于 2019-2-9 09:12 這個(gè)建議很好,樓主再調(diào)調(diào) |
| 參與人數(shù) 3 | 黑幣 +78 | 收起 理由 |
|---|---|---|
|
| + 8 | |
|
| + 35 | |
|
| + 35 |
|
如果你是用字符串進(jìn)行控制,我也是有程序的。 /* 長(zhǎng)字符串控制 */ #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()//設(shè)置串口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; } } } 程序要求,字符串必須以回車結(jié)束,字符串長(zhǎng)度最大九位 |
|
我做了一個(gè)程序,滿足123456789的數(shù)字,控制LED燈開關(guān)。 /* 長(zhǎng)數(shù)字控制控制 */ #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; } } |
| 樓主這是自定義通訊協(xié)議問(wèn)題。首先要把收到的字符按序分別保存在緩存中,1幀字符接收完畢后產(chǎn)生一個(gè)結(jié)束標(biāo)志。然后對(duì)緩存中保存的字符解析判斷,正確:執(zhí)行相應(yīng)任務(wù)。錯(cuò)誤:清除緩存,重新等待接收。1幀數(shù)據(jù)通常由數(shù)據(jù)頭、有效數(shù)據(jù)、驗(yàn)證碼、數(shù)據(jù)尾等組成。其目的是為了保證傳輸信號(hào)的準(zhǔn)確性。 |
| 接收9個(gè)字符,用字符連接函數(shù)將其連接后作判斷。 |
Powered by 單片機(jī)教程網(wǎng)