单片机串口通信是单片机非常好用的一项功能,可以和电脑和其他的单片机进行通信和交换数据从而达到某种效果。近期我们做了个程序:利用单片机串口通信编译一个程序在打开时向电脑发送问候语“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 |