0
点赞
收藏
分享

微信扫一扫

汇编语言--8255并行接口实验


实验题目

  1. 基本输入输出实验。编写程序,使8255的A口为输出,B口为输入,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就发生相应改变。
  2. 流水灯显示实验。编写程序,使8255的A口和B口均为输出,数据灯D7~D0由左向右,每次仅亮一个灯,循环显示,D15~D8与D7~D0正相反,由右向左,每次仅点亮一个灯,循环显示

第一个题目代码

;=========================================================
; 文件名: A82551.ASM
; 功能描述: A口为输入,B口为输出,将读入的数据输出显示
; IOY0
;=========================================================

IOY0 EQU 0600H ;片选IOY0对应的端口始地址
MY8255_A EQU IOY0+00H*2 ;8255的A口地址
MY8255_B EQU IOY0+01H*2 ;8255的B口地址
MY8255_C EQU IOY0+02H*2 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*2 ;8255的控制寄存器地址

SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START:
;初始化8255
MOV DX, MY8255_MODE
MOV AL, 82H
OUT DX, AL

AA1:
;将8255 B端口的状态给AL,虽然这里是把B的地址送给AL,但是可以理解成把B端口
;状态给AL,例如B端口为0010(1代表拨动的那个开关),则把0010给AL
;后面通过把AL给8255A端口,控制灯
MOV DX, MY8255_B
IN AL, DX

;调用子程序 起延时作用,因为一个脉冲很短,但是灯的亮与不亮有时间间隔,需要延迟时间
CALL DELAY

;把AL的值赋给8255的A端口
MOV DX, MY8255_A
OUT DX, AL

JMP AA1

DELAY: PUSH CX
MOV CX, 0F00H
AA2: PUSH AX
POP AX
LOOP AA2
POP CX
RET
CODE ENDS
END START

第二个题目代码

;=========================================================
; 文件名: A82552.ASM
; 功能描述: A口为输出,B口为输出,流水灯显示
;=========================================================

IOY0 EQU 0600H ;片选IOY0对应的端口始地址
MY8255_A EQU IOY0+00H*2 ;8255的A口地址
MY8255_B EQU IOY0+01H*2 ;8255的B口地址
MY8255_C EQU IOY0+02H*2 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*2 ;8255的控制寄存器地址

SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START:
;初始化8255
MOV DX, MY8255_MODE
MOV AL, 80H
OUT DX, AL

;8001H=1000 0000 0000 0001
;假设这里1控制灯亮,这时的80001H就代表灯D15和D0亮
;后面分开控制BH、BL中1的移动,就可以控制灯的移动
;比如BH=1000 0000 亮一次后 做循环移位操作(向左或向右),就可以实现灯的流水效果
;把1理解成灯亮,1移动,1到的位置灯亮,所以1不得移动,形成流水灯
MOV BX, 8001H

AA1:
MOV DX, MY8255_A
MOV AL, BH
OUT DX, AL
ROR BH, 1;右移移位

MOV DX, MY8255_B
MOV AL, BL
OUT DX, AL
ROL BL, 1;左移一位

;延时
CALL DELAY
CALL DELAY
JMP AA1

DELAY: PUSH CX
MOV CX, 0F000H
AA2: PUSH AX
POP AX
LOOP AA2
POP CX
RET
CODE ENDS
END START

变式

题目二改成:
D15~D0依次灯亮,形成流水灯。也就是从左到右,依次亮,一次只可以亮一个灯。
代码

;=========================================================
; 文件名: A82552.ASM
; 功能描述: A口为输出,B口为输出,流水灯显示
;=========================================================

IOY0 EQU 0600H ;片选IOY0对应的端口始地址
MY8255_A EQU IOY0+00H*2 ;8255的A口地址
MY8255_B EQU IOY0+01H*2 ;8255的B口地址
MY8255_C EQU IOY0+02H*2 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*2 ;8255的控制寄存器地址

SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX, MY8255_MODE
MOV AL, 80H
OUT DX, AL
;一次一个灯亮,那么初始值只有一个1就行了
;这里取01H=00000 0000 0000 0001
;当然02H=0000 0000 0000 0010 也行
MOV BX, 01H
AA1: MOV DX, MY8255_A
MOV AL, BH
OUT DX, AL
MOV DX, MY8255_B
MOV AL, BL
OUT DX, AL
ROR BX, 1 ;这里就只需要移位bx就行了,就移bx中唯一的一个1
CALL DELAY
CALL DELAY
JMP AA1
DELAY: PUSH CX
MOV CX, 0F000H
AA2: PUSH AX
POP AX
LOOP AA2
POP CX
RET
CODE ENDS
END START

更多

获取更多资料、代码,微信公众号:海轰Pro
回复 海轰 即可


举报

相关推荐

0 条评论