Delphi RS232C串行通讯接口的应用


本文整理自网络,侵删。

 

本文的相关程序下载:点击下载
    CDLE-J20.hex //单片机程序
    CDLE-J20_Main.c //单片机C语言原程序
    demop.exe //演示软件
    源码.rar //演示软件delphi源码
    (程序中使用delphi的串口SPCOM控件请自行下载,下载后可以在DELPHI中以控件安装方式安装)

  猜猜看图一上接在PC电脑后面板上的小电路是什么? 

图1:接在电脑后面板的小电路

  也许你能猜到这上面有一块51单片机,但我想你猜不到它的作用。这正是这一期的实例制作?D?D利用电脑控制继电器。图二就是连接了8个继电器的控制电路。有不少朋友也许像我一样在少年时代曾幻想着自己动手把自己家中的电器都自动化且能用电脑去控制,而到了今天这些已不是神话但要实现它还是要付出很多金钱。对于业余爱好者也许大家能从这个实例中得到一些启发,又或者重新点燃你的童年梦想。用电脑实现继电器的控制有很多方法,可以用串行接口,LPT接口,ISA卡,PCI卡等等,这一期就用电脑串口结合单片机控制多达24个继电器的实例来讲解一些串口的基本知识,能做到控制继电器的闭合断开,也就意味着能控制各种电器的开和关,也可以控制电机的转动或转向,还有这个制作还能用电脑读取电路IO端口的逻辑状态,也就是说电路可以把逻辑(开关)信号反馈到电脑让电脑程序做相应的判断,可以借此实现很多的自动控制,当然你也可以改进它使用它实现家居的自动化电脑化。这一制作的灵感和冲动就是来自我童年的梦想,不知读者朋友你是否也有和我一样的童年梦想。

  制作中用到电脑的串行接口来进行命令字符的发送和接收。先来看看图三和图四,相信熟悉电脑的朋友不会对它们陌生。图三就是RS232C的DB-9接口形式,一般PC电脑都会配备1到2个,也就是通常说的串口(也称COM口)。图四则是RS232C的DB-25接口形式,最常见的就是出现在上网用的Modem(调制解调器)上与计算机连接用的接口。RS232C早在1962年由美国电子工业社会(EIA)公布,1987年修改后正式改名为EIA-232D,但是标准修改并不多,所以绝大部分人仍用旧的名称。RS232C串行通讯接口标准被广泛用在计算机和各种外围设备的串行连接,它也是数据终端设备(DTE Data Terminal Equipment)如计算机,与数据通信设备DCE(Data Communication Equipment)如Modem的标准接口。RS232C不仅可以用在两台设备之间的串行连接,还可以通过中间设备进行远距离的通信。串行通讯就是将数据分解成二进制位用一条信号线,一位一位按顺序传送。它的优点是占用线路少,远距离通信时可以极大地降低成本。

图2:串口控制继电器板

图3:电脑后的RS232C串行接口(DB9)

图4:Modem后的RS232C串行接口(DB25)

 电路原理:
  整个制作的主要电路可以分成四部分组成:RS232/TTL电平转换、串行信号处理、控制信号的输入输出和继电器驱动电路。图五是前三部分的电路的整合电路图,图六则是继电器驱动电路图。下面对各电路做简单的分析。

  RS232/TTL电平转换电路
  这一部分的作用将RS232C和单片机串口的TTL电平相互转换,使得两个设备可以相互通讯。AT89C51单片机串口的电平标准是TTL电平标准:高电平为+5V,低电平为0V,而RS232C的电平标准是EIA电平标准:高电平为+3V~+15V,低电平为-3V~-15V,在实际应用中常用±12V或±15V,在PC电脑中因所用的芯片或电路不同通常在±9V~±12V之间。要注意的是在RS232C中任何一条信号线的电压均为负逻辑关系,即逻辑"1"为-5~-15V;逻辑"0" +5~+15V ,其噪声容限为2V,也就是说要求接收器能识别低至+3V的信号作为逻辑"0",高到-3V的信号作为逻辑"1"。为了让EIA电平转换成TTL电平,电路中用了两个BC547和R4、R5、R6、R7、D1组成简单的电平转换电路。整个电路只要求信号的收发,所以只用到RS232C接口中的RXD、TXD和地,通过电平转换电路连接在AT89C51的TXD、RXD和地(具体引脚定义请看下文介绍),也就是说RS232C的接收端连到单片机的发送端,而发送端则连到单片机的接收端。这样的电路可以取代专用的RS232/TTL转换芯片(如MAX232),满足一般的制作要求(可以参考笔者2003年12月在无线电杂志发表的《简单的RS232C电平转换和串口窃电》)。

  串行信号外理和控制信号输入输出
  这一部分是整个电路中的核心部分,使用了一片AT89C51单片机组成,用它完成串行字符的接收和处理,同时利用其剩余的I/O引脚做逻辑信号的输入输出控制,通常这样的电路也称为下位机。由于AT89C51已停产,大家可以用AT89C52、AT89S51或AT89S52直接代换使用而无需更改任何电路。AT89C51的串行接口用电平转换电路连到DB9接口上,这样就可以配合单片机的固件程序接收来自电脑RS232C接口的命令字符或向电脑程序反馈状态字符。电路的晶振和复位电路则和单片机构成最小系统,使单片机固件程序得以启动运行,D2则是运行指示灯在电路正常工作时会以一定频率闪烁。

  为了使处理后的信息输出到继电器控制模块,电路设置了AT89C51的P0,P1,P2为三组八位并行的I/O接口,用于把处理后的信号变成TTL逻辑电平输出到继电器控制模块,也可以把输入到这三组I/O上的逻辑电平或开关量采集到单片机中再传送到电脑。由于电路板是分模块设计的,信号处理电路这一模块不单单可以用于控制继电器用,它的I/0输出电平为标准TTL电平,也可以采集TTL电平,这样也就可以根据需要接在别的并行电路上,如LED数显模块、步进电机控制模块、键盘阵列等等。

  继电器驱动电路 
  J1,J2,J3分别是接在89C51的P0,P1,P2I/O口上的插座,是用于信号输出,每一输出脚控制一个继电器,因为AT89C51的P口在上电后程序执行前是输出高电平的,所以这里定义了低电平有效,这样对应图六的继电器驱动电路就使用了PNP的9012做驱动管,当接入9012基极的信号电平为高时,三极管截止继电器不吸合,当信号电平为低是,三极管导通继电器吸合。P口引脚高电平为TTL标准最高为+5V,光用一级的PNP驱动那么只能选用5V的继电器,如要选用5V的继电器可以在9012前加一级9013做电压放大,当然你也可以用别的继电器驱动电路去替换它。要想更好的隔离继电器工作时给单片机带来的干扰影响或使用高电压继电器要考虑安全性等,可以用光电耦合器加在信号处理和继电器驱动之间。 

