东南大学微机第六次实验报告1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

东南大学
《微机实验及课程设计》
实验报告
实验六8255 并行输入输出
姓名:学号:
专业:实验室:计算机硬件技术
实验时间:年05月22日报告时间:年05月29日
评定成绩:审阅教师:
一.实验目的与内容
(一)实验目的
1)掌握8255方式0的工作原理及使用方法,利用直接输入输出进行控制显示;
2)掌握8段数码管的动态刷新显示控制;
(二)实验内容及要求
1、8段数码管静态显示:编程从键盘输入一位十进制数字(0~9),在数码管上显示出来。

(必做)
2、8段数码管动态显示:在两个数码管上同时显示不同的两位数字或字母,保持不变直至退出。

(如56或7f)(必做)
3、静态显示:用逻辑电平开关预置某个数字(0~9)的二进制码,将该数据用8255的C口读入,并用A口输出,并在数码管显示出来。

4、动态显示:在两个数码管上滚动循环显示不同的0~f字符。

(即开始时两个数码管显示01,12,23,34 ······ 9a······f0,一直循环直至退出)
注:3,4中选做一题,必做一题
二. 实验基本原理
(一)实验接线图
PA0~PA6分别接数码管的a~g
PC0~PC7分别逻辑电平开关的K0~K7
位选端S1接+5V
位选端S0接地
数码管dp端接地
必做1,3 接线图
PA0~PA6分别接数码管的a~g
位选端S0 、S1接8255C口的PC0、PC1端
必做2 接线图
(二)程序流程图
开 始
设置8255C口
输入A口输出
从C口输入数据
将此数据自A口输出
有键按下吗?
N
Y
结 束
图 8255 简单输入输出程序流程图图 8255 动态显示5 6 程序流程图
三方案实现与测试(或调试)
必做实验1:
data segment
ioport equ 0ec00h-0280h
io8255a equ ioport+288h
io8255b equ ioport+28bh
led db
3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh mesg1 db 0dh,0ah,'Input a num
(0--9h):',0dh,0ah,'$'
data ends
code segment
a ssume cs:code,ds:data
start: mov ax,data
m ov ds,ax
m ov dx,io8255b ;使8255的A口为输出方式
m ov ax,80h
o ut dx,al
sss: mov dx,offset mesg1 ;显示提示信息
m ov ah,09h
i nt 21h
m ov ah,01 ;从键盘接收字符
i nt 21h
c mp al,'0' ;是否小于0
j l exit ;若是则退出
c mp al,'9' ;是否大于9
j g exit ;若是则退出
s ub al,30h ;将所得字符的ASCII码减30H
m ov bx,offset led ;bx为数码表的起始地址
x lat ;求出相应的段码
m ov dx,io8255a ;从8255的A口输出
o ut dx,al
j mp sss ;转SSS exit: mov ah,4ch ;返回DOS i nt 21h
code ends
end start
必做实验2:
data segment
ioport equ 0ec00h-0280h
io8255a equ ioport+28ah
io8255b equ ioport+28bh
io8255c equ ioport+288h
led db
3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh buffer1 db 5,6
bz dw
data ends
stacks segment stack
db 100 dup()
stacks ends
code segment
assume cs:code,ds:data,ss:stacks
start: mov ax,stacks
mov ss,ax
mov ax,data
mov ds,ax
mov dx,io8255b
mov al,80h
out dx,al
mov di,offset buffer1;23
loop2: mov bh,02h
lll: mov byte ptr bz,bh
push di
dec di
add di,bz
mov bl,[di] pop di
mov al,0
mov dx,io8255a
out dx,al
mov bh,0
mov si,offset led add si,bx
mov al,byte ptr [si] mov dx,io8255c
out dx,al
mov al,byte ptr bz mov dx,io8255a
out dx,al
mov cx,3000
delay: loop delay
mov bh,byte ptr bz shr bh,1
jnz lll
mov dx,0ffh
mov ah,06h
int 21h
je loop2
mov dx,io8255a
mov al,0
out dx,al
mov ah,4ch
int 21h
code ends
end start
选做实验1:
data segment
ioport equ 0ec00h-0280h ;tpc卡中设备的io地址
io8255a equ ioport+288h ;8255A口地址
io8255b equ ioport+28bh ;8255控制寄存器端口地址
io8255c equ ioport+28ah ;8255C口地

