|
想要通过串口控制led,但是串口每次中断只能发送一个字符,这样在控制的时候不太容易清楚各个命令是控制哪一部分,所以参考网上的资料,写了个简单的字符串收发函数。本程序的功能是:电脑串口助手发送数据给单片机,单片机接收后返回给电脑,在发送的时候,需要空两格再输入想要传送的内容,不然的话传输的数据会丢失,因为这个情况不影响串口控制LED,所以就没管了。
单片机源程序如下:
- #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++);}//延时函数
- void sendbyte(unsigned char byt){SBUF=byt;while(!TI);TI=0;} //串口字符发送函数
- void receivebyte() /*串口接收函数*/
- {
- uchar shiftdata;//转移数据变量,将SBUF接收到的数据线存储到这个地方,再转存到数组当中
- static uint i=0;
-
- if(RI){
- RI=0;shiftdata=SBUF;strk[i]=shiftdata; i++;
- if(shiftdata=='\0'||shiftdata=='\n'){i=0;}
- }
- }
- /*以下是串口字符串发送函数*/
- 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();
-
- }
复制代码
|
评分
-
查看全部评分
|