(2)设端口A为选通输出方式,端口B为基本输入方式,端口C剩余位为输出方式,允许端口A中断。
(3)设端口A为双向方式,端口B为选通输出方式,且不允许中断。
【解答】(1)端口A、端口B和端口C均为基本输入/输出方式,则为方式0,任何一个口都可用于输入或输出,可出现16种组合,这里只举出2种组合。
若端口A、B为数据输入口;C口的低4位为控制信号输出口,高4位为状态信号输入口,程序段如下:
MOV AL,10011010B
MOV DX,PORT ;PORT为端口地址 OUT DX,AL
MOV AL,00001100B ;设PC6为中断信号控制引脚,PC6=0,禁止中断 OUT DX,AL
若端口A、B为数据输出口;C口的高4位为控制信号输出口,低4位为状态信号输入口,程序段如下:
MOV AL,10000000B
MOV DX,PORT ;PORT为端口地址 OUT DX,AL
MOV AL,00001100B ;设PC6为中断信号控制引脚,PC6=0,禁止中断 OUT DX,AL
(2)端口A为选通输出方式,方式1;端口B为基本输入方式,程序段如下:
MOV AL,10100010B
MOV DX,PORT ;PORT为端口地址 OUT DX,AL
MOV AL,00001101B ;设PC6为中断信号控制引脚,PC6=1,允许中断 OUT DX,AL
(3)端口A为双向方式,方式2;端口B为选通输出方式,程序段如下:
MOV AL,11000100B
MOV DX,PORT ;PORT为端口地址 OUT DX,AL
MOV AL,00001100B ;设PC6为中断信号控制引脚,PC6=0,禁止中断 OUT DX,AL
9.5 采用8255A作为两台计算机并行通信的接口电路,请画出查询式输入/输出方式工作的接口电路,并写出查询式输入/输出方式的程序。
【解答】甲机的8255A是方式1发送,端口PA为输出,发送数据,而PC7和PC6引脚分别固定作联络线OBF和ACK。乙机的8255A是方式0接收数据,故把端口PA定义为输入,另外,选用引脚PC7和PC3作为联络线。接口电路如图9-2:
方式08255A乙(接收)CPUPA7~PA0PC7PC3ACK方式0OBF8255APA7~PA0PC7PC6甲(发送)CPU
图9-2 查询方式的双机通信
查询式输入/输出方式的程序如下:
;甲机发送的程序段
MOV DX,303H ; 8255A命令端口
MOV AL,l010000B ; 初始化工作方式字 OUT DX,AL
MOV AL,0DH ;置发送允许INTEA=1 OUT DX,AL
MOV SI,OFFSET BUFS ; 设置发送数据区的指针 OUT CX,3FFH ; 发送字节数
MOV DX,300H ; 向端口A写第1个数,产生第1个OBF信号 MOV AL,[SI] ; 送给乙机,以便获取乙机的ACK信号 OUT DX,AL
INC SI ; 内存地址加1 DEC CX ; 传送字节数减1
LOP:MOV DX,302H ; 8255A状态端口(端口C)
IN AL,DX ; 查发送中断请求INTRSA=1 AND AL,08H ; 是否PC3=l
JZ LOP ; 若无中断请求则等待;若有向端口A写数 MOV DX,300H ; 8255A端口PA地址 MOV AL,[SI] ; 从内存取数
OUT DX,AL ; 通过端口A向乙机发送第2个数据 INC SI ; 内存地址加1 DEC CX ; 字节数减1
JNZ LOP ; 字节未完,继续 MOV AH,4CH ; 己完,退出 INT 21H ;返回DOS
BUFS DB … ; 定义1024个数据
;乙机接收的程序段
MOV DX,303H ; 8255A命令端口 MOV AL,l0011000B ; 初始化工作方式字 OUT DX,AL MOV AL,00000111B ; 置ACK=1(PC3=1) OUT DX,AL
MOV DI,OFFSET BUFR ; 设置接收数据区的指针 MOV CX,3FFH ; 接收字节数 L1: MOV DX,302H ; 8255A端口PC
IN AL,DX ; 查甲机的OBF=0?(乙机的PC7=0) AND AL,80H ; 查甲机是否有数据发来
JNZ L1 ; 若无数据发来,则等待;若有数据,则从端口A读数 MOV DX,300H ; 8255A端口PA地址 IN AL,DX ; 从端口A读入数据 MOV [DI],AL ; 存入内存
MOV DX,303H ; 产生ACK信号,并发回给甲机 MOV DX,00000110B ; PC3置“0” OUT DX,AL
INC DI ; 内存地址加1 DEC CX ; 字节数减1
JNZ L1 ; 字节未完,则继续 MOV AX,4C00H ; 己完,退出 INT 21H ; 返回DOS
BUFR DB l024 DUP(?) ; 接收数据缓冲区
9.6 一般按一次键,CPU通过程序可以判别是否有键按下,并识别具体的键值。若键扫描程序处理不当,可能会出现下述情况:仅按一次键,但CPU识别为同一个键多次被按下,试分析可能发生这种情况的原因。
【解答】通过程序判别按键,需要考虑按键的消抖问题,若采用软件方法进行消抖需要设置延时等待抖动消失,然后再读入键值。分析题中可能发生这种情况的原因是:键扫描程序没有设置延时或延时时间过短,没能有效的消除抖动。
习题10
10.1 什么叫异步通信?什么叫同步通信?画出异步串行通信的字符编码格式。
【解答】异步通信是指通信中两个字符之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。
同步通信是指在约定的数据通信速率下,发送方和接收方的时钟信号频率和相位始终保持一致(同步),这就保证了通信双方在发送数据和接收数据时具有完全一致的定时关系。
异步串行通信的字符编码格式:
字符起始位1数据位校验位停止位1空闲位1100/10/1字符00/10/10/10/10/10/10/10/11低位高位 图10-1 异步串行通信格式
10.2 试分析波特率和数据传输率的区别和联系。
【解答】波特率是指每秒传输字符的位数,单位为“位/秒”。
数据传输率为每秒传输的字符数,单位为“字符/秒”,每个字符包括起始位、数据位和停止位。 两者间的联系为:
波特率(位/秒)= 二进制位数/字符(位/字符)×数据传输率(字符/秒)
10.3 简述在RS—232C接口标准中信号TXD、RXD、RTS、CTS、DTR、DSR、DCD、 RI的功能。
【解答】TXD:发送数据,串行数据的发送端; RXD:接收数据,串行数据的接收端;
RTS:请求发送,当数据终端准备好送出数据时,就发出有效的RTS信号;
CTS:清除发送,当Modem准备好接收数据终端传送数据时,发出CTS有效信号来响应RTS信号。 DTR:数据终端准备好,可以用作数据终端设备发给数据通信设备Modem的联络信号; DSR:数据装置准备好,可以用作数据通信设备Modem响应数据终端设备DTR的联络信号; DCD载波检测:当本地Modem接收到来自远程Modem正确的载波信号时,由该引脚向数据终端发出有效信号;
RI:振铃指示,自动应答的Modem用此信号作为电话铃响的指示。在响铃期间,该引线保持有效。 10.4 简述8250内部的发送缓冲器/接受缓冲器的作用。
【解答】发送缓冲器用于接收CPU送来的待发送的并行数据,然后又并行装入到输出移位寄存器。该数据通过移位串行送到输出线上(数据移位输出之前首先发送起始位,数据移位输出完之后送出奇偶校验位及停止位)。串行输入数据依次地被接收,并传给接收移位寄存器,接收移位寄存器接收这些数据位,直到装满为止,然后输入数据从移位寄存器并行地传送到接收缓冲器中(去掉了起始位、停止位与奇偶检测位后的结果送入),CPU从接收缓冲器就可读出收到的数据。
10.5 简述8250内部波特率的设定过程。
【解答】先写通信控制寄存器,使DLAB=1,而后根据通信双方约定的时钟频率和波特率算出波特
率因子n——时钟频率=n×波特率,然后通过端口输出指令OUT将波特率因子写入16位的除数锁存器即实现波特率设定过程。
10.6 8250芯片能够管理哪四级中断,它们在何种情况下发生? 【解答】
(1)接收器线路状态中断:包括越限、奇偶错、格式错、间断等引起的中断。读通信状态寄存器可使此中断复位。
(2)接收数据寄存器“满”中断:读接收数据寄存器可复位此中断。 (3)发送数据寄存器“空”中断:写发送数据寄存器可使这一中断复位。
(4)Modem状态中断:包括发送结束、Modem准备好、振铃指示、接收线路信号检测等为Modem状态中断源,读Modem状态寄存器可复位该中断。
10.7 以图10-10所示的连接形式为例,设系统工作过程中以查询方式发送数据,而以中断方式接收数据,数据位8位,偶校验,2位停止位,波特率为4800HZ,请编写程序段对8250的初始化,并编写相应的中断服务子程序。
【解答】时钟频率为1.8432MHz,波特率为4800bps,故除数波特率因子为0018H,8250的初始化如下:
;设置波特率
MOV AL,10000000B ;DLAB=1
MOV DX,3FBH ;通信控制寄存器地址 OUT DX,AL ;写入通信控制寄存器
MOV AL,18H ;置4800波特率除数低位 MOV DX,3F8H
OUT DX,AL ;写入除数锁存器低位 MOV AL,00 ;置4800波特率除数高位 MOV DX,3F9H
OUT DX,AL ;写入除数锁存器的高位 ;设置字符数据格式
MOV AL,00011111B ;设置数据格式 MOV DX,3F8H
OUT DX,AL ;写入通信控制寄存器 MOV DX, 3FCH MOV AL,0BH
OUT DX,AL ;初始化MODEM寄存器 MOV DX,3F9H ;初始化中断允许寄存器
MOV AL,01H ;允许接收数据寄存器满产生中断 OUT DX,AL STI
中断服务子程序如下:
RECEIVE:PUSH AX
PUSH BX PUSH DX PUSH DS
MOV DX,3FDH IN AL,DX TEST AL,DX TEST AL,IEH JNZ ERROR MOV DX,3F8H IN AL,DX AND AL,7FH
MOV BX,OFFSET REVBUF MOV [BX],AL MOV DX,INTRR
MOV AL,20H ;发中断结束命令EOI给8259 OUT 0A0H,AL OUT 20H,AL