摘要:该文给出利用8251A实现串行同步通讯设计的方法
关键词: 串行同步 8251A 同步时钟 Modem
1. 引言
在分布式测控系统中,上位机常常采用工业PC而工作站则用STD/PC总线工业控机,它们之间的数据通信很多采用串行异步方式,而串行同步方式则鲜为人用.在一次为用户开发NEC终端机仿真系统过程中为给系统提供同步通信模块,以STD5221 通信板,配合MultiModem224调制解调器实现远程串行同步通信.(如图1)
STD总线 DTE DCE DTE STD总线
图1
2. 8251A初始化
在不同系统或计算机之间进行数据通信主要采用并行和串行两种方式.8251A是一种通用的同/异步接收/发送器(USART). 在异步方式下的应用在有关书刊上已屡见不鲜,这里就不加重复.下面我们根据8251A芯片的使用体会对其在串行同步方式下的通信原理及应用进行着重介绍.在开始发送或接收之前,8251A必须装入一组由CPU 产生的控制字.这些控制信号定义了8251A的完整功能含义,并且必须紧跟在一个复位操作之后(内部的或外部的).控制字分为两种格式:方式字和命令字.图2为定义8251A方式字和命令字设定的初始化与发送或接收数据流程图.
inital 为初始化程序的主要部分,方式字设置为止3CH( 内同步方式,双同步字符,8位数据,奇校验方式) . 命令字设置为B7H(进入同步字符搜索方式,请求发送,接收就绪,数据端就绪,发送允许).
1 inital proc ; 初始化程序. 2 : ; 清状态口和数据口. 3 mov dx,port ; port 为发送口/接收口地址 4 mov al,40h ; 复位操作,目的迫使8251 out dx,al ; 进入方式字格式, 5 mov al,3ch ; 设置方式字操作 6 out dx,al 7 mov al,55h ; 设置同步字符操作 8 out dx,al ; 同步字符 1 为 55h 9 out dx,al ; 同步字符 2 为 55h 10 mov al,0b7h ; 设置命令字操作 11 ret 12 inital endp
图2
3. 同步通信体验
- 时钟
在串行同步通信中,需要使发送的数据同时带有同步信息,因此,在硬件电路的设计中需要保证数据流中每一个连续不断的数据位均由一个基本时钟控制,并定时在某个特定的间隔上,所以对时钟要求甚严,即使两个工作站的通讯模板上8251A的晶振频率标称值相同,但实际上每个晶振的频率有所差别,8251A时钟频率的误差将导致同步时钟相位的移动,离开要求的位置.为了保证进入同步后相位一直被锁定,我们将Modem 置为同步方式,利用Modem的RXC(接收时钟)和TXC(传送时钟)作为8251A的接收/传送时钟,以此来达到传送时钟和接收时钟的同步.
另外8251A的CLK这个输入信号用作产生器件内部的定时,它的频率必须比RXC与TXC高30倍.
- 发送
8251A被初始化完后,在CPU向8251A写一个字符启动发送前,TXD输出端一直处于高平状态,作为8251A启动发送的第一个字符应是SYNC(同步字符)符号.一旦启动了发送,TXD输出端上的数据一定以TXC的频率连续不停地发送.在CPU不能及时向传送缓冲器写数之时,SYNC符号将自动插入到TXD数据流中,以保持TXD上有数据连续不断的发送.
- 接收
同步接收有外同步和内同步两种方式(初始化时,在方式字中设定,本例设为内同步).
内同步方式下:
命令字的ENTER HUNT位置上的数据在RXC的上升没被采样RXC 缓冲器与同步字符比较,直到相同为止(若8251A被设置为双SYNC方式,则要与第二同步字符比较).8251A结束HUNT搜索同步字符状态进入同步状态,处于字符同步中,然后把SYNDET引脚置为高电平.表明接收方已与发送方同步上.
外同步方式:
外同步方式是发送方接收主SYNDET脚施加一高电平的方法,迫使脱离HUNT方式,实现发送方与接收方的同步.
- MutiModem224的接口芯脚分配
为使不同厂家的设备兼容,1969年由电子工业协会(Electronic Industries Association)公布RS-232-C标准.最初拟制为终端设备和调制解调器之间的连接规定.它规定了两设备间的电器特性和所需连线的名称及编号.
在串行通讯链路中,将通信设备分为两类,以线”2”作为数据输出的通讯设备称为DTE(Data Terminal Equipment).象调制解调器将线”2”作为数据输入的通讯设备称为DCE (Data Communication Equipment).这样假如知道一个设备是DTE,一个是DCE,即可”2”到”2”,”3”到”3”的一一对应地将它们连接起来.这就是公认的直接连接.但厂家不一定总遵守这个规定,所以一个给出的通讯设备是DTE,还是DCE并不能分清.因此在连接两个通讯设备时,最有效的方法是根据RS232-C出脚的名称,按实际应用需要相联.图3为调制解调器与通讯模板的RS232-C 25芯接口的连接图.
计算机首先发出数据终端就绪信号,然后指示调制解调器呼叫远程站,当调制解调器完成联通后,它就发出调制解调器就绪信号,通知计算机调制解调器已完成通讯准备,此时计算机就发出请求传送信号,等调制解调器应答了允许发送信号后,即开始数据传送.
4. 控制字设置与软件实现
8251A的引脚上有一”控制/信号”信号C/D,此信号和”读/写”信号合起来通知8251A当前读写的是数据还是控制字.状态字.当C/D=0进行读写时,读出和写入的是数据.当C/D=1进行写入时,写入的是控制字、方式字和同步字符;C/D=1进行读出时,是从状态寄存器中读出的状态.那么,在C/D=1写入时,到底写到哪一个寄存器呢?这涉及8251A初始化的有关约定.这个约定有三条: (1)芯片复位后,第一次用C/D=1写入的值是方式字;(2)如果方式字中规定了同部方式,接着用C/D=1写入的就是同部字符;(3)在此之后,以C/D=1写入的都被作为命令字.
图3
从原则上来说, 象8251A这样的8位接口芯片,连接在16位系统时,低8位的数据总写到偶地址, 高8位的数据总写到奇地址. STD5221也遵从这个原则,不将地址总线的最低位A0连到8251A的地址线上,而将地址总线A1作为8251A的地址最低位地址总线A0 经过反相后连到8251A的C/D端.(在常见的具有USART的PC系统中,A0是直接连接到8251A的C/D端,与STD5221相反,这一点在应用时要注意).注:据实验结果,在C/D=1写入的第一个命令字之后,先向数据口写同步字符,才能启动同步发送(在流程图中有标示).
5. 通讯模板及程序说明
STD5221 是一种通用的串行数据通讯插件,它提供了两套完全独立的RS232-C串行数据通道.本例子在STD V40系统Ⅱ下开发, 以STD5221作为通讯模板经过 Modem以同步方式互发一串字符.限于篇幅未能完全收录.
本文转自:http://cs.nju.edu.cn/yangxc/dcc2003.files/jszc-sub/comif-15.htm