实验二、利用 8255A 实现 LED 的流水点亮实验
一、 实验目的
该实验的目的在于让学生掌握 8255A 和微机接口的连接方法,了解 8255A 的基本的工
作原理和编程方法。
二、 实验内容
PA 口接 8 个拨动开关 K1-K8,PB 口接 8 个 LED。初始由开关 K1-K8 设定 8 位不同的
值,当执行程序后 LED 按 K1-K8 初始设定的值点亮,并向右流动(8255A 工作在 0 方式)。
选择完成在数码管上显示“8255-A”。
三、 实验接线图
四、 实验设计
图 1-3 实验连线图
开始
初始化 8255A 的命令寄存器
读入开关数据,存入 AH
读输出信号,存入 BL
再次读入开关数据,存入 AL
比较 AH 与 AL,
判断开关是否有变
化
Y
调用延时程序
循环右移
N
五、实验结果截图与分析
Led 灯走马形式亮:
定义 8255 命令口地址,并设置控制字 1001 0000B,送寄存器 AL 中。特征位
D7=1,打入方式字命令;D6、D5=00,A 口为 0 方式;D4=1,A 口用于输入开
关信号,D3=0,C 口既不用于输入也不用于输出,可以设置为 1 或 0;D2=0,
B 口也在 0 方式工作;D1=0,B 端口输出信号使得 led 灯亮;D0=0,C 口不用,
可为 0 或 1.
A 口为输入的开关信号,首先读 A 口,存入 AH;B 口为输出信号,再读 B 口,
存入 BL,然后再读 A 口,存入 AL,将 AH 与 AL 进行比较,判断开关是否有变
化,无变化则继续循环右移,循环结束,读 B 口信号,亮灯调用延时程序,
然后再跳到判断开关是否变化处进行。
将 8255—A 的 16 进制码存入 ledcode 中,程序中利用循环不断增加位码来
实现数码管的逐个显示
六、 实验体会
通过实验,更能体会感受 8255A 和微机接口的连接方法,了解了 8255A 的基本的工作原理
和编程方法。
七、 思考题
在本实验的硬件电路中,能使用 C 口对 LED 指示灯控制码?如果可以写出 2 种控制方
法(编程方法)。
可以用 C 口对 LED 指示灯控制
mov dx,202h ;将 dx 赋值 202h,使得 c 口读入数据:
In al,dx
mov dx,201h ;将 dx 赋值 201h,使得 B 口输出数据:
out dx,al
mov cx,3fffh ;循环指令,使得程序能循环执行:设置循环次数
doit:ror bl,1;这里采用不带进位的循环右移
call delay ;延时程序:为了使得实验效果更明显,每执行一次循环都调用延时程序
delay proc
push cx
push bx
cx,0fh
mov
d22: mov bx,0ffffh
dl1: dec bx
cmp bx,0h
jnz dl1
dec cx
cmp bx,0h
jnz d22
pop bx
pop cx
ret
delay endp,
SEGMENT
AX,DATA
DS,AX
DX,203H
AL,90H
DX,AL
BL,0
DX,200H
AL,DX
AH,AL
DX,201H
DX,AL
BL,AL
;命令口地址
;置位命令
;送到命令口
实验代码:(LED 按 K1-K8 初始设定的值点亮,并向右流动(8255A 工作在 0 方式)。)
MODEL SMALL
.386
DATA SEGMENT
DATA ENDS
CODE
ASSUME CS:CODE,DS:DATA
START:
MOV
MOV
MOV
MOV
OUT
MOV
L1:
MOV
IN
MOV
MOV
OUT
MOV
CHECK:
MOV
IN
CMP
JNE
ROR
MOV
MOV
OUT
CALL
;检测开关状态
;无变化则继续循环
;循环右移
AL,AH
L1
BL,1
AL,BL
DX,201H
DX,AL
DELAY
DX,200H
AL,DX
;读 A 口
;输出到 B 口
;延时程序
CHECK
CX,0FFFFH
JMP
DELAY:
MOV
L2:
LOOP L2
RET
CODE ENDS
END START
实验代码:(在数码管上显示“8255-A”)
code segment
assume cs:code
start:
mov dx,203h
mov al,10001001b
out dx,al
xor ax,ax
mov bl,0
lop:
mov dx,202h
in
al,dx
cmp al,ah
jz
next
mov ah,al
mov bl,ah
rol bl,1
next:
ror bl,1
mov al,bl
mov dx,201h
out dx,al
mov cx,3fffh
doit:
mov dx,211h
mov al,00000000b
out dx,al
mov dx,210h
mov al,7fh
out dx,al
mov dx,211h
mov al,00100000b
out dx,al
;2
mov dx,211h
mov al,00000000b
out dx,al
mov dx,210h
mov al,5bh
out dx,al
mov dx,211h
mov al,00010000b
out dx,al
mov dx,211h
mov al,00000000b
out dx,al
mov dx,210h
mov al,6dh
out dx,al
mov dx,211h
mov al,00001000b
out dx,al
;5
;5
mov dx,211h
mov al,00000000b
out dx,al
mov dx,210h
mov al,6dh
out dx,al
mov dx,211h
mov al,00000100b
out dx,al
;-
mov dx,211h
mov al,00000000b
out dx,al
mov dx,210h
mov al,40h
out dx,al
mov dx,211h
mov al,00000010b
out dx,al
mov dx,211h
mov al,00000000b
out dx,al
mov dx,210h
;A
mov al,77h
out dx,al
mov dx,211h
mov al,00000001b
out dx,al
loop doit
jmp lop
codeends
end start
该延时程序循环技术,当 cx,bx 寄存器内容分别减少到 0 的时候退出延时程序。