at89c51接max232,51单片机串口max232通信程序

单片机实验

27人已加入

描述

  RS232作为标准的计算机串行接口已被广泛使用,与此同时,随着现场总线技术的飞速发展,具有实时性好、可靠性高、结构简单等优点的CAN总线在测控系统中也越来越多地被采用,但由于两者的总线结构、通信协议及传输特点各不相同,因而给不同设备之间的连接带来诸多不便。因此,如何以最简单的方式实现CAN节点与RS232串行口的通信就成为工程实践中一个不可回避的问题。

  本文主要就是说at89c51接max232方法和程序,具体的我们一起来了解一下吧。

  

  at89c51接max232方法

  MAX232与51单片机之间的通信连接很简单,因为所谓的MAX232通信标准,就是对插件样式、信号名称和意义以及所谓的驱动器/接收器的电气模式这种硬件作出规定。一般的都是9针的接口,其中包括CD接口:数据通道接收载波的检测;RD接口:接收数据;SD接口:发送数据;ER接口:数据终端就绪;SG接口:信号用接地;DR接口:数据集就绪;RS接口:请求发送;CS接口:允许发送;CI接口:被呼表示。

  用以上接口进行数据通信,还有对电平的要求。所以与51单片机进行通信连接的方式很简单,首先要解决的是电平标准,51的I/O口最大输出5V电压,而RS-232要求电压在±10V,为达到电平匹配,需用到MAX232CPF电平转换芯片,将0~5V电平转换为±10V电平,从而实现电平匹配;然后,数据接口只用到了数据发送与接收2个端口,还有数据的请求发送与允许发送,共4个端口,MAX232CPF还有其他一些外围电路接口,但比较简单,都是些电容接口,从而实现单片机与RS232接口的通信。

  

  51单片机串口max232通信程序

  //工作晶振为11.0592MHz,否则出现返回值错误,一个字节的发送

  //工作晶振为11.0592MHz,否则出现返回值错误,一个字节的发送

  #include《regx52.h》

  #define uchar unsigned char

  #define uint unsigned int

  uchar a,flag;

  uchar table[]={“very good ”};

  //-----------初始化定时器和串口-

  void inital_timer1()

  {

  TMOD=0X20; //必须使用定时器1,串口使用规定

  TH1=0Xfd; //定时器1,工作方式2,8位 自动重装

  TL1=0Xfd; //高8位与低8位数值必须相同

  TR1=1; //定时器1允许位

  REN=1; //串口使能

  SM0=0; //串口 工作方式设置,工作方式1

  SM1=1; ES=1; //串口中断使能

  EA=1; // 总中断使能

  }

  //----------串口中断---------

  void gorpe() interrupt 4

  {

  RI=0; //接受中断标志位,硬件置1,必须软件置0

  a=SBUF; // 特殊功能寄存器

  flag=1; // 检测标志位

  }

  //-----接收数据,并向上位机作出反应(即发送返回数据)---

  void display()

  {

  uchar i;

  if(flag==1)

  {

  ES=0; //关闭串口中断,接下来要发送数据,否则发送完一个数据仍会产生中断,产生死循环

  for(i=0;i《10;i++)

  {

  SBUF=table[i];

  while(!TI); //判断是否发送完成

  TI=0; //发送中断标志位

  }

  SBUF=a;

  while(!TI);

  TI=0;

  ES=1;

  flag=0;

  }

  }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分