|
想要通過(guò)串口控制led,但是串口每次中斷只能發(fā)送一個(gè)字符,這樣在控制的時(shí)候不太容易清楚各個(gè)命令是控制哪一部分,所以參考網(wǎng)上的資料,寫(xiě)了個(gè)簡(jiǎn)單的字符串收發(fā)函數(shù)。本程序的功能是:電腦串口助手發(fā)送數(shù)據(jù)給單片機(jī),單片機(jī)接收后返回給電腦,在發(fā)送的時(shí)候,需要空兩格再輸入想要傳送的內(nèi)容,不然的話傳輸?shù)臄?shù)據(jù)會(huì)丟失,因?yàn)檫@個(gè)情況不影響串口控制LED,所以就沒(méi)管了。
單片機(jī)源程序如下:
- #include<reg52.h>
- typedef unsigned char uchar;
- typedef unsigned int uint;
- sbit led=P2^0;
- void Usart_Init()
- {
- TMOD=0X20;
- PCON=0X80;
- SCON=0X50;
- TH1=0XF3;
- TL1=0XF3;
- TR1=1;
- ES=1;
- EA=1;
- }
- uchar strk[50];
- void delay(unsigned int i){unsigned int j;for(i;i>0;i--)for(j=0;j<120;j++);}//延時(shí)函數(shù)
- void sendbyte(unsigned char byt){SBUF=byt;while(!TI);TI=0;} //串口字符發(fā)送函數(shù)
- void receivebyte() /*串口接收函數(shù)*/
- {
- uchar shiftdata;//轉(zhuǎn)移數(shù)據(jù)變量,將SBUF接收到的數(shù)據(jù)線存儲(chǔ)到這個(gè)地方,再轉(zhuǎn)存到數(shù)組當(dāng)中
- static uint i=0;
-
- if(RI){
- RI=0;shiftdata=SBUF;strk[i]=shiftdata; i++;
- if(shiftdata=='\0'||shiftdata=='\n'){i=0;}
- }
- }
- /*以下是串口字符串發(fā)送函數(shù)*/
- void sendstring(unsigned char *string){
- uint k;
- while(*string!='\0')
- {
- sendbyte(*string);delay(100);string++;
- }for(k=0;k<50;k++)strk[k]=0;
- }
-
- void main()
- {
- Usart_Init();
- while(1)
- {
- if(strk[2]=='o'&&strk[3]=='n')led=0;
- if(strk[2]=='o'&&strk[3]=='f'&&strk[4]=='f')led=1;
- if(RI){sendstring(strk);}
- }
- }
- void Usart_o() interrupt 4
- {
- receivebyte();
-
- }
復(fù)制代碼
|
-
1111.png
(69.57 KB, 下載次數(shù): 30)
下載附件
2020-8-8 04:13 上傳
-
-
51串口收發(fā)字符串.rar
2020-8-8 04:14 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
27.9 KB, 下載次數(shù): 36, 下載積分: 黑幣 -5
評(píng)分
-
查看全部評(píng)分
|