IBM及其兼容机是目前最流行的微机,它不但能进行数值计算、数据处理和事务管理,而且还有很强的通信能力。
在IBM机上进行通信主要是利用一个称为“异步串行通信适配器”的部件,再加上少许电缆,就可以进行近距离通信。如配上MODEM、电话线路和适当的软件,就可以进行较远距离的通信。
下面就笔者学习、利用“异步串行通信适配器”进行通信的一些经验,结合硬件与软件两方面介绍一下它的结构、原理和使用方法。
(一)何谓异步串行传送方式。
所谓异步串行传送就是以一个字符序列(可选长度)为单位,每传送一个字符单位靠起始位同步一次,传送和接收可以有相对延迟。虽然这种传送方式要附加一些额外的控制信号,但经济实用,所以微机中多用它进行通信。把这种数据传送方式和控制方法结合起来就称之为异步串行传送方式。
(二)异步串行通信接口
PC系列机为了实现异步串行通信,设计了符合RS—232C接口标准的串行口。
在不同的机型上其串行口的硬件设计略有差别。如内PC/XT将其单独做成一个控制卡—IBM异步串行通信适配器,插在 I/O扩展槽上使用。AT机则将该串行口与并行口组合在同一块卡上—IBM AT串行/并行适配器,也是插在 I/O扩展槽上使用。而各类PC兼容机的设计方法更是多种多样,有的干脆安装在系统板上。
不管该口最终定位在何处,它的核心部件是一块集成芯片(INS 8250—PC/XT使用,或NS16450-AT使用)称为异步接收/发送器UART。并在机箱后部外引一个25脚的D型连接器作为DTE(数据终端设备)的一侧,并通过电缆与另一侧的 DCE(数据通信设备)相连。只要检查一下微机的后面板是否有25D插座,并在机箱内顺此插座的连接线发现有8250(NS16450)芯片,即表明你的微机具有异步通信能力。
串行接口标准RS—232C是美国电子工业协会工程部对数据在数据终端设备(DTE)与数据通信设备(DCE)之间所进行串行传输制定的一个标准,即232号标准的最后一次修改版。这个标准使所有具有这个标准接口的数据设备间的通信及数据传送,变得容易了。
(三)通信口的连接
使用异步通信接口 RS-232C可以有四种较常用的接线方法(参见附图)。

