视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
基于RS485接口的数据传输电路设计
2025-09-23 10:38:22 责编:小OO
文档
单片机技术课程设计说明书

                 基于RS485接口的数据传输电路设计

专业电气工程及其自动化
学生姓名周琪
班级BM电气101

学号1051402115
指导教师周云龙
完成日期2013年  6 月  18 日

              目    录

1. 概述    1

2. RS485硬件问题    6

   2.1 问题的提出     6

   2.2 电路基本原理     6

    2.3 RS-485的DE控制端设计     8

    2.4 避免总线冲突的设计     8

    2.5 RS-485输出电路部分的设计     8

    2.6 系统的电源选择     6

    2.7软件的编程     6

    2.8 结论     6

2. 硬件设计    6

2.1 RS485    6

2.2 多通机原理    6

2.3 单片机通信原理    8

2.4 MX485    8

2.5 整题电路设计    8

3. 软件设计    11

3.1 通信软件实现    11

3.2 程序流程图    12

4. 联合调试    14

5设计小结    16

参考文献    16

附    录    17

附录1:程序清单    17

附录2:系统电路图    21

1.概    述

  单片机是一种采用超大规模集成电路技术把多种功能集成到一块硅片上构成的一个小而完善的计算机系统。它广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域随着计算机技术的发展及工业自动化水平的提高, 在许场合采用单机控制已不能满足现场要求,因而必须采用多机控制的形式,而多机控制主要通过多个单片机之间的串行通信实现。串行通信作为单片机之间常用的通信方法之一, 由于其通信编程灵活、硬件简洁并遵循统一的标准, 因此其在工业控制领域得到了广泛的应用。本次课程设计就是利用单片机,基于RS-485芯片,设计一种简单的多机通信——一主两从。

 RS一485接口是一种基于平衡发送和差分接收的串行总线,具有很强的抗共模干扰能力,在适当的波特率下传输距离远;同时易于进行网络扩展,被广泛的应用在很多工业现场。

 节能灯寿命检测环境中,主要干扰来自开关和寿命检测的强电干扰、开关产生的电磁干扰、空气循环设备的干扰等等;同时由于寿命检测环境温度高,强电系统复杂,也给系统的运行提出更高的要求。寿命检测系统要求实时报告每一盏节能灯的运行状态、环境温度、电压等,并在寿终计算出节能灯寿命、光通等参数。可见系统的传输数据量大,实时性强,因此物理总线的拓扑结构和通信协议尤为关键。

1.1 总设计方案

在多机通信中,最重要的是保证通信有条不紊地进行,因此需要严格的通信协议和完善的通信软件,本次课程设计就是利用RS-485电气特性和简单的结构方式,基于RS-485的多机通信系统,采用自定义串行通信协议,实现2个通信终端之间互相通信的功能

该设计方案通信距离远、抗干扰能力强也可实现主机与从机的通信,但不能实现从机之间的通信。

RS-485方式构成的多机通信系统采用主从式结构:主机控制多个从机,作为从机的单片机不主动发送命令或数据,一切都由主机单片机控制;并且在一个多机系统中,只有一台主机,各台从机之间不能相互通信,即使有信息交换也必须通过主机转发。采用RS-485构成的多机通信系统原理。在总线末端接一个匹配电阻,吸收总线上的反射信号,使得正常传输信号无毛刺。匹配电阻的取值应该与总线的特性阻抗相当。在总线上没有信号传输时,总线处于悬浮状态,容易受干扰信号的影响。将总线上的差分信号的正端A+和负端B-之间接一个10K的电阻;负端B-和地间接一个10K的电阻,形成一个电阻网路。当总线上没有信号传输时,正端A+的电平大约为3.2V,负端B-的电平大约为1.6V,即使有干扰信号,也很难产生串行通信的起始信号0,从而增加了总线抗干扰的能力。

1.2设计要求:

设计一个RS485接口并能实现双机通讯的单片机应用系统。

1.3设计方案:

本次设计,对于两片C51,采用RS485进行双机通信。发送方的数据由串行口TXD段输出,经过电平转换芯片MAX485将TTL电平转换为RS485电平输出,经过传输线将信号传送到接收端。接收方也使用MAX485芯片进行电平转换后,信号到达接收方串行口的接收端。接受方接收后,在数码管上显示接收的信息。为提高抗干扰能力,还可以在输入输出端加光耦合进行光电隔离。

