单片机串口通信是单片机非常好用的一项功能,可以和电脑和其他的单片机进行通信和交换数据从而达到某种效果。近期我们做了个程序:利用单片机串口通信编译一个程序在打开时向电脑发送问候语“hello”,然后电脑输入一个“start”,之后单片机将电脑输入任何字符都显示出来,除非是电脑输入为“end”。起初我们是想用字符串和数组来做这个题目的,但是在开始做的时候才发现,单片机的传输使用八位的一个一个的传输数据的,然后在传输之前还得将端口软件置零、这时候我们就选用了嵌套语句一个一个字符串的来判断,但是因为嵌套的对于单片机通信说不是很适合。如:在用五个if语句检测start是,如果其中少了一个(只有四个字符),这个程序就会卡住,不执行下一条: 
#include #include #define uchar unsigned char #define uint unsigned int uchar tang[20]="woshitangqun"; uint i,j;uint count=0; uchar temp,qun,bao,m,n; void t();void a(); void main() {j=0; TMOD=0x20; TH1=0xfd; TL1=0xfd; SM0=0;SM1=1; ET0=1; TR1=1;ES=1; REN=1;     while(1)  {      if(j==0)                 //单片机问候,向电脑发送一个字符串,表示单片机已经准备好工作了   {    for(i=0;i<20;)    {    SBUF=tang[i];    while(TI==0);    i  ;    TI=0;       j  ;    }   }   t();  } } void t() {       while(RI==0);   RI=0;           if(SBUF=='s')     {    /* SBUF='s';  while(TI==0); TI=0;*/  while(RI==0);RI=0; if(SBUF=='s')a();        //调用a(),是为了解决ssstart和sstart的问题 if(SBUF=='t') { /*SBUF='t';    //发送到屏幕 while(TI==0);TI=0;*/ while(RI==0);RI=0; if(SBUF=='a') { /*SBUF='a';    //发送到屏幕 while(TI==0); TI=0;*/ while(RI==0);RI=0;               //接收字符,并用下面的if语句判断 if(SBUF=='r') { /*SBUF='r';    //发送到屏幕,如果想要讲命令显示在屏幕上的话,就可以将这一句用上 while(TI==0);TI=0;*/ while(RI==0);RI=0;   if(SBUF=='t') { /*SBUF='t';    //发送到屏幕 while(TI==0);TI=0;*/                  while(1) {n=0; 
while(RI==0);RI=0;temp=SBUF;          //接收一个字符,赋值给temp; if(SBUF=='e')         //判断是否是e,若否则用else输出,是则近入if语句 { while(RI==0) {for(m=0;m<100;m  );count  ;} RI=0;                                //若传输完毕,则给RI赋值, bao=SBUF;                                 //把传入的值赋给bao   |