a)该方法最简单,但只适用于距离为15米(不大于 60米),速率不大于 19600波特的近程通信。
b)、c)这两种方法也多用于近程通信,但这种接线法可以简化通信程序的编写,因为这种接法在编程时可以调用DOS的INT14H中断的例行子程序。
d)用于远程通信,但要求配置一台调制解调器(MODEM)。连接 MODEM的方法如下:
1.选择开关(OPTION)设置好传输速率及内部测试参数;
2.RS—232C接口直接用电缆接至 IBM PC/XT/AT的异步通信口处即 25D插头;
3.LINE(线路)接至电话线上,话机接口与电话机相接。
安装完毕,可拿起电话听筒试拨电话,如能正常通话则说明连线正确。通信软件多采用套装软件如LAP—LINK,PCWORKS等。当然也可自行开发。
注意:①无论何种接线方法,甲、乙两机互为对方的主、客机。数据可以双方向在软件驱动下进行传送。②接线以电缆(如 3芯、25芯)为好,如无,可用一般的导线成对绞合后替代。接线时要先断掉设备电源,以免损坏设备或接口。
(四)通信程序的设计
当你按上面所介绍的方法之一连接好两个通信接口后,就可以利用现成的机间通信软件(如 LAP-LINK)使两个通信口互相传送数据。
如果手头没有可用的通信软件,或要进行一些特殊要求的通信时,就只好自己动手编写通信程序了。这里向各位介绍用汇编语言和BASIC语言的编程方法。
1.使用汇编语言编制通信程序
UART是个可编程芯片,内部共有10个寄存器, 用户对其编程实际上是对这些寄存器进行读出或写入操作。
下面提供一个在两台微机间直接通信的汇编语言实用程序。
H
------------------------------------------------------
stack segment stack’ stack’;设置堆栈段
db 256 dup(0) ;为256字节,并初始化为“00h”
stack ends
code segment’code’ ;代码段
assume cs:code.ss:stack
start proc far ;定义主程序为“远过程”,起点为“start”
push ds
mov ax, 0
push ax
;对串行口进行初始化
mov dx,3fbh
mov al,80h ;置线路控制寄存器DLAB=1
out dx,al
mov dX,3f8h
mov al,60h
out dx,al;置速率(1200bit/s)寄存器低字节
mov dx,3f9h
mov al,0
out dx,al;置速率(1200bit/s)寄存器高字节
mov dx,3fbh
mov al, 0ah
out dx,al ;置数据格式
mov dx,3fch
mov al,03h
out dx,al;禁止MODEM循环反馈
mov dx,3f9h
mov al ,0
out dx,al ;禁止四种类型中断
;键盘输入发送至UART,屏幕显示取自UART
fore:mov dx,3fdh
in al,dx;读取、检查通信线状态寄存器内容
test al,leh;以决定程序流向
jnz error
test al,01h
jnz rece
test al,20h
jz fore
mvo al,1
int 16h ;检查键盘缓冲区有没有字符输入?
jz fore ;无,则转 fore循环等待
mov ah, 0
int 16h
mov dx ,3f8h;有,则指向保持寄存器
out dx ,al;发送字符
jmp fore ;转 fore循环等待
;接收数据就绪,读取字符
rece: mov dx , 3f8h
in al,dx ;取数
and al,7fh
push ax
mov bx,0
mov ah,14
int 10h ;显示字符
pop ax
cmp al, 0dh
jne
mov al,0ah ;检查是否为″回行/升格″键?
mov bx, 0
int 10h ;是,则作相应处理
jmP fore ;转fore循环等待
;接收字符有错处理
error:mov dx,3f8h
in al,dx
mov al,″?″;屏幕显示″?″
mov bx, 0
mov ah,14
int 10h
jmp fore ;转fore循环等待;
start endp ;’start’过程结束
end start ;通知MASM从’start’开始汇编
---------------------------------------------------
上列程序的用法:
(1)把两台微机按所介绍的方法连接起来[建议用(a)法]。
(2)把下面的程序输入,并汇编、链接产生,EXE文件,然后两台微机上同时运行这个,EXE文件。
(3)从甲机的键盘上输入字符,就会在乙机的显示器上显示出来,同样乙机的键盘输入在甲机的显示器上显示,若检测到错则显示“?”。
(4)传输速度为1200波特。
2.使用BASIC语言编制通信程序
在BASIC语言中,异步通信适配器被当作一个设备文件来使用。
下面是一个用BASIC语言编写的通信程序。
发送程序:Tsend.bas
2 CLS :rem清除屏幕
5 ON ERROR GOTO 400 :rem设置出错处理陷井
10 OPEN″COM1:9600,N,8,2,CS,DS,CD″AS#1 :rem设置通信参数。
40 LOCATE 22,1:PRINT TIME¥ :rem在22行1列显示时间。
50 B¥=INKEY¥ :rem取键字
52 IF B¥=″″THEN 40 :rem如果是″″,则转40
60 IF B¥=″s″ OR″S″ THEN GOSUB 300 :rem如果是
″s″或″S″,则调用子程序。
70 IF B¥=″q″ OR″Q″ THEN 100 :rem 如果是″q″
或″Q″,则转100行。
75 GOSUB 380 :rem调用字符发送了程序
80 GOTO 40 :rem转 40行循环
100 COM(1) OFF :rem关闭通信陷井
110 CLOSE : rem关闭文件
120 END :rem结束
300 A ¥=″″ :rem置字符串变量 A¥=″″
310 FORI=0 TO 25
320 A¥=A¥+CHR¥(I+65) : rem循环产,
AB,ABC,…
330 NEXTI
340 A¥=CHR¥(13) :rem打印 ABC…XYZ
350 PRINT #1.A¥ :rem发送回车符
370 RETURN :rem子程序返回
380 PRINT #1,B¥:RETURN :rem发送键入字符
400 PRINT″ERR.″:RESUME :rem打印″ERR.″,陷井
返回
---------------------------------------------------------------------
接收程序:Treceive.bas
---------------------------------------------------------------------
2 CLS :rem清除屏幕.
5 ON ERROR GOTO 400 :rem设置出错处理陷井.
100 OPEN″COM1: 9600,N,8,2,CS,DS,CD″ AS#1 :rem设置通信参数.
20 ON COM(1) GOSUB 200 :rem设置通信陷井.
30 COM(l) ON :rem开启通信陷井.
40 LOCATE 10, 20:PRINT TIME¥ : rem在22行1列显示时间
42 B¥=INKEY¥ :rem取键字
45 IF B¥=″q″ OR″Q″ THEN 100 :rem如果是″q″或″Q″,则转100行.
50 GOTO 40 :rem转 40行循环
100 COM(1) OFF :rem关闭通信陷井
110 CLOSE :rem关闭文件
120 END :rem结束
200 INPUT A羊, #1 :rein输入字符串
210 PRINT A¥ :rem打印字符串.
220 PRINT CHR¥(7) :rem产生鸣叫.
230 RETURN :rem返回.
400 PRINT ″ERR.″;RESUME :rem打印″ERR.″,陷井
返回
上列程序的用法:
(1)接线。
(2)把TSEND.BAS输入甲机,把TRE-CEIVE.BAS输入乙机。
(3)在甲机上按一下S键,则可把一串字符A,B,C,D……Z输给乙机,并在显示器上显示出来。
(4)在甲机上按一下键Q,乙机上也按一下键Q,则可分别终止程序的执行。
(五)LAP-LINK软件的使用方法。
在国外,已有不少在PC机上使用的通信软件。利用它们,用户不需自己再去编制相应的程序。应用这些软件,用户不用更深入地了解异步通信的原理,使用起来也方便可靠。下面以一个国内引进较早,使用比较广泛的LAP—LINK软件为例,说明它的使用方法。
LAP是美国 Traveling Software Line公司于1986年推出的用于PC及兼容机的机间通信、网络的专用软件,它把已用导线相连的PC机分为主机和从机,使用时主、从两机要同时启动LAP软件,这样就可以相互进行控制,即各机都可当对方的主机或从机。它所操作的基本对象是文件,可对单个文件、多个文件或某子目录进行即时传输。此外还有一些特殊的操作可给DOS以有力的补充,如观察某个文件的内容、删除某个文件、改文件名等。全部的操作都使用菜单方式给用户以提示,使用起来十分方便。
现就其2.0版本中与通信有关的主要功能及用法简介如下:
1.启动 LAP—LINK
(1)接线(如前所述,任选一种)。
(2)把装有LAP.EXE文件的磁盘放在主机的A:驱动器上,键入如下命令:
A〉LAP〈回车〉
即可装入LAP文件并运行它。
然后,再把装有LAP.EXE文件的磁盘取出放在从机的A:驱动器上启动之。
注意:
a)屏幕一分为二、左边为本地驱动器内听装的文件,右边为从机驱动器内所装的文件。
b)当你在甲机上键入命令时,在乙机的屏幕左下方将会出现一行英文提示:
“remote system in control”
这时甲机为主机可在其上面对乙机所装的文件等信息进行控制,加复制、观察、删除等操作,同样可在乙机键盘上输入命令对甲机进行控制。
2.主菜单简介
LAP—LINK软件为用户提供了12个大功能。
(1)Help—帮助,介绍命令的功能和用法。
(2)Log—设定驱动器或子目录,是为文件操作(加复制、删除等)服务的。
(3)Tree—显示用 Log命令设置后所指定的驱动器内所装有的子目录。相当于MS—MOS的TREE命令。
(4)Copy—用于复制单从此文件或某个子目录下的所有文件。由主机至从机,或由从机到主机均可。
(5)Wildcopy—和Copy相似,但它是按通配符有选择地每次同时复制多个文件。
(6)Group—用于对多个标志了特殊标志的文件执行复制或删除操作。
(7)Options—用于约定主、从两机的通信规程。
(8)View—观察某一已选定的文件内容。
(9)Erase—删除文件,和MS-DOS的DEL命令相似。
(10)Rename—改文件名,和MS—DOS的RE-NAME命令一样。
(11)Dos—进入DOS操作系统,把LAP.EXE驻留在内存中。当需要时可键入EXIT回至通信状态。
(12)Quit—退出通信状态。
3.如何把文件从甲机传送至乙机。
(1)约定甲、乙两机通信规程。
在主菜单下按0键,利用↑、↓、←、→键移动光标,修改好通信参数,再按回车键确认。注意两部计算机设置BAUD时要一样,否则不能进行通信。其它不明之处可按H键,请求帮助。
(2)寻找希望复制的文件。按L键屏幕左下角出现 LOG TO:\这时可输入你所要的路径后按回车键。例:LOG TO:\ C:回车.如不想修改现在路径可按ESC键。
(3)复制文件。
复制单个文件,或某子目录下的所有文件,例如所有.BAS文件,则用W命令比较方便。
(4)退出通信状态。
在主菜单下,按Q键。(林建生)