RS-485总线

更新时间:2024-04-11 11:03:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

毕 业 论 文 第 1 页 共 36页

目录

摘要 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 2 第一部分 RS-485总线应用综述 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 3

1.1 1.2 1.3

RS-485标准规范 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 3 RS-485可靠性设计问题 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 4 RS-485 多机通讯网络实现 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 8

第二部分 会议表决系统的485网络硬件实现 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 10

2. 1 系统总体设计方案论证 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 10 2.1.1 系统框图设计 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 11

2. 2 芯片选择考虑 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 12

2. 2. 1 单片机89C2051及通讯接口芯片MAX3085/3082 ┄┄┄┄┄ 12

2.3 电路设计 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 13

2.4 2.5

PCB板的制作 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 14 电路调试 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 15

第三部分 基于485总线的会议系统多机通讯编程 ┄┄┄┄┄┄┄┄┄┄┄┄ 16

3. 1

AT89C2051的串口通讯原理┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 16

3. 2 PC和单片机的多机通讯测试 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 21 3. 3 会议系统软件设计思路 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 23

3.3.1 分层管理软件模式和通讯协议 ┄┄┄┄┄┄┄┄┄┄┄┄ 23

3.4 主机部分编程实现 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 27

3. 5 分机部分编程实现 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 29

3. 6 Microwire EEPROM 编程 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 31 3. 7 PC 用户软件的实现 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 34

附录 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 35 小结与致谢 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 36 参考文献 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 36

毕 业 论 文 第 2 页 共 36页

RS-485总线多机通讯实现 会议表决系统研制

论文作者:潘剑锋 指导老师:陈耀和

摘要

RS-485总线作为一种允许多点、差分数据传输的通讯电气规范,定义了一个极为坚固可靠的通信链路,具有长传输距离、宽共模范围、信号冲突保护和良好的抑制高噪声等特性。本文在研究讨论RS-485总线的特点及组网技术的基础上,对RS-485总线多机通讯能力在一个会议表决系统上的实现进行了设计总结,较为详细地阐述了设计要点和关键技术。此外对系统中应用的Micro wire总线93CXX系列串行CMOS EEPROM的读写编程也作了一个较为深入的讨论,并给出了一个通用的读写程序。

关键字

RS-485总线、 多机通讯、 Micro wire总线 、 93CXX 系列串行CMOS EEPROM

Implement of multiple communication by RS-485 standard bus and application in meeting vote system

author: Pan Jianfeng adviser: Chen Yaohe Abstract

RS-485, is a communication electrical standard which allows multipoint, differentiate data transmission. Its perfect specialties of long distance transmission, wide common mode bound, fail-safe for signal clash and good noise control defined a strongly link for serial communication. This article study base on the feature of RS-485 and its implementation of multiple communication, and call about the application in a meeting vote system.

Additionally, we also make a discussion about the 93CXX family of serial CMOS EEPROM which are based on the Micro wire bus. A universal program is given out.

Keyword

RS-485 bus、 multiple communication、 Micro wire bus 93CXX family of serial CMOS EEPROM

毕 业 论 文 第 3 页 共 36页

第一部分 RS-485总线应用综述

1. 1 RS-485标准规范

RS-485由来

RS-485标准是由两个行业协会于1983年共同制订合开发的,即EIA-电子工业协会和TIA-通讯工业协会。EIA开始时在它所有的标准前加上“RS”前缀(推荐标准Recommended standard的缩写)。这个名称一直延用至今,现在EIA-TIA已正式用“EIA/TIA”取代“RS”以明确其来源。修订后命名为TIA/EIA-485-A。不过我们还是习惯地称之为RS-485。RS-485由RS-422发展而来。两者是工业应用中最成功的标准。而RS-422是一个差分标准,是为了弥补RS-232的不足提出来的,改进了RS-232通讯距离短和速率低的缺点,RS-422定义了一种平衡通信接口,将传输速率提高到了10Mbps,在速率低于1000Kbps时传输距离延长到4000英尺,并且允许在一条平衡线上连接最多10个接收器,可以说RS-422是一种单机发送、多机接收的单向传输规范。

RS-485是在RS-422的基础上,为了扩展应用范围和通讯能力,增加了多点、双向通信能力,也就是说,允许多个发送器连接到同一条总线上,同时,增加了发送器的驱动能力和通讯冲突的保护特性,通过差分传输扩展总线的共模范围。RS-485满足了所有的RS-422规范,但反之则不成立。

RS-485规范 RS-485实质上是一个电气接口规范,它只规定了平衡驱动器合接收器的电特性,而没

有规定插件、传输电缆与及通信协议。只是对应于七层模型中的物理层。

●多点通信

●驱动器带载最大输入电压:±5V ●驱动器输出阻抗: 54Ω ●接收器最小输入阻抗:12KΩ

●最大输入电流1.0mA/-0.8 mA (12Vin/-7Vin) ●接收器输出逻辑低:<200mV ●允许收发器数目:32Tx 、32Rx

●最大电缆长度:4000英尺(约1.2千米)

RS-485的接口规范特点: ●平衡传输、差动工作模式 ●驱动器带载最小输入电压:±1.5V ●最大输出短路电流:250mA ●接收器输入门限:±200mV ●-7V至+12V总线共模范围 ●接收器输出逻辑高:>200mV ●最大总线负载:32个单位负载 ●最大传输速率:10Mbps

RS-485标准定义了一个基于单对平衡线的多点、双向(半双工)的通讯链路,提供了高噪声抑制、高的传输速率、长传输距离、宽共模范围和低成本的通信平台。

毕 业 论 文 第 4 页 共 36页

1.2

RS-485可靠性设计问题

涉及到RS-485的可靠性设计的问题很多。在整个设计的过程中,我收集整理了关于这些方面的资料并且在设计中注意到了这些问题,通过设计实验的观察和思考,基本弄清了其产生的原因及原理和解决方案。 RS-485网络连接和节点配置

事实上,虽然RS-485规范的定义里只定义了一个双线通讯链路,但是在实际使用中,我们可以利用一条或者两条这样的链路来建立实用的通讯网络,也就是说,RS-485可以很好的支持半双工和全双工的通讯模式。一般的,对于一条这样的链路,网络的拓扑结构采用终端匹配的总线型结构。而不支持常见的星型或者环形结构。

485总线的网络配置实际上对通讯的可靠性是影响巨大的,特别是在通信距离的延长和通信数据传送速率或者说通信所用波特率的提高之后,不良影响会越来越严重。

以下(1)、(2)、(3)是一些常见的错误的连接方案,其中的小圆圈代表一个接收/发

图 1 常见错误连接及改正方案

送器单元。连线表示连接总线的电缆,一般我们采用双绞线作为这个连接介质。

在(4)、(5)、(6)里,我给出了对应于(1)、(2)、(3)的连接改正方案。

(1)、(2)、(3)连接方案,虽然在某些情况下,比如很短的距离,对通信速率要求不高,可以采用低速率,而且收发单元也很少等场合,可能可以实现通信。但一旦这些方案用于通信距离长,和通信速率要求高的现场,就可能出现不能通信。

主要的原因就是信号在各个支路会发生信号反射,和原信号叠加,造成了信号的不稳定性。另外,由电磁学理论我们知道,反射还可能发生在线路阻抗不连续或者起伏较大的地方,比如不同线路段采用了不同的电缆,某个段连接了很多收发器而另一段却很少,又或者某收发单元到主干总线的连线太长,都可能出现阻抗的不连续,发生信号反射。

总线的配置还涉及到连接的收发器数目问题,RS-485总线没有给出一个允许连接的收发器数目的标准规定,但是规定了最大的总线负载容量,那就是最多接32个单位负载,每个单位负载的最大输入电流是1.0mA/-0.8mA,也就是相当于12KΩ。这就给接口芯片一个扩充收发器的可能性,器件生产商通过增大收发器的输入电阻从而达到增加节点数的目的。

毕 业 论 文 第 5 页 共 36页

在我们的这个系统的设计中,因为要求的节点(分机)很多,采用的就是现在可以达到的最大允许限度,接256个的收发器。对于这个问题,在EIA-485 中给出了说明,即所谓的UNIT LOAD定义,一个UNIT LOAD 的标准收发单元的输入电阻就是12kΩ。当使用的是这种标准收发单元时,总线上只可以接32个收发器。现在有些收发器为1/4UNIT LOAD 或者1/8 UNIT LOAD ,这就是说输入电阻分别是48KΩ和96KΩ,这样,总线上的节点数就可以增大到128个或者256个。

总线匹配和节点引出线 为了解决总线上的发射和干扰,有时候就需要对总线进行终端匹配,由于RS-485一般是用UART (Universal Asynchronous Receiver/Transmitter 通用异步接收/传送器) 方式进行通讯,而UART是在每个数据的中点采样数据的,只要反射信号在采样开始时已经衰减到可以忽略,那就不用考虑总线匹配问题。

总线匹配问题和数据传输速率、电缆长度、与及信号转换速率等都有关系,判断在什么样的情况下需要加匹配有一个经验性的原则:

当信号的转换时间(上升或者下降时间)超过电信号沿总线单向传输所需的时间的3倍以上时就可以不加匹配。

当要求考虑匹配时,一般的我们采用在总线两端各接一个阻值等于电缆特性阻抗的电阻,例如双绞线的这个特性阻抗是100Ω至120Ω之间。这个电阻就可以选择在这个访问范

围,如图2(a)。 另外还可以用RC匹配,如图2(b);或者使用一种加二极管的方案, 如图2(c)。

这几种方案都有不同的特点:(a)有一个缺点,即匹配电阻要消耗电流,不适用于那些需要低功耗的系统。(b)的RC网络很省电,但C值很难确定,要在功耗和匹配效率间折衷考虑。另外这种方法对信号的质量也产生破坏。(c)实际上没真正实现匹配,但利用了二极管的钳位作用削弱了反射,改善了信号质量,而且节能效果很好。

在上面已经提了一下,在节点支路最容易产生反射,其中节点引出线是个最大的影响因素,在图1中我们也看到,其错误连接就是因为节点的引出线太长了。几乎可以比拟主干线。事实上,一个485系统可以允许的引出线长度和信号的转换时间、数据速率很有关系,有个经验公式可以粗略计算这个最大长度: Lmax=(trise×0.2m/ns)/10(trise可以是上升或者下降时间)