led db
3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,79h data ends
stacks segment stack
db 100 dup ()
stacks ends
code segment
assume cs:code,ds:data,ss:stacks
main proc far
start: mov ax,stacks
m ov ss,ax
mov ax,data
m ov ds,ax
m ov dx,io8255b ;设8255为C口输入,A口输出
m ov al,8bh
o ut dx,al
inout: mov dx,io8255c ;从C 口输入一数据
i n al,dx
c mp al,30h ;是否小于0
j l error ;若是则显示E
c mp al,39h ;是否大于9
j g error ;若是则显示E
sub al,30h
jmp show
error: mov al,79h
mov dx,io8255a
out dx,al
;显示E
show: mov bx,offset led ;bx为数码表的起始地址
x lat ;求出相应的段码
mov dx,io8255a ;从A 口输出刚才自C口所输入的数据
o ut dx,al
m ov dl,0ffh ;判断是否有按键
m ov ah,06h
i nt 21h
j z inout ;若无,则继续自C 口输入,A口输出
m ov ah,4ch ;否则返回DOS
i nt 21h
main endp
code ends
end start
选做实验2:
data segment
ioport equ 0ec00h-0280h
io8255a equ ioport+288h
io8255b equ ioport+289h
io8255c equ ioport+28ah
io8255d equ ioport+28bh
led db
3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h ,7ch,39h,5eh,79h,71h ;段码
buffer1 db 0,1 ;存放要显示的十位和个位
bz dw ;位码
count dw
count1 dw
data ends
mystack segment para stack
db 100 dup()
mystack ends
code segment
a ssume cs:code,ds:data,ss:mystack
start:mov ax,data
m ov ds,ax
mov dx,io8255b ;将8255设为A 口输出
m ov al,80h
o ut dx,al
begin3: mov count1,0fh
begin2: mov count,3000
mov ax,count
begin1: mov count,ax mov cx,02h
mov ah,02h
lea si,buffer1
mov bx,offset led begin: mov al,[si] xlat
mov dx,io8255a
out dx,al
mov al,ah
mov dx,io8255c
out dx,al
call delay
mov al,0
out dx,al
inc si
shr ah,1
loop begin
mov ax,count
dec ax
jnz begin1
mov si,0
inc buffer1[si] inc si
inc buffer1[si]
dec count1
jnz begin2
mov si,offset buffer1 mov byte ptr[si],0
mov byte ptr[si+1],1 mov dx,0ffh
mov ah,06h
int 21h
je begin3
jne exit
delay proc
push cx
mov cx,0ffffh
delay1: loop delay1 pop cx
ret
delay endp
exit: mov ah,4ch
int 21h
code ends
end start
四.分析与总结
1、8255作为一个并行输入输出接口电路可实现动态和静态的输入输出,在静态实验中,我们通过键盘输入数据,实际上就是用计算机读取键盘的输入值通过8255输出给外设的过程,动态实验中计算机直接读取内存中的数通过8255送到数码管上显示出来
2、8255的A口、B口、C口和控制口的端口地址分别为288H~28BH。

编程首先要设置控制字输出到控制口。

4、动态显示时应先从A口输出段码,然后再从C口输出位码,然后应该延时一段时间才能看到数码管的显示。

其中段码需要查表
Led db 3fh,06h,…………71h
位码分别为:左边的数码管xxxxxx10
右边的数码管xxxxxx01
5、动态显示时为了使两个数码管的字符可以同时看到,应注意延时的时间。

相关文档
最新文档