基于89C2051单片机的热表通讯模块的开发

发布者:平安宁静最新更新时间:2012-11-03 来源: 21ic 关键字:89C2051  单片机  热表通讯模块 手机看文章 扫描二维码
随时随地手机看文章

1  引言
      集中供热方式的普及以及计量供热的实施是建筑节能的有效手段,但需要通过供热系统运行管理的自动化来实现。为了研究热网的控制调节方法,建立了热网模拟实验平台,并且配置了自动监测控制系统。在设备选型时,采用了丹麦Kamstrup 热量表作为实验管网中各主要管段输送热量及实验系统热量的测量采集装置,但该热表配备的数据通讯接口模块只能通过专用外接插口与计算机或相应的数据终端进行一对一的RS - 232 串行通讯,难以满足现场的通讯要求。

2  通讯模块的核心器件
      在系统中,单片机一般称为下位机,通常用来完成数据的采集和上传,由PC 机、网络设备、数据库服务器组成的后台应用部分则统称为上位机,对下位机的上传数据进行分析并处理。系统充分发挥了单片机在实时数据采集和微机对图形处理、显示以及数据库管理上的优势,使得单片机的应用不局限于自动监测或控制,而形成了向以网络为核心的分布式多点系统发展。在实验台监测控制系统中,选用单片机同工控机配合建立了如图1 所示的通讯网络,实现对热表采集数据的读取。
 
图1  工控机、热表通讯网络
      RS - 485 通讯标准针对RS - 232 存在的通讯距离近、抗干扰性能差等缺陷在提高传输速率和距离、抗干扰特性上都做了很大改进。所以考虑到通讯的可靠性,为工控机选配了RS - 485 的串口卡建立通讯。
      单片机数字信号遵循CMOS 电平协议,传输距离短,达不到分布式控制系统传输距离的要求,需要电平转换芯片构成接口电路与上位机连接。同时,单片机与热表连接时也要通过相应的接口电路达到电平的匹配。
      另外,单片机是工控机与热表进行数据交换的通讯枢纽,担负着同时与工控机和热表进行串行通讯的责任,因此需要两个串行通讯端口。有3 种方法供选择:

  1. 采用多串口的单片机; 
  2. 采用通用异步串口扩展芯片; 
  3. 采用普通I/ O 端口模拟实现串行通信。

      第3 种方法最简单经济,并且可以实现高速率通信。另外,考虑到对硬件资源的充分利用,选用ATMEL 公司生产的89C2051 单片机进行开发。

3  通信模块的开发
3.1  硬件接口
       理论上,利用软件的方法可使普通I/ O 口扩展成的串行口与标准的串行口具有同样的功能。但是,根据实际情况,单片机自带的串行口容易通过专用的电平转换芯片实现RS - 485 电平与上位机连接;热表数据通讯接口对发送和接收数据有不同的波特率要求,在模拟串口的程序中只要作相应的延时处理,就能满足。因此,用标准串口通过电平转换连接上位机(见图2) ,用普通I/ O 口模拟的串口经相应的接口电路与热表相连(见图3) 。
 
图2  RS - 485 电平转换
      图2 中单片机的标准串口通过75176 芯片转换为RS - 485 电平,75176 为8 个管脚,DIP 封装。RO 为数据接收端;RE 为数据接收允许端,低电平有效;DI 为数据发送端;DE 为数据发送允许端,高电平有效;DT+ 、DT - 脚为电流环回路端。图2 中把RE、DE 脚连结在一起,当P3. 7 脚为高电平时,允许数据发送,当P3. 7 为低电平时,允许数据接收。R 为电路匹配电阻,可增强系统抗差模干扰的能力。
 
图3  单片机与热表接口电路
   图3 中虚线框内为热表本身的数据通讯接口电路,热表通过该接口连接专用的外接插头可以同计算机或相应的数据终端进行RS - 232 通讯。利用示波器检测热表在与计算机一对一的通讯过程中收发端的电平信号特征,采用分立元器件搭建了接口电路,使之与单片机端口达到电平的匹配。在单片机同热表的通讯过程中,为保证通讯的可靠且能保证单片机及时地接收热表传来的数据,采用中断的接收方式,P3. 2 为中断触发端,所以选用该端口作为模拟串口的接收端,选用了P3. 4 作为模拟串口的发送端。[page]

