注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

沙粒的博客

 
 
 

日志

 
 

c51: 串口通信2  

2014-11-02 17:07:05|  分类: 通信 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一、程序功能

pcc51发送字符串"hello",c51收到"hello"表示通信测试正常,点亮P1.0脚。向pc发送"ok"

二、代码

 

/*程序功能:                                                              

pcc51发送字符串"hello",c51收到"hello"表示通信测试正常,点亮P1.0脚。向pc发送"ok"

*/

 

#include <reg52.h>

#define uchar unsigned char

 

//定义变量

uchar recbuf[10]; //接收数据缓存

uchar recnum;

 

//定义引脚,P1口的0脚控制指示灯,

//light=0,表示指示灯亮,light=1, 表示指示灯暗

sbit light=P1^0;

 

//定义通信联络信号

char buf[2]={'o','k'};

 

//初始化工作,

//T0T1 设置为工作方式2,一个作波特率发生器,一个作定时器定时发送控制信号

//串口设置,

void init();

 

//声明处理函数

void answer();

 

//主函数

void main()

{

 

  init();

  while(1)

  {

   

      answer();

  }

 

 

 

}

 

//初始化工作,

//T0T1 设置为工作方式2,一个作波特率发生器,一个作定时器定时发送控制信号

//串口设置,

void init()

{

  //定时器设置

  //T1,方式2,自动重载作波特率发生器

  //T0,方式013位计数器,作定时器,超时溢出

  TMOD=0x20;

 

  //T1常数计算,baud=9600,f=11.0592MHZ

  //晶振->12分频->定时器输入,8位计数,定时器输出->2分频(默认SMOD=0,如SMOD=1不分频)->16分频->波特率

  //常数TC=2^8-f/12/2/16/baud 

  TL1=0xfd;

  TH1=0xfd;

 

  //串口设置

  //串口方式1,允许接收

  SCON=0x50;

 

  //中断设置,串口开中断

  ES=1;    //串口开中断

  EA=1;   //打开 总允许

 

 

 

  //启动定时器

  TR1=1;

 

 

 

}

 

 

//定义串口中断程序,不需要声明

void serial() interrupt 4

{

 

  //关中断

  TI=0;

  ES=0;  //关键语句,关闭中断,程序可顺序向下执行

 

  //启动定时器,超时推出

  TH0=0x00;

  TL0=0x00;

  TR0=1;

 

  //

  recnum=0;

 

  //----- 收到第一个字节

 

  //没有收到数据,未超时,等待

  while((RI==0) && (TF0==0));

  //手动复位

  RI=0;

  //如果超时,返回

  if(TF0==1)

  goto mm;

                                                                                                                                                             

  //收到第一个字节数据

  recbuf[recnum++]=SBUF;

 

 

  //----- 收到第二个字节

 

  //启动定时器,超时推出

  TH0=0x00;

  TL0=0x00;

 

  //没有收到数据,未超时,等待

  while((RI==0) && (TF0==0));

  //手动复位

  RI=0;

  //如果超时,返回

  if(TF0==1)

  goto mm;

                                                                                                                                                             

  //收到第二个字节数据

  recbuf[recnum++]=SBUF;

 

  //----- 收到第三个字节

 

  //启动定时器,超时推出

  TH0=0x00;

  TL0=0x00;

 

  //没有收到数据,未超时,等待

  while((RI==0) && (TF0==0));

  //手动复位

  RI=0;

  //如果超时,返回

  if(TF0==1)

  goto mm;

                                                                                                                                                             

  //收到第三个字节数据

  recbuf[recnum++]=SBUF;

 

  //----- 收到第四个字节

 

  //启动定时器,超时推出

  TH0=0x00;

  TL0=0x00;

 

  //没有收到数据,未超时,等待

  while((RI==0) && (TF0==0));

  //手动复位

  RI=0;

  //如果超时,返回

  if(TF0==1)

  goto mm;

                                                                                                                                                             

  //收到第四个字节数据

  recbuf[recnum++]=SBUF;

 

  //----- 收到第五个字节

 

  //启动定时器,超时推出

  TH0=0x00;

  TL0=0x00;

 

  //没有收到数据,未超时,等待

  while((RI==0) && (TF0==0));

  //手动复位

  RI=0;

  //如果超时,返回

  if(TF0==1)

  goto mm;

                                                                                                                                                             

  //收到第五个字节数据

  recbuf[recnum++]=SBUF;

 

 

  //关闭T0

mm:TR0=0;

    TF0=0;

  ES=1;

 

       

}

 

 

//定义处理函数

void answer()

{

 

 

 

    //

  uchar i;

 

   //关中断发送数据

   RI=0;

   TI=0;

   ES=0;

 

   if(recnum>0)

   {

     if( (recbuf[0]=='h') && (recbuf[1]=='e') && (recbuf[2]=='l') && (recbuf[3]=='l') && (recbuf[4]=='o') )

      {

        //点亮指示灯

        light=0;

 

        //发送OK,表示通信正常

        for(i=0;i<2;i++)

        {

          SBUF=buf[i];

             while(TI==0);

             TI=0;

 

        }

 

 

      }

 

 

  

 

   recnum=0;

 

   }

 

   ES=1;

 

}

  评论这张
 
阅读(423)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017