软件部分,通过通信协议进行发送接收,主机先送AAH给从机,当从机接收到AAH后,向主机回答BBH。主机收到BBH后就把数码表TAB[16]中的10个数据送给从机,并发送检验和。从机收到16个数据并计算接收到数据的检验和,与主机发送来的检验和进行比较,若检验和相同则发送00H给主机;否则发送FFH给主机,重新接受。从机收到16个正确数据后送到一个数码管显示。

选择STC单片机作为控制MCU,用6N137高速光耦进行隔离,其结构图如图所示。

1.4设计系统流程图

首先判断是接收中断还是发送中断,若是接收中断,则清除RI,同时启动字符间隔定时器TO,并置收发标志为收。当接收完第2个字节后,各从机立即判断是否寻址本机,若是,则置SM2为‘0’,继续接收主机送来的数据;若不是,则禁止T0定时,不在接收后面的数据。当被寻址从机接收完一帧信息后,字符间隔定时器会产生定时中断,进入TO中断服务程序。下图是TO中断服务程序流程图。

进入TO中断服务程序后,首先清除TO中断请求标志,停止TO定时器,接着判断是接收完成还是发送超时,若是接收完成,再判断校验和是否正确,若正确,对接收的命令进行解释,看是主机读还是主机写操作,若是主机读,则将数据打包,送到专门用于通信的数组,接着,禁止接收,置本机为应答工作方式,最后启动发送,发送第一个字节,同时启动发送时限定时器TO。当一个字节发送完后,便进入通信中断服务程序,继续发送余下数据。如果在上边判校验和时,发现不正确,则置SM2为‘1’,恢复本机的侦听状态,以便接收主机的重发信息

2  RS485硬件问题

2.1问题的提出

在工业控制及测量领域较为常用的网络之一就是物理层采用RS-485通信接口所组成的工控设备网络。这种通信接口可以十分方便地将许多设备组成一个控制网络。从目前解决单片机之间中长距离通信的诸多方案分析来看,RS-485总线通信模式由于具有结构简单、价格低廉、通信距离和数据传输速率适当等特点而被广泛应用于仪器仪表、智能化传感器集散控制、楼宇控制、监控报警等领域。但RS485总线存在自适应、自保护功能脆弱等缺点,如不注意一些细节的处理,常出现通信失败甚至系统瘫痪等故障,因此提高RS-485总线运行可靠性至关重要。

2.2 电路基本原理

  某节点的硬件电路设计如图1所示,在该电路中,使用了一种RS-485接口芯片SN75LBC184,它采用单一电源Vcc,电压在+3~+5.5 V范围内都能正常工作。与普通的RS-485芯片相比,它不但能抗雷电的冲击而且能承受高达8 kV的静电放电冲击,片内集成4个瞬时过压保护管,可承受高达400 V的瞬态脉冲电压。因此,它能显著提高防止雷电损坏器件的可靠性。对一些环境比较恶劣的现场,可直接与传输线相接而不需要任何外加保护元件。该芯片还有一个独特的设计,当输入端开路时,其输出为高电平,这样可保证接收器输入端电缆有开路故障时,不影响系统的正常工作。另外,它的输入阻抗为RS485标准输入阻抗的2倍(≥24 kΩ),故可以在总线上连接个收发器。芯片内部设计了限斜率驱动,使输出信号边沿不会过陡,使传输线上不会产生过多的高频分量,从而有效扼制电磁干扰。在图1中,四位一体的光电耦合器TLP521让单片机与SN75LBC184之间完全没有了电的联系,提高了工作的可靠性。基本原理为:当单片机P1.6=0时,光电耦合器的发光二极管发光,光敏三极管导通,输出高电压(+5 V),选中RS485接口芯片的DE端,允许发送。当单片机P1.6=1时,光电耦合器的发光二极管不发光,光敏三极管不导通,输出低电压(0 V),选中RS485接口芯片的RE端,允许接收。SN75LBC184的R端(接收端)和D端(发送端)的原理与上述类似。

