如果你是用字符串进行控制,我也是有程序的。 /* 长字符串控制 */ #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个字符,用字符连接函数将其连接后作判断。 |