【汇编与接口】并行接口总结

并行接口的特点

  1. 在多根数据线上以字节、字、双字宽度在接口与I/O设备间传输数据,速率较快。
  2. 除数据线外,还可设置握手联络信号线,易于实现异步互锁协议,提高数据传输的可靠性。
  3. 一般不作差错检验和传输速率控制。
  4. 并行传送信息,不要求固定的格式,这与串行传送的数据格式的要求不同。

并行接口电路结构形式

  1. 采用非可编程IC芯片
  2. 采用可编程并行接口芯片
  3. 采用PLD/FPGA器件

可编程并行接口芯片82C55A

通用型、功能强、成本低

82C55A外部特性

外部特性

  • 面向系统总线的信号线
  • 面向I/O设备的信号线
  1. 与面向系统总线信号线
  • 数据线D0~D7:三态双向,用于CPU向82C55A发送命令、数据和8255A向CPU回送状态、数据等。
  • 地址线A1、A0:芯片内部端口地址寻址。形成四个端口地址。
  • CS:片选信号,低电平有效
  • 控制线RD、WR:读、写信号,低电平有效
  • RESET:复位信号,高电平有效。它清除控制寄存器并将8255A的A,B,C三个端口均为0方式输入;状态寄存器被复位,并且屏蔽中断请求。
  1. 面向I/O设备的信号线
  • PA0~PA7:端口A的输入、输出线
  • PB0~PB7:端口B的输入、输出线
  • PC0~PC7:端口C的输入、输出线

(1)A口和B口只作为输入/输出的数据口用
(2)C口除了作数据口外,在1方式和2方式时,它的大部分引脚被分配用作专用联络信号;PC口可以进行按位控制;当读取82C55A状态时,PC口又作1、2方式的状态口用

内部结构

内部结构

  1. 数据总线缓冲器。是一个三态双向8位缓冲器,它是82C55A与CPU系统数据总线的接口。
  2. 读/写控制逻辑。读/写控制逻辑由读信号RD、写信号WR、选片信号CS以及端口选择信号A1,A0等组成。
  3. 输入/输出端口PA,PC和PC。82C55A包括3个8位输入/输出端口。每个端口都有一个数据输入寄存器和一个数据输出寄存器
  4. A组和B组控制电路。控制A,B和C三个端口的工作方式。两个控制电路分别控制:A组和C组的高4位;B组和C组的低4位。

82C55A的端口地址

  1. 作为PC微机系统的系统资源:分配给82C55A的端口地址是PA是60H,PB是61H,PC是62H,命令和状态口是63H。
  2. 作为用户扩展的接口:根据用户的需要确定。

82C55A的编程命令

82C55A有两个编程命令:(1)工作方式命令。(2)对C端口的按位操作(置位/复位)命令。

  1. 方式命令
    作用:指定82C55A的工作方式及其方式下3个并行端口(PA,PB,PC)的输入/输出功能。
    格式:其中最高位是特征位,一定要写1,其余各位定义如下:
D7=1D6D5D4D3D2D1D0
特征位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      ;送到命令口
  1. 按位置位/复位命令

    作用:指定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

关于两个命令的使用

  1. 方式命令是对8255A的3个端口的工作方式及功能进行指定(即初始化),初始化工作要在使用8255A之前进行。
  2. 按位置位/复位命令只是对PC口的输出进行控制,使用它不破坏已经建立的3种工作方式,而是对它们实现动态控制的一种支持,它可放在初始化程序以后的任何地方。
  3. 两个命令的最高位(D7)都分配作了特征位,之所以要设置特征位,是为了识别两个不同的命令(写到同一地址)。
  4. 按位置位/复位命令代码只能写入命令口,而不能写到数据口(因为是命令)。

A口和B口另一个有趣的使用方法
A口、B口也可以按位输出高低电平,但它与C口的按位置位/复位命令有本质的差别,并且实现的方法也不同。A口、B口按位输出是以送数据到A口、B口来实现的。


具体做法是:若要使用某一位置高电平,则先对端口进行读操作,然后“或”上一个字节,此字节中的对应位为1,其它各位为0,最后再送到同一端口。

例4:若要使PA7位输出高/低电平,而其它位不变,则用下列程序段:

  1. 使PA7输出高电平
MOV  DX,300H   ;PA数据口地址
IN  AL,DX      ;读入A口原输出内容
OR  AL,80H     ;使PA7=1
OUT  DX,AL     ;输出PA7
  1. 使PA7输出低电平
MOV DX,300H   ;A口地址
IN  AL,DX     ;读入A口原输出内容
AND AL,7FH    ;使PA7=0
OUT DX,AL     ;输出PA7

高电平或,低电平与

计算

82C55A的0方式及其应用

0方式的特点

  1. 是一种基本输入/输出方式。通常不用联络信号,或不适用固定的联络信号。0方式适用于:
  • 无条件输入输出方式。
  • 查询输入输出方式:把A、B口作为8位数据的输入或输出口,C口的高/低4位分别定义为A、B口的控制位和状态位
  1. 两个8位(A和B)和两个4位(C高4位和低4位)并行口,都能被指定为输入或输出口用,共有16种不同的使用状态。
  2. 不设置专用联络信号线,需要联络时,可由用户任意指定C口中的哪一根线完成某种联络功能,这与1方式、2方式下设置固定的专用联络信号线不同。
  3. 是单向I/O,一次初始化只能指定端口(PA,PB和PC高四位和低四位)作输入或输出,不能指定端口同时既作输入又作输出。

例题: 并行打印机接口设计

  1. 要求:为某应用系统配置一个并行打印机接口,CPU采用查询方式把存放在BUF缓冲区的256个字符(ASCII码)送去打印。
  2. 分析:打印机接口应按Centronics标准定义信号线和工作时序。Centronics 打印机接口是一种使用三线信号交换的8位平行连接线。

并行接口工作时序图
时序图

采用查询方式时,打印机与CPU之间传送数据的过程是:

  1. 首先查询BUSY。若BUSY=1,打印机忙,则等待;若BUSY=0,打印机不忙,则送数据。

  2. 通过并行接口把数据送到数据线DATA1~DATA8上,此时数据并未送入打印机。

  3. 再送出一个数据选通信号STROBE,把数据打入到打印机的内部缓冲器中。

  4. 打印机在收到数据后,发出“忙”(BUSY=1)信号,表明打印机正在处理输入的数据。

  5. 当打印机处理完该数据,会送出一个回答信号ACK给主机,表示上一个字符已经处理完毕,准备接收下个数据。

  6. 设计: 接口包括硬件接口电路和软件驱动程序。

打印机硬件接口电路
按照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
程序似乎有错误
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值