兰州大学接口与通讯实验报告汇总
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验6-6 8255并行接口(LED)实验
实验说明
8255工作于方式0,此时PA, PB, PC均为可独立输入输出的并行口。8255的各寄存器对应的端口地址为:
PA口:288H
PB口:289H
PC口:28AH
控制口:28BH
8255的片选信号为CS连138译码器的288H-28FH。由于各PC速度不同,为到达较好的实验效果,可以适当调节LED亮灭的延迟时间。
源代码:
data segment
ioport equ 0ff00h-0280h
io8255a equ ioport+288h ;PA口
io8255b equ ioport+289h ;PB口
io8255c equ ioport+28ah ;PC口
io8255d equ ioport+28bh ;控制口
mess1 db '左循环按1',0dh,0ah,'$' ;提示信息
db '右循环按2',0dh,0ah,'$'
db '间隔闪烁按3',0dh,0ah,'$'
db '退出按4',0dh,0ah,'$'
mess2 db '按无效键继续选择',0dh,0ah,'$'
mess3 db '按任意键退回主菜单',0dh,0ah,'$'
data ends
stack segment
sta db 20 dup(?)
top equ length sta
stack ends
code segment
assume cs:code,ds:data,ss:stack,es:data
start: mov ax,data ;data段装填
mov ds,ax
mov ax,stack ;stack段装填
mov ss,ax
mov sp,top ;设置栈顶
mov sp,ax
mov dx,io8255d
mov al,80h;命令字10000000b,表示特征位为1,A组为0方式,A端口出,out dx,al ;PC4-PC7出,B组为0方式,B端口出,PC0-PC3出
bg: lea dx,mess1 ;显示提示信息mess1
mov ah,09h
int 21h
mov ah,08h ;输入字符,结果保存至al
int 21h
push ax ;保存输入的值
lea dx,mess3 ;显示提示信息mess3
mov ah,09h
int 21h
pop ax ;拿出保存的值
mov ah,al ;ah=al
cmp al,'1' ;输入为1,跳转到zxh
jz zxh
mov al,ah ;al=ah
cmp al,'2' ;输入2,跳转到yxh
jz yxh
mov al,ah ;al=ah
cmp al,'3' ;输入3,跳转到jgs
jz jgs
mov al,ah ;al=ah
cmp al,'4' ;输入4,跳转到wx
jnz wx
jmt qit
wx: lea dx,mess2 ;显示提示信息mess2
mov ah,09h
int 21h
jmp bg ;无条件跳转到bg
zxh: mov dx,io8255c
mov al,0feh ;al=11111110b
bb: out dx,al ;将al写入PC口
mov cx,0ffffh ;用于延迟一定的时间
l1: loop l1
rol al,1 ;al循环左移一位
push ax ;保存ax
push dx ;保存dx
mov dl,0ffh ;直接控制台IO,输入,输入的值在al中
mov ah,06h
int 21h
jnz bg ;flag的ZF标志位不为0跳转至bg
pop dx ;恢复dx,ax的值
pop ax
jmp bb ;跳转至bb
yxh mov dx,io8255c
mov al,0feh ;al=11111110b
ee: out dx,al ;将al写入PC口
mov cx,0fffh ;用于延迟一定的时间
l2: loop l2
ror al,1 ;al循环右移一位
push ax ;保存ax
push dx ;保存dx
mov dl,0ffh ;直接控制台IO,输入,输入的值在al中
mov ah,06h
int 21h
jnz bg ;flag的ZF标志位不为0跳转至bg
pop dx ;恢复dx,ax的值
pop ax
jmp ee ;无条件转移至ee
jgs: mov dx,io8255c
mov al,55h ;al=01010101b
hh: out dx,al ;将al写入PC口
mov cx,0fffh ;设置时延
l3: loop l3
not al ;对al按位取反
push ax ;保存ax
push dx ;保存dx
mov dl,0ffh ;直接控制台IO,输入,输入的值在al中
mov ah,06h
int 21h
jnz bg1 ;flag的ZF标志位不为0跳转至bg1
pop dx ;恢复dx,ax的值
pop ax
jmp hh ;无条件转移至hh
bg1: jmp bg ;无条件转移至bg
qit: mov ax,4c00h ;交还控制权给DOS
int 21h
code ends
end start