文章目录
并行接口的特点
- 在多根数据线上以字节、字、双字宽度在接口与I/O设备间传输数据,速率较快。
- 除数据线外,还可设置握手联络信号线,易于实现异步互锁协议,提高数据传输的可靠性。
- 一般不作差错检验和传输速率控制。
- 并行传送信息,不要求固定的格式,这与串行传送的数据格式的要求不同。
并行接口电路结构形式
- 采用非可编程IC芯片
- 采用可编程并行接口芯片
- 采用PLD/FPGA器件
可编程并行接口芯片82C55A
通用型、功能强、成本低
82C55A外部特性
外部特性
- 面向系统总线的信号线
- 面向I/O设备的信号线
- 与面向系统总线信号线
- 数据线D0~D7:三态双向,用于CPU向82C55A发送命令、数据和8255A向CPU回送状态、数据等。
- 地址线A1、A0:芯片内部端口地址寻址。形成四个端口地址。
- CS:片选信号,低电平有效
- 控制线RD、WR:读、写信号,低电平有效
- RESET:复位信号,高电平有效。它清除控制寄存器并将8255A的A,B,C三个端口均为0方式输入;状态寄存器被复位,并且屏蔽中断请求。
- 面向I/O设备的信号线
- PA0~PA7:端口A的输入、输出线
- PB0~PB7:端口B的输入、输出线
- PC0~PC7:端口C的输入、输出线
(1)A口和B口只作为输入/输出的数据口用
(2)C口除了作数据口外,在1方式和2方式时,它的大部分引脚被分配用作专用联络信号;PC口可以进行按位控制;当读取82C55A状态时,PC口又作1、2方式的状态口用
内部结构
- 数据总线缓冲器。是一个三态双向8位缓冲器,它是82C55A与CPU系统数据总线的接口。
- 读/写控制逻辑。读/写控制逻辑由读信号RD、写信号WR、选片信号CS以及端口选择信号A1,A0等组成。
- 输入/输出端口PA,PC和PC。82C55A包括3个8位输入/输出端口。每个端口都有一个数据输入寄存器和一个数据输出寄存器
- A组和B组控制电路。控制A,B和C三个端口的工作方式。两个控制电路分别控制:A组和C组的高4位;B组和C组的低4位。
82C55A的端口地址
- 作为PC微机系统的系统资源:分配给82C55A的端口地址是PA是60H,PB是61H,PC是62H,命令和状态口是63H。
- 作为用户扩展的接口:根据用户的需要确定。
82C55A的编程命令
82C55A有两个编程命令:(1)工作方式命令。(2)对C端口的按位操作(置位/复位)命令。
- 方式命令
作用:指定82C55A的工作方式及其方式下3个并行端口(PA,PB,PC)的输入/输出功能。
格式:其中最高位是特征位,一定要写1,其余各位定义如下:
D7=1 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
特征位 | D6,D5 A组方式选择 00=0方式 01=1方式 10=2方式 11=不用 | A端口 1=入 0=出 | C端口高4位 (PC4-PC7) 1=入 0=出 | B组方式选择 1=1方式 0=0方式 | B端口 1=入 0=出 | C端口低4位 (PC0-PC3) 1=入 0=出 |
例1:要把A口指定为1方式,输入,C口上半部为输出;B口指定为0方式,输出,C口下半部定为输入,则工作方式命令代码是:
10110001B 或 B1H
初始化程序段:
MOV DX,303H ;8255A命令口地址(假设)
MOV AL,0B1H ;初始化命令
OUT DX,AL ;送到命令口
- 按位置位/复位命令
作用:指定PC口的某一位(某一个引脚)输出高电平或低电平。
格式:最高位是特征位,一定要写0,其余各位的定义如下:
D6-D4无效,D3-D1选择引脚,D0选择置位还是复位
例2:若要把C口的PC2引脚置成高电平输出,则命令字应该为00000101B或05H。
程序段:
MOV DX,303H ;8255A命令口地址(假设)
MOV AL,05H ;使PC2=1的命令字
OUT DX,AL ;送到命令口
如果要使引脚PC2输出低电位,则程序段为:
MOV DX,303H ;8255A命令口地址(假设)
MOV AL,04H ;使PC2=0的命令字
OUT DX,AL ;送到命令口
例3:利用8255A的PC7产生负脉冲,作打印机接口电路的数据选通信号,其程序段为:
MOV DX,303H ;8255A命令口
MOV AL,00001110B ;置PC7=0
OUT DX,AL
NOP ;维持低电平
NOP
MOV AL,00001111B ;置PC7=1
OUT DX,AL
关于两个命令的使用
- 方式命令是对8255A的3个端口的工作方式及功能进行指定(即初始化),初始化工作要在使用8255A之前进行。
- 按位置位/复位命令只是对PC口的输出进行控制,使用它不破坏已经建立的3种工作方式,而是对它们实现动态控制的一种支持,它可放在初始化程序以后的任何地方。
- 两个命令的最高位(D7)都分配作了特征位,之所以要设置特征位,是为了识别两个不同的命令(写到同一地址)。
- 按位置位/复位命令代码只能写入命令口,而不能写到数据口(因为是命令)。
A口和B口另一个有趣的使用方法
A口、B口也可以按位输出高低电平,但它与C口的按位置位/复位命令有本质的差别,并且实现的方法也不同。A口、B口按位输出是以送数据到A口、B口来实现的。
具体做法是:若要使用某一位置高电平,则先对端口进行读操作,然后“或”上一个字节,此字节中的对应位为1,其它各位为0,最后再送到同一端口。
例4:若要使PA7位输出高/低电平,而其它位不变,则用下列程序段:
- 使PA7输出高电平
MOV DX,300H ;PA数据口地址
IN AL,DX ;读入A口原输出内容
OR AL,80H ;使PA7=1
OUT DX,AL ;输出PA7
- 使PA7输出低电平
MOV DX,300H ;A口地址
IN AL,DX ;读入A口原输出内容
AND AL,7FH ;使PA7=0
OUT DX,AL ;输出PA7
高电平或,低电平与
82C55A的0方式及其应用
0方式的特点
- 是一种基本输入/输出方式。通常不用联络信号,或不适用固定的联络信号。0方式适用于:
- 无条件输入输出方式。
- 查询输入输出方式:把A、B口作为8位数据的输入或输出口,C口的高/低4位分别定义为A、B口的控制位和状态位
- 两个8位(A和B)和两个4位(C高4位和低4位)并行口,都能被指定为输入或输出口用,共有16种不同的使用状态。
- 不设置专用联络信号线,需要联络时,可由用户任意指定C口中的哪一根线完成某种联络功能,这与1方式、2方式下设置固定的专用联络信号线不同。
- 是单向I/O,一次初始化只能指定端口(PA,PB和PC高四位和低四位)作输入或输出,不能指定端口同时既作输入又作输出。
例题: 并行打印机接口设计
- 要求:为某应用系统配置一个并行打印机接口,CPU采用查询方式把存放在BUF缓冲区的256个字符(ASCII码)送去打印。
- 分析:打印机接口应按Centronics标准定义信号线和工作时序。Centronics 打印机接口是一种使用三线信号交换的8位平行连接线。
并行接口工作时序图
采用查询方式时,打印机与CPU之间传送数据的过程是:
-
首先查询BUSY。若BUSY=1,打印机忙,则等待;若BUSY=0,打印机不忙,则送数据。
-
通过并行接口把数据送到数据线DATA1~DATA8上,此时数据并未送入打印机。
-
再送出一个数据选通信号STROBE,把数据打入到打印机的内部缓冲器中。
-
打印机在收到数据后,发出“忙”(BUSY=1)信号,表明打印机正在处理输入的数据。
-
当打印机处理完该数据,会送出一个回答信号ACK给主机,表示上一个字符已经处理完毕,准备接收下个数据。
-
设计: 接口包括硬件接口电路和软件驱动程序。
① 打印机硬件接口电路
按照Centronics标准,打印机接口信号应包括8根数据线(DATA1~8),1根控制线(STB),1根状态线(BUSY)和1根地线。
选用PA口作数据口输出8位打印数据(工作在0方式),PC7(C口的上半区)作控制线(STB),PC2(C口的下半区)作状态线(BUSY)。
82C55A并行打印机接口电路框图
② 接口驱动程序
程序流程:
③接口驱动程序
CODE SEGMENT
ASSUME CS:CODE,DS:CODE
ORG 100H
START:
MOV AX,CODE
MOV CS,AX
MOV DS,AX
MOV DX,303H ;8255A命令口
MOV AL,10000001B ;工作方式字
OUT DX,AL ;A口0方式,输出,
;C4~C7 输出,C0~C3输入
MOV AL,00001111B ;PC7位置高,使STB=1
OUT DX,AL
MOV SI,OFFSET BUF ;打印字符的内存首址
MOV CX,OFFH ;打印字符个数
L:MOV DX,302H ;PC口地址
IN AL,DX ;查BUSY=0?(PC2=0)
AND AL,00000100B
JNZ L ;忙,则等待;
不忙,则向A口送数
MOV DX,300H ;PA口地址
MOV AL,[SI] ;从内存取数
OUT DX,AL ;送数据到A口
MOV DX,303H ;8255A命令口
MOV AL,00001110B ;置STB信号为低(PC7=0)
OUT DX,AL
NOP ;负脉冲宽度(延时)
NOP
MOV AL,00001111B ;置STB为高(PC7=1)
OUT DX,AL
INC SI ;内存地址加1
DEC CX ;字符数减1
JNZ L ;未完,继续
MOV AX,4C00H ;已完,退出
INT 21H
BUF DB 256个ASCII字符代码
CODE ENDS
END START
例题:步进电机控制接口设计
1.分析
(1)步进电机控制原理
- 步进电机是将电脉冲信号转换成角位移的一种机电式数模转换器。
- 步进电机旋转的角位移与输入脉冲的个数成正比。
- 步进电机的转速与输入脉冲的频率成正比。
- 步进电机的转动方向与输入脉冲对绕组加电的顺序有关。
- 因此,步进电机旋转的角位移、转速以及方向均受到输入脉冲的控制。
(2)运行方式与方向的控制
步进电机的运行方式是指各相绕组循环轮流通电的方式。如四相步进电机有:
单四拍:A→B→C→D
双四拍:AB→BC→CD→DA
单双八拍:AB→B→BC→C→CD→D→DA→A
双八拍:AB→ABC→BC→BCD→CD→CDA→DA→DAB
等几种方式。
循环查表法:是将各绕组加电顺序的控制代码制成一张表----步进电机相序表,存放在内存区,再设置一个地址指针。
相序表的建立,要考虑两个因素:
① 应根据步进电机运行方式的要求
② 步进电机的各相绕组与数据线连接的对应关系
(3)步进电机运行速度的控制------控制步进电机速度有两个途径:
① 用硬件改变输入脉冲的频率,通过对定时器(如:8253)定时常数的设定,使其升频、降频或恒频。
② 用软件延时或调用延时子程序。
(4)步进电机的硬件驱动
步进电机在系统中是一种执行元件,都要带负载,因此需要功率驱动。在电子仪器和设备中,一般所需功率较小,常采用达林顿复合管作功率驱动。
2.设计
包括硬件电路与软件编程两部分。
(1)硬件设计
- A口:输出,向步进电机发送相序码。
- C口高4位(PC4):输出,控制74LS373开关,起隔离作用。
- C口低4位(PC0和PC1):输入,分别与SW2和SW1连接,控制步进电机的启动和停止。按下SW1,则停止;按下SW2,则运行。
(2)软件设计
DATA SEGMENT
PSTA DB 05H,15H,14H,54H,50H,51H,41H,45H ;相序表
MESSAGE DB ’ HIT SW2 TO START, HIT SW1 TO QUIT.’
DB 0DH,0AH,’$’ ;提示信息
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV AH, 09H ;显示提示信息
MOV DX,OFFSET MESSAGE
INT 21H
MOV DX,303H ;初始化82C55A
MOV AL,81H
OUT DX,AL
MOV AL,09H ;关闭74LS373,保护步进电机(置PC4=1)
OUT DX,AL
L: MOV DX,302H ;检测开关SW2是否按下(PC0=0?)
IN AL,DX
AND AL,01H
JNZ L ;未按SW2,等待
MOV DX,303H ;已按SW2,启动步进电机
MOV AL, 08H ;打开74LS373(置PC4=0)
OUT DX,AL
RELOAD: MOV SI,OFFSET PSTA ;设置相序表指针
MOV CX,8 ;设置循环次数
LOP: MOV DX,300H ;送相序代码
MOV AL,[SI]
OUT DX,AL
MOV BX,0FFFFH ;延时
DELAY: DEC BX
JNZ DELAY
MOV DX,302H ;监测SW1是否按下(PC1=0?)
IN AL,DX
AND AL,02H
JZ OVER ;已按SW1,则停止步进电机
INC SI ;未按SW1,继续运行
DEC CX
JNZ LOP ;未到8次,继续八拍循环
JMP RELOAD ;已到8次,重新赋值
OVER: MOV DX,303H ;关闭74LS373(置PC4=1),保护电机
MOV AL,09H
OUT DX,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
实验:控制七段数码管
静态显示
按图连接好电路,将8255的A口PA0~PA7分别与七段数码管的段码驱动输入端A~DP相连,位码驱动输入端S0接GND(选中),编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。
接线:
8255/JP6(PA0—PA7) 接 数码管/JP3(A—DP)
8255/CS 接 I/O 译码/Y1(288H—28FH)
数码管/S0 接 GND
程序:
DATA SEGMENT
IO8255_A EQU 288H
IO8255_k EQU 28BH
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
MESG1 DB 0DH,0AH,'INPUT A NUM (0--9),OTHER KEY IS EXIT:',0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,IO8255_K ;使8255的A口为输出方式
MOV AX,80H
OUT DX,AL
SSS: MOV DX,OFFSET MESG1 ;显示提示信息
MOV AH,09H
INT 21H
MOV AH,01 ;从键盘接收字符
INT 21H
CMP AL,'0' ;是否小于0
JL EXIT ;若是则退出
CMP AL,'9' ;是否大于9
JG EXIT ;若是则退出
SUB AL,30H ;将所得字符的ASCII码减30H
MOV BX,OFFSET LED ;BX为数码表的起始地址
XLAT ;求出相应的段码
MOV DX,IO8255_A ;从8255的A口输出
OUT DX,AL
JMP SSS ;转SSS
EXIT: MOV AX,4C00H ;返回
INT 21H
CODE ENDS
END START
动态显示
按图连接好电路,将8255A口的PA0~PA7分别接数码管的段码驱动输入端A~DP;位码驱动输入端S0和S0分别接8255C口的PC0和PC1; 编程在两个数码管上循环显示“00-99”
接线:
8255/JP6(PA0—PA7) 接 数码管/JP3(A—DP)
8255/CS 接 I/O 译码/Y1(288H—28FH)
8255/PC0,PC1 接 数码管/S0,S1
参考程序
DATA SEGMENT
IO8255_A EQU 288H
IO8255_C EQU 28AH
IO8255_K EQU 28BH
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;段码
BUFFER1 DB 0,0 ;存放要显示的十位和个位
BZ DW ? ;位码
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,IO8255_K ;将8255设为A口输出
MOV AL,80H
OUT DX,AL
MOV DI,OFFSET BUFFER1 ;设DI为显示缓冲区
LOOP1: MOV CX,030H ;循环次数
LOOP2: MOV BH,02
LLL: MOV BYTE PTR BZ,BH
PUSH DI
DEC DI
ADD DI,BZ
MOV BL,[DI] ;BL为要显示的数
POP DI
MOV BH,0
MOV SI,OFFSET LED ;置LED数码表偏移地址为SI
ADD SI,BX ;求出对应的LED数码
MOV AL,BYTE PTR [SI]
MOV DX,IO8255_A ;自8255A的口输出
OUT DX,AL
MOV AL,BYTE PTR BZ ;使相应的数码管亮
MOV DX,IO8255_C
OUT DX,AL
PUSH CX
MOV CX,100
DELAY: LOOP DELAY ;延时
POP CX
MOV AL,00H
OUT DX,AL
MOV BH,BYTE PTR BZ
SHR BH,0EH
JNZ LLL
LOOP LOOP2 ;循环延时
MOV AX,WORD PTR [DI]
CMP AH,09
JNZ SET
CMP AL,09
JNZ SET
MOV AX,0000
MOV [DI],AL
MOV [DI+1],AH
JMP LOOP1
SET: MOV AH,01
INT 16H
JNE EXIT ;有键按下则转EXIT
MOV AX,WORD PTR [DI]
INC AL
AAA
MOV [DI],AL ;AL为十位
MOV [DI+1],AH ;AH中为个位
JMP LOOP1
EXIT: MOV DX,IO8255_A
MOV AL,0 ;关掉数码管显示
OUT DX,AL
MOV AX,4C00H ; 返回
INT 21H
CODE ENDS
END START
程序似乎有错误