你好!欢迎来到深圳市颖特新科技有限公司!
语言
当前位置:首页 >> 技术中心 >> 单片机入门 >> 单片机串口通信程序

单片机串口通信程序

作者:admin 来源:不详 发布时间:2018-05-08  浏览:1

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

编辑:admin  最后修改时间:2018-05-08

联系方式

0755-82591179

传真:0755-82591176

邮箱:vicky@yingtexin.net

地址:深圳市龙华区民治街道民治大道973万众润丰创业园A栋2楼A08

Copyright © 2014-2023 颖特新科技有限公司 All Rights Reserved.  粤ICP备14043402号-4