串口接收字符串.txt23让我们挥起沉重的铁锤吧!每一下都砸在最稚嫩的部位,当青春逝去,那些部位将生出厚晒太阳的茧,最终成为坚实的石,支撑起我们不再年轻但一定美丽的生命。 //串口接收以特定字符为开头的字符串并且保存特定字符之后的有效位 #include #define uint unsigned char #define uchar unsigned int uchar ser_receive; //串口接收到的数据 uchar ser_flag=0; uchar receive_number[11]={0};//接收串口发送来的数据的数组 uchar i=0; uchar j; uchar come=0; void init_ser() { TMOD=0X20;//定时器 1工作在方式 2 TH1=0XFD; TL1=0XFD; //波特率 9600 TR1=1; EA=1; SM0=0; SM1=1; REN=1;//允许串口接收 ES=1;//开串口 中断 } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /**************************************************************************************** * 程序目的:串口接收字符串,但是要以字符a为开头的后面的11位字符,若开头不为a则接收不写入数组 * 若开头为a 但是发送有效位超过 11位 就把后面的截断 只要前 11位 * *补充:该程序也可以改为接受任意字符串 (但是字符串的长度 必须是大体确定的) * * ****************************************************************************************/ void ser() interrupt 4 //中断函数不用声明 { if(RI==1) { RI=0; ser_receive=SBUF; if(come==1) { if(ser_receive!='\0'&&ser_receive!='a') { receive_number[i]=ser_receive; i++; if(i==11) { i=0; ser_flag=1; come=0; } } } else if(ser_receive=='a') { come=1; } } } void main() { init_ser(); while(1) { if(ser_flag==1) { ES=0; ser_flag=0; for(j=0;j<11;j++) { SBUF=receive_number[j]; while(!TI); TI=0; delay(10); } ES=1; } } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////...