北京邮电大学微机原理硬件实验报告.docx

上传人:b****3 文档编号:3814004 上传时间:2022-11-25 格式:DOCX 页数:30 大小:855.79KB
下载 相关 举报
北京邮电大学微机原理硬件实验报告.docx_第1页
第1页 / 共30页
北京邮电大学微机原理硬件实验报告.docx_第2页
第2页 / 共30页
北京邮电大学微机原理硬件实验报告.docx_第3页
第3页 / 共30页
北京邮电大学微机原理硬件实验报告.docx_第4页
第4页 / 共30页
北京邮电大学微机原理硬件实验报告.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

北京邮电大学微机原理硬件实验报告.docx

《北京邮电大学微机原理硬件实验报告.docx》由会员分享,可在线阅读,更多相关《北京邮电大学微机原理硬件实验报告.docx(30页珍藏版)》请在冰豆网上搜索。

北京邮电大学微机原理硬件实验报告.docx

北京邮电大学微机原理硬件实验报告

实验报告一:

I/0地址译码和简单并行接口

——实验一&实验二

一、实验目的

掌握I/O地址译码电路的工作原理;掌握简单并行接口的工作原理及使用方法。

二、实验原理及内容

aI/0地址译码

1、实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数字

电路实验区的D触发器,74LS138为地址译码器。

译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:

280H~287H,Y1:

288H~28FH,……当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。

例如:

执行下面两条指令

MOVDX,2A0H

OUTDX,AL(或INAL,DX

Y4输出一个负脉冲,执行下面两条指令

MOVDX,2A8H

OUTDX,AL(或INAL,DX

Y5输出一个负脉冲。

利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……,时间间隔通过软件延时实现。

2、接线:

Y4/IO地址接CLK/D触发器

Y5/IO地址接CD/D触发器

D/D触发器接SD/D触发器接+5V

Q/D触发器接L7(LED灯或逻辑笔

b简单并行接口

1、按下面图4-2-1简单并行输出接口电路图连接线路(74LS273插通

用插座,74LS32用实验台上的“或门”。

74LS273为八D触发器,

8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电

路L0~L7。

2、编程从键盘输入一个字符或数字,将其ASCⅡ码通过这个输出接

口输出,根据8个发光二极管发光情况验证正确性。

3、按下面图4-2-2简单并行输入接口电路图连接电路(74LS244插通

用插座,74LS32用实验台上的“或门”。

74LS244为八缓冲器,8

个数据输入端分别接逻辑电平开关输出K0~K7,8个数据输出端分

别接数据总线D0~D7。

4、用逻辑电平开关预置某个字母的ASCⅡ码,编程输入这个ASCⅡ

码,并将其对应字母在屏幕上显示出来。

5、接线:

1输出

按图4-2-1接线(图中虚线为实验所需接线,74LS32为实验台逻辑或门

2输入

按图4-2-2接线(图中虚线为实验所需接线,74LS32为实验台逻辑

或门

三、硬件连线图

1、I/O地址译码

2.简单并行接口

四、软件程序流程图

1、I\O地址译码

2、简单并行接口

五、源程序

1、I\O地址译码

STACKSEGMENTSTACK'STACK'

DB100DUP(?

STACKENDS

DATASEGMENT

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,SS:

STACK,DS:

DATASTART:

MOVAX,DATA

MOVDS,AX

LOP:

MOVDX,2A0H

OUTDX,AL;点亮灯

CALLDELAY;延时

MOVDX,2A8H

OUTDX,AL;熄灭灯

CALLDELAY

JMPLOP

CODEENDS

ENDSTART

DELAYPROCNEAR;延时子程序

PUSHCX

PUSHBX

MOVBX,250;250×65535

LP2:

MOVCX,0FFFFH

LP1:

LOOPLP1

DECBX

JNZLP2

POPBX

POPCX

RET

DELAYENDP

2、简单并行接口电路

STACKSEGMENTSTACK'STACK'

DB100DUP(?

STACKENDS

DATASEGMENT

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,SS:

STACK,DS:

DATASTART:

MOVAX,DATA

MOVDS,AX

LOP:

MOVAH,01H

INT21H

CMPAL,1BH;检查是否按下退出esc键

JZENDING

MOVDX,2A8H;将ascii码输出

OUTDX,AL

JMPLOP

ENDING:

MOVAL,0

OUTDX,AL

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

六、实验总结

在这三次实验中出现的问题以及相应的解决方法如下:

实验一:

因为对D触发器的特性有些遗忘,在编写程序时犯了不少错误,最终通过请教助教解决了一些疑问,从而顺利写出了代码。

实验二:

实验二的程序逻辑比较简单,但连线比较多,在实验过程中,也多次连错了线,通过检查纠正了连线错误,也很快完成了实验。

七、实验收获与心得体会

这次实验是第一次用汇编语言控制接口,因为理论课尚未讲到相关内容,做实验时,上手地比较慢。

通过实验一实验二,熟练了对IN、OUT指令的使用,对接口有了初步认识。

同时通过研究译码电路,对“地址”也有了进一步的认识。

实验报告二:

可编程并行接口8255的应用

——实验三&实验四&实验五

一、实验目的

1、通过实验,掌握8255工作于方式0以及设置A口为输出口,C口为输入

口的方法。

2、掌握数码管显示数字的原理。

3、掌握8255控制键盘及显示电路的基本功能及编程方法;掌握一般键盘和显

示电路的工作原理。

二、实验原理及内容

a实验三

1、实验电路如图4-3-1,8255C口接逻辑电平开关K0~K7,A口接LED

显示电路L0~L7。

2、编程从8255C口输入数据,再从A口输出。

3、接线:

PC7~PC0/8255接K7~K0/逻辑电平开关

PA7~PA0/8255接L7~L0/LED显示

CS/8255接Y1/IO地址

b实验四

1、静态显示:

按4-4-1连接好电路,将8255的A口PA0~PA7分别与七段数码

管的段码驱动输入端a~dp相连,位码驱动输入端S0、S1、S2、S3接PC0、PC1、PC2、PC3,编程在数码管显示自己的学号的后四位。

(或编程在数码管上循环显示“00-99”,位码驱动输入端S0、S1接PC0、PC1;S2、S3接地。

2、接线:

PA7~PA0/8255接dp~a/LED数码管

PC3~PC0/8255接S3~S0/LED数码管

CS/8255接Y1/IO地址

C实验五

1、编程:

使得在小键盘上每按一个健,4位数码管上显示出相应字符,它

们的对应关系如下:

2、接线:

PC7~PC0/8255接行3~列0/4X4键盘

PA7~PA0/8255接dp~a/LED数码管

CS/8255接Y1/IO地址

PB3~PCB/8255接S3~S0/LED数码管

(或哪位数码管要显示则位选S接+5V即高电平,不想显示的数码管S接GND即低电平

三、硬件连线图

a实验三

b实验四

c实验五

四、软件流程图

a实验三

b实验四

c实验五

五、源程序

a实验三

STACKSEGMENTSTACK'STACK'

DB100DUP(?

STACKENDS

DATASEGMENT

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,SS:

STACK,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAL,10001001B;A口输出C口输入,工作方式为00

MOVDX,28BH;控制端口地址

OUTDX,AL;8255初始化,写入工作方式控制字LOP:

MOVDX,28AH;将开关状态读入

INAL,DX

MOVDX,288H;讲状态输出到A口

OUTDX,AL

MOVAH,0BH;检测键盘状态

INT21H

CMPAL,0FFH;如果键盘上有输入则停止程序

JZENDING

JMPLOP

ENDING:

MOVAL,0

MOVDX,288H

OUTDX,AL

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

b实验四

STACKSEGMENTSTACK'STACK'

DB100DUP(?

STACKENDS

DATASEGMENT

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,SS:

STACK,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAL,10000000B

MOVDX,28BH

OUTDX,AL;8255初始化

LOP:

MOVAL,3FH;将0的段码输出给A口

MOVDX,288H

OUTDX,AL

MOVAL,08H;输出位码给C口

MOVDX,28AH

OUTDX,AL

CALLDELAY;延时程序

MOVAL,06H;将1的段码输出的A口

MOVDX,288H

OUTDX,AL

MOVAL,04H;输出选通位码

MOVDX,28AH

OUTDX,AL

CALLDELAY

MOVAL,7FH;将8的段码输出的A口

MOVDX,288H

OUTDX,AL

MOVAL,02H;输出选通位码

MOVDX,28AH

OUTDX,AL

CALLDELAY

MOVAL,06H;将8的段码输出的A口

MOVDX,288H

OUTDX,AL

MOVAL,01H;输出选通位码

MOVDX,28AH

OUTDX,AL

callDELAY

MOVAH,0BH;检查键盘是否有输入

INT21H

CMPAL,0ffh

JZENDING;有则退出

JMPLOP

ENDING:

MOVAL,00H

MOVDX,28AH

OUTDX,AL

MOVAX,4C00H

INT21H

DELAYPROCNEAR

PUSHCX

PUSHBX

MOVBX,005H;250×65535

LP2:

MOVCX,0fFFFH

LP1:

LOOPLP1

DECBX

JNZLP2

POPBX

POPCX

RET

DELAYENDP

CODEENDS

ENDSTART

c实验五

STACKSEGMENTSTACK'STACK'

DB100DUP(?

STACKENDS

DATASEGMENT

KEYVALUEDB71H,7CH,07H,4FH;键盘值对应的段码表,LINE0

DB79H,77H,7DH,5BH;LINE1

DB5EH,6FH,6DH,06H;LINE2

DB39H,7FH,66H,3FH;LINE3

ROWDB0EFH,0DFH,0BFH,7FH

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,SS:

STACK,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAL,10000001B;C口高4位接键盘行输出,低4位列输入,A口输出

MOVDX,28BH

OUTDX,AL

LEABX,KEYVALUE

MOVSI,0

SCANROW:

MOVAL,ROW[SI];扫描行

MOVDX,28AH

OUTDX,AL;输出行

CALLDELAY;延迟消抖

INAL,DX;读取列

ANDAL,0FH

CMPAL,0FH

JZNEXT;此行无键按下

CMPAL,0EH

JZLINE0;按下第0列的键

CMPAL,0DH

JZLINE1;按下第1列的键

CMPAL,0BH

JZLINE2;按下第2列的键

JMPLINE3

NEXT:

INCSI

CMPSI,4

JBNEXT1

MOVSI,0

NEXT1:

JMPSCANROW

LINE0:

MOVCL,[BX+SI+0];查表或许按下的键相应的输出段码JMPOUTPUT

LINE1:

MOVCL,[BX+SI+4]

JMPOUTPUT

LINE2:

MOVCL,[BX+SI+8]

JMPOUTPUT

LINE3:

MOVCL,[BX+SI+12]

OUTPUT:

CMPCL,3FH;检查是否是0,是0就退出

JZENDING

MOVAL,CL

MOVDX,288H;传送段码给A口

OUTDX,AL

MOVAL,01H;传送位码给B口

MOVDX,289H

OUTDX,AL

MOVSI,0

JMPSCANROW;继续扫描

ENDING:

MOVAL,00

MOVDX,289H

OUTDX,AL

MOVAX,4C00H

INT21H

DELAYPROCNEAR

PUSHCX

PUSHBX

MOVBX,1;250×65535

LP2:

MOVCX,0FFFH

LP1:

LOOPLP1

DECBX

JNZLP2

POPBX

POPCX

RET

DELAYENDP

CODEENDS

ENDSTART

六、实验总结

在这三次实验中出现的问题以及相应的解决方法如下:

实验三:

一开始没法用开关控制LED的亮灭,程序一运行就直接退出了,检查代码发现自己的退出条件写错了,修改后就能正常工作了。

实验四:

四个数码管显示不正常,四个数字都没法稳定的显示,经过调整延时的大小,能够使后两个数码管正常显示,但前两个数码管不受控制,最后发现是前两个数码管坏了。

实验五:

按下的键与数码管中显示的图形不一样,经过检查代码和实验箱,发现代码中按键对应的段码表行列顺序与实验箱不一致,经过调整,解决了不一致的问题。

七、实验收获与心得体会

这三次实验都是围绕着8255并行接口做一些小的应用,其中实验三与实验四逻辑比较简单,实验五稍微难一点,因为理论课还未讲到接口部分,硬件实验需要自己自学接口电路,但从中收获了不少知识,大致明白了如何使用一个接口芯片,学会了自己看手册,根据说明来编程使用接口电路,对地址有了更深刻的理解。

代码都是实验前自己课下独立编写的,因此上实验室操作时比较顺利,但也遇到了一些小错误,但也都独立解决了,在这样的一个过程中,增强了自己的学习能力和独立解决问题的能力。

实验报告三:

可编程定时器/计数器(8253/8254

一、实验目的

学习掌握8253用作定时器的编程原理;

二、实验原理及内容

(18253应用小结

8253和8254都是可编程计数器,它们的引脚兼容,功能与使用方法相同。

8254是8253的改进型。

1.8253初始化

使用8253前,要进行初始化编程。

初始化编程的步骤是:

①向控制寄存器端口写入控制字对使用的计数器规定其使用方式等。

②向使用的计数器端口写入计数初值。

2.8253控制字

D7D6=00:

使用0号计数器,D7D6=01:

使用1号计数器

D7D6=10:

使用2号计数器,D7D6=11:

无效

D5D4=00:

锁存当前计数值

D5D4=01:

只写低8位(高8位为0,读出时只读低8位

D5D4=10:

只写高8位(低8位为0,读出时只读高8位

D5D4=11:

先读/写低8位,后读/写高8位计数值

D3D2D1=000:

选择方式0,D3D2D1=001:

选择方式1

D3D2D1=X10:

选择方式2,D3D2D1=X11:

选择方式3

D3D2D1=100:

选择方式4,D3D2D1=101:

选择方式5

D0=0:

计数初值为二进制,D0=1:

计数初值为BCD码数

(2实验电路

1、按图4-8-1虚线连接电路

2、接线:

CS/8253接Y0/IO地址

GATE0/8253接+5V

CLK0/8253接1M时钟

OUT0/8253接喇叭或蜂鸣器

(3实验内容

1.完成一个音乐发生器,通过喇叭或蜂鸣器放出音乐,并在数码管上显示乐谱。

2.扩展部分:

利用小键盘实现弹琴功能,并显示弹奏的乐谱。

注意:

8253输入频率应小于2MHz。

三、硬件连线图

四、软件流程图

1、主程序流程

2、放音子程序流程

3、弹琴子程序流程

4、

五、源程序

STACKSEGMENTSTACK'STACK'

DB100DUP(?

STACKENDS

DATASEGMENT

INPUTINFODB0AH,0DH,'Pleasechoosemode:

1isplayingmusic;2isspieling',0AH,0DH

DB'$'

ERROR_INFODB0AH,0DH,'illegalinput,pleaseinputagain!

',0AH,0DH,'$'TONEDW3906,3472,3125,2932,2604,2347,2083;音调1-7计数初始值

TIMEDW1000H,1000H,1000H,2000H,2000H,4000H,4000H;持续时间

DUANMADB06H,5BH,4FH,66H,6DH,7DH,07H;与乐谱所对应的数码管段码KEYVALUEDB71H,7CH,07H,4FH;键盘值对应的段码表,LINE0

DB79H,77H,7DH,5BH;LINE1

DB5EH,6FH,6DH,06H;LINE2

DB39H,7FH,66H,3FH;LINE3

TUNEKDW0,0,2083,3125

DW0,0,2347,3472

DW0,0,2604,3906

DW0,0,2932,0

ROWDB0EFH,0DFH,0BFH,7FH

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,SS:

STACK,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAL,10000001B;8255初始化;C口高4位接键盘行输出,低4位列输入,A口输出

MOVDX,28BH

OUTDX,AL

MOVAL,00110110B;8253初始化,工作方式3,使用计时器0

MOVDX,283H

OUTDX,AL

BEGIN:

MOVAH,09H;输入提醒,选择放音或弹琴模式或者退出程序LEADX,INPUTINFO

INT21H

MOVAH,01H

INT21H

CMPAL,'1'

JZPLAY_MUSIC

CMPAL,'2'

JZSPIELING

CMPAL,1BH

JZENDING

JMPINPUT_ERROR;输入检错

INPUT_ERROR:

MOVAH,09H

LEADX,ERROR_INFO

INT21H

JMPBEGIN

PLAY_MUSIC:

CALLPLAYMUSIC

JMPBEGIN

SPIELING:

CALLSPIELINGP

JMPBEGIN

ENDING:

MOVAX,4C00H

INT21H

PLAYMUSICPROC

PUSHSI;保护现场数据

PUSHDI

PUSHAX

PUSHBX

PUSHCX

PUSHDX

LEASI,TONE;音调表

LEADI,TIME;每一个音调持续时间表

LEABX,DUANMA;段码表

MOVCX,7;循环控制变量赋值

LOP1:

MOVAX,[SI];计数器赋值

MOVDX,280H;计时器0的地址

OUTDX,AL;先写入低八位,再写入高八位

MOVAL,AH

OUTDX,AL

INCSI

INCSI

MOVAL,[BX];在数码管上显示乐谱

MOVDX,288H;8255A口地址

OUTDX,AL

INCBX

MOVAL,01H;传送位码给B口

MOVDX,289H

OUTDX,AL

MOVAX,[DI];延迟,AX为入口参数

CALLDELAY

INCDI

INCDI

MOVAH,0BH;检测键盘是否有输入,有则跳出

INT21H

CMPAL,0FFH

JZPOUT

LOOPLOP1

LEASI,TONE

LEADI,TIME

LEABX,DUANMA

MOVCX,7;重新循环

JMPLOP1

POUT:

POPDX

POPCX

POPBX

POPAX

POPDI

POPSI

RET

PLAYMUSICENDP

SPIELINGPPROC

PUSHAX

PUSHBX

PUSHCX

PUSHDX

PUSHBP

PUSHSI

PUSHDI

LEABX,KEYVALUE

LEABP,TUNEK

MOVSI,2;只扫描2,3行(01234567

SCANROW:

MOVAL,ROW[SI];扫描行

MOVDX,28AH

OUTDX,AL;输出行

PUSHAX

MOVAX,1

CALLDELAY;延迟消抖

POPAX

INAL,DX;读取列

ANDAL,0FH

CMPAL,0FH

JZNEXT;此行无键按下

CMPAL,0EH

JZLINE0

CMPAL,0DH

JZLINE1

CMPAL,0BH

JZLINE2

JMPLINE3

NEXT:

MOVAL,36H;键盘弹起,对8253重新初始化,是蜂鸣器停止发音MOVDX,283H

OUTDX,AL

INCSI

CMPSI,4

JBNEXT1

MOVSI,2

NEXT1:

JMPSCANROW

LINE0:

MOVCL,[BX+SI+0];查表

MOVDI,SI

SHLDI,1

MOVAX,DS:

[BP+DI+0]

JMPOUTPUT

LINE1:

MOVCL,[BX+SI+4]

MOVDI,SI

SHLDI,1

MOVAX,DS:

[BP+DI+8]

JMPOUTPUT

LINE2:

MOVCL,[BX+SI+8]

MOVDI,SI

SHLDI,1

MOVAX,DS:

[BP+DI+16]

JMPOUTPUT

LINE3:

MOVCL,[BX+SI+12]

MOVDI,SI

SHLDI,1

MOVAX,DS:

[BP+DI+24]

OUTPUT:

CMPCL,3FH;检查是否是0,是0就退出JZENDSP

MOVDX,280H;输出数据给计数器

OUTDX,AL

MOVAL,AH

OUTDX,AL

MOVAL,CL;数码管显示乐谱

MOVDX,288H;传送段码给A口

OUTDX,AL

MOVAL,01H;传送位码给B口

MOVDX,289H

OUTDX,AL

JMPSCANROW;继续扫描

ENDSP:

POPDI

POPSI

POPBP

POPDX

POPCX

POPBX

POPAX

RET

SPI

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

当前位置:首页 > 外语学习 > 韩语学习

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

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