DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 321|回复: 0
打印 上一主题 下一主题

用单片机普通I/O口实现多机通信的一种新方法

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 19:49:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  
         
    摘  要:介绍了一种利用单片机的普通I/O口实现多机通信的方法,解决了传统的多机通讯应用系统中波特率不能任意改变的弊端,解放了主机、各分机的真正串行口,为分机连接不同波特率的串行设备进行通讯,以及主单片机用于连接远程PC或数字电台提供了有利的条件。
关键词:单片机; 多机通讯;I/O口
1  传统的多机通信方式
在实际工业应用中,经常遇到需要多台计算机配合才能完成的数据采集与控制系统的任务,而多台计算机配合主要是通过多台计算机之间的通信来实现的。为此必须将它们按实际需要组成一定形式的网络。多机通信网络通常有5种网络形式:星型、树型、总线型、环型、分散型网络结构。它们各有优缺点,其中总线型网络结构以可靠性好、接口简单、组成灵活和控制简单等优势,在实际应用中使用最多。
总线型网络结构中主机与分机进行串行通信可以利用查询方式或中断方式。用查询方式工作时,所有分机只能处于监听或通讯状态,资源比较浪费。实际使用时大都采用中断方式。图1是采用中断方式,利用单片机的串行口方式3及SM2和RB8的配合完成主从式的多机通信的网络结构图。从图中可以看出,原则上主机可以管理N台分机,但考虑到各机的发送端的驱动能力,一台主机一般可以管理8台分机。对于串行口方式2和3,每帧11位,其中第9位是可编程的,利用它的奇偶校验,也可以进行多机通信。用作多机通信时,对于方式2和3,若SM2=1,且接收的第9位RB8=0,则RI不启动,即接收到的全帧作废,当接收到的RB8=1时,接收有效;而当SM2=0时,无论接收到的RB8是什么,接收都有效。
与查询方式不同,采用中断方式时,分机不必一直处于监听状态,而可以进行相应的数据采集或控制等其他工作。当主机有通讯要求时,可通过P10向各分机发送中断请求(要求通讯)信号;而从机在工作时,如果允许主机与之通讯,则可开外部中断及总中断1,否则关闭中断1。
这种中断方法解决了分机盲目等待的问题,分机也能立即响应主机的通讯请求,但在某些应用场合有相当的局限性。
    (1)当分机通信波特率要求不一样时;
    (2)主机(或分机)还要通过串行口与别的设备进行数据交换时。
    以上介绍的方法就难以实现。这是因为:不管是主机还是从机它们的串行口已被使用,跟远程计算机或串行设备进行通信已没有串口用。下面介绍的方法就很好地解决了这些问题。





2  利用单片机的P1口进行串行通信
为实现单片机之间的串行通讯,同时主机、分机还与其他串行设备进行通信,作者利用AT89C51的P1口中的3条普通I/O线来模拟进行异步串行数据通信,取得了很好的效果,串行通信网络结构见图2。
其中:主单片机的P1.0作为发送端,P1.1作为接收端,P1.2作为中断请求端,而各分机也以P1.0作为发送端,P1.1作为接收端;并事先为每一个分机确定一个地址编码信息。当主机要与某一个分机进行通信时,主机通过P1.2发出一个中断请求信号,延时相应的时间后,向P1.0发送模拟的数据帧,数据帧中包含要进行通讯的分机地址编码信息。各分机接收了来自INT1的中断请求信号后,进入中断服务程序,分机检测P1.1端,当P1.1端由高变低时,说明主机发送的数据帧的起始位开始,分机模拟异步接收方式跳过起始位依次接收各数据位。接收完来自主机的地址信息后,与本机地址信息比较,如果与本机地址相同,则等待准备接收数据或命令;如果接收到的地址与本机地址不符,则跳出中断服务程序,返回到主程序继续原来的工作。





    这种方式特别适用于主单片机要循环与各个分机进行数据通信的场合。这样就解决了波特率不能随意设置的问题,同时各单片机的串口可以当作它用。其中波特率可以随意设定包含下面三重含义:
(1)主机可以利用RXD、TXD同远程PC机或数传电台等进行通信,波特率可任意设置;
(2)分机也可与其他的串行设备进行通讯,波特率也可以随意设置;
(3)主机和分机之间的波特率可以任意设置。
3  具体编程实现
下面给出通过P1.0发送一帧和通过P1.1接收一帧数据的子程序,供参考。







4  使用中应注意的一些问题
(1)延时时间的长短是根据波特率的变化而变化的,延时子程序的循环次数与单片机所采用的晶振频率有关。
  (2)以上提供的程序是针对12 MHz晶振、9600 b/s通讯的。DELA子程序延时时间为50 μs 。实际应用时,可以根据不同波特率和不同的晶振选择不同的延时时间来模拟异步串行通讯。
(3)上面的多机通信是利用P1口来模拟异步串行通信,每一帧都有起始位,同时数据采集在一位的中间进行的,所以延时时间允许有一定的误差,而不影响接收数据的准确性。工程上常用波特率传送一个二进制数据位所需要的时间见下表。
 



5  结语
该项技术已经成功应用于海洋领域深海数据采集系统中,不同的分机连接了不同的进口仪器设备,实现串行数据采集,取得了满意的效果。

参考文献
1 陈汝全,等.单片机实用技术.北京:电子工业出版社,1993
2 陈粤初,等.单片机应用系统设计与实践.北京:航空航天大学出版社,1993
         
          [/td]
        [/tr]
      
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-8-2 22:27 , 耗时 0.086673 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

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