北邮微原硬件实验报告.docx

上传人:b****2 文档编号:1642993 上传时间:2022-10-23 格式:DOCX 页数:38 大小:702KB
下载 相关 举报
北邮微原硬件实验报告.docx_第1页
第1页 / 共38页
北邮微原硬件实验报告.docx_第2页
第2页 / 共38页
北邮微原硬件实验报告.docx_第3页
第3页 / 共38页
北邮微原硬件实验报告.docx_第4页
第4页 / 共38页
北邮微原硬件实验报告.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

北邮微原硬件实验报告.docx

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

北邮微原硬件实验报告.docx

微机原理硬件实验报告

2015-2016学年第一学期

微机原理硬件实验报告

学院:

班级:

学号:

姓名:

序号:

目录

实验一熟悉实验环境及IO的使用 3

一实验目的 3

二实验内容 3

三实验过程 3

1实验原理 3

2流程图 3

3源代码 4

4子程序清单 6

5代码分析 6

四实验总结 6

实验二8255A并行接口应用 7

一实验目的 7

二实验内容 7

三实验过程 7

1八位数码管位选规律 7

2六位数码管静态显示 8

3六位数码管动态显示 11

4扩展:

显示键盘输入学号 15

四实验总结 21

实验三8253计数器/定时器的应用 22

一实验目的 22

二实验内容 22

三实验过程 22

1蜂鸣器发音规律 22

2音乐发生器 23

3扩展:

小键盘弹琴功能 32

四实验总结 38

实验一熟悉实验环境及IO的使用

一实验目的

1 通过实验了解和熟悉实验台的结构,功能及使用方法。

2 通过实验掌握直接使用Debug的I、O命令来读写I/O端口。

3 学会Debug的使用及编写汇编程序。

二实验内容

1 学习使用Debug命令,并用I、O命令直接对端口进行读写操作。

2 用汇编语言编写跑马灯程序。

实现功能:

1)通过读入端口状态,选择工作模式(灯闪烁方式、速度等);

2)通过输出端口控制灯的工作状态(低电平灯亮)。

三实验过程

1实验原理

1 在Debug下,用I是命令读输入端口的状态,即拨码开关的状态,用O命令向端口输出数据,通过LED发光管来查看。

测试结果:

1) 使用命令:

I0EEE0H

读取开关状态,得出的结果为左低右高,即S0是低位,S7是高位。

2) 实验命令:

O0EEE0H

测试LED,改变输入的值可依次测试各个数码管是否正常。

LED左边为高位,右边为低位。

2 分析以下程序段的作用

MOVAH,0BH

INT21H

ORAL,AL

JZ0100

INT20H

该段程序实现了检测键盘状态,在键盘有任意键输入时退出程序返回DOS的功能。

该实现依赖于0BH号中断调用和巧妙使用程序入口返回地址直接返回。

在DOS的DEBUG模式下,地址不用添加十六进制H标志。

地址默认为16进制,多写了反而画蛇添足产生错误。

普通数据为了区分需要添加H。

2流程图

3源代码

DATASEGMENT

PORTEQU0EEE0H

DATAENDS

STACKSEGMENTSTACK'STACK'

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMEDS:

DATA,CS:

CODE,SS:

STACK

BEGIN:

MOVAX,DATA

MOVDS,AX

MOVAL,07FH ;01111111

MOVDX,PORT

MOVSI,2

START:

PUSHAX ;入栈保存

INAL,DX ;读取拨码开关状态

MOVBL,AL ;BL存储拨码开关状态

POPAX ;出栈恢复

TESTBL,10H ;00010000.判断左数第五个拨码开关的状态,

;实现灯型的变化

JNZTWO ;ON状态为两个灯

CMPSI,1 ;判断AL状态

JZCONT ;SI等于1时AL有两位为0,应恢复为只有一位为0,

MOVAH,AL

RORAH,1

ORAL,AH

MOVSI,2 ;AL恢复为只有一位为0,SI变为2

JMPCONT

TWO:

CMPSI,2

JZCONT ;SI为2时只有AL只有1位为0,应对其变换

MOVAH,AL

RORAH,1

ANDAL,AH ;AL有两位为0

MOVSI,1

CONT:

OUTDX,AL

TESTBL,08H ;00001000.判断第四个拨码开关的状态,实现暂停

JNZSTART ;ON状态实现暂停

TESTBL,02H ;00000010.判断第二个拨码开关的状态,

;实现速度的变化

JNZHIGHSP ;ON状态实现高速

MOVBP,0200H ;低速状态时延

JMPMOVE

HIGHSP:

MOVBP,0100H ;高速状态时延

MOVE:

CALLDELAY

TESTBL,04H ;判断第三个拨码开关的状态,实现方向的变化

JNZLEFT ;ON状态为方向向左

RIGHT:

RORAL,1 ;右移,以备点亮下一盏灯

JMPEXIT

LEFT:

ROLAL,1 ;左移,以备点亮下一盏灯

EXIT:

TESTBL,01H ;判断第一个拨码开关的状态

JZSTART ;OFF状态继续运行,ON状态实现退出

MOVAL,0FFH ;实现全灭

OUTDX,AL

MOVAH,4CH

INT21H

DELAY PROC

MOVCX,BP ;BP越大延时次数越多,速度越慢

LOOP1:

PUSHCX

MOVCX,0FFFFH

LOOP2:

LOOPLOOP2

POPCX

LOOPLOOP1

RET

DELAY ENDP

