找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1535|回复: 0
收起左侧

单片机串行口通信程序

[复制链接]
ID:247795 发表于 2017-11-20 21:02 | 显示全部楼层 |阅读模式
#include#include //后面有一个比较函数
#define uchar unsigned char
#define uint unsigned int
bit  UART_Flag=0;  //定义串口接收标志位
uchar  str[50];   //定义一数组
uchar length=0;  //数组长度从0开始
void init() //初始化uart
{
  
  
   TMOD=0X20;  //定时器1定时器方式  工作模式2,可自动重载的8位计数器常把定时/计数器1以模式2作为串行口波特率发生器
SCON=0X50; //选择工作模式1使能接收,允许发送,允许接收
    EA=1; //开总中断
ES=1;  //打开串口中断
ET1=0;  //打开定时器中断
        PCON=0X80; //8位自动重载,波特率加倍
TH1=0XFF;  //用22.1184 mhz波特率
TL1=0XFF;
   
TR1=1; //打开中时器


}
void UART_Putch(uchar dat)  //输出一个字符
{
SBUF=dat; //把数据送给sbuf缓存器中
while(TI!=1);//发送标志位 TI如果发送了为1,没发送为0,没发送等待,到了退出循环
TI=0;  //到了,TI清为0
}
void init1() interrupt 4  //uart中断 ,4为串口中断
{

  if(RI==1)  //收到数据
  {
     uchar m=SBUF; //m为计算机发送给串口的数据,例,open //总体思想是,计算机通知串口,我要发数据了
  RI=0;   //收到清0
  
     if(m==' ')   //判断m这位数据有无
       {
       UART_Putch(' ');  //回车
       UART_Putch(' ');  // 换行
    str[length]=''; //数据最后位加0标志位表示发完了数据
    UART_Flag=1;  // 传 完 标 志 位
        }
   else if(m==' ')
  {

  }
     else if(m=='')//b表退格 //下面几句表删锄
       {
         UART_Putch('');
    UART_Putch(' ');
    UART_Putch('');
    length=length-1; //删锄了后总长度减一
       }
  
   
     else
     {
     str[length++]=m; //比如m为open,先传0后传p,length加一
  UART_Putch(m);    //输出 比如open
     }
  
}
}
void check(char *str)  //计算机发一数据,我来检查,
{
   if( strcmp("open",str)==0 ) //比较两数是否相同,相同为0,不同为1 //要加string.h头文件
   {
       UART_Putch('o'); //计算机中写入open我回复ok
    UART_Putch('k');
       UART_Putch(' '); //回车是跑到这一行的最前      UART_Putch(' '); //换行是跳到下一行
  }
   else if( strcmp("close",str)==0 )
   {
       UART_Putch('o');
    UART_Putch('k');
       UART_Putch(' ');
       UART_Putch(' ');
  
  
   }
   else    //否则出错
   {
       UART_Putch('e');
    UART_Putch('r');
       UART_Putch('r');
       UART_Putch('o');
       UART_Putch('r');
       UART_Putch('!');
    UART_Putch(' ');
    UART_Putch(' ');
   }

}
void main()
{
  init();
  while(1)
  {
    if(UART_Flag==1)  //接收标志位表示接收完成
     {
     check(str);//检查
     length=0; //长度清0
     UART_Flag=0;//标志位清0
  }

  }

}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表