实验二:利用8255A实现拨动开关和LED流水点亮实验
平安0901 王宇航 09283020
实 验 报 告
1. 实验目的:
该实验的目的在于把握8255A和微机接口的连接方式,了解8255A的大体的工作原理和编程方式。把握利用8255并行接口连接拨动开关,操纵LED显示输出的技术。
2. 实验步骤:
按图3-2将8255端口A与8位拨动开关连接,8255端口B与8位LED连接,选择 8255 为方式0工作,编程序完成LED实时显示开关状态的功能,即每位LED对应一名开关状态。开关往下拨动,对应LED灭,开关往上拨动,对应LED点亮。
当执行程序后LED按K1-K8初始设定的值点亮,并向右流动(8255A工作在方式0)。同时在6位数码管显示:8255-1
编程涉及8255端口地址有四个,由于8255片选信号线与地址译码区的200~2FH连接,即8255的I/O偏移地址为0~3,加上前一个实验所获知的I/O基址,二者相加以后才是最终访问8255的I/O地址。注意,该地址必然是一个16位数,因此I/O操作要利用IN AL,DX 和OUT DX, AL指令。
3. 实验代码:
code segment ;概念代码段 assume cs:code
start: ;初始化,设置A口B口的工作方式 mov dx,203h ;8255命令口地址 mov al,b ;操纵字 out dx,al
;让数码管显示8255-A ;显示A口输入的数并循环移位 xor ax,ax ;将ax清零 mov bl,0
lop: ;自概念的标号
mov dx,200h ;给dx赋值(送到寄放器中) in al,dx ;将200h送给寄放器al ; mov dx,201h ; out dx,al ;把al的值送给dx端口 ; jmp lop ;段内转移
cmp al,ah ;al和ah进行比较 jz next ;跳转到next mov ah,al mov bl,ah
rol bl,1 ;不带进位循环左移1位 next:
ror bl,1 ;不带进位循环右移1位 mov al,bl mov dx,201h out dx,al mov cx,3fffh
lp: ; 从lp到最后都是表示显示8255-A那个字,它的作用是实现灯的延时,即保证灯的闪烁时刻不至于过快,若是去除的话在人眼的视觉暂留情形下将可能产生持续不断的灯光闪烁,使得距离时刻太短。 ;8
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 ;5 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 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 ;A