实验六8255并行输入输出.docx
- 文档编号:15889799
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:14
- 大小:368.49KB
实验六8255并行输入输出.docx
《实验六8255并行输入输出.docx》由会员分享,可在线阅读,更多相关《实验六8255并行输入输出.docx(14页珍藏版)》请在冰点文库上搜索。
实验六8255并行输入输出
实验六---8255并行输入输出
东南大学
《微机实验及课程设计》
实验报告
实验六8255并行输入输出
姓名:
学号:
专业:
测控技术与仪器实验室:
516
同组人员:
评定成绩:
一、实验目的
1)掌握8255方式0的工作原理及使用方法,利用直接输入输出进行控制显示;
2)掌握8段数码管的动态刷新显示控制;
二、
(1)实验内容(必做)
6-1、8段数码管静态显示:
编程从键盘输入一位十进制数字(0~9),在数码管上显示出来。
6-2、8段数码管动态显示:
在两个数码管上同时显示不同的两位数字或字母,保持不变直至退出。
(如56或7f)
(2)实验内容(必做一题,选做一题)
6-3静态显示:
用逻辑电平开关预置某个数字(0~9)的ASCII码,将该数据用8255的C口读入,并用A口输出,并在数码管显示出来;如果预置的ASCII码不是数字(0~9),数码管显示E字母。
6-4动态显示:
在两个数码管上滚动循环显示不同的0~f字符。
(即开始时两个数码管显示01,12,23,34··f0,一直循环直至退出)
三、实验原理
(1)实验预备知识
图八段式LED数码管的符号和引脚
(2)6-1流程图:
(3)
N
Y
6-1源代码:
datasegment
ioportequ0ec00h-0280h
io8255aequioport+288h;8255A口地址
io8255bequioport+28bh;8255控制寄存器端口地址
leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段码
mesg1db0dh,0ah,'Inputanum(0--9h):
',0dh,0ah,'$';提示
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movdx,io8255b;使8255的A口为输出方式
movax,80h
outdx,al
sss:
movdx,offsetmesg1;显示提示信息
movah,09h
int21h
movah,01;从键盘接收字符
int21h
cmpal,'0';是否小于0
jlexit;若是则退出
cmpal,'9';是否大于9
jgexit;若是则退出
subal,30h;将所得字符的ASCII码减30H
movbx,offsetled;bx为数码表的起始地址
xlat;求出相应的段码
movdx,io8255a;从8255的A口输出
outdx,al
jmpsss;转SSS
exit:
movah,4ch;返回DOS
int21h
codeends
endstart
(3)6-2接线图:
6-2源代码:
datasegment
ioportequ0ec00h-0280h
io8255aequioport+288h
io8255cequioport+28ah
io8255kequioport+28bh
leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段码
buffer1db5,6;存放要显示的个位和十位
bzdw?
;位码
dataends
stackssegmentstack
db100dup(?
)
stacksends
codesegment
assumecs:
code,ds:
data,ss:
stacks
start:
movax,data
movds,ax
movax,stacks
movss,ax
movdx,io8255k;将8255设为A口输出
moval,80h
outdx,al
movdi,offsetbuffer1;设di为显示缓冲区
loop2:
movbh,02
lll:
moval,0;送全灭断码
movdx,io8255a;自8255A口输出
outdx,al
movbyteptrbz,bh
pushdi
decdi
adddi,bz
movbl,[di];bl为要显示的数
popdi
movbh,0
movsi,offsetled;置led数码表偏移地址为SI
addsi,bx;求出对应的led数码
moval,byteptr[si]
movdx,io8255a;自8255A的口输出
outdx,al
moval,byteptrbz;使相应的数码管亮
movdx,io8255a
outdx,al
movcx,3000
delay:
loopdelay;延时
movbh,byteptrbz
shrbh,1
jnzlll
movdx,0ffh
movah,06
int21h
jeloop2;有键按下则退出
movdx,io8255a
moval,0;关掉数码管显示
outdx,al
movah,4ch;返回
int21h
codeends
endstart
(4)6-3流程图:
YN
N
Y
6-3源代码:
datasegment
ioportequ0ec00h-0280h;tpc卡中设备的io地址
io8255aequioport+288h;8255A口地址
io8255kequioport+28bh;8255控制寄存器端口地址
io8255cequioport+28ah;8255C口地址
leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
dataends
stackssegmentstack
db100dup(?
)
stacksends
codesegment
assumecs:
code,ss:
stacks,ds:
data
mainprocfar
start:
movax,stacks
movss,ax
movax,data
movds,ax
movdx,io8255k;设8255为C口输入,A口输出
moval,8bh;10001011
outdx,al
inout:
movdx,io8255c;从C口输入一数据
calldelay
inal,dx
cmpal,'0';是否小于0
jlexit1;若是则显示E
cmpal,'9';是否大于9
jgexit1;若是则显示E
movbx,offsetled;bx为数码表的起始地址
subal,30h
xlat;求出相应的段码
movdx,io8255a;从8255的A口输出
outdx,al
movah,06;是否有键输入
movdl,0ffh
int21h;是则退出
jneexit
jmpinout;转inout
exit1:
moval,79h
movdx,io8255a
outdx,al
movah,06;是否有键输入
movdl,0ffh
int21h;是则退出
jneexit
jmpinout;转inout
exit:
movah,4ch;返回DOS
int21h
mainendp
delayprocnear;延时子程序
movbx,2000
ZZZ:
movcx,0
ZZ:
loopZZ
decbx
jneZZZ
ret
delayendp
codeends
endstart
6-3接线图:
四、实验中遇到的问题及解决方案
(1)在实验初始,发现七段数码管的a不亮,排除故障发现是由于8255芯片的PA0不能输出高电平;
(2)在各个实验中,连线后发现数码管都没有反应,后来发现,只有在每次运行前运行一下演示实验,再运行自己的程序才出正确结果;
(3)在实验6-3中,初始时,数码管显示的数字是开关预置的数字,即若开关置为0000,0001,则数码管显示1,但是实验要求为预置的为ASCⅡ码;检查代码,发现若直接用从C口输入的数据,则就是数值,达到实验要求还需对从C口输入的数据进行减30h的操作;
(4)上次实验总未完成部分(在in操作指令前未加延时程序)在这次的课时上实现,上次的实验结果是,若开关预置全1,则屏幕一直显示提示信息;若开关预置非全1,则开始会显示提示信息,片刻后不再提示,说明若不加延时,用in指令输入的会是0ffh,但片刻后,开关预置的数据会输入,程序不再提示;遗憾部分是,用到的延时程序是借用之前实验中的,没有改变CX数据以观察需加延时的最短时间;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 8255 并行 输入输出