3.2  串行通信软件
     普通I/ O 口模拟串口的软件编程实质上就是模拟异步通讯规程。异步通信规程是把一个字符看作一个独立的信息单元,并且字符出现在数据流中的相对时间是任意的。而每个字符中各数据位以固定的时间传送,因此这种传送在同一字符内部是同步的,而字符间是异步的。异步通信收发取得同步的方法,是采用在字符格式中设置起始位和停止位。但由于发送器和接收器不是使用同一个时钟,而是以各自时钟来划分每位的宽度,收发时钟的误差必然影响数据的正确采样,所以要求准确识别起始位的前沿。实际的做法是利用1 个16 倍波特率的时钟,在1 个位周期的1/ 16 时间内确定出字符的开始,接收器在每个时钟的上升沿采样数据输入线。若发现低电平,紧接着又连续采样到8 次均为低电平,则认定为起始位,以后每隔16 个时钟采样1 次数据。字符再同步过程见图4。
 
图4  f = 16 倍波特率的字符再同步过程
      在软件编程中,根据热表发送数据的波特率计算出数据位周期,而后再根据单片机的晶振频率编写数据位周期延迟程序和半位周期延迟程序。当单片机检测到INT0 (即P3. 2 端口) 为低电平时,外部中断触发,进入中断处理程序。首先,调用半位周期延时程序,判断是否为起始位,若是则再调用位周期延时程序,进行数据位的判断与接收,最后判断接收停止位。只要延时程序能准确地保证延时时间,就能完成对图4 中工作时序的模拟。另外,在接收数据帧各个位时,都连续地采样3 次,并遵循3 中取2 的原则来确定所检测的值。这样做很大程度上抑制了干扰,提高了信
号传输的可靠性。同理,单片机发送数据时只要调整好发送数据帧各数据位之间的传输时间间隔,满足热表接收数据的波特率,就能完成热表对单片机发送数据的接收,程序流程图如图5 所示。
 

3.3  通信协议
      单片机的串行口工作于方式2 或方式3 时,数据帧由11 位数据组成:1 位起始位、9 位数据位、1 位停止位。在这两种方式下,第9 位数据是可控的标志位,只有第9 位的数据是“1”(代表地址帧) 时,串行口接口电路才会在接收完1 个数据后,向CPU 请求中断。因为PC 机的异步通信功能没有这样的通信格式,所以这种方式只适合单片机之间的多机通信。一般情况下,实现两种异型机之间的通信常采用以下几种方式:
(1) 用1 台单片机作为上位PC 机和下位单片机之间的“桥梁”,实现数据格式的转换;
(2) 在PC 机内安装异步通信适配卡,通过设计可编程芯片的运行方式,使之与单片机的多机通信方式一致;
(3) 设置上位机编程环境提供的串行通讯控件的属性来区分寻址指令和数据传送指令,进而实现通讯。
      方法1 和方法2 硬件结构复杂,方法3 软件代码编写繁琐。在系统不复杂、任务不重、通信数据量不大的情况下,这些方法还不会有明显的缺陷,否则方法1 中的“桥梁”单片机和方法2 中的通信异步适配器将会成为通信信道的瓶颈,而方法3 中数据帧中的奇偶校验位通常用作发送地址码(通道号) 或数据的特征位,这样数据通信的校核会采用累加和校验的方法,采用这种方法不但软件开销和进行通信的数据量增加了,而且实时性也受到影响。
       根据实际情况,采用了通信信息帧不区分数据帧和地址帧的方法,这样做不必使单片机工作在11 位异步收发方式下,使单片机和PC 机的串口工作方式一致。受到通信格式的启发,设计信息帧见图6 ,用1~3 个字节作为数据通信的“报头”,起同步作用;用1个或多个字节作为单片机的地址区别码来标识某个单片机(根据系统中下位机的个数决定) ;用来标志下位机工作性质的信息码可根据实际的情况在信息帧中灵活设置。[page]
 
图6  信息帧一般格式
   上位机发送信息帧时,下位机全部收到上位机的信息帧,然后判断信息帧中的地址码,如果是自己的地址码,则根据数据帧中的信息码内容作出相应的反应。信息帧的长度不限(根据系统中下位机的个数以及信息码的形式决定) ,是多个字节的。在这种通信格式中还可以用软件的方式进行一些通信数据的校验。
      工控机与下位机通讯模块之间的通信协议,如图7 所示。
 
图7  工控机与下位机通讯模块间的通信协议
  上位机工控机向下位机发出的信息帧中应包含地址和控制指令信息,以便下位机的通讯模块能辨识出是否及如何应答;通讯模块,向上位机回复的信息帧中应包含自身地址及对应控制指令的数据;同步字和结束字是完成异步通讯必须的,因此无论上位机信息帧还是下位机信息帧都不可少。具体的信息帧格式如下(括号里标注为字节数,未标出的字节数为1) :