CODE ENDS

ENDBEGIN

4子程序清单

1)子程序名:

DELAY

功能:

实现延迟显示,即控制每个LED点亮持续一定时间;

入口参数:

BP,赋值给CX控制循环次数,从而实现速度的控制;

出口参数:

无;

使用寄存器:

CX,BP。

5代码分析

1) 通过读取拨码开关地址获得拨码开关状态,将该状态的值赋给BL,实现对灯型、暂停、速度、方向以及退出的控制。

2) 灯型的控制:

通过相应拨码开关的状态选择灯型。

灯型一共有两种,第一种为每次亮一盏灯,此时控制输出的寄存器AL中的值只有一位为0,其余七位为1;第二种为每次亮两盏灯,此时控制输出的寄存器AL中的值两位为0,其余六位为1。

使用寄存器SI表示当前寄存器AL中0的个数,当SI的值与控制灯型的信息不一致时,通过逻辑与/逻辑或的操作,修改AL的值。

3) 暂停的控制:

通过相应拨码开关的状态判断是否执行暂停操作。

当需要暂停时,控制输出的寄存器AL中的值保持不变,当不需要暂停时,控制输出的寄存器AL中的值循环左移/循环右移。

4) 速度的控制:

通过相应拨码开关的状态判断速度的大小。

在不同的状态下,对BP赋不同的值,BP作为DELAY子程序的入口参数控制延时的时间从而实现速度的变化。

BP越大,则外循环次数越多,所耗时间越长,每个LED点亮持续时间越久,即速度越慢。

5) 方向的控制:

通过相应拨码开关的状态判断方向。

在不同的状态下,对控制输出的寄存器AL中的值循环左移/循环右移,即可控制显示的方向。

6) 退出的控制:

通过相应拨码开关的状态判断是否退出程序。

四实验总结

虽然本次实验是第一次微原硬件实验,但是在此之前已经有了一定的软件编程基础,并且在VHDL实验中我们也曾编写过跑马灯实验,因而实验之前对实验原理及代码结构有初步的掌握。

实验过程中我们按照讲义中的要求先对拨码开关及LED进行了测试,便捷了之后程序的编写。

总而言之,通过本次实验,我们对利用汇编语言对硬件进行编程有了一定的掌握,对后续实验的开展奠定了良好的基础。

实验二8255A并行接口应用

一实验目的

1 掌握8255A的功能及方式0、1的实现。

2 熟悉8255A与CPU的接口,以及传输数据的工作原理及编程方法。

3 了解七段数码管显示数字的原理。

4 掌握同时显示多位数字的技术。

二实验内容

1 八段数码管的显示规律及数码管的位选规律。

.

2 六位数码管静态显示。

在数码管电路上静态地显示6位学号,当主机键盘按下任意键时,停止显示,返回DOS。

3 六位数码管动态显示。

要求在数码管电路1-6位数码管上,动态显示字符串HELLO,当主机键盘按下任意键时结束。

4 扩展部分:

完成扫描键盘(PC口)输入自己的学号,并在数码管上显示。

三实验过程

1八位数码管位选规律

在方式0(输入/输出)下,以A口为输出口,B口为输出口,A口接六个共阴极数码管的八位段码,高电平点亮数码管的某一段,B口接数码管的位选(即要使哪个数码管亮),高电平选中某一位数码管点亮。

测试结果如下图:

根据上述测试结果,不难得出0-9对应的编码,如下表:

字形

0

1

2

3

4

5

6

7

8

9

编码

0EDH

21H

0F4H

0F1H

39H

0D9H

0DDH

61H

0FDH

0F9H

2六位数码管静态显示

2.1实验原理

1) 电路6个数码管的同名阳极段已经复接,当段选寄存器寄存了一个字型编码之后,6个数码管都将显示出相同的数字。

如果要使6个数码管“同时”显示不同的数字,必须采用扫描显示的方法。

2) 通过选位寄存器选择某一位数码管,显示其数字(对应段值为1),然后关闭此数码管,再选择下一位数码管进行显示;如果在一秒钟内,每一位数码管都能显示30次以上,则人眼看到的是几位数码管同时在显示。

实验证明,在扫描显示过程中,每一位显示延迟1ms是最佳选择。

3) 在本次实验中,采用行扫描方式,一次扫描6位数码管,并进行反复循环,使得每位数码管显示虽然存在间隔,但人眼仍为同时显示。

每位数码管显示的时间即为显示延迟,在每一次扫面之后检测键盘状态,若有任意键输入,便退出返回DOS界面。

2.2流程图

2.3源代码

DATA SEGMENT

NUMDB0F4H,21H,0EDH,0DDH,39H,61H ;学号后六位为210647

DATA ENDS

;-------------------------------------------------------------

STACK SEGMENTSTACK'STACK'

DB100DUP(0)

STACK ENDS

;-------------------------------------------------------------

CODE SEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

STAT:

MOVAL,10000000B ;A,B,C口均以方式0输出

MOVDX,0EE03H ;设置控制地址

OUTDX,AL ;送控制字到控制地址

MOVAX,DATA

MOVDS,AX ;设置段地址

MOVES,AX

LOP1:

XORSI,SI ;SI清零

MOVCX,06H ;循环6次,即一个周期6位数码管

MOVDX,0EE00H ;A口的地址赋给DX,A口接八位段码

MOVBL,00000001B ;高电平即选中该位数码管点亮

LO

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

当前位置:首页 > 高等教育 > 军事

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

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