北邮微原硬件实验报告Word文件下载.docx
《北邮微原硬件实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《北邮微原硬件实验报告Word文件下载.docx(38页珍藏版)》请在冰豆网上搜索。
四实验总结 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
SI为2时只有AL只有1位为0,应对其变换
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对应的编码,如下表:
字形
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'
DB100DUP(0)
STACK ENDS
CODE SEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
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