点击看大图
图5:89C51组成的下位机(点击看大图)

点击看大图

软件和通讯协议
  实例中的软件可以分为上位机和下位机。下位机是由AT89C51与其固件程序组成,上位机则是由DELPHI编写的串口应用程序。上位机程序主要负责向RS232C发送主控信号和接收处理返回的信号,下位机则用于接收电脑主机从RS232C发送过来的主控信号再根据信号的内容作出相应的控制。上位机和下位机通讯时应先预定通讯所用的速率和格式,这里选用9600波特,8数据位,1停止位,无校验位。为了保证单片机在接收到控制字符时不会误动作,我用设定了一个简单的通讯协议,协议为4个字节,只有当前后两个用于校验的字节都为0x61时,中间的控制字才为有效。如果对通讯的可靠性要求高的话,应用到CRC等算法来产生校验字节。协议说明如下:

字节数值范围含义
B10x61(也可以改为0x00-0xFF)用于和B4组成简单的命令有效标识,也可以做为主控板的ID(更改此值要在单片机程序中修改)
B20x00-0x040x00-0x02分别为表示控制89C51的P0,P1,P2口。当B2B3都为0x03时,关闭P0,P1,P2。当B2B3都为0x04时运行89C51内置测试程序。
B30x00-0xFF向P口输出的数据。
B4同B1只有B1,B4为一样值时命令才有效。
表1 实例中程序所使用的简单通讯协议

  注:文中"0x"表示十六进制,如发送0x61,0x0,0x0A,0x61,则这时AT89C51的P0口为0x0A(二进制为00001010),P0.1,P0.3脚为高电平,P0口其它引脚为低电平。在单片机完成命令后会向串口发送刚才收到4个字节的字符,上位软件也可以根据这个确认下位机是否顺利完成命令。

  本实例提供了单片机固件的C语言源程序和window下的V1.0示例程序源代码(DELPHI)。V1.0的演示程序界面见图七。示例程序的使用也是很简单的,把实例电路连接到电脑的COM1口上,运行示例程序,这时点击"内置测试"24个继电器就会逐个闭合一段时间又断开,完成后程序会弹出如图七的成功对话框,如点击程序界面上编号的选项框则相应P口上的继电器闭合或断开。



图7:示例软件界面


  RS232C串口的基本知识
  图八是RS232C的DB25针连接器,其引脚排列和名称见表2。在这25个引脚中包含了两个信道,分别为主信道和次信道,其中有4个数据线,11个控制线,3个定时信号线和2个信号地。次信道为辅助串行通道,其传输速率与主信道要低得多,其它功能都一样,但较少的使用到。在AT、ATX型的PC和新其它新型的PC只提供一到两个的只有主信道的RS232C串口,它们通常是使用DB9插针型连接器安装在PC后面板上,在BIOS或操作系统中称之为COM1、COM2(这个设备号也用于程序编写中,也可以用COM3,COM4等),外观和引脚定义分别见图三和图九,实例电路就是要使用它来进行和电脑进行通讯。 

图8:DB25型连接器

图9:DB-9型连接器

