水电之家讯:单片机串口通信是单片机非常好用的一项功能,可以和电脑和其他的单片机进行通信和交换数据从而达到某种效果。近期我们做了个程序:利用单片机串口通信编译一个程序在打开时向电脑发送问候语“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')
{
while(RI==0);RI=0;
if(SBUF=='s')a(); //调用a(),是为了解决ssstart和sstart的问题
if(SBUF=='t')
{
while(RI==0);RI=0;
if(SBUF=='a')
{
while(RI==0);RI=0; //接收字符,并用下面的if语句判断
if(SBUF=='r')
{
while(RI==0);RI=0;
if(SBUF=='t')
{
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
水电之家为您提供最全面的管材,管件,水电,电线,电工,管材水电品牌的装修知识点和各种管材水电的导购与在线购买服务,拥有最便宜的管材水电价格和最优质的售后服务,每天都有秒杀的抢购活动哦!敬请登陆水电之家:http://shuidian.jc68.com/








