实验六8255并行输入输出.docx

上传人:b****2 文档编号:2016431 上传时间:2022-10-26 格式:DOCX 页数:10 大小:64.31KB
下载 相关 举报
实验六8255并行输入输出.docx_第1页
第1页 / 共10页
实验六8255并行输入输出.docx_第2页
第2页 / 共10页
实验六8255并行输入输出.docx_第3页
第3页 / 共10页
实验六8255并行输入输出.docx_第4页
第4页 / 共10页
实验六8255并行输入输出.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

实验六8255并行输入输出.docx

《实验六8255并行输入输出.docx》由会员分享,可在线阅读,更多相关《实验六8255并行输入输出.docx(10页珍藏版)》请在冰豆网上搜索。

实验六8255并行输入输出.docx

实验六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口输出,并在数码管显示出来;如果预置的ASCI码不是数字(0~9),数码管显示E字母。

6-4动态显示:

在两个数码管上滚动循环显示不同的0〜f字符。

(即开始时两

个数码管显示01,12,23,34…f0,—直循环直至退出)

三、实验原理

(1)实验预备知识

dp

o-;;b

cdt*fgF

图八段式LED数码管的符号和引脚

寧型

共阳极诧码

共阴极代码

字型

共阳檢代码

共阴概牡码

0

COH

3FH

$

90H

CFH

1

F9H

06H

A

77H

2

A4H

5BH

b

翻H

7CH

3

BOH

4FH

C

C6H

39H

&

99H

S6H

d

A1H

5EH

5

92H

SDIi

E

75H

6

82H

7DH

¥

阳H

71H

7

F8II

D7H

FFH

8

80H

7FH

(2)6-1流程图:

r

设置8255控制字

Y

将对应段码输

 

6-1源代码:

datasegment

ioport

equ0ec00h-0280h

io8255a

equioport+288h;8255A口地址

io8255b

equioport+28bh;8255控制寄存器端口地址

leddb

3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;

段码

mesg1dbdataends

0dh,0ah,'Inputanum(0--9h):

',0dh,0ah,'$';

提示

codesegment

movds,ax

movdx,io8255b

使8255的A口为输出方式

assumecs:

code,ds:

datastart:

movax,data

movax,80h

outdx,al

sss:

movdx,offsetmesgl;

movah,09h

int21h

movah,01;

int21h

cmpal,'0';

jlexit;

cmpal,9;

jgexit;

subal,30h;

movbx,offsetled;bx

xlat;

movdx,io8255a;

outdx,al

jmpsss;

exit:

movah,4ch;

int21h

codeends

endstart

(3)6-2接线图:

显示提示信息

从键盘接收字符

是否小于0若是则退出

是否大于9若是则退出

将所得字符的ASCII码减30H

为数码表的起始地址

求出相应的段码

从8255的A口输出

转SSS

返回DOS

dr

7

3

0

■I

■I

a

d

d

IX

CL

Q

d

cs

PC0

PCI

LED2

388h^28Fhi

equ0ec00h-0280h

equioport+288h

equioport+28ah

equioport+28bh

6-2源代码:

datasegmentioportio8255aio8255cio8255k

leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段码

buffer1db5,6;存放要显示的个位和十位

位码

bzdw?

;

dataendsstackssegmentstackdb100dup⑺stacksendscodesegment

assumecs:

code,ds:

data,ss:

stacksstart:

movax,data

movds,ax

movax,stacks

movss,ax

movdx,io8255k;

moval,80houtdx,almovdi,offsetbuffer1;

loop2:

movbh,02

lll:

moval,0;

movdx,io8255a;

outdx,al

movbyteptrbz,bh

pushdidecdiadddi,bzmovbl,[di];bl

popdi

movbh,0

movsi,offsetled;

addsi,bx;

moval,byteptr[si]

movdx,io8255a;

outdx,al

moval,byteptrbz;

movdx,io8255a

outdx,almovcx,3000delay:

loopdelay;

movbh,byteptrbz

shrbh,1

jnzlll

movdx,0ffh

movah,06

int21h

jeloop2;

将8255设为A口输出

设di为显示缓冲区

送全灭断码

自8255A口输出

为要显示的数

置led数码表偏移地址为SI求出对应的led数码

自8255A的口输出

使相应的数码管亮

延时

有键按下则退出

movdx,io8255a

moval,0

outdx,al

movah,4ch

int21h

codeends

关掉数码管显示

返回

控制寄存器端口地址口地址

io8255kequioport+28bh

io8255cequioport+28ah

;8255

;8255C

leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh

 

dataends

stackssegmentstack

db100dup(?

stacksendscodesegment

assumecs:

code,ss:

stacks,ds:

datamainprocfarstart:

movax,stacks

movss,ax

movax,data

movds,ax

movdx,io8255k;设8255为C口输入,A口输出

moval,8bh;10001011

outdx,al

从C口输入一数据

inout:

movdx,io8255c

calldelay

inal,dx

cmpal,'0';

jlexit1;cmpal,9;

jgexit1;

movbx,offsetled;bxsubal,30hxlat;

movdx,io8255a;outdx,almovah,06;

movdl,Offh

int21h;

jneexit

jmpinout;

exit1:

moval,79h

movdx,io8255a

outdx,al

movah,06;

movdl,0ffh

int21h;

jneexit

jmpinout;

exit:

movah,4ch;

int21h

mainendp

是否小于0

若是则显示E

是否大于9

若是则显示E

为数码表的起始地址

求出相应的段码

从8255的A口输出

是否有键输入

是则退出

转inout

是否有键输入

是则退出

转inout

返回DOS

delayprocnear;延时子程序

movbx,2000ZZZ:

movcx,0ZZ:

loopZZdecbxjneZZZ

retdelayendp

codeends

endstart

6-3接线图:

s1dP

♦tt:

+5

r-ad9<1」sad寸红mrlad-ad3

CMyLJd寸」丄mLJOLEd-£

寸s

■1k1►

“I1

XI

0

四、实验中遇到的问题及解决方案

(1)在实验初始,发现七段数码管的a不亮,排除故障发现是由于8255芯片的PA0不能输出高电平;

(2)在各个实验中,连线后发现数码管都没有反应,后来发现,只有在每次运行前运行一下演示实验,再运行自己的程序才出正确结果;

(3)在实验6-3中,初始时,数码管显示的数字是开关预置的数字,即若开关置为0000,0001,则数码管显示1,但是实验要求为预置的为ASCH码;检查代码,发现若直接用从C口输入的数据,则就是数值,达到实验要求还需对从C口输入的数据进行减30h的操作;

(4)上次实验总未完成部分(在in操作指令前未加延时程序)在这次的课时上实现,上次的实验结果是,若开关预置全1,则屏幕一直显示提示信息;若开关预置非全1,则开始会显示提示信息,片刻后不再提示,说明若不加延时,用in指令输入的会是0ffh,但片刻后,开关预置的数据会输入,程序不再提示;遗憾部分是,用到的延时程序是借用之前实验中的,没有改变CX数据以观察需加延时的最短时间;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1