引脚号
名 称
1
保护地
2
发送数据TxD
3
接收数据RxD
4
请求发送RTS
5
清除发送CTS
6
数据装置准备好DSR
7
信号好GND
8
载波检测CD
9
保留,供测试用
10
保留,供测试用
11
未定义
12
次信道载波检测
13
次信道清除发送
14
次信道发送数据
15
发送器时钟TxC
16
次信道接收数据
17
接收器时钟RxC
18
未定义
19
次信道请求发送
20
数据终端准备好DTS
21
信号质量检测
22
振铃指示RI
23
数据信号速率选择器
24
终端发送器时钟
25
未定义

表2 RS232C的引脚定义

  RS232C的引脚很多。但在业余的电子制作中主要用到的是RxD/TxD(数据收发引脚),它也是在上面实例制作中用到的引脚。RxD(Received Data)为串行数据接收端,用于接收数据用。TxD(Transmitted Data)为串行数据发送端。其它的控制脚使用时就要注意软件中的功能和电平的状态。当两个设备都有RS232C串行接口时,只要把它们的RxD、TxD交叉相连就可以用实现串行通讯了,如图十的连接方式就可以用于两台电脑之间的通讯。当两设备的接口电平不相同时就要根据上面提到的EIA和TTL电平转换的问题。实际上实例电路也是用到了图十的连接方式只不过是多用了电平转换。

  串行通信时,数据和联络信号都是用同一根信号线来传送的,这就要求收发遵守以下几点:
   1) 双方约定的通信的速率(波特率),如在实例中单片机和电脑都是使用9600波特。
   2) 双方约定的数据格式(帧格式),其中包含控制信息应该有明确的定义,如实例中简单的通讯协议。
   3) 接收方应如何得知一段数据的开始和结束(帧同步),如实例中简单协议中的B1,B4。
   4) 接收方如何判断收到的数据的正确性(数据校验)。
   5) 接收方如何从位流中正确地采样到位数据(位同步)。
   6) 收发出错时如何外理(出错外理)。

图10:最简单的串口连接方式


  根据同步方式的不同,串行通信又分为两类,异步通信和同步通信。同步通信时除了需要发送数据线,接收数据线和信号地线以外,还需要一根时钟信号线,时钟信号用于同步数据的发送和接收,传送时是先读取同步位,两设备的同步模式一样时数据开始传送,直到送完数据块,发送大的数据块时要周期性的重发同步字符。同步通信主要是应用于高速数据传送场合。而在实例中用到的是最简单的异步通信,它不需要上述的时钟信号线,只要发送数据线、接收数据线和信号地线就可以了。异步通信发送的数据是以每次一个字符形式发出,接收端的同步是通过检测包含在每个字符的开始和结束外的同步位而形成,这就造成20%冗余时间,使速度通讯速度变慢。

  在业余的制作中通常是使用异步通信,在编写程序时只要做到上位机和下位机的使用同样的波特率、数据位数、停止位和有奇偶校验位就可以实现简单的RS232C异步通信。当然异步通信也可实现多种传输制式,如单工、半双工和全双工通信链路,这里不做详细说明了。

  RS232C接口在几乎每一台台式PC电脑中被使用,在一些新式的笔记本电脑也许只会有USB接口,这时可以用USB转RS232C的设备取得RS232接口。在你的智能电子制作中不如加入对它的使用,一定会给你的制作或发明增色不少,如我们可以在一些要读数、采集的仪表中加入串口采集或控制这样就可以用电脑强大的处理能力去处理相关的数据,也可以在一些要用到电脑控制的电路制作中用到串口。图一、二、十一是本文实例制作的实物图,关于它的PCB和相关的制作资料请访问笔者的主页http://www.cdle.net,如有相关问题和建议也可以联系笔者Email:pnzwzw@cdle.net。

图11:实物图


零件数量备注
AT89C51
1
AT89C52,AT89S51/52均可直接代用
DB9插座
1
 
11.0592M晶振
1
 
发光二极管
1
 
10K电阻
2
以下零件只包括一个主控板和一个继电器控制板
1K电阻
11
 
8.2K电阻
1
 
10K8位排阻
1
 
IN4148
9
 
BC547
2
其它同类管子也可
30p瓷片电容
2
 
10uF电解电容
1
 
10pin扦针
5
 
9012
8
 
5V继电器
8
如用大于5伏的继电器需更改驱动电路
10pin接线
1
 
表3 零件表

来源:作者:温正伟 原载:无线电杂志

http://www.cdle.net/web/alldata/CDLE/cdle050026.htm


相关阅读 >>

Delphi 字符串常识

Delphi 程序启动后隐藏窗体和任务栏

Delphi 图像自动调整显示

Delphi发送邮件函数

Delphi adoquery 开启本地缓存

Delphi 通过api 隐藏任务栏所有托盘图标

Delphi idhttp 断开连接/超时读取

Delphi安卓定位权限申请

Delphixe5如何获取android手机sim卡串号

Delphi 10.x ide界面

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...