8255 方式1输出实验 实验报告_孔令宇 10284032

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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段数码管显示的控制。

相关文档
最新文档