整个收发数据的互控流程如下:
上位机:按照一定的时间发送指令给下位机;
下位机:收到信息帧后,判断信息帧中的地址是否为本机地址,若是则将本机地址发回上位机,并根据控制字向热表发出相应的指令,等待模拟串口中断,将热表数据传给单片机,之后转发给上位机;反之则退出中断程序;
上位机:根据串口引发的事件接受数据,判断来源后存入数据库并通过人机界面显示。
按照上述通信协议,综合串口模拟过程对通讯模块(下位机) 进行编程。编写的程序主要包括主程序和中断程序;中断程序有模拟串口中断接收程序和串行中断程序。其中主程序完成各个特殊寄存器及通信参数、格式的初始化工作,分析判断串行中断,接受信息向热表发出相应的指令;模拟串口中断程序具体完成热表数据的接收;串行中断程序完成对上位机发出信息帧的接收。另外,考虑到实际应用当中各种随机干扰,在编写程序时作了适当的纠错处理,即通讯模块收到上位机指令后对热表进行操作,若在一定时间内没有收到回应,则使程序复位。
       每台热表对应的通讯模块地址的标识方法如图8所示。充分利用了该型号单片机的硬件资源,以跳线的方式设定P1 端口各个管脚的电平作为地址标识,8个管脚不同的通断组合可以表示不同的地址。
 
图8  通信模块地址标识
       通讯模块的编程都是利用仿真器提供的环境进行模拟并调试成功的。

4  与上位机软件接口
      通过通讯模块最终实现工控机对热表数据的读取还需要对上位机进行通讯接口程序的编写。上位机通讯程序的编写也同样有多种方法: (1) 通过调用WINDOWS 提供的API 函数实现; (2) 采用汇编语言和C 语言混合编写动态连接库函数实现; (3) 利用VB 语言及其提供的串行通信控件实现。第3 种方法最简单, 开发周期短, 经济实用。只需在工程中添加MSCOMM控件, 然后进行相应的属性设置, 便可完成数据的收发。但VB 中的数据收发分为二进制形式和文本形式。若发送文本, 单片机收到的文本是ASC Ⅱ码, 在VB6. 0 中使用的是Unicode 字符,即用2 个字符来表示1 个字符, 当发送1 个字符时单片机收到2 个字节。因此大多情况下PC 机与单片机通讯交换的是二进制数据。所以利用MSCOMM 控件来发送二进制数据时, 必须将变量声明为Byte 形式。

参考文献
[1 ]  胡汉才. 单片机原理及其接口技术. 北京:清华大学出版社,1993 :317 - 320.
[2 ]  李华,严天峰. 串行通讯软硬件的实现方法. 电子世界,2003 (5) :31 - 33.
[3 ]  王小军,郝迎吉,张斌. 单片机串行通信中两个问题的讨论. 现代电子技术,2002 (1) :69 - 71.

关键字:89C2051  单片机  热表通讯模块 引用地址:基于89C2051单片机的热表通讯模块的开发

上一篇:MCS-51单片机I/O端口的存取
下一篇:基于89C2051单片机的热表通讯模块的开发

推荐阅读最新更新时间:2024-03-16 13:12

51单片机对两位 BCD拨盘 的读出程序
问题:做了一个小设计,用的是AT89C2051,其中P1口接两位BCD指拨开关,P3.2接了一个开关,P3.3接了一个继电器。 两位BCD指拨开关的具体接法是公共端接P1.1和P1.2口,8421分别接在P1.3~P1.6口。 我想通过开关控制继电器开合。具体要求是:按开关的次数由BCD开关的十位来决定,即BCD上显示的是数字3,则按3次P3.2所接的开关,继电器才开始动作,显示5,则按5次继电器才动作,以此类推;而继电器开合时间由BCD开关的个位控制,如果BCD上显示的是数字3,则继电器开或合3分钟,是5则开或合5分钟。 不知道如何读入的P1口值并分开成两部分,请哪位前辈高手帮忙写个程序,让我学习学习。在此万分感谢。 悬赏分:5
[单片机]
汽车芯片能力再提升,四维图新MCU芯片预计年底进入量产
    四维图新在互动平台上透露,其MCU芯片研发进度正常,目前已进入产品化设计阶段,预计2018年年底左右进入量产阶段。 四维图新是一家数字地图内容、车联网和动态交通信息服务、基于位置的大数据垂直应用服务提供商。随着新能源、车联网、自动驾驶对地图导航的推动,四维图新确立了在芯片、导航、车联网以及自动驾驶以及位置大数据的新战略布局。 2016年,四维图新全资收购杰发科技,从此开启产业链延伸至汽车芯片环节布局。在被四维图新收购之前,杰发科技是联发科的控股子公司,主要从事汽车电子芯片的研发、设计,主要产品为车载信息娱乐系统芯片及解决方案。 如今,四维图新车载信息娱乐系统芯片已经被越来越多的车厂在前装领域采用,并连续多年占据国内后装市