毕 业 论 文 第 6 页 共 36页

在设计中我们选择了MAX3085/3082作为接口芯片,对应于它们的250ns的上升/下降时间, 节点单元(分机)的最大引出线由上式算得约为5米。

摆率限制(Slew-rate limited) 其实在上面的分析我们也可以看到,如果增大信号的上升或者下降时间,也就是减缓信号的前后沿斜率,对降低总线匹配和引出线长度的要求,改善信号的质量,都是很有利的,另外对于信号中的高频成分还可以有抑制作用,减少了电磁辐射。这就是所谓的摆率限制措施。但是这种做法也限制了数据的传输速率。

失效保护 (Fail-safe) RS-485标准规定接收器门限为±200mV。这样能够提供较高的噪声抑制能力。但是,也会有一个问题:当总线上的信号处于-200mV~+200mV之间时,接收器接收到的信号状态无法确定,注意到UART是以一个“0”电位作为起始位开始一个数据帧的传递的,所以这个 不定态可能会使UART错误的接收一些数据,从而导致系统进行错误动作。

这个问题是不容忽视的,特别是对于实时性要求很高和控制要求高的场合,误操作的后果是很严重的。而当系统总线空闲、开路、或者短路时都有可能出现两线电压低于200mV 的情况。故必须采用有效的措施来避免接收器处于不定态。 传统的做法是给总线加偏置电阻。这样在空闲或者开路是把总线偏置到一个确定态。但是这种方法不能解决总线短路问题。在我们设计过程中,考虑了这个问题,采用的MAX3085/3085芯片是有失效保护的。它采用的方法很巧妙,也是现在解决这个问题的最好方法:将接收门限移到-200mV/-50mV,这样就解决了在总线短路下的失效问题。因为这样规定的门限,对于大于-50mV我们就确定为“1”态,对于短路状态下的“0V”当然就是确定的“1”态。 总线接地问题

对于电子系统的设计。我们知道电源和接地问题是一个非常关键的问题,如果处理不好,经常导致不能稳定的工作甚至危及系统安全。对于一个可靠的RS-485系统也是这样。 因为在RS-485的规范中只是强调了用两根双绞线实现系统的通讯线路A(+)和B(-),受此影响。一个错误的观点是认为RS-485链路不需要信号地,只要把A和B 线路用两个双绞线连起来就行了,因为RS-485接口是用差分方式传输信号的,并不需要相对于某个参照地来检测信号,系统只需要检测两线间的电位差就可以了。无可否认在某些情况下这是可以工作的,但是也给系统留下了很大的隐患。 一个问题就是共模干扰,注意到收发器只有在共模电压不超过一定的范围(-7V~+12V) 条件下才能正常工作,所以当共模电压超出这个范围时通讯的可靠性就受到考验了。严重的话还可能烧毁接口。

图3 共模干扰模型 VCM= Vos +VGPD

毕 业 论 文 第 7 页 共 36页

如图3给出的模型,发送器A对发送器B发数据时,A输出的共模电压为Vos,如果A、B 是不共地的话。那么就可能存在地电位差VGPD。那么接收器B输入的共模电压就会达到VCM=Vos +VGPD 。RS-485标准规定Vos≤3V,但是注意到VGPD可能会有很大的幅度(甚至几十伏特)且可能伴有强的干扰信号,这样B接收端输入VCM就有可能超出正常范围,在信号线上引入干扰电流,影响通信甚至烧毁电缆。

除了共模干扰,还有一个就是电磁辐射(EMI)对总线的影响,驱动器输出信号中的共模部分需要一个返回通路,如果系统没有接地的回路,共模信号没有一个低阻的回路,就会以电磁辐射的方式返回源端,整个总线就像一个长天线一样向外辐射电磁波。这样造成的信号损失和信息泄漏是很严重的。 接地的措施其实很多,不过这些措施与共模干扰的频率和干扰源的内阻有关,图4给出了一些不同情况下可考虑的措施:

图 4 接地方案

(1):干扰源内阻大,直接加一低阻信号地线; (2):干扰源内阻小,在(1)的基础上可以在信号地回路中加电阻,不过注意到这可能会增大共模电压,R1、R2的取值要控制好,不能影响通信; (3):浮地接法,当干扰源内阻实在太小,这种方法是可行的,因为隔断了接地回路,形成的环路电流不会很大;

(4):如果在(3)情况下,信号地和大地或机壳不能隔断,那这种电气隔离的方法是可行的。

当然,以上所述的各种情况都是在低频率的情况下适用,如果是高频瞬态干扰就不能这样考虑了。因为引线有电感,这个接地回路对瞬态干扰等于开路,瞬态干扰的产生我们可以想象得到,系统周边的别的大功率感性器件,如电机、变压器、继电器等等,甚至最平常的就是闪电了。采用的措施可以类似图4 中的(4)的电气隔离方法。或者用放电管等瞬态抑制器件,总之最终目的就是将瞬态放出的能量引到大地上去。

静电放电保护(ESD) 对于一个工作在实际的环境中的系统,所受到的外界影响是多种多样的,静电放电(Electrostatic Discharge)就是一个很关键的问题。国际工业标准规定的静电放电有关规定

毕 业 论 文 第 8 页 共 36页

主要有:

IEC (1000-4-2)规定:±15KV气隙放电;±8KV接触放电;±15KV人体模型 IEC (1000-4-4)规定:±4KV 电快速瞬变(鉴定中)

放电现象是很普遍存在的,上面给出的人体模型等就给出了一个标准。这些都会损坏总线收发器的端口,从而破坏通信。对于设计RS-485总线系统而已,可以通过选择提供了ESD保护的芯片来解决。

1.3 RS-485多机通讯网络实现

因为RS-485标准只是提供了一个电气上的一个规定,实际上硬件上的实现方案可以有很多不同的设想。RS-485接口可连接成半双工和全双工两种通信方式。如下图5(a)、(b)所示。

图5(a)RS-485半双工通信电路

图5(b)全双工通信电路

注意到(a)、(b)中收发器的不同之处,其中(a)中的是半双工的接口芯片,(b)中

的是全双工的接口芯片,DI是发送数据到总线,RO是接收总线上的数据,DE是发送允许,/RE是接收允许。对于全双工芯片,这两个控制线可以同时有效,但对于半双工的芯片,同一时间只能一个有效。在下面将在MAX4082的说明中详述其意义。

事实上,当传输的距离很长时,而双方信息的交换又不是很频繁时都是采用半双工方式,这样可以节省一对传输用线。在会议系统中,我们在设计过程中考虑过传统的网络设计方案。并且考虑了分机数目多,总线长的特点采用了半双工网络。 考虑的一个典型的半双工485网络如图6所示。

毕 业 论 文 第 9 页 共 36页

图 6 RS-485 网络方案之一

其中的unit load 概念是EIA的新提法。表示一个标准单元,参见1. 2节的描述。我们知道实际上unit load(标准收发单元)的关键是输入电阻,即12KΩ。当这个输入电阻变化时,总线可以带动的负载收发器数目也要改变,这个和采用的芯片很有关系。上图5中的R1、R2是总线匹配电阻,R3和R4是失效保护电阻。

根据我们的系统设计要求,在收集通讯接口芯片的资料过程中了解到美国MAXIM公司的485系列芯片在有效的进行485网络配置方面有很大的优越性,我们采用了其中的MAX4080系列芯片来进行设计。采用的网络方案和图6所示有了很大的改进。这个在下面对芯片的说明中再来说明其优点。网络图如下图7。

图7 会议系统采用的485网络方案

毕 业 论 文 第 10 页 共 36页

第二部分 会议表决系统的485网络硬件实现

2.1系统总体设计方案论证

随着社会的进步,人们需要共同来决定的事情越来越多,开会投票表决是大家公认的公

平严肃的好方法。而过去那种人工手工点票的方法,随着人数增多越来越显出其不足:慢,而且容易出错。能不能有一个简单易用而且准确的系统可以代替呢?会议表决系统就是为了迎合这种需要而设计的,由于采用了简单而可靠的RS-485网络来实现,只需要两条线就可以实现上千甚至上万台分机的连接通信。很好的解决多人表决和低成本的要求。

系统的硬件设计要求

硬件上要求实现简单,各个分机硬件上是可互换的,各分机有各自独一的分机号,通过软件来实现。表决按键功能全且使用简单,有指示灯直观显示。直接或间接和PC串口通信,要求PC上有WINDOWS图形界面的软件,可以通过软件操作控制整个表决过程,另外设定一个主席分机,表决过程也可以由主席分机控制。

在我们设计的这个表决系统里。包括了:

1、主机箱,内含四台主机,分别控制四条RS-485线路,每条线路下最多可以带250台代表

分机单元。主机带可扩展接口。

2、代表分机单元。提供6个按键,和9个红色LED显示灯。其中按键里5个用于表决,一

个是签到和确定键。LED里一个是签到/确认指示,其余8个是表决灯。 3、用于建立RS-485网络的连接电缆和连接盒。与及和PC通信的RS-232接口。

2.2.1 系统框图设计

考虑到会议系统的特殊性,即分机数目很大,连线长且多,所以采用了半双工的RS-485 网络来实现。另外,考虑到如果代表分机直接和PC机进行通信,PC机需处理的信息量很大,PC机串口的多机通讯能力有限,此外485总线上的节点数目也不能很多。所以采用了分层管理的间接方法,那就是最多每250台分机就用一个主机来管理,分机的信息只和主机交换。各主机收集完信息并初步处理后才发给PC机,这样,PC机对通信部分就不需要进行繁复的切换处理,处理上主要集中于后台对信息数据的数据库处理和对用户界面的结果显示处理了。 对于具体的线路配置,我们也做了一些考虑,首先是主机的数目定为4台,装在主机箱里,主机和属下代表分机是通过RS-485半双工网络来实现通信的。这样一共可以带1000台分机。此外,对于主机和PC机的通信,可以有两种选择,一种是用RS-232C总线来实现通信,一种还是用RS-485 总线,考虑到系统的可扩展性,将来还可以进行主机扩展,最多可以扩展到250台主机,而RS-232C的多机通信能力和传输距离都很有限,故还是采用RS-485总线。对于主机的通信软件编写也带来了方便。 系统总体框图见下页图8。

其中的3082是RS-485总线接口芯片。图中的主机分机框是单片机89C2051。MAX232是RS-485和RS-232C的电平转换接口芯片。

几个接口:“TO PC”是系统和PC机的RS-232接口。实际中一共用了4根线:GND(地)、TXD(发送)、RXD(接收)、RTS(PC机请求发送。用作控制485芯片的接收发送切换)。“EX TO PC” 是为了系统扩展主机和PC的通信连接。“主机扩展1”和“主机扩 展2”都是为了把扩展的主机连到与PC通信的RS-485总线上来。 EEPROM是主机用来存储收集到的分机发来的信息而扩展的外存储器件。

毕 业 论 文 第 11 页 共 36页

EXTO PC3082MAX232TO PC

?÷?úà??1 1

250o?·??ú 3082308230823082E2PROM?÷?úà??1 23082E2PROM3082E2PROM3082E2PROMò?o??÷?ú?to??÷?úèyo??÷?ú??o??÷?ú3082308230823082308230823082?÷?ˉ·??ú1o?·??ú1o?·??ú1o?·??ú3082308230822o?·??ú 2o?·??ú 2o?·??ú 2o?·??ú 308230823082250o?·??ú 250o?·??ú 250o?·??ú 图8 会议系统总体框图

毕 业 论 文 第 12 页 共 36页

2. 2 芯片选择考虑

要很好的达到系统所要求的通信能力,所选用的单片机和通迅接口芯片都很关键,一开始我们曾想用德州仪器(TI)公司的MSP430系列单片机,因为考虑到系统的功耗。后来因为设计时间紧和通讯能力考虑还是决定用我们熟悉的MCS51系列的单片机,首先功耗上也不会很大,而且最重要的是其完善的UART 通信能力,特有的第九位多机通信位方式为我们这个系统的多机通信编程提供很好的硬件支持。

2. 2. 1 单片机89C2051及通讯接口芯片MAX3082

单片机选用的是Atmel公司的20脚带2K字节闪速存储器的8位单片机AT89C2051。 AT80C2051是一种带2K字节闪速可编程可擦除只读存储器(FLASH ROM)的低电压、高性能CMOS 8位微控制器,该器件采用ATMEL高密度、非易失存储器制造技术制造,与工业标准的MCS-51TH指令集和输出管脚相兼容,由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89C2051是一种高效微控制器。 AT89C2051具有以下一些标准特性:

2K字节的FROM、128字节RAM,15个I/O线,2个16位定时器/计数器,5个两级中断源结构,一个全双工串行口,一个精确的模拟比较器,片内振荡器和时钟电路。此外,AT89C2051设计稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的省电模式,在闲置模式下,CPU停止工作,但RAM,定时器/计数器,串口和中断系统仍在工作,在掉电模式下,保存RAM中的内容并且冻结振荡器,禁止所有其他芯片功能,直到下一个硬件复位为止。

AT89C2051的可编程串行UART通道,和51系列单片机完全兼容的通信硬件:功能强大的全双工串行通讯口,4种方式可供选择,通讯波特率可软件设置,串行接收、发送均可触发中断系统。其中的通信方式3为9位数据异步通讯UART方式,可程控的第九位数据为我们的设计提供了一个很好的进行串行异步多机通信的实现方案。

MAX3082

MAX3082是MAXIM公司的新一代RS-485通讯MAX3080~3089系列产品。是我们经过大量信息收集比较后决定采用的。这一系列的RS-485芯片结合了许多MAXIM的最有价值得特性和创新:真正的失效保护操作,软件可选的半/全双工操作,1/8单位负载(允许接256个总线节点),三种级别的摆率限制等等。它们可以说是第一个满足RS-485 规范同时又提供真正的失效保护输出的器件。整个系列的芯片分成3个不同速度级别。没级别里又分三种不同的器件。

根据选用通讯芯片的数据传输速度应该比设计的系统所用的数据传输速度略高的原则我们选用了MAX3082,它是一种8引脚的半双工器件,满足工业标准75176引脚排列。和该系列的其他芯片一样,在4.5V到5.5V的电源中仅吸收600uA 的工作电流。并且有接收发送使能端,传输速率为115Kbps。我们也采用过MAX3085 来实验,也很好,这两种芯片的区别仅仅在于MAX3085的传输速率是500Kbps,比MAX3082略大。 AT89C2051和MAX3082引脚如图9,详细功能在电路设计部分说明。

毕 业 论 文 第 13 页 共 36页

图9 AT89C2051和MAX3082引脚排列

2.3电路设计

根据总体的系统框图。整个系统的硬件分为主机板和分机板两部分。

主机板包括了四台主机单元、主机和分机的通讯接口,主机和PC的通讯接口、系统扩展接口和提供给主机以及各线路分机工作的整流电源部分。

分机板包括了分机单片机一片89C2051、通信芯片MAX3082、6个按键,9个LED指

示灯和提供分机电路工作的TL431稳压单元电路。

详细的电路设计原理图见附录。 本系统的关键在于通讯,对于PC机只需向下对主机通讯;对于主机,则需要对上接收PC的命令,对下分机发送命令和接收数据;对于分机,则需要对主机接收命令,对代表接收其签到/表决信息并发送给主机。由于我们采用低成本的半双工网络。这些都由单片机对MAX3082芯片的通讯方向切换来完成。首先简要说明一下MAX3082的发送接收状态的切换,见下图表10,其中DE脚是输入允许,/RE脚是输出允许,DI是输入,RO是输出。由表可见,当DE=1时不管/RE是什么状态,芯片处于发送状态,将数据发送到总线上;当/RE=0时,不管DE状态如何,芯片处于接收状态,A-B间差分电压≥-50mV时接收到数据“1”,≤-200mV时接收到数据“0”。

图10 MAX3082/3085功能描述

毕 业 论 文 第 14 页 共 36页

根据以上对MAX3082特点的考虑,主机单片机AT89C2051和两片MAX3082连接分别对PC和属下分机的两条RS-485总线线路接口,如图11 (a)。分机和一片MAX3082连接如图11(b)。

VCCP1.6P1.51817 DE/RERODIABVCC3082TO PCP3.5U?DE1489C2051( ?÷?ú )RXDTXDP1.7231989C2051/RERODIDEAB/RERODIAB

( a )3082( ·??ú )RXDTXDTO ?÷?ú3082TO ·??ú( b )图 11 主机分机通讯连接图

此外,由于PC机的串行口COM是全双工的RS-232接口,在系统框图描述部分已经提及,为了能很好的扩展主机(最多到250台),不直接用RS-232总线,而采用PC和各主机都连接到同一条RS-485总线上进行通讯的设计。这样PC机就需要一个RS-232到RS-485的电平转换接口电路来实现通迅的连接。我们采用了一片MAX232和一片MAX4082来完成这个电路,图12给出了我们的设计中所采用的这个电路的实现方案。

VCC

?÷?úà??18?÷?ú4 765?÷?ú130821234161MAX232234111051296151378RTS TO PCEX TO PC

图12

GNDTXDRXDPC机RS-232到RS485的转换电路

至于分机按键和LED等电路,参见附录的电路图。

2.4

PCB板的制作

PCB板是设计电路的关键。PCB板的制作涉及到的技术知识很多,累积的经验也很重要。在这几个月的毕业设计过程中,经过同学们大家一起学习讨论,从失败和成功的例子里研究学习,特别是仔细研究学习指导老师陈耀和老师的对会议系统板的设计,对PCB板 的设计经验得到了很大提高。

如下页图13,整个主机板的设计,电源和数据传送部分放在板上的不同部分,避免了电磁干扰(EMI)和电磁兼容(EMC)等问题。满足了本系统对通讯的高可靠性要求的设计原

毕 业 论 文 第 15 页 共 36页

则。图14的分机板设计爷充分考虑了通讯和电源之间的隔离问题。

“一~四”:各主机单片机

POWER14:74HC14反相器 “R1~R4”:EEPROM

R3R1ò??tR2èyM10R4??“M1~M9”:MAX3082 M10: MAX232

J1、J2:RS-232接口, J2是扩展

J2M914M1J3M214M3J4M4J514M5M6J614M7J7 J1M8J8“J3~J6”:对分机485总线接口 J7,J8: 主机扩展

图13 主机板PCB图模型

分机电路板布局如图14,其中的措施也是将通信芯片远离电源POWER部分,而分机 3082 单片机靠近电源有利于更好的供电,

对板上各元件说明如下: L1:分机指示灯。

L1 K1 K1: 签到和确认键 89C2051 POWER L2~L9:表决选择指示灯 L2 L3 L4 L5 L6 K2~K6:表决按键

L7L8L9

图14 分机板PCB图模型

K2K3K4K5K6

2.5 电路调试

PCB板设计并做板出来后,就要进行线路检查和硬件的调试。调试的方向和目的是:第一,电源电路要求能很好的供电和提供足够的功率。并且要求稳定,对数字电路部分没有干扰。不影响通信。

第二、数字电路的逻辑线路没有因为制板产生的错误,各个部分连线正确。

第三、通信部分线路能正常且稳定地工作。

对于第一条,在用示波器观察电源输出端波形,发现产生的纹波都很小,由于PCB上和数字部分的隔离做得很好也没有产生任何干扰。

对于第二条,调试结果:数字部分的PCB板没有错误,逻辑连线上没有干扰。

对于第三条,通信线路从电气上是连通的,至于数据传送是否正确,没有受干扰,将用软件调试来完成测试。 关键的电路软件调试在下一部分给出。

毕 业 论 文 第 16 页 共 36页

第三部分 基于485总线的会议系统多机通讯编程

3. 1

AT89C2051的串口通讯原理

和MCS51系列兼容的AT89C2051单片机,其串口是一个功能强大的全双工的串行通讯

口。有4中工作方式可供选择,通讯波特率可以用软件设置,串行接收、发送均可触发中断系统,可实现机与机之间的数据通讯和扩展串行外设。 串行通讯是将构成数据或字符的每个二进制码位,按照一定的顺序逐位进行传输的通讯方法,其传输有两种基本的方式:

