8255 方式1输出实验 实验报告_孔令宇 10284032
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8255 方式1输出实验
学生:孔令宇
班级:计科10级1006班
任课教师:吴为民
一、实验目的
掌握查询方式实现8255选通型输入(方式1)的编程控制方法。
二、实验内容
将8255端口A的PA7-PA0与8个发光二极管L7-L0连接,PB2-PB0与拨动开关的K2-K0连接,8255的CS与地质译码区的0-F端子连接,PC2(/ACK)与单脉冲端连接。先预知开关K2-K0为一组输入状态,然后按下单脉冲按键产生一个负脉冲,输入到PC2。用发光二极管LEDi亮和LED 7段数码管最右端一位上显示K2-K0的状态
三、实验原理图
四、实验流程
7段LED显示模块
210h 200h
五、实验代码
.model small
.386
data segment
io8255_a equ 200h ;8255基址值
io8255_b equ 201h
io8255_c equ 202h
io8255kz equ 203h
tab db 01h,02h,04h,08h,10h,20h,40h,80h
led_code db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,
7fh,67h,77h,7ch,39h,5eh,79h,71h ;七段数码管段码led_cs equ 210h ;led七段数码管片选data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov dx,io8255kz
mov al,0aeh ;设置工作方式为方式1,A口输出、B口输入
out dx, al
mov al,04h ;设置(pc2)/ACKA=0
out dx, al
l1: mov dx, io8255_c
ss1: in al, dx
test al,00000010b ;判断/IBFB(PC1)=1?
jz ss1
mov dx,io8255_b
in al,dx ;读入dx的内容
and al, 07h
push ax ;保存ax中的内容,ax进栈
mov bx,offset tab ;获取tab的地址
xlat tab ;查表
mov dx,io8255_a
out dx,al
pop ax ;ax出栈,还原ax内容
call display
jmp l1
display proc near
mov si,offset led_code ;获取数码管段码初地址
mov ah,0
add si,ax ;键码加上段码初地址得到对应的段码地址
mov al,[si] ;获取段码
mov dx,led_cs
out dx,al ;将段码输出至数码管片选
mov al,01h ;选择显示位码
inc dx
out dx,al
ret
display endp
code ends
end start
六、实验现象
在全速运行代码后,波动开关K2-K0初始状态均为低电平,在产生一个负脉冲后,二极管PA0亮,7断数码管最右端一位显示数字“0”。将拨动K2-K0,置为011,再次产生一个负脉冲,二极管PA3亮,7断数码管最右端一位显示数字“3”。
七、实验体会
通过本次实验,我自学了8255的1方式的设置和运用。在完成原有实验要求的基础上增加了在7段数码管上显示K2-K0状态所对应数字的功能。本次实验要求使用8255 A口方式1输入、B口方式0输出,所以需要把初始化命令设置为0aeh。在本次实验中,如何判断一个拨动开关K2-K0的状态是本次实验的关键点。通过读取C口的状态以及判断IBFA (PC1)是否等于1来完成在发光二级管和7段数码管显示的控制。