单片机串口通信是单片机非常好用的一项功能,可以和电脑和其他的单片机进行通信和交换数据从而达到某种效果。近期我们做了个程序:利用单片机串口通信编译一个程序在打开时向电脑发送问候语“hello”,然后电脑输入一个“start”,之后单片机将电脑输入任何字符都显示出来,除非是电脑输入为“end”。起初我们是想用字符串和数组来做这个题目的,但是在开始做的时候才发现,单片机的传输使用八位的一个一个的传输数据的,然后在传输之前还得将端口软件置零、这时候我们就选用了嵌套语句一个一个字符串的来判断,但是因为嵌套的对于单片机通信说不是很适合。如:在用五个if语句检测start是,如果其中少了一个(只有四个字符),这个程序就会卡住,不执行下一条:
#include<reg52.h>
#include<intrins.h>
#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