分别就PC机的DOS级和BIOS级异步串行通信编程方法做一简单介绍。 -9o{vmB{
-9o{vmB{
1.DOS级的PC通信 -9o{vmB{
-9o{vmB{
PC机通常配备有两个异步通信端口,分别称作为COM1和COM2,它们都符合RS-232C标准。在DOS操作系统中,COM1、COM2被作为I/O设备进行管理,COM1、COM2便是它们的逻辑设备名。据此,DOS便可通过对COM1、COM2的操作来实现PC之间的异步串行通信。 -9o{vmB{
DOS的MODE命令可用以设置异步串行端口的参数,DOS的COPY命令允许将异步串行端口作为一个特殊的“文件”,以对其进行数据传输。下面举一个利用DOS的MODE、COPY命令,进行双机键盘输入字符传输的例子。 -9o{vmB{
MODE命令的格式为: z ,P:i$
MODE 端口名:数据速率,校验方式,数据位数,停止位位数 z ,P:i$
其中端口名为COM1或COM2;数据速率可选150、300、600、1200、2400、4800或9600bps;校验方式为E(偶校验)、O(奇校验)或(无校验);数据位数为7或8位;停止位位数为1或2位。通信双方设置的参数应一致,如双方都键入如下命令 z ,P:i$
MODE COM1:1200,E,7,1 <Enter> z ,P:i$
则表示双方以COM1为异步通信端口、速率1200bps、偶校、7位数据位、1位停止位的设置参数据进行通信。 z ,P:i$
DOS中有一个名为CON的标准控制台设备,作为输入时CON指的就是键盘,作为输出时CON指的就是显示器。准备发送的PC机执行如下命令: z ,P:i$
COPY CON :COM1: <Enter> z ,P:i$
表示将从键盘收到的信息通过COM1串行口发送出去。准备接收的PC机执行如下命令: z ,P:i$
COPY COM1:CON: <Enter> z ,P:i$
则表示将接收来自COM1串行口的信息,并在显示器上加以显示。 z ,P:i$
两台PC机分别执行完上述命令后,在发送方键盘上输入的字符便会在接收方显示器上显示出来。 z ,P:i$
上面介绍的是用DOS的MODE,COPY命令实现的最简单的PC通信。在MS-DOS的高版本中(例如MS-DOSV6.0)还提供了一条INTERLNK命令,实际上它是一个通信程序。使用INTERLNK命令和一根连接两台PC机串行端口的电缆,可以使一台PC机从另一台PC机的磁盘驱动器中存取数据并运行程序,无需再使用软盘去复制文件。 z ,P:i$
用以键入命令的PC机叫客户机(Client),与客户机相连的PC机叫服务器(Server)。客户机使用服务器的驱动器和打印机,服务器显示两台PC机的连机状态。 z ,P:i$
当两台PC机被INTERLNK连接以后,服务器上的驱动器便以扩展驱动器的形式映象到客户机上,若两台PC机原来均有A,B,C三个驱动器,则连接后客户机除了自身的三个驱动器外,又多了E,F,G(服务器驱动器映象)三个扩展驱动器,客户可以象使用自己的驱动器一样使用这些扩展驱动器。 z ,P:i$
使用INTERLNK时,每台PC机上至少要有一个空闲的串行口,还要一根3导线或7导线的零调制调解器(Null MODEM)串行电缆线,客户机上至少有16K空闲内存,服务器上至少有130K空闲内存。 z ,P:i$
在客户机的系统配置文件CONFIG.SYS中添加如下命令: z ,P:i$
DEVICE=C:\DOS\INTERLNK.EXE/DRIVES:5 z ,P:i$
再重新启动客户机,便可装入INTERLNK。这里假设INTERLNK.EXE已存在于客户机C驱动器的DOS目录中,/DRIVERS:5参数用于映象5个服务器驱动器,缺省情况下为3个驱动器。 z ,P:i$
服务器上启动INTERLNK不需对其CONFIG.SYS作任何改动,只需在DOS命令提示符下键入INTERLNK即可。此时,屏幕底下出现一行状态信息,显示出INTERLNK的连接状态。 z ,P:i$
关于DOS级通信命令的详细使用方法,可参阅有关DOS手册。 z ,P:i$
z ,P:i$
2.BIOS级的PC通信 z ,P:i$
z ,P:i$
PC级的基本输入输出系统(BIOS)总的中断14H提供了异步串行端口的四种通信服务功能,通过之种功能,可以访问串行通信端口,实现连机通信。INT 14H的串行端口通信功能为: z ,P:i$
功能号 功能 z ,P:i$
00 通信端口初始化 z ,P:i$
01 向通信端口写一个字符 z ,P:i$
02 从通信端口读一个字符 z ,P:i$
03 返回通信端口状态 z ,P:i$
INT 14H 的一般汇编语言调用顺序如下: z ,P:i$
MOV AH, <功能号> z ,P:i$
MOV DX, <端口号> z ,P:i$
(在相应寄存器中装入与功能有关的参数) z ,P:i$
INT 14H z ,P:i$
(1)初始化通讯端口 z ,P:i$
调用: AH = 00H z ,P:i$
AL = 初始化参数 z ,P:i$
DX = 端口号(COM1为0, COM2为1) z ,P:i$
返回: AH = 通信端口状态 z ,P:i$
AL = 调制解调器状态 z ,P:i$
初始化参数为8为二进制数,其中各位的含义如图3.12所示。 z ,P:i$
z ,P:i$
图3.12(P61) z ,P:i$
z ,P:i$
若置COM1为9600bps,8位数据位,1位停止位,无奇偶校验,指初始化参数为11100011B,即0E3H。程序调用如下: z ,P:i$
MOV AH,0 z ,P:i$
MOV AL,OE3H z ,P:i$
MOV DX,0 z ,P:i$
INT 14H z ,P:i$
z ,P:i$