2.3 RS-485的DE控制端设计

  在RS-485总线构筑的半双工通信系统中,在整个网络中任一时刻只能有一个节点处于发送状态并向总线发送数据,其他所有节点都必须处于接收状态。如果有2个节点或2个以上节点同时向总线发送数据,将会导致所有发送方的数据发送失败。因此,在系统各个节点的硬件设计中,应首先力求避免因异常情况而引起本节点向总线发送数据而导致总线数据冲突。以MCS51系列的单片机为例,因其在系统复位时,I/O口都输出高电平,如果把I/O口直接与RS-485接口芯片的驱动器使能端DE相连,会在CPU复位期间使DE为高,从而使本节点处于发送状态。如果此时总线上有其他节点正在发送数据,则此次数据传输将被打断而告失败,甚至引起整个总线因某一节点的故障而通信阻塞,继而影响整个系统的正常运行。考虑到通信的稳定性和可靠性,在每个节点的设计中应将控制RS485总线接口芯片的发送引脚设计成DE端的反逻辑,即控制引脚为逻辑“1”时,DE端为“0”;控制引脚为逻辑“0”时,DE端为“1”。在图1中,将CPU的引脚P1.6通过光电耦合器驱动DE端,这样就可以使控制引脚为高或者异常复位时使SN75LBC184始终处于接收状态,从而从硬件上有效避免节点因异常情况而对整个系统造成的影响。这就为整个系统的通信可靠奠定了基础。

  此外,电路中还有1片看门狗MAX813L,能在节点发生死循环或其他故障时,自动复位程序,交出RS-485总线控制权。这样就能保证整个系统不会因某一节点发生故障而独占总线,导致整个系统瘫痪。

2.4 避免总线冲突的设计

  当一个节点需要使用总线时,为了实现总线通信可靠,在有数据需要发送的情况下先侦听总线。在硬件接口上,首先将RS-485接口芯片的数据接收引脚反相后接至CPU的中断引脚INT0。在图1中,INT0是连至光电耦合器的输出端。当总线上有数据正在传输时,SN75LBC184的数据接收端(R端)表现为变化的高低电平,利用其产生的CPU下降沿中断(也可采用查询方式),能得知此时总线是否正“忙”,即总线上是否有节点正在通信。如果“空闲”,则可以得到对总线的使用权限,这样就较好地解决了总线冲突的问题。在此基础上,还可以定义各种消息的优先级,使高优先级的消息得以优先发送,从而进一步提高系统的实时性。采用这种工作方式后,系统中已经没有主、从节点之分,各个节点对总线的使用权限是平等的,从而有效避免了个别节点通信负担较重的情况。总线的利用率和系统的通信效率都得以大大提高,从而也使系统响应的实时性得到改善,而且即使系统中个别节点发生故障,也不会影响其他节点的正常通信和正常工作。这样使得系统的“危险”分散了,从某种程度上来说增强了系统的工作可靠性和稳定性。

2.5 RS-485输出电路部分的设计

  在图1中,VD1~VD4为信号限幅二极管,其稳压值应保证符合RS-485标准,VD1和VD3取12 V,VD2 和VD4取7 V,以保证将信号幅度限定在-7~+12 V之间,进一步提高抗过压的能力。考虑到线路的特殊情况(如某一节点的RS-485芯片被击穿短路),为防止总线中其他分机的通信受到影响,在SN75LBC184的信号输出端串联了2个20 Ω的电阻R1和R2,这样本机的硬件故障就不会使整个总线的通信受到影响。在应用系统工程的现场施工中,由于通信载体是双绞线,它的特性阻抗为120 Ω左右,所以线路设计时,在RS485网络传输线的始端和末端应各接1个120 Ω的匹配电阻(如图1中的R3),以减少线路上传输信号的反射。

2.6系统的电源选择

  对于由单片机结合RS-485组建的测控网络,应优先采用各节点供电的方案,同时电源线不能与RS-485信号线共用同一股多芯电缆。RS-485信号线宜选用截面积0.75 mm2以上的双绞线而不是平直线,并且选用线性电源TL750L05比选用开关电源更合适。TL750L05必须有输出电容,若没有输出电容,则其输出端的电压为锯齿波形状,锯齿波的上升沿随输入电压变化而变化,加输出电容后,可以抑制该现象。

2.7 软件的编程

  SN75LBC184在接收方式时,A、B为输入,R为输出;在发送方式时,D为输入,A、B为输出。当传送方向改变一次后,如果输入未变化,则此时输出为随机状态,直至输入状态变化一次,输出状态才确定。显然,在由发送方式转入接收方式后,如果A、B状态变化前,R为低电平,在第一个数据起始位时,R仍为低电平,CPU认为此时无起始位,直到出现第一个下降沿,CPU才开始接收第一个数据,这将导致接收错误。由接收方式转入发送方式后,D变化前,若A与B之间为低电压,发送第一个数据起始位时,A与B之间仍为低电压,A、B引脚无起始位,同样会导致发送错误。克服这种后果的方案是:主机连续发送两个同步字,同步字要包含多次边沿变化(如55H ,0AAH),并发送两次(第一次可能接收错误而忽略) ,接收端收到同步字后,就可以传送数据了,从而保证正确通信。

  为了更可靠地工作,在RS485总线状态切换时需要适当延时,再进行数据的收发。具体的做法是在数据发送状态下,先将控制端置“1”,延时0.5 ms左右的时间,再发送有效的数据,数据发送结束后,再延时0.5 ms,将控制端置“0”。这样的处理会使总线在状态切换时,有一个稳定的工作过程。

  单片机通信节点的程序基本上可以分为6个主要部分,分别为预定义部分、初始化部分、主程序部分、设备状态检测部分、帧接收部分和帧发送部分。预定义部分主要定义了通信中使用的握手信号,用于保存设备信息的缓冲区和保存本节点设备号的变量。设备状态检测部分应能在程序初始化后,当硬件发生故障时,作出相应的反应。主程序部分应能接收命令帧,并根据命令的内容作出相应的回应。为缩短篇幅,这里仅给出主程序部分的代码。如下所示:

  /* 主程序流程*/

  while(1) {         //主循环

    if(recv_cmd(&type)==0) //发生帧错误或帧地址与本机

                //地址不符,丢弃当前帧后返回

  continue;

  switch(type) {

    case __ACTIVE_:    //主机询问从机是否存在

      send_data(__OK_, 0,dbuf);//发送应答信息

      break;

    case __GETDATA_:

      len = strlen(dbuf);

      send_data(__STATUS_, len,dbuf);//发送状态信息

        break;

    default:

        break;    //命令类型错误,丢弃当前帧后返回

    }

  }

2.8 结论

  RS-485由于使用了差分电平传输信号,传输距离比RS-232更长,最多可以达到3000 m,因此很适合工业环境下的应用。但与CAN总线等更为先进的现场工业总线相比,其处理错误的能力还稍显逊色,所以在软件部分还需要进行特别的设计,以避免数据错误等情况发生。另外,系统的数据冗余量较大,对于速度要求高的应用场所不适宜用RS-485总线。虽然RS-485总线存在一些缺点,但由于它的线路设计简单、价格低廉、控制方便,只要处理好细节,在某些工程应用中仍然能发挥良好的作用。总之,解决可靠性的关键在于工程开始施工前就要全盘考虑可采取的措施,这样才能从根本上解决问题,而不要等到工程后期再去亡羊补牢。 

2、硬件设计

2.1  RS-485

    RS-485标准接口是单片机系统种常用的一种串行总线之一。RS-485通信方式RS-485标准是由EIA(电子工业协会)和TIA(通讯工业协会)共同制订和开发的。RS-485作为一种多点差分数据传输的电气规范,已成为业界最广泛应用的标准通信接口之一。理论上,RS-485标准最多接入32个设备(受芯片驱动能力的影响),可以工作在半双工或全双工模式下,最大传输距离约为1219米,最大传输速率约为10Mbps[1]。然而通常RS-485网络采用平衡双绞线作为传输媒体,平衡双绞线的长度与传输速率成反比,只有在20Kbps的传输速率下,才可能达到最大传输距离。一般15米长的双绞线最大传输速率仅为1Mbps。不过对于速率要求不是很高的控制系统来说已经足够了。

RS-485采用平衡发送和差分接收方式来实现通信:在发送端TXD将串行口的TTL电平信号转换成差分信号A、B两路输出,经传输后在接收端将差分信号还原成TTL电平信号。两条传输线通常使用双绞线,又是差分传输,因此有极强的抗共模干扰的能力,接收灵敏度也相当高。同时,最大传输速率和最大传输距离也大大提高。如果以10Kbps速率传输数据时传输距离可达12m,而用100Kbps时传输距离可达1.2km。如果降低波特率,传输距离还可进一步提高。另外RS-485实现了多点互连,最多可达256台驱动器和256台接收器,非常便于多器件的连接。不仅可以实现半双工通信,而且可以实现全双工通信。 

2.2  多机通原理

   在多机通信中,每台从机均分配有一个从机地址,主机与从机之间进行串行通信时,通常是主机先呼叫某从机地址,唤醒被叫从机后,主、从两机之间进行数据交换。而未被呼叫的从机则继续进行各自的工作。可是,如果在主机与某被呼叫从机进行数据交换过程中,其他从机如果不采取相应的数据识别技术,则这些从机就会因为串行通信线上有数据传输而时时被打断,影响正常的工作。利用单片机的串口工作方式2、方式3可以很好解决上述问题。在多机通信过程中,从机首先要解决的是如何识别主机发送的是地址信息还是数据信息。当发送的是地址信息时,各从机都响应串口中断,接收主机下发的一帧地址数据。而当主机发送数据帧时,无关从机可不响应串口中断。解决的方法是:当主机发送一帧地址信息时,应保持这帧数据的第9位为1(即TB8=1)。从机按照工作方式2或工作方式3运行时,将串口寄存器SCON中的控制位SM2置为1,当所接收的一帧数据的第9位为1,所有从机都产生串口中断,接收这一帧地址数据并与各自的从机地址进行比较,以判断主机是否要与本机通信。接收到的地址数据与从机地址相等达到为被呼叫从机,该从机将串口控制寄存器SCON中的控制位SM2清为0,去接收主机发送来的数据帧(数据帧的第9位为0),此时不管接收到的第9位数据是否为1或0,都要产生串口中断,这就保证了主机与被呼叫从机间的正常数据通信。数据通信结束后,该从机又重新将串行口控制寄存器SCON中的控制位SM2置为1,为下一次与主机进行通信做好准备。其他从机则一直在SM2=1下继续自己的工作,不会因为主、从机之间的数据通信而被打断。

多机通信的实现,主要靠主、从机正确地设置与判断多机通信控制位SM2和发送或接收的第9位数据(TB8或RB8)。当主机给从机发送信息时,要根据发送信息的性质来设置TB8,发送地址信号时,设置TB8=1;发送数据或命令时,设置TB8=0。当从机的SM2为1时,该从机只接收地址帧(RB8位为1),对数据帧(RB8位为0)将不予理睬。而当SM2为0时,该从机接收所有发送来的信息。多机通信过程如下:

使所有从机的SM2置1,处于只接收地址帧的状态(即从机复位);

主机发送一地址帧信息,其中包含8位地址,第9位为地址、数据标志位,第9位置1表示发送的是地址;

从机接收到地址帧后,各自中断CPU,把接收到的地址与本地址作比较;

地址相符的从机,使SM2清零以接收主机随后发来的所有信息,对于地址不相符的从机,仍保持SM2=1状态,对主机随后发送的数据不予理睬,直到主机发送来新的地址帧;

主机发送数据或控制信息给被寻址的从机;

被寻址的从机,因SM2=0,可以接收主机发送过来的所有数据,当从机接收数据结束时,置位SM2,返回接收地址帧状态(复位状态);

当主机改为与另外从机联系时,可再发地址帧寻址其从机,而先前被寻址过的从机恢复SM2=1。

2.3单片机通信功能

单片机

计算机与外界的信息交换称为通信,常用的通信方式有两种:并行通信和串行通信。51单片机用4个接口与外界进行数据输入与数据输出就是并行通信,并行通信的特点是传输信号的速度快,但所用的信号线较多,成本高,传输的距离较近。串行通信的特点是只用两条信号线(一条信号线,再加一条地线作为信号回路)即可完成通信,成本低,传输的距离较远。

51单片机的串行接口是一个全双工的接口,它可以作为UART(通用异步接受和发送器)用,也可以作为同步移位寄存器用。51单片机串行接口的结构如下:

(1)数据缓冲器(SBUF)

接受或发送的数据都要先送到SBUF缓存。有两个,一个缓存,另一个接受,用同一直接地址99H,发送时用指令将数据送到SBUF即可启动发送;接收时用指令将SBUF中接收到的数据取出。

(2)串行控制寄存器(PCON)

SCON用于串行通信方式的选择,收发控制及状态指示,各位含义如下:

SM0SM1SM2RENTB8RB8TIRI
SM0,SM1:串行接口工作方式选择位,这两位组合成00,01,10,11对应于工作方式0、1、2、3。串行接口工作方式特点见下表

SM0SM1工作方式功能波特率
 0008位同步移位寄存器(用于I/O扩展)

fORC/12

01110位异步串行通信(UART)

可变(T1溢出率*2SMOD/32)

10211位异步串行通信(UART)

fORC/或fORC/32

11311位异步串行通信(UART)

可变(T1溢出率*2SMOD/32)

SM2:多机通信控制位。

REN:接收允许控制位。软件置1允许接收;软件置0禁止接收。

TB8:方式2或3时,TB8为要发送的第9位数据,根据需要由软件置1或清0。

RB9:在方式2或3时,RB8位接收到的第9位数据,实际为主机发送的第9位数据TB8,使从机根据这一位来判断主机发送的时呼叫地址还是要传送的数据。

TI:发送中断标志。发送完一帧数据后由硬件自动置位,并申请中断。必须要软件清零后才能继续发送。

RI:接收中断标志。接收完一帧数据后由硬件自动置位,并申请中断。必须要软件清零后才能继续接收。

(3)输入移位寄存器

接收的数据先串行进入输入移位寄存器,8位数据全移入后,再并行送入接收SBUF中。

(4)波特率发生器

波特率发生器用来控制串行通信的数据传输速率的,51系列单片机用定时器T1作为波特率发生器,T1设置在定时方式。波特率时用来表示串行通信数据传输快慢程度的物理量,定义为每秒钟传送的数据位数。

(5)电源控制寄存器PCON

其最高位为SMOD。

(6)波特率计算

当定时器T1工作在定时方式的时候,定时器T1溢出率=(T1计数率)/(产生溢出所需机器周期)。由于是定时方式,T1计数率= fORC/12。产生溢出所需机器周期数=模M-计数初值X。

  2.4MAX485芯片

 MAX485是芯片接口的一种类型。MAX485接口芯片是Maxim公司的一种RS-485芯片。  MAX485、MAX487-MAX491以及MAX1487是用于RS-485与RS-422通信的低功耗收发器,每个器件中都具有一个驱动器和一个接收器。MAX483、MAX487、MAX488以及MAX4具有限摆率驱动器,可以减小EMI,并降低由不恰当的终端匹配电缆引起的反射,实现最高250kbps的无差错数据传输。MAX481、MAX485、MAX490、MAX491、MAX1487的驱动器摆率不受,可以实现最高2.5Mbps的传输速率。这些收发器在驱动器禁用的空载或满载状态下,吸取的电源电流在120µA至500µA之间。另外,MAX481、MAX483与MAX487具有低电流关断模式,仅消耗0.1µA。所有器件都工作在5V单电源下。

采用单一电源+5 V工作,额定电流为300 μA,采用半双工通讯方式。它完成将TTL电平转换为RS-485电平的功能。MAX485芯片的结构和引脚都非常简单,内部含有一个驱动器和接收器。RO和DI端分别为接收器的输出和驱动器的输入端,与单片机连接时只需分别与单片机的RXD和TXD相连即可;/RE和DE端分别为接收和发送的使能端,当/RE为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态,因为MAX485工作在半双工状态,所以只需用单片机的一个管脚控制这两个引脚即可;A端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0。在与单片机连接时接线非常简单。只需要一个信号控制MAX485的接收和发送即可。同时将A和B端之间加匹配电阻,一般可选100Ω的电阻。[

用8051串行接口通信,如果两台8051单片机之间的距离很近(不超过1.5m),可以采用直接将两台8051单片机的串行接口直接相连,利用其自身的TTL电平(0-5V)直接传输数据信息。如果传输距离较远(超过1.5m),由于传输线的阻抗与分布电容,会产生电平损耗和波形畸变,以至于检测不出数据或数据出错。此时可利用 RS485标准总线接口,将单片机输出的TTL电平转换为RS485标准电平(逻辑1为-15—-5V;逻辑0为+5-—+15V)。用RS485可将传输距离提高到15m,如果想远距离传输,可以采用RS422或者RS485。

    电平转换芯片MAX485是美信公司(MAXIM)生产,专用于进行将TTL电平转换为RS485电平的芯片,MAX485内部有泵电源,能将+5V电源电压在芯片内提高到RS485电平所需的+10V或者-10V电平。

MAX485是用于RS-485与RS-422通信的低功耗收发器。MAX485的驱动器摆率不受, 可以实现最高2.5Mbps的传输速率。这些收发器在驱动器禁用的空载或满载状态下,吸取的电源电流在120μA至500μA之间。所有器件都工作在5V单电源下。驱动器具有短路电流,并可以通过热关断电路将驱动器输出置为高阻状态。接收器输入具有失效保护特性,当输入开路时,可以确保逻辑高电平输出。具有较高的抗干扰性能。MAX485是市面上最为常见的RS422芯片,亦是用量最大的RS422芯片,性价比高,优质,供货稳定是大部分厂家采用它的主要原因。

图2.电平转换芯片MAX485

2.5整体电路设计

最终设计电路如下图3所示,发送方的数据由串行口TXD段输出,经过电平转换芯片MAX485将TTL电平转换为RS485电平输出,经过传输线将信号传送到接收端。接收方也使用MAX485芯片进行电平转换后,信号到达接收方串行口的接收端。接受方接收后,通过P1口在数码管上显示接收的信息。

图3.串行通信电路

三、软件设计

通过通信协议进行发送接收,主机先送AAH给从机,当从机接收到AAH后,向主机回答BBH。主机收到BBH后就把数码表TAB[16]中的10个数据送给从机,并发送检验和。从机收到16个数据并计算接收到数据的检验和,与主机发送来的检验和进行比较,若检验和相同则发送00H给主机;否则发送FFH给主机,重新接受。从机收到16个正确数据后送到一个数码管显示。

3.1.通信软件实现

(1)串行口工作于方式1;用定时器1产生9600bit/s的波特率,工作于方式2。

(2)功能:将本机ROM中数码表TAB[16]中的16个数发送到从机,并保存在从机内部ROM中,从机收到这16个数据后送到一个数码管循环显示。

(3)通信协议:主机首先发送连络信号(AAH),从机接收到之后返回一个连络信号(BBH)表示从机已准备好接收。

(4)通信过程使用第九位发送奇偶校验位。

(5)从机接收到一个数据后,立即进行奇偶校验,若数据没有错误,则返回00H,否则返回FFH。

(6)主机发送一个数据后,等待从机返回数据;若为00H,则继续发送下一个数据,若为FFH,则重新发送数据。

3.2程序流程图

(1)发送端程序流程图

(2)接收方程序流程图

4.联合调试

在protues上进行仿真实验。首先使用KeilC将编写完成的程序编译生成HEX文件,将HEX文件烧录到两片单片机中,进行仿真实验,结果如下图4所示,可以看到,接收端已将接受到的数据完整的显示了出来。

图4.仿真图

5设计小结

在整个课程项目的设计过程中,我们遇到了许多困难和问题,但是凭着良好的心态和不放弃的精神,我们最终顺利完成了作品的设计和制作。

1、编程基础不扎实。

由于大一时没有打下扎实的编程基础,在编写这次的项目程序时,我们总是干道无处下手。最后我们通过查资料,并师兄的指导下,找准了方向。

2、硬件连接原理在某些方面存在误解。

由于是第一次在没有老师的情况下做作品,有些时候就会想当然,缺少实战经验的我们缺少理论到实践的经验,不过实验室的两位学长在这方面帮了我们很多。

单片机的课程项目设计给了我们一次团队合作的机会,对于我们这一代来说,团队合作精神是我们身上所缺少但却必须要具备的。在这次的团队合作中我们有以下几点感悟:

1、心要齐

作为同一个团队的成员,大家都是为了同一个目标奋斗,所以要以积极的态度朝着好的方向努力。

就比如做这个课程设计,首先大家在做什么作品上面要达成认同,目标统一了之后才能团结起来去为之奋斗。在奋斗的时候,每个人的态度都要端正,不能有的人很积极的在准备,而有的人却在消极的应付差事,这样不仅不利于团队的发展,更会影响到队员之间的感情,最后很可能导致团队的解散,不仅作品完成不了,同学之间的友谊也多了裂痕。

2、心要宽

虽然大家在一个团队,为了同一个目标在奋斗,但是每个人依旧是个的个体,不可能在每一个方面大家都是想的一样的,当某个队员自己有一些想法时,我们要个他一个宽松的环境让他坦诚的说出心里的话,作为听众的我们,要耐心的听取他的意见,认真思考,然后用合适的方式进行讨论,不能别人一说什么就否定人家,这样一来,以后队里就不会再有人说话了,好的创意和想法也不会有被挖掘的机会。

如果我们自己心里有什么想法,也要大胆的说出来,但是要注意语气和措辞,毕竟这是大家的团队,不是以自己为领导的工作班子。要听得进别人的意见。

这次单片机课程设计,在我们看来不仅仅是单纯的一个单片机的应用,而是多学科多领域的综合设计。做完这次设计,我们有以下几点心得体会:

1、做这个设计不是光靠学好单片机这一门课就可以的。

在这个课程项目的设计过程中,我们充分体会到了要全面发展,各个学科都要学好,知识的全面性很重要。比如在编写程序时,我们就明显感觉到了C语言的基础不够扎实,当初学C语言的时候并没有意识到它的重要性,而当我们真正开始做设计的时候才发现一个课程的项目设计是需要其他许多项目来给它做基础的。

2、做这个设计不是光靠学好书本上的知识就够的。

设计的灵魂便在于它的理念,要做出一个好的设计作品来,需要你平时对生活有足够的观察和了解,古话说,学以致用,及时你设计出来的东西原理再高深,但在实际生活中却无处可用,那也是没有任何价值的。所以在刻苦学习的同时,也要关注社会动态,了解人民生活所需,有一个正确的设计理念才能使自己走对第一步棋。

6参考文献

[1] 李光飞,李良儿,楼然苗等.单片机C程序设计实例指导.北京: 北京航空航天大学出版社,2005:47-51

[2] 梅丽凤,王艳秋,汪毓铎,张军. 单片机原理与接口技术(修订本). 北京: 清华大学出版社;北京交通大学出版社,2006:329-340

[3] 刘军.单片机原理与接口技术.上海:华东理工大学出版社.2006:88-92 

[4] 毛德平,凌有涛.一种基于RS 485总线的温度、湿度测控系统.安徽工程科技学院,2006:168-170

[5] 胡汉才.单片机原理及其接口技术.第一版.北京:清华大学出版社,2003:424-479

[6] 叶帆工作室.http://blog.csdn.net/yefanqiu/archive/2006/08/18/

1091359.aspx 

[7] 求是科技.单片机典型模块设计实例导航.北京:人民邮电出版社,2004:418-420

[8] 龚健伟技术(串口通信技术).http://www.gjwtech.com

[9] 凌阳科技教育推广中心.http://www.unsp.com.cn/app/html/

200619181102.shtml

[10] 凌阳科技教育推广中心.http://www.unsp.com.cn/dvbbs/dispbbs.asp

?boardid=32&star=1&replyid=83401&id=19223&skin=0&page=1

[11] 倪继烈,刘新民.微机原理与接口技术.成都:电子科技大学出版社,2004:230-239

[12] 马忠梅.单片机的c语言应用程序设计.第一版.北京:北京航空航天大学出版社,1997:126-144

[13] 彭为,黄科,雷道仲.单片机典型系统设计实例精讲.北京:电子工业出版社,2006:116-134

[14] 李勇平.中文Visual Basic 6.0 案例教程.北京:北京希望电子出版社.2001:177-213

[15] 求是科技.Visual Basic串口通信工程开发实例导航.北京:人民邮电出版社.2003:4-52

[16] andyzx的开发日记.http://blog.csdn.net/andyzx/archive/2006/04/25/

676505.aspx

技术大学出版社,2002

6.附录

1主机发送程序

#include

#define uchar unsigned char     

void init();

void send();

ucharTAB[16] ={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

uchar i,sum;

int j;

main()

{  init();

  send();

    } 

void init(void)

{ EA=1;

  ES=1;

  TMOD=0x20;

  TH1=0xfd;

  TL1=0xfd;

  PCON=0x00;

  SCON=0x50;

  TR1=1;

    } 

void send(void)

{do

    { SBUF=0xaa;

      while(!TI);

      TI=0;

      while(!RI);

      RI=0;

      }

  while((SBUF^0xbb)!=0);

    do

    { sum=0;

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

      { SBUF=TAB[i];

        sum+=TAB[i];

        while(!TI);

        TI=0;

        }

        SBUF=sum;

        while(!TI);

        TI=0;

        while(!RI);

        RI=0;

        }

        while(SBUF!=0);

        }

2从机接收程序

#include

#define uchar unsigned char

#define uint unsigned int

void delay(int );

void receive(void) ;

void init(void);

uchar i,sum;

int j;

ucharTAB[16] ={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void main()

{ init();

  receive();

   }

void init(void)

{ EA=1;

  ES=1;

  TMOD=0x20;

  TH1=0xfd;

  TL1=0xfd;

  PCON=0x00;

  SCON=0x50;

  TR1=1;

    } 

void delay(int x)

{    int i,j;

for(i=0;i        for(j=1;j<=150;j++ );

        }

void receive(void)

{ uchar TABS[16];

  do

  { while(!RI);RI=0;  }

     while((SBUF^0xaa)!=0);

     SBUF=0xbb;

     while(!TI);TI=0;

     while(1)

     { sum=0;

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

       { while(!RI);RI=0;

         TABS[i]=SBUF;

         sum+=TABS[i];

         }

         while(!RI);RI=0;

         if((SBUF^sum)==0)

         { SBUF=0x00;

           while(!TI);

           TI=0;

           break;

           }

           else

           { SBUF=0xff;

             while(!TI);

             TI=0;

             }

             }

             while(1)

             { for(i=0;i<=15;i++)

              { P1=TABS[i];

                delay(500);

                }

                }

                }

系统电路图下载本文

显示全文
专题