[手机便携]
基于51单片机的中断花式点灯设计
本设计旨在使用 中断 0(INT0)的方式,完成2种样式的LED显示的设计。 操作方法:开始仿真,则运行demo2样式,等一段时间,当按下开关“Change”则运行另一种样式。 仿真: 参考代码: #include reg52.h #define uint unsigned int #define uchar unsigned char uint i; uchar demo ={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe, 0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; void Delay(unsigned int i
[单片机]
基于51<font color='red'>单片机</font>的中断花式点灯设计
单片机的状态机框架编写
在单片机裸机的编程方法中,状态机的方法是比较好的,经典的比如按键的检测判断等。 其实有很多地方可以使用这种思想。比如传感器的数据采集,因为单片机不可能一直等待着运行,那样的效率是很低的,通常都是结合fsm + timer的方式来提高CPU的使用率 一、传感器中使用fsm的方法。 大家都知道,ds18b20的采集是比较慢的,发送转换指令后,最慢需要等待720ms,这个时间有点太长了。简直不能忍受。 如下所示:我采用了11bit分辨率,0.125的分辨率足够了,作为温度参考而已。 The resolution of the temperature sensor is user - configurable to 9, 10,
[单片机]
MCU 中输入/输出口的使用
简介:   在HT49C30-1/HT49R30A-1 中有8 个双向的输入/输出口(PA 口,8 位),6 个输入口(PB 口);HT49C50-1/HT49R50A-1 中有12 个双向的输入/输出口(PA 口,8 位;PC 口,4 位),8 个输入口(PB 口);HT49C70-1/HT49R70A-1 中有16 个双向的输入/输出口(PA 口,8 位;PC 口,8 位),8 个输入口(PB 口)PA、PB、PC 分别对应RAM 中地址 、 、 。掩膜时可选择PA、PC 口的结构(NMOS 或CMOS),及该口是否具有上拉电阻。   若PA、PC 口结构NMOS 时,在读取数据之前,必须向相关位写“1”以关闭场效应管NM
[应用]
基于AT89C51单片机的节拍器设计
  1 硬件电路原理   节拍器以AT89C51 单片机为控制中心,由LED 显示模块、调节键盘模块、声音输出模块组成。图1 是节拍器的电路原理图。ATMEL 公司生产的AT89C51 单片机与MCS51指令系统兼容,40 脚结构,是系统的控制中心。显示模块由四位一体的共阳极蓝色LED 显示器构成,采用动态扫描显示方式, Q11~ Q14是LED 的位选择开关三极管, R6~ R13是数码管段发光二极管的限流电阻。四位一体的LED 数码管完成显示节拍数、各功能代码及参数值的功能。键盘调节模块由4 只按键构成,分别是功能选择键A、设置参数选择键B、参数增加键C和参数减少键D ,4 只按键可以完成各种功能的选择和各参数的设置。声音输
[单片机]
基于AT89C51<font color='red'>单片机</font>的节拍器设计
PIC单片机在远程控制中的应用
    摘 要: 介绍了一种用PIC系列单片机控制的简易远程教学系统,着重介绍了远程控制器的组成和工作原理,并给出了软件设计流程。     关键词: PIC16C54 单片机 远程控制       本文介绍了一种用单片机控制的采用电话遥控的简易远程教学系统。它借助于现有的丰富的电话网络资源,具有结构简单,造价低廉,易于操作等特点,可以实现对录像机的各种远距离控制操作。非常适合于贫困地区的电化教育的普及与发展。      1 系统的总体结构     该电话遥控教学系统的总体结构如图1所示。     该系统由电话机、小型程控机、远程控制器和数台录像机、电视机组成,该系统既
[工业控制]
单片机上实现动态加载功能的函数库介绍
dynamic_loader介绍 本项目是一个在单片机(如:STM32)上实现动态加载功能的函数库,与Windows中的dll,Linux中的so类似,可以将代码动态地从其他的存储介质,动态加载到RAM中。 软件架构 本项目文件夹有三个,其中common存储了用于生成可重定位的.axf文件的工程与动态加载器工程交互用的函数,src提供动态加载器的源码,rel_axf_project_template提供了一个简单的可重定位的.axf文件的工程示例,example.c是一个简单的使用示例,所有文件的主要功能如下: /common/dl_extern_lib.h 描述了app程序用于调用host程序的函数向量表的基地址,以及相关的
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved