利用8255A实现拨动开关和LED流水点亮实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二:利用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,10010000b ;控制字
out dx,al
;让数码管显示8255-A
;显示A口输入的数并循环移位
xor ax,ax ;将ax清零
mov bl,0
lop:;自定义的标号
mov dx,200h ;给dx赋值(送到寄存器中)
in al,dx ;将200h送给寄存器al
;m ov dx,201h
;o ut dx,al ;把al的值送给dx端口
;j mp 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 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
mov al,00000000b
out dx,al
mov dx,210h
mov al,77h
out dx,al
mov dx,211h
mov al,00000001b
out dx,al
loop lp ;转至lp
jmp lop ;跳至lop
hlt ; 使处理器处于暂时停机状态.
code ends
end start
4.实验程序流程图: