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