同步通讯方式:此方式基本特征是发送和接收时钟始终保持严格的同步。通常设定了1~2个字符的起始同步字符SYNC来指示传输数据流的开始,然后收发双方开始同步计数和数据传输。

异步通讯方式:基本的特征是按照一帧一帧的数据流进行传送数据。不需要同步字符SYNC,也不需要保持数据流的连续性,而是发送和接收双方按照规定的传输格式来进行通讯。

串行数据传输方向:

一般情况下,串行通讯中数据的传输是在两个通讯端口之间进行的,根据数据传输的方向客分为以下几种方式。

(1) 单工方式:此种方式下,只用一根通讯线,一端联接发送方,另一端联接接收方,形成单向联接,数据只允许按照一个固定的方向传送。 (2) 半双工方式:此种方式下的系统中每个通讯设备均有发送器和接收器,由电子开关切换,两个通讯设备之间只用一根通讯线相连接,通讯双方都可以接收或者发

送,但同一时刻只能单向传输。 (3) 全双工方式:此种方式采用信道划分技术,即一方的发送端和另一方的接收端用

专用的通讯线相联。也就是说,全双工就是用两根通讯线各自联接发送/接收端,

由两根单方向线组成双向传输。

半双工方式,尽管通讯效率比全双工要低,不适用于敏感的交互式应用系统。但一般 情况下已经能很好的使用在实时性不是很强的系统中了。这样在实际的应用中可以大大地降低成本。我们的会议系统采用的就是半双工的方式。 串行通讯接口电路:

串行接口电路(接口芯片)很多,能完成异步通讯的硬件电路称为UART(Universal Asynchronous Receiver Transmitter),即通用异步收发器;能够完成同步通讯的硬件电路称为USRT(Universal Synchronous Receiver Transmitter)通用同步接收器/发送器;既能同步又能异步通讯的硬件电路称为USART。从本质上说,所有的串行通讯接口电路都是以并行数据形式与计算机CPU接口,而以串行数据形式和外部通讯逻辑接口的。其基本的功能就是从外部通讯逻辑接收串行数据信息,转换成并行数据后传送给CPU;或者由CPU接收到的并行数据信息转换成串行数据信息输出给外部通讯逻辑进行串行通讯。

异步通讯说明: 由于在我们的设计中进行的是多机异步通讯,所以这里对异步通讯再作些说明,详细的技术资料可以参考后面参考书目里列出的书籍文献。

帧格式:在异步通讯里是一个很重要的概念。它是由起始位、数据位、奇偶校验位和

毕 业 论 文 第 17 页 共 36页

停止位组成。异步传输中帧与帧之间用高电平分隔。

起始位:在通讯线上当没有数据传送时总线呈高电平(逻辑“1”)。发送端当需要发送一帧数据时,首先发送一位逻辑0(低电平),这就是起始位。接收端检测到由高到低的一位跳变信号(起始位)后,就开始接收数据位信号的准备。所以,起始位就是表示一帧数据传输的开始。

数据位:紧接起始位之后的即是数据位。数据位可以是5、6、7或8位。一般在传送中从数据的最低位(D0)开始,顺序发送和接收,具体的数据位应该在通讯协议里预先定好。

奇偶校验位:紧跟着数据位之后的是奇偶校验位,用于对数据检错。通讯双方应事先约定一致的奇、偶校验方式。

停止位:在校验位后是停止位,用以表示一帧的结束。停止位可以是1、1.5、2位,用逻辑1(高电平)表示。

异步通讯是一帧一帧进行传输的,帧与帧之间的间隙不固定,间隙处用空闲位(高电平)填补,每帧传输总是以逻辑0(低电平)状态的起始位开始,停止位结束。信息传输可随时地或间断地进行,不受时间的限制。另外对同步时钟要求也低些。因此,异步通讯简单、灵活,对传输信息量的不大场合是个很好的通讯选择。

有关异步通讯的约定问题:

异步通讯中接收和发送之间必须有两项设定:

(1) 帧格式设定:即帧的字符长度:起始位、数据位及停止位,奇偶校验形式等的设

定。例如本系统关于帧格式的一个设定是:1位起始位、8位数据位,一位第九位数据/地址位(这是51系列的特殊功能,见后说明)、1位停止位。 (2) 波特率的设定:串行通讯是按位传送的,每位信息宽度(持续时间)由数据的 传输速率确定。波特率即数据传输的速率:单位时间内传输的位信息量,以每秒

传输的位(bit)数表示,单位为波特(baud),即1波特=1位/秒(1 bps)。

只有收发双方都进行了相同的设定,才能成功地传输数据。

AT89C2051的串行通讯接口

和MCS51系列的单片机一样,AT89C2051内部集成了一个功能强大的全双工串行通讯

口,属于UART方式。设有两个相互独立的接收、发送缓冲器,可以同时发送和接收数据。发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入,因而两个缓冲器共用了一个地址(99H)而没有冲突。统称为串行通讯特殊功能寄存器SBUF。 有4种工作方式,其中两种方式的波特率是可变的,另两种是固定的。波特率由内部定时/计时器产生,用软件设置不同的波特率和选择不同的工作方式。可以通过查询或中断方式对接收发送进行程序处理。 当然附带说明一下,51系列的这种串行通讯口,除了用于数据通讯外,还可以方便地构成一个或多个并行I/O口,或作串-并转换,或用于扩展串行外设等等。 AT89C2051中关系到串口通讯的硬件资源,或者说有关的寄存器有:串行控制寄存器SCON,波特率选择特殊寄存器PCON,一般地在方式1和3产生波特率用到定时器1,这样有关的寄存器还包括了定时/计数器控制与状态寄存器TMOD,启停与中断控制寄存器TCON里的启停位TR1与及定时器T1的计数器寄存器TH1和TL1。

用单片机进行串口通讯,首先是硬件上的基础,比如我们采用了RS-485总线。另一

毕 业 论 文 第 18 页 共 36页

个重要的方面就是通讯软件了。在上面有关异步通讯的约定问题里,我们知道了软件里要做的串口初始化设定就是两个主要的方面:帧格式和波特率设定。在AT89C2051里,寄存器SCON就是用来设定通讯方式和帧格式的。其对应的字节地址:98H 八位寄存器SCON的各位含义如下: (位): 7 6 5 4 3 2 1 0

SM0 SM1 SM0 REN TB8 RB8 TI RI

各位的说明:

其中SM0,SM1按下列组合确定串行通讯的工作方式:

SM0 0 0 1 1 SM1 0 1 0 1 工作方式 方式0 方式1 方式2 方式3 功能说明 移位寄存器方式 8位UART方式 9位UART方式 9位UART方式 波特率 1/12 fosc 可变 1/64或1/32fosc 可变

SM2:允许方式2或方式3多机通讯控制位。在方式2或方式3时,如SM2=1,REN=1,

则从机处于只有接收到RB8=1(地址帧)才激发中断请求标志位RI=1,向主机请求中断

处理。被确认为寻址的从机复位SM2=0,才能接收RB8=0的数据帧;在方式1时,如果SM2=1,则只有在接收到有效停止位时才置位中断请求标志位RI=1;在方式0时,SM2应该设为0。

REN:允许/禁止串行接收控制位,由软件置位REN=1为允许串行接收状态,可启动串行

接收接收器RXD,开始接收信息。软件复位REN=0,则禁止接收。 TB8: 在方式2或方式3,它为要发送的第9位数据,按需要由软件置位或清0,例如,

可用作数据的校验位或多机通讯中表示地址帧/数据帧的标志位。 RB8: 在方式2或方式3,是接收到的第9位数据。在方式1,若SM2=0,则RB8是接收到 的停止位。方式0不用RB8。

TI: 发送中断请求标志位。在方式0,当串行发送数据第8位结束时,由内部硬件自动

置位TI=1,向主机请求中断,响应中断后必须由软件复位TI=0。 在其他方式里,则

在停止位开始发送时由内部硬件置位,必须用软件复位。

RI: 接收中断请求标准位,在方式0,当串行接收到第8位结束时由内部硬件自动置位RI=1

,向主机请求中断,响应中断后必须用软件复位RI=0。在其他方式中,串行接收到

停止位的中间时刻由内部硬件置位RI=1,(例外情况见上SM2说明),必须由软件复位RI=0。

SCON可位寻址,所有位在单片机上电复位时为全0。主机程序初始化时应该设置SCON以适合相应的通讯帧格式,即通讯方式。

例如本系统主机和分机是用多机通讯方式3来实现通讯的,程序开始初始化时送初始化字

毕 业 论 文 第 19 页 共 36页

#0F0H,表示SM0=1,SM1=1,方式3;SM2=1多机通讯方式;REN=1接收允许;TB8=0,RB8=0,RI=0,TI=0。

波特率设置:

至于波特率设定,每种方式都可以根据一定的式子计算出来并进行相应的设置:

112方式0波特率=fosc方式2波特率=2SMOD64?(振荡器频率)方式1、3波特率=2SMOD32?(定时/计数器1溢出率)

其中的SMOD叫波特率加倍位。当SMOD=1时波特率加倍。SMOD在PCON(节点控

制寄存器)的最高位,一般的我们采用下列语句来设定需要加倍波特率(SMOD=1)或者不需要(SMOD=0) MOV PCON,#00H

;SMOD=0

MOV PCON,#80H ;SMOD=1

由上也可见,方式1和方式3的波特率主要还是要通过软件对定时/计数器1的设置进行选择。并取决于定时器1的溢出率。

定时器的溢出率定义:单位时间(秒)内定时器回0溢出的次数。 也就是:定时器1溢出率=定时器1的溢出次数/秒。

51系列单片机有两个定时/计数器,常选用定时器1(T1)工作在方式2(8位自动再装入)作为波特率的溢出率。 T1设置为工作于方式2(8位自动再装入),这时TH1和TL1写入的数据是一致的。TL1的计数输入来自于fosc经12分频的脉冲,一个机器周期加1计数一次。可见,定时/计数器1的溢出与fosc和自动再装初值N有关,fosc大,特别是N越大,溢出率也就高。例如,N=FFH,则每隔一个机器周期即溢出一次(极限情况);如果N=00H,则需每个256个机器周期才溢出一次。 一般地,定时/计数器1溢出一次所需的时间为:

(2?N)?12机器周期=(82-N)?12?81fosc(秒) 于是得到定时/计数器1每秒溢出的次数: 定时/计数器1的溢出率=fosc12?(2-N)8(次/秒)

串口一般工作于方式1或3时,波特率由下式决定:

2SMOD波特率=32?定时/计数器1溢出率=2SMOD32?fosc12?(2?N)8

毕 业 论 文 第 20 页 共 36页

图表15给出了我在设计过程中学习研究整理的常用波特率和定时/计数器1设置。

图表15

常用波特率与定时/计数器1各参数关系

SMOD C / T T1方式 重新装值 X 1 1 X X 0 0 0 0 0 0 0 0 0 0 0 X X 2 2 2 2 2 2 2 2 2 2 1 X X FFH FFH FEH FDH FDH FAH F8H F4H 1DH 72H FFFBH 常用波特率(bps) 振荡频率 f方式0 MAX: 1M 12MHZ 方式2 MAX: 375K 12MHZ 方式1或3: 62.5K 12MHZ 57.6K 11.0592MHZ 1 28.8K 11.0592MHZ 1 19.2K 11.0592MHZ 1 9.6K 11.0592MHZ 0 4.8K 11.0592MHZ 0 2.4K 11.0592MHZ 0 1.2K 11.0592MHZ 0 137.5 11.986MHZ 0 110 110 6MHZ 12MHZ 0 0

一般地,在用51单片机的汇编语言编写通讯程序时,串口初始化程序段如下: 以会议系统为例,采用串口方式3,11.0592MHZ振荡频率,波特率为57.6KHZ。 …… MOV SCON,#0F0H MOV PCON,#80H

MOV

MOV MOV SETB

TMOD,#21H TH1,#0FFH TL1,#0FFH TR1

;串口工作于方式3,SM2=1,REN=1

;设置SMOD=1

;设置T1定时、工作方式2 ;设置定时常数 ;启动T1,产生波特率

……

在开始软件部分的说明前,先说说我们采用的通讯处理模式: 在这里我们把它叫做地

址位多处理机模式。

1)、串口方式3的帧格式如图16:

???D ??

?eêμ??12345678êy?Y?? 图16 串口方式3帧格式

í£μ??·?1êy?Y????????9

毕 业 论 文 第 21 页 共 36页

2)、地址位多处理机模式要点:

1、 数据以帧的格式发送和接收(如图16),附加的第9位是地址/数据帧控制。

2、 第9位为1,该帧是地址帧,单片机在SM2=1,REN=1时接收到该帧有RB8=1,则

进行相应的中断处理,接着使SM2=0,则可以接收第9位为0的数据帧。 3、 第9位为0,该帧是数据帧,单片机若SM2=1,则丢弃不理。只有SM2=0.REN=1

时才进行相应处理。 4、 发送时,若是发送数据帧,则置TB8=0,若是发送地址帧,则置TB8=1。

3. 2 PC和单片机的多机通讯测试

在电路硬件测试完成后,接着就要做软件上的调试,事实上,在做这个调试的过程中,我试图作一个完整一点的测试,来搞清楚PC机和单片机通讯的设置和原理。

由于PC机的通讯编程不是现在要说的重点。这里只是简单说一下。对于现在的windows系统而言,不用再像从前DOS一样,对编程者要求熟悉底层硬件,直接调用BIOS或者对硬件直接编程。现在一般我们采用的是VB、VC++或者DELPHI等高级语言来设计图形化的界面和通讯软件,比如会议系统的PC部分通讯软件和用户界面就是一位研究生师兄用DELPHI 来编写的。现在结合学习了解到的一些知识说明一下,比如用DELPHI,一般的可以有三种实现串行通信的编程方法:

①调用Windows95下的API函数来完成通信:

在windows里提供了用于通讯的API函数可以调用。API函数是Windows程序开发使用的主要函数集,其中提供了十几个专门的通信函数。对应Windows3.x和Win95及 NT开发环境,有16位和32位通信API函数,不过现在一般的操作系统都是WIN98以上的版本,很多软件只支持32位应用程序的开发。32位通信函数与16位函数的主要区别在于,32位API函数把对通信口的操作当作一个普通文件。这是因为在Windows95和NT下,WM桟OMMNOTIFY消息已被取消,操作系统已将通信设备封装起来了,系统为每个通信设备定义了用户可定义大小的读/写缓冲区,应用程序只对读/写缓冲区操作,而不用和通信驱动程序打交道。 ②使用VB的通信构件MSComm或者用OLE(Object Linking and Embedding对象链接与嵌入)通讯控件 :

MSComm 控件提供了一系列标准通讯属性和方法。使用它可以建立起应用程序与串行端口的联接;象所有其他OLE控件一样,通信控件也是用一系列的属性和用户接口,用户用GetSet函数得到属性的当前值,用 Set函数设置属性值。

③熟悉C/C++或其它语言,则可以将自己的程序编译链接为DLL(动态链接库),这样就可以调用DLL里的函数来通信。

至于更详细的PC编程,这里不再说明,以下着重说明PC对串口多机通信的设置问题。事实上PC机也和单片机一样,要求设置通讯方式(包括帧格式)和波特率,这些都可以在DELPHI的控件里很容易的设定,对于多机通讯,我们是通过在奇偶校验位的设置来实现的,PC串口提供了以下五种奇偶校验位设置:

1、None(无奇偶校验)

2、Odd(奇校验)

3、Even(偶校验)

4、Mark(奇偶校验位恒为1) 5、Space(奇偶校验位恒为0)

注意到数据位数的设定可以是5、6、7或8位。帧格式和图16类似,低位先出,高位最后

发送,奇偶校验位是紧接在数据位后,在停止位前的。在PC里设置串口通讯就是具体的数

毕 业 论 文 第 22 页 共 36页

据格式要求来设定的。例如在控件里常见的: Comml.Settings=57600,N,8,1

//波特率:57.6K,无奇偶校验,8位数据,1位停止位

为了弄清PC机和单片机的地址位多处理机通信模式的具体实现,我编写了几个单片机的测试程序。使用一个串口调试软件来进行实验。首先我借用一下PC机的串口设置说法 ,把通讯方式3的第9位为1 (地址帧)的发送帧方式叫MARK方式,把第9位为0(数据帧)的发送帧的方式叫SPACE方式。

测试程序里单片机是用MARK方式接收PC机的数据,为了后面的具体通信编程,写成接收后判断是否是00H、01H、FFH、FEH、FDH、FCH或者FBH(这些都是以后PC机可能发给单片机主机的命令或查询帧),如果是则将相同内容用SPACE方式不断地发回给PC接收在调试软件上显示出来。如图17是发“00H”, 单片机回送给PC显示的实验结果。

图17 PC串口调试结果

简单的查询方式调试程序:

ORG 0000H MM2: CJNE A,#0FEH,MM3 ;是FEH吗? LJMP START LJMP AAA ;是则转发送FE ; ORG 0023H MM3: CJNE A,#0FDH,MM4 ;是FDH吗? ; LJMP COMM LJMP AAA ;是则转发送FD ORG 0034H MM4: CJNE A,#OFCH,MM5 ;是FCH吗 ? START: MOV IE,#00H LJMP AAA ;是则转发送FC MOV TMOD,#21H ;T1方式2工作 MM5: CJNE A,#0FBH,MM6 ;是FBH吗? MOV SCON,#0F0H ;串行口初始化 LJMP AAA ;是则转发送FB MOV PCON,#80H MM6: AJMP WAIT ;都不是则返回再接收 SM2 MOV TH1,#0FFH ;BAD=57.6K AAA: CLR MOV TL1,#0FFH CLR REN CLR TI SETB TR1 ;启动T1 MOV SP,#08H MOV P1,#9FH ;对PC机发送设置 SETB SM2 ACALL T5 ;延时 SETB REN BBB: MOV SBUF,A ;一直回送收到的数给PC CLR RI JNB TI,$ MOV P1,#0FFH ;对PC接收 CLR TI SJMP BBB WAIT: JNB RI,$ ;接收等待 CLR RI ;收到信息清零RI T5: MOV 2CH,#28H ;延时子程序 MOV A,SBUF T7: DJNZ 2EH,$ CJNE A,#01H,MM1 ;是01H吗? DJNZ 2DH,T7 LJMP AAA ;是则转发送01 DJNZ 2CH,T7 MM1: CJNE A,#0FFH,MM2 ;是FFH吗? RET LJMP AAA ;是则转发送FF END

利用这样一个小测试程序,我做了一些对PC的测试,我的目的是想搞清在多机通讯中

毕 业 论 文 第 23 页 共 36页

PC的发送和接收需要进行怎样的设置才合理。在57.6Kbps的波特率下,我分别设定PC使用NONE、MARK、SPACE、EVEN及ODD 等方式发送和接收数据。得到的结果是: 需要发第9位为1(地址帧)的时候,用NONE,MARK方式能被单片机正常接收。而接收单片机的信息时,通过改动单片机的测试程序,我发现单片机无论是用MARK还是NONE方式PC都能接收到,这就是说PC的接收不需要管第九位。另外,当PC使用ODD或者EVEN方式发送数据时,单片机用MARK方式接收,有时候也能接收到,这和发送的数据有关。因为PC的各个方式都和奇偶校验有关,考虑发一个09H=(00001001B)然后测试,结果是PC用Odd(奇校验)方式发则单片机能收到,Even(偶校验)方式就不行。思考其原理:奇校验方式发09H,校验位为1,刚好能满足第9位的要求,而偶校验相当于第9位为0,所以单片机丢弃不接收处理。试着发08H=(00001000B)验证了这个想法,因为这时PC用Even方式发单片机能收到,Odd方式就不行。这样就得出结论:

①、 PC机发送的奇偶校验位紧跟在数据位(5~8位)后,在停止位前,当发送的数据

位是8位时,相当于第9位。在地址位多处理机通信模式中,要发送地址帧时,可以用MARK方式或者NONE方式,能用NONE方式的原因是这时单片机接收到的第9

位实际上是停止位(为1),也能触发接收处理。 ②、 PC机接收数据时,是接收8位数据到缓冲区,第9位奇偶校验是通过硬件寄存处

理的,如果不理会奇偶校验,直接当作8位数据来接收的话,单片机用MARK或者

SPACE方式均可。

因此,可以得出一个最终的编程指引:PC机可以设定为MARK方式或者NONE 方式, 单片机主机方设置可以是接收用MARK方式,发送用SPACE 方式。

3. 3 会议系统软件设计思路 分层管理软件模式

考虑会议系统的特点:实时性要求不高,但对通讯的准确性要求高。另外分机的单元 数目众多。在软件上我们的处理是采用分层管理的方式,PC机只对下一级的主机通信,而每台主机下属各可最多带250台分机,这样的目的可以减轻PC的处理负担,和满足RS-485的总线负载限制问题。还有一个好处是系统的扩展很容易,最多可以扩展到250台主机,分机数目可以达到250×250=62500台。可以适用于任何会议的使用。分层管理的好处还有通讯的可靠性好,软件分级易于实现。

分层管理软件模式的基本要点是类似于企业管理的方案,PC是最高层,PC下的主机是中级管理层,主机属下分机是下层管理层,这里人(会议代表)作为最低层。在软件上,上级对下级总是用查询的方法发命令和查询。下级对上级总是采用中断接收处理的方法。 中间级将收到的下级信息总体初步处理后发给上级,最后在PC汇总处理。在等待命令或查询时间里,各中间级可以处理本身的事件。

会议系统通讯协议

会议表决的过程分为:开始之前检查线路(包括自检查和操作员检查),接着代表签到,最后是进行表决,表决的方式有多种,通过在PC建立的提案文件确定。代表通过按代表分机上的表决按键来进行选择表决。

表决之前,设想已经建立了一个提案文件,里面包含了所有本系统可提供的表决形式之一,

即以下三个选项条目之 “与”:

毕 业 论 文 第 24 页 共 36页 表决形式 控制方式 1 表决方式(赞成/反对/弃权) 1 主席控制表决方式 2 选举方式(1/2/3/4/5 选1) 2 操作员控制表决方式 3 响应方式(-/--/0/+/++)

投票方式 1 记名投票 2 不记名投票 检查线路:

会议开始,代表进场,技术人员开启系统电源。此时,系统主机内各主机芯片(主机X)对属下250台分机进行线路检查。采用的方案是软件地址位多处理机模式。

(检查线路通讯:主<――>分)

之后,PC在操作员开启表决器软件,并按下“检查线路”按钮是与主机通讯,读取线路情况并显示在屏幕上。显示的信息可以是:各线路X(对应一主机及其属下250台分机)情况(通或故障)及线路中有问题的分机号。

(检查线路通讯:PC <――> 主)

此过程直至线路检查完全正常后结束,进入下一步。(若有不正常,技术人员要检查硬件线路并排除故障)

检查线路 硬件状态和通讯过程:

系统开启电源后,主机和各分机都上电复位,分机初始化后处于通讯接收状态(签到/确认键旁LED闪动)。主机在初始化之后,则转入对分机的线路检测通讯,直接发送地址帧查询分机。地址帧格式为各分机的地址号,采用地址位(第九位为1)方式。

分机接收后发生中断,判断是否与本机地址符合,若不符合,信息丢弃,继续接收。若符合,则转向中断处理,发送“本机正常”信息,帧格式是本机地址。主机接收后判断是否信息正确,正确则把该“分机正常”信息存储。(方案:每台分机的信息在主机中用一个字节来表示)之后主机接着检查下一台分机。接收信息不正确主机延时一段时间再发一次,两次都不正确则判断该分机有故障。分机有故障的用一个空字节来表示状态(依次轮询后,最后再对第一次没确认的分机询问,这个可以通过检查刚才的结果来询问,即分析刚才存起来的分机状态字来确定有问题的分机。)最后,主机切换回与PC通讯,这个时候PC可能已经下达“检查线路” (命令字:FFH MARK方式)命令,也可能没有,总之主机各个单片机都是接收地址信息状态(SM2=1)的,当接到PC的“检查线路”命令字和主机地址帧后由一号主机回应信息01H加第九位为0 表示该线路1检查线路结束,接下来发送线路信息给PC,延时后开始发送分机状态信息。 PC机的“检查线路”命令字FFH:

地址结束 起始 D0 D1 D2 D3 D4 D5 D6 D7 1 1 1 1 1 1 1 1 0 位1 1 之后接着的帧是要和PC通讯的主机地址号:(01H是主机1,10H是主机2,11H是主机3 ,依此类推)

地址结束 起始 D0 D1 D2 D3 D4 D5 D6 D7 X X 0 0 0 0 0 0 0 位1 1 发出该信息后,接着PC转入接收,等待响应(还是用接收地址的方式,即第九位为1)。延时一段时间没接收到回应再发一次,收不到回应说明线路故障。当接收到01主

机发来的回应信息01H后马上进入接收线路1检查结果(还是用MARK方式,即第九位为

毕 业 论 文 第 25 页 共 36页

1)。注意是每个字节代表一台分机的信息,帧格式就是(分机号加第九位数据位0,一个起始位一个结束位) 正常的分机发其分机号。有故障的发空字节。 (最后可以发一个字节的校验和字节,就是该主机刚才发了个多少字节的信息(多少台分机正常?)

然后发结束帧为 01H(还是该主机的地址)加数据位0。PC进行校验和对比,没有错误则接着PC和下一台主机通讯。直到结束。然后PC处理信息并显示。 主机发的数据块:

主机号+分机信息+通信标志作结束

注意:在实际中,可能PC会随时对线路进行检查,这样可以在各个主机设一个标志位,当完成过一次对属下分机的线路检查时就置为1,没有则置为0,在每次向PC发送完检查线路的信息后也复位。在接收到FFH和主机号后先判断该标志位是否为0。为0才进行主机号判断,地址符合之后才进行通讯。为1则证明刚刚主机才对属下分机检查过线路,信息还存在EEPROM里。可以直接发给PC,这样一开机就可以先检查线路,然后等PC来查询,也可以解决PC查过一次后,在不再重开系统的情况下对线路再次检查线路。有利于线路的查错。

代表签到:

仍由操作员操控,线路检查正常后。操作员按下:“开始签到” 按钮(软件界面上的)PC机向主机下达“开始签到”命令(FEH 加第九位为1)。 起始 D0 0 0

各主机接到命令后(置标志位为1)并切换向属下分机下达“签到”命令。之后各主机切换回与PC通讯,在PC发送“签到结束”命令后再次转向分机通讯并收集签到信息并存

入RAM(分机多时用EEPROM !只存已签到的分机号。用依次查询分机号的方法,每个分机查两次,就是发一个分机地址帧,第九位为1,分机回应本机号,第九位为0)各主机最后切换回与PC通讯。

PC在操作员按下“签到结束”时就进行主机号查询,PC是查询――延时――再查询。 直到一号主机回应,此后的通讯过程基本上和检查线路的相应部分相同。其中主机向PC发送的信息块是 :

主机号帧(主机号+第九位为0)+已签到的分机号(从小到大)+校验和+结束帧(主机号+第九位为0)

D1 1 D2 1 D3 1 D4 1 D5 1 D6 1 D7 1 第九位 结束 1 1 代表表决:

签到之后,进入了系统通讯的关键部分:代表表决。假设各提案已定好。操作员只需提取出来即可。如上页所示。表决形式可以有好多种形式。先看看此时系统硬件的状态: 各个分机,勿庸置疑处于地址(第九位为1)待命接收状态。各主机,此时也处于对PC的地址(第九位为1)接收待命状态。

操作员按软件上“制作提案”按钮,打开或编辑一个提案。其中包括了上页所示的“表决形式”信息。即确定了该提案采用的表决形式是:

(表决/选举/响应) AND (主席控制/操作员控制) AND (记名/不记名)

毕 业 论 文 第 26 页 共 36页

在“制作提案”窗口中操作员制作完一个提案并存储后对应该表决提案就有一个字节的表决形式控制字,在PC与主机通讯是发给主机以控制表决形式的。在操作员在软件主窗口中按下“投票表决”按钮时屏幕出现“表决”窗口。再按下“提案内容”,弹出“显示提案内容”窗口,可以打开一个提案以便进行表决。返回“表决”窗口后,若之前已经完成了检查线路和签到,“表决开始”按钮是激活的。按下之后,PC向主机发送表决开始的信息,包括:表决形式和“表决开始”命令。这个也可以用一个字节的命令字来解决。

命令字帧格式约定:

起始位0+表决形式8位数据+第九位为1+结束位1 表决形式8位数据:

(D1 D0) = (0 0 ) 是表决方式 (D1 D0) = ( 0 1)是响应/选举方式 D2~ ~ D6 为0, D6是开始/结束控制位。=0 表决开始 , =1表决结束

D7 为0时为操作员控制表决方式,为 1 时是主席控制表决方式。至于记名和不记名方式可以由PC软件本身处理。 就是说PC可能发的开始表决信号(八位数据)有: 操作员控制 主席控制 操作员控制 主席控制

+ + + +

表决方式: 01H 表决方式: 81H 响应/选举方式: 02H 响应/选举方式: 82H

主机接到表决开始的命令后判断,转向相应的处理程序,切换到与属下分机通讯。若是操作员方式(01H/02H),主机直接向分机发出“表决开始”命令(帧格式为第九位为1的形式,其中的八位数据位是FCH) ,接着发“表决方式”帧给分机(同PC机发来的) 接到PC“结束表决”命令后,切换与属下分机通讯,收集表决结果。,分机指示灯闪动,代表马上可以开始表决。然后主机切换回和PC通讯,当接收到PC的 PC机的“表决结束”命令字的帧格式见上约定: PC可能发的 结束表决信号(八位数据)有:

操作员控制 + 表决方式: 41H=(01000001B) 主席控制 + 表决方式: C1H=(11000001B) 操作员控制 + 响应/选举方式: 42H=(01000010B) 主席控制 + 响应/选举方式: C2H=(11000010B)

主机接到该命令后,(先说明操作员控制方式的情形),切换到与属下分机通讯。发“表决结束”命令,(帧格式为第九位为1的形式,其中的八位数据位是FBH),主机在延时后直接用从小到大的分机号查询方法,查各分机情况。分机回应的信息为:数据帧格式,第九位为0,第一个字节为该分机号,第二个字节是该代表表决的信息。 主机接收到后存储起来,若接收有错或接收不到则重发该分机号查询。主机分机通讯结束后。切换回与PC通讯。PC也是用查询的方式,从一号主机开始依次查问。主机发的信息块为:

主机号帧(主机号+第九位为1)+已表决的分机号0+该分机0表决结果(一个字节)+已表决的分机号1+该分机1表决结果(一个字节)+ 。。。。。。+结束帧(主机号+第九位为0)

毕 业 论 文 第 27 页 共 36页

没有表决的或在宣布“表决结束”前没确认表决的代表分机,表决结果字节为00H, 主席控制表决方式:

以上是操作员控制方式的表决过程,当PC发的“开始表决”命令中八位命令字是81H 或者是82H 。即主席控制方式:

主席控制 + 表决方式: 81H 主席控制 + 响应/选举方式: 82H

此时,一号主机切换向在其属下的主席分机(0 号分机) 通讯。由主席分机控制表决的开始和结束。

系统用到的命令字: FFH 检查线路 FEH 开始签到 FDH 签到结束 FCH 开始表决 FBH 表决结束

3. 4 主机部分编程实现

根据所定下的表决通信协议,使用MCS51系列的汇编语言来完成单片机部分的编程。采用中断方式的程序流程如图:

图18 主机流程简图

毕 业 论 文 第 28 页 共 36页

主机中断服务程序流程:

图19 主机中断服务程序

在编写的程序里,检查线路、结束代表签到并接收结果和接收表决并接收结果里都调用了一个对分机的查询接收程序,这里列出其流程:

图20 主机对分机查询子程序

毕 业 论 文 第 29 页 共 36页

对于PC的查询,主机调用了一个数据通讯子程序来回应并发数据。流程如图:

图21 主机回应PC查询子程序

3. 5 分机部分编程实现 根据分层管理的软件模型,分机也采用中断方法对主机的查询进行回应通讯,而对人(代

表)却是查询的方法,等待按键。主程序流程如图22:

图22 分机主程序流程

毕 业 论 文 第 30 页 共 36页

由于分机中断程序类似于主机,故不再列出,参见图19。其余通讯部分基本也类似,不同的地方在于分机中有等待代表按键的部分,这一部分比较重要,所以把有关的东西说明一下,特别是代表表决按键,给出程序分析。 按键和LED电路简图:

VCCVCCP1.4P1.2P1.0L 8L 7L 5L 4L 3L 2L 1L 689C2051P1.6P1.5P1.3L9P1.7P1.1P3.7 K6 K5 图23 分机按键和LED简图

K4K3K2K1

表决按键程序:

;************************ 按键程序(表决/选举/响应) ;************************ DECIDE: MOV R3,#00H LCALL TIM2 ;K1扫描 延时 WKEY1: MOV C,P3.7 ;P3.7 SETB P3.7 ; K1 JB P3.7,RK1 LCALL KK1 ;转K1判断子程序 SJMP RR2 ;RR2是继续判断K2部分 RK1: MOV P3.7,C ;恢复K1和LED1的状态 ; RR2: MOV C,P1.1 ;K2扫描 SETB P1.1 JB P1.1,RK2 LCALL KK2 ;转K2判断子程序 SJMP RR3 RK2: MOV P1.2,C ; RR3: MOV C,P1.3 SETB P1.3 JB P1.3,RK3 LCALL KK3 ; 转K3判断子程序 ;如果是响应和选举方式还要扫描K4 K5 JNB 7H,CHECK45 SJMP RR6

CHECK45: SJMP RR4 RK3: MOV P1.3,C ; RR4: MOV C,P1.5 ;K4扫描 SETB P1.5 JB P1.5,RK4 LCALL KK4 ;转K4判断子程序 SJMP RR5 RK4: MOV P1.2,C ; RR5: MOV C,P1.6 ;K2扫描 SETB P1.6 JB P1.6,RK5 LCALL KK5 ;转K5判断子程序 SJMP RR6 ;转判断K6是否按下RK5: MOV P1.6,C ; RR6: MOV C,P1.7 ;判断K6是否按下 SETB P1.7 JB P1.7,RK6 ACALL VOTEK6 ;K6按下,转向消抖动判断 RK6: MOV P1.7,C AJMP WAITKEY1 ;没有按下,转向再扫描

毕 业 论 文 第 31 页 共 36页

3. 6 Microwire EEPROM 编程

在会议系统中,因为每台主机下最多可带250台分机,按照通信协议和编程的可行性考虑,每台分机的信息要用一个字节的空间来存储,而AT89C2051内部只有128个字节的RAM空间,远远不能满足系统的可扩充性要求,所以我们采用了外扩EEPROM的方法解决。因为89C2051的I/O脚很有限,故采用外扩串行EEPROM。一般的串行EEPROM有I2C、Micro wire 和SPI 三种。我们选用的是ATMEL 公司的Micro wire总线的串行EEPROM 93CXX系列。并根据需要选用了其中的有2K bit存储空间的93C56。 Micro wire总线是一种三线制串行通讯接口解决方案。 三线数据传输定义为: DI:串行数据输入 DO:串行数据输出

2

SK:串行移位时钟

相对于IC总线资料的众多,Micro wire总线的编程资料太少了,所有我们在编写93C56

的读写程序时,努力的写成一个通用的程序,适用于整个Micro wire系列的EEPROM 。并且试图完整地整理在这里。以下简要给出的资料翻译自ATMEL公司网站提供的datasheet文件。 总体描述:

AT93C46/56/57/66(整个ATMEL的Micro wire系列)提供了1024/2048/4096位串行电可擦除的可编程读写ROM。当使用16位每单元时,可组成64/128/256个字。这时6脚ORG接Vcc上。当ORG接地时,可以提供8位为一个单元的128/256/512个字。 采用8脚PDIP封装。其他有关特性参见93CXX系列数据手册。 芯片在CS脚选片允许后被激活,这时一旦DI接到“读”命令,其中的地址将被译码,对应的数据将随时钟SK串行输出到DO。至于写周期是单一的,写之前不需 “擦除”命令。当CS 被置高后,随着一个擦除/写周期的初始化,则写周期被激活,芯片处于擦除/写允许状态。结构框图如图24

êy?Yμ? ′? ?÷VCCGNDROMORG128/256/512?á8?ò64/128/256?á16μ? ?· ò? ??DICSSK

2ù ×÷ ?£ ê′ò? ?? ?? μ-ê? 3??o 3? ?÷ê±?ó·¢ éú ?÷DO图24 93CXX系列芯片内部结构

毕 业 论 文 第 32 页 共 36页

下表给出其中的2K-BIT芯片93C56/66所有的指令:

图25 93C56/66指令集

事实上我们读写这些芯片只需要用到EWEN(擦除/写允许)、WRITE(写)和READ(读)等几个指令。下面对这几个指令给出时序和简单说明。 EWEN(擦除/写允许指令):

为保证数据完整性,芯片在上电时先进入的是禁止擦除/写状态。所以在执行其他指令(除了读)之前先要执行EWEN 指令,该指令下达后芯片将一直处于编程允许状态,除非下禁止操作指令(EWDS)或者关断电源。 时序如图26:

图26 EWEN指令时序

READ(读指令):

发出该指令和ROM区地址后,地址被译码,对应该单元的内容被送到DO端输出,输出与SK时钟同步,每一位输出在SK上升沿有效,(编程过程中我发现需要一个至少400ns的延时)输出先由LSB开始依次到MSB。 时序如图27:

图27 READ指令时序

毕 业 论 文 第 33 页 共 36页

WRITE(写指令):

一个写指令包括了将要写入的指定的地址的8位或16位数据,向DI输入数据的要求是:在每个SK时钟的上升沿输入一位数据,先发起始位“1”,再发命令字“01”,之后跟9位(An~A0)地址,再紧跟Dn~D0(8位数据)。芯片自动编程写周期tWP开始于DI接到最后一个数据D0时。当CS被置低(不少于250ns)后置高,DO端开始输出READY(写完毕,等待下一指令)/BUSY(正在写入)状态,DO=0(BUSY) ,DO=1(READY)。注意tWP最大可达10ms。 时序如图28:

图28 WRITE写指令时序

下面的编程文件 对于整个93CXX系列都是适用的(事实上我只列出了上面说的主要的三种指令,别的指令可以参考EWEN的送指令方法很容易得到): ;这个编程文件给出了用AT89CX051单片机读写AT93CXX系列串 ;行CMOS EEPROMS 的完整程序。该程序完整的给出8-bit和 ;16-bit方式读写访问所有的AT93CXX系列的EEPROM。程序在运 ;行于12MHZ的时钟下的MCU中适用于所有的AT93CXX器件。若 ;要求运行于更快的时钟下则必须进行必要修改。 ; ;列出了AT93CXXX系列所有的七种指令:读(read)、写(write)、 ;全写(write all)、擦除(erase)、全擦除(erase all)、擦写允许(erase ; /write enable 和擦写禁止(erase/write disable)。每种指令功能都 ;是以子程序形式写成,有入口地址。 ;调用这些子程序的要求如下: ; ; 1)、把需要读写的地址load 进寄存器ADDR_LO(8位), ; 或者Load进寄存器ADDR_HI:ADDR_LO(大于8位) ; 2)、把数据load进(如果需要的话)寄存器DATA_LO ; (字节)或者寄存器DATA_HI:DATA_LO(字). ; 3)、调用子程序(READ,WRITE,WRAL,ERASE,ERAL, ; EWEN,EWDS). ;如果子程序有返回数据的,将存在寄存器DATA_LO(SIZE=0) ; 或者DATA_HI:DATA_LO(SIZE=1)。 ; ; 一些子程序(ERITE,WRAL,ERASE,ERAL)还返回出错标志 ; 位CY,=1出错,=0正常。 ; ;下面的表列出了93CXX系列的所有芯片被组织成8位(ORG=0) ;或者16位(ORG=1)时的有效容量。 ; ; ; 93C46 | 93C56 | 93C57 | 93C66 | ;----- ----------------------|--------------- |-------------------|----------------------| ; Data bits: 8 16 | 8 16 | 8 16 | 8 16 | ; Address bits:7 6 | 9 8 | 8 7 | 9 8 | ; ;SIZE标志表示是8位还是16位的结构组织,取决于ORG脚 ;ORG连VCC或者浮空(=1)表示为16位结构,ORG接地 ;表示为8位的组织方式。 ;程序中使用了PSW里的F0位作为SIZE标志位。

; ;为了说明程序用于AT93CXX系列里的哪种芯片,用NADDR ;字串表示该器件所要用的地址线数目,如左表所示,取决于 ;ORG引脚的连接。 ; ;AT93CXX系列使用4条线和单片机连接(CS,SK,DI,DO)。 ;当指明用的是三线配置的时候,把DI和DO连到单片机的同 ;一条I/O线上。 ;当要指明用的是四线配置的时候,DI和DO连到单片机的不 ;同I/O上。 ;这些配置不需要改动程序。 ; ;其中初始化AT93CXX 芯片的控制线的子程序要求放在主程序 ;的reset 复位初始化部分。 ; ;下面是程序部分: ;***************************************************** ;使用的有效地址线数预定义(参考上面的表格) ; NADDR EQU 9 ;8-bit “ 93C56” ; NADDR EQU 8 ;16-bit ;数据组织方式标志 ; SIZE EQU F0 ;0=8-bit,,1=16-bit ; ;寄存器定义 ; DATA_LO EQU R0 ;字节数据寄存 DATA_HI EQU R1 ;扩展后字数据寄存高位 ADDR_LO EQU R2 ;短地址寄存 ADDR_HI EQU R3 ;扩展地址寄存 ;与单片机连线定义(参考上面解释) ; CS BIT P3.3 ;选片线 SK BIT P3.4 ;串行数据时钟 DI BIT P3.5 ;串行数据输入 DO BIT P3.7 ;串行数据输出 毕 业 论 文 第 34 页 共 36页 ;***************************************读写允许 EWEN: SETB CS MOV DPTR,#(10011B SHL(NADDR-2)) MOV B,#12 ;NADDR+3 LCALLOUTDATA CLR CS RET ;***************************************读 READ: SETB CS MOV dpl,#110b mov b,#3 acall outdata mov dpl,#addr_lo mov dph,#addr_hi mov b,#NADDR ACALL OUTDATA ACALL INDATA CLR CS RET ;***************************************写 WRITE: SETB CS MOV B,#3 ACALL OUTDATA MOV DPL,ADDR_LO MOV DPH,ADDR_HI MOV B,#NADDR ACALL OUTDATA MOV DPL,DATA_LO JB SIZE,EE61 MOV B,#8 AJMP EE62 EE61: MOV DPH,DATA_HI MOV B,#16 EE62: ACALL OUTDATA CLR CS ACALL STATUS RET ;****************************看器件状态 STATUS: PUSH B SETB DO SETB CS MOV B,#220 EE40: PUSH B MOV B,#22 DJNZ B,$ POP B JB DO,EE41 DJNZ B,EE40 SETB C AJMP EE42 EE41: CLR C EE42: CLR CS POP B RET

;************************************ OUTDATA: PUSH B MOV A,B CLR C SUBB A,#8 JC EE6 JZ EE5 MOV B,A CLR C SUBB A,#8 JC EE2 JNZ EE9 MOV A,DPH AJMP EE4 EE2: PUSH B MOV A,DPH EE3: RR A DJNZ B,EE3 POP B EE4: ACALL SHOUT MOV B,#8 EE5: MOV A,DPL AJMP EE8 EE6: PUSH B MOV A,DPL EE7: RR A DJNZ B,EE7 POP B EE8: ACALL SHOUT EE9 SETB DO POP B RET ;*********************************** SHOUT: CLR SK RLC A MOV DI,C NOP SETB SK DJNZ B,SHOUT CLR SK RET ;************************************ INDATA: SETB DO ACALL SHIN JNB SIZE,EE21 MOV DATA_HI,A ACALL SHIN EE21: MOV DATA_LO,A RET ;************************************ SHIN: PUSH B CLR SK MOV B,#8 EE30: SETB SK NOP MOV C,DO RLC A CLR SK DJNZ B,EE30 POP B RET

3. 7 PC 用户软件的实现

PC机的用户系统是一位研究生师兄来开发,基本上就是按照上面给出的通信协议来进

行通讯部分的编程。软件界面做成了window形式。并投入了使用。图29是检查线路的界面。

毕 业 论 文 第 35 页 共 36页

图29 软件界面一观

毕 业 论 文 第 36 页 共 36页

小 结 与 致 谢

经过了两个多月在实验室的努力。在指导老师陈耀和老师的指导下,从收集资料到具体

电路的设计和做板实现,到后期的软件开发,整日呆在实验室里做设计,很紧张也很快乐。终于整个系统完成并投入使用。当然我觉得自己所作的东西还是不够的,没有很好的完成老师交给的所有任务,只算是帮助了老师完成了整个设计。不过如果说到自己的所得,真的很多,整个设计的期间,从收集最新的芯片资料和设计可行性考虑到使用protel99se 软件设计电路板,到软件的编程考虑,一步一步,在陈老师的指导下都基本做到了。特别是最初我们是想采用TI公司的MSP430系列单片机来设计,我设计的一块分机板出现了意想不到的振荡现象,老师给予的指点对我的启发很大,对于电路板的设计和EMI 、EMC等电子设计的问题的了解都有了很大的提升。设计的后期protel软件我已经能熟练地应用,甚至能够帮助别的同学解决一些设计使用上的问题,这个论文大部分的图都是在protel界面下制作的。感谢陈老师悉心的指导和鼓励。 还要感谢教我单片机课程的李炳兴老师和邓少芝老师,没有他们的指引,我不可能在电子设计的道路上走得如此好。 感谢彭自成老师,他教授的工程设计思想也许会在我以后的设计生涯里起不可估量的重要作用。一同感谢那些教过我的老师们,他们给予我思考能力和治学态度上的影响是巨大的。感谢谢德英老师,在设计的期间给予的帮助和指导。 还要感谢我的三位师兄,余德彦、谢清荣和胡辉。他们的治学态度和研究方法,还有一些对技术甚至人生的想法都很深的影响了我。在做对PC通讯部分的编程时,余德彦师兄的指导对我的帮助是很大的,胡辉师兄是做这个系统的PC软件部分的工作的,他的好学和向上的精神鼓励着我们一同完成了设计。 感谢我的同学和兄弟邹天翔与及其他一起作论文的同学们,我们在一起设计的日子很快乐,这应该是大学留给我们可以用一生去怀念的最美好的时光了。

最后感谢看楼的黄伯和陈伯,他们每天夜里11点后催我们从实验室里离开回宿舍睡觉。使得大家能很好的保持良好的作息。谢谢他们。

潘 剑 锋

2001年6月于中大

参考文献

1、 孙育才. MCS-51系列单片微型计算机及其应用(第三版)

东南大学出版社. 1999

2、 何立民. IC总线应用系统设计

北京航空航天大学出版社. 1995

3、 MAXIM 中国网站RS-485资料,2001 4、 Explanation of Maxim RS-485 Features, Maxim Technical Articles ,2001 5、 RS-485 Basics ,Maxim Design and Applications support,2001 6、 Datasheet of 93C46/56/57/66 from www.atmel.com 7、 Datasheet of max3080~3089 from www.maxim-ic.com 8、Datasheet of AT89C2051 from www.atmel.com

2

毕 业 论 文 第 36 页 共 36页

小 结 与 致 谢

经过了两个多月在实验室的努力。在指导老师陈耀和老师的指导下,从收集资料到具体

电路的设计和做板实现,到后期的软件开发,整日呆在实验室里做设计,很紧张也很快乐。终于整个系统完成并投入使用。当然我觉得自己所作的东西还是不够的,没有很好的完成老师交给的所有任务,只算是帮助了老师完成了整个设计。不过如果说到自己的所得,真的很多,整个设计的期间,从收集最新的芯片资料和设计可行性考虑到使用protel99se 软件设计电路板,到软件的编程考虑,一步一步,在陈老师的指导下都基本做到了。特别是最初我们是想采用TI公司的MSP430系列单片机来设计,我设计的一块分机板出现了意想不到的振荡现象,老师给予的指点对我的启发很大,对于电路板的设计和EMI 、EMC等电子设计的问题的了解都有了很大的提升。设计的后期protel软件我已经能熟练地应用,甚至能够帮助别的同学解决一些设计使用上的问题,这个论文大部分的图都是在protel界面下制作的。感谢陈老师悉心的指导和鼓励。 还要感谢教我单片机课程的李炳兴老师和邓少芝老师,没有他们的指引,我不可能在电子设计的道路上走得如此好。 感谢彭自成老师,他教授的工程设计思想也许会在我以后的设计生涯里起不可估量的重要作用。一同感谢那些教过我的老师们,他们给予我思考能力和治学态度上的影响是巨大的。感谢谢德英老师,在设计的期间给予的帮助和指导。 还要感谢我的三位师兄,余德彦、谢清荣和胡辉。他们的治学态度和研究方法,还有一些对技术甚至人生的想法都很深的影响了我。在做对PC通讯部分的编程时,余德彦师兄的指导对我的帮助是很大的,胡辉师兄是做这个系统的PC软件部分的工作的,他的好学和向上的精神鼓励着我们一同完成了设计。 感谢我的同学和兄弟邹天翔与及其他一起作论文的同学们,我们在一起设计的日子很快乐,这应该是大学留给我们可以用一生去怀念的最美好的时光了。

最后感谢看楼的黄伯和陈伯,他们每天夜里11点后催我们从实验室里离开回宿舍睡觉。使得大家能很好的保持良好的作息。谢谢他们。

潘 剑 锋

2001年6月于中大

参考文献

1、 孙育才. MCS-51系列单片微型计算机及其应用(第三版)

东南大学出版社. 1999

2、 何立民. IC总线应用系统设计

北京航空航天大学出版社. 1995

3、 MAXIM 中国网站RS-485资料,2001 4、 Explanation of Maxim RS-485 Features, Maxim Technical Articles ,2001 5、 RS-485 Basics ,Maxim Design and Applications support,2001 6、 Datasheet of 93C46/56/57/66 from www.atmel.com 7、 Datasheet of max3080~3089 from www.maxim-ic.com 8、Datasheet of AT89C2051 from www.atmel.com

2

本文来源:https://www.bwwdw.com/article/fycp.html

Top