微原硬件实验报告Word下载.docx
《微原硬件实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《微原硬件实验报告Word下载.docx(33页珍藏版)》请在冰豆网上搜索。
![微原硬件实验报告Word下载.docx](https://file1.bdocx.com/fileroot1/2023-1/5/9ac8a089-bb75-4f49-b765-15d65734b909/9ac8a089-bb75-4f49-b765-15d65734b9091.gif)
WAIT1:
PUSHCX;
双重循环防止时延过短
MOVCX,000FH
WAIT2:
LOOPWAIT2
POPCX
LOOPWAIT1
RET
DELAYENDP
START:
MOVAX,DATA;
数据段初始化
MOVDS,AX
MOVBL,0FEH;
设置
LOOP1:
MOVCH,0FCH
MOVDX,0EEE0H;
接收控制数据
INAL,DX
ANDCH,AL
RORCH,1
MOVCL,AL
ANDAL,02H
JNZOUT1;
判断是否开启
ANDCL,01H;
判断是否左移
JZL
RORBL,1;
数据右移
JMPN
L:
ROLBL,1
N:
MOVAL,BL;
数据输出,灯亮
OUTDX,AL
MOVAH,0BH
INT21H
D:
CALLDELAY
DECCH;
控制时延时间
JNZD
JMPLOOP1
OUT1:
MOVAX,4C00H
CODEENDS
ENDSTART
五、思考题
通过实验说明用debug中的a命令录入实验中给出的小程序中,有些语句可以不写出“h”字符的原因。
答:
对于立即数默认是16位进制,所以可以不写出”h”
六、实验总结
本次实验,我初步接触了微机原理硬件实验的实验环境,学会了在DOS环境下使用Debug编写和调试程序,以及通过Debug的I、O命令来读写IO端口。
同时,开始学习用硬件的思想编写程序,在编程时体会到了芯片工作的基本原理,通过实验直观地认识到了程序对硬件的控制。
跑马灯程序是第一次软件对硬件的控制实验,我在控制设计方面考虑了速度、方向、暂停、按键控制退出等功能,并加以实现,验收通过。
跑马灯的程序控制的关键在于读取拨码开关的状态,然后对相应的控制位进行判断,然后更加判断结果对速度、方向等进行置位,并在检测到有暂停时反复循环读取状态进行判断,直到暂停键取消,同时,任何时候判断到关闭程序的按键,则立即退出程序。
整个程序实际上是在一种检测、执行、再检测、再执行的循环中反复。
实验二8255A并行接口应用
一、实验目的
1.掌握8255A的功能及方式0、1的实现
2.熟悉8255A与CPU的接口,以及传输数据的工作原理及编程方法。
3.了解七段数码管显示数字的原理。
4.掌握同时显示多位数字的技术。
二、实验内容
(一)在方式0(输入/输出)下,以A口为输出口,B口为输出口,A口接六个共阴极数码管的八位段码,高电平点亮数码管的某一段,B口接数码管的位选(即要使哪个数码管亮),高电平选中某一位数码管点亮。
8255A中A端口地址EE00H
B端口地址EE01H
C端口地址EE02H
控制地址EE03H
八段数码管的显示规律及数码管的位选规律自己查找,可用实验一中,学过的I、O命令来做。
(二)6位数码管静态显示
在数码管电路上静态地显示6位学号,当主机键盘按下任意键时,停止显示,返回DOS。
(三)6位数码管动态显示
要求在数码管电路1-6位数码管上按图3.2所示的规律,动态显示字符串HELLO,当主机键盘按下任意键时结束。
图3.2字符串动态显示示意图
三、实验过程
1、八段数码管位选规律
在方式0(输入/输出)下,以A口为输出口,B口为输出口,A口接六个共阴极数码管的八位段码,高电平点亮数码管的某一段,B口接数码管的位选(即要使哪个数码管亮),高电平选中某一位数码管点亮。
测试结果如下图所示。
由此,容易得出数字0~9以及字母A~H的编码,如下表所示。
字形
1
2
3
4
5
6
7
编码
0EDH
21H
0F4H
0F1H
39H
0D9H
0DDH
61H
8
9
A
B
C
D
E
F
0FDH
0F9H
7DH
9DH
0CCH
0B5H
0DCH
5CH
2、六位数码管静态显示
程序流程图:
N
Y
程序源代码及注释:
DATESEGMENT;
静态显示
TABLEDB0F4H,0EDH,0EDH,0F9H,0EDH,61H;
存放一组学号“2,0,0,9,0,7”
DATEENDS
;
堆栈段定义
DB1000DUP(?
CODESEGMENT
DATE,SS:
MOVAX,DATE
MOVDS,AX
MOVAL,80H;
8255A控制口置80,即采用方式0,A口、B口输出
MOVDX,0EE03H
MOVDX,0EEE0H;
接收数据并判断是否结束显示
ANDAL,01H
JZ_OUT
MOVAL,01H;
点亮第一个数码管并显示对应字
MOVDX,0EE01H
MOVAL,TABLE
MOVDX,0EE00H
MOVAL,02H;
点亮第二个数码管并显示对应字
MOVAL,TABLE+1
MOVAL,04H;
点亮第三个数码管并显示对应字
MOVAL,TABLE+2
MOVAL,08H;
点亮第四个数码管并显示对应字
MOVAL,TABLE+3
MOVAL,10H;
点亮第五个数码管并显示对应字
MOVAL,TABLE+4
MOVAL,20H;
点亮第六个数码管并显示对应字
MOVAL,TABLE+5
LOOPLOOP1
DELAYPROCNEAR;
产生1ms延时
_WAIT:
LOOP_WAIT
_OUT:
3、六位数码管动态显示
程序源代码及注释
DATESEGMENT;
动态显示
MESGDB0,0,0,0,0,0,3DH,0DCH,8CH,8CH,0EDH,0;
数据信息HELLO和空
POINTDWMESG
_POINTDWMESG
;
堆栈段
MOVAL,80H;
MOVDX,0EEC3H
MOVCX,7
LOOP2:
MOVBX,POINT;
传入数据地址
MOVCX,500
接收控制数据,判断是否结束
CALLSHOW1;
依次进行六个数码管显示
CALLSHOW2
CALLSHOW3
CALLSHOW4
CALLSHOW5
CALLSHOW6
CMPCX,1
JNZ_MOV
MOVCX,8
MOVBX,_POINT
MOVPOINT,BX
JMPNEXT
_MOV:
INCPOINT
NEXT:
LOOPLOOP2
DELAYPROCNEAR;
时延函数
LOOP_WAIT
SHOW1PROCNEAR;
第一个数码管显示
PUSHAX
PUSHDX
选择当前数码管
MOVDX,0EEC1H
MOVAL,[BX];
当前数显
MOVDX,0EEC0H
POPAX
POPDX
SHOW1ENDP
SHOW2PROCNEAR;
第二个数码管显示
MOVAL,02H
MOVAL,[BX]+1
SHOW2ENDP
SHOW3PROCNEAR;
第三个数码管显示
MOVAL,04H
MOVAL,[BX]+2
SHOW3ENDP
SHOW4PROCNEAR;
第四个数码管显示
MOVAL,08H
MOVAL,[BX]+3
SHOW4ENDP
SHOW5PROCNEAR;
第五个数码管显示
MOVAL,10H
MOVAL,[BX]+4
SHOW5ENDP
SHOW6PROCNEAR;
第六个数码管显示
MOVAL,20H
MOVAL,[BX]+5
SHOW6ENDP
五、实验结果讨论
实验中调整了数码管的显示顺序及延迟,经过多次尝试,得到结论是在扫描显示过程中,延时1ms是最佳选择
本次实验,是第一次通过芯片来实现实验期望,通过这次实验,我进一步掌握了DOS环境下对程序的编写和调试,熟悉了8255A与CPU的接口,以及传输数据的工作原理及8255A的控制编程方法。
刚开始仅完成并验收了静态显示功能,随后在这个基础上进一步研究,最终完成了动态显示部分。
在实现静态显示的过程中基本没有遇到什么障碍和困难,但是动态显示中就遭遇到了一些问题的挑战,开始认为动态就是在静态上加上循环控制即可,但是实际工作后发现:
随着循环次数的增加,显示字开始出现严重失真,即数码管点亮发生错误,后重新改写程序,将数码管显示打包成各个小型子程序,从而解决问题。
实验中的实验板是老师连接好了电路板和接口芯片,这样可以简化实验过程,也使得大家的硬件平台一致。
但这样存在的问题是,我们对芯片的地址和连线失去了动手实践的机会,而这个恰恰是我的一大弱点,硬件接触过少,不熟悉,而软件相对掌握熟练。
建议给学生更多的空间去自己布线,更加熟悉硬件和接口。
实验三8253计数器/定时器的应用
一、实验目的:
学习掌握8253用作定时器的编程原理
1.完成一个音乐发生器,通过蜂鸣器放出音乐,并在数码管上显示乐谱。
音符频率对照表:
音符
1(do)
2(re)
3(mi)
4(fa)
5(so)
6(la)
7(si)
i(do)
频率(Hz)
256
288
320
341
384
426.6
480
512
主程序流程图
发声子程序流程图
DATASEGMENT;
乐谱发声
TIMEQU0FFH
BUFFDB3,3,4,5,5,4,3,2,1,1,2,3,3,2,2,3,3,4,5,5,4,3,2,1,1,2,3,2,1,1,5,4,3,3,4,3,2,1,3,4,3,2,1,17,1,2,5,15,3,3,3,4,5,5,4,3,4,2,1,1,2,3;
乐谱
COUNTEQU$-BUFF
;
DB100DUP(?
ASSUMEDS:
STACK,CS:
CODE
MOVAX,DATA
MOVCX,COUNT;
记录乐谱长度
MOVBX,OFFSETBUFF;
传入乐谱数据
MOVAL,80H;
8255A初始化
MOVDX,0EE03H
MOVAL,16H;
8253初始化
MOVDX,0EE23H
MOVAL,01H
MOVDX,0EE01H;
8255A传入初始数据
MOVAL,00H
MUSIC:
MOVAL,[BX]
CMPAL,0;
判断音符
JZiiDELAY
CMPAL,1
JZiiDO
CMPAL,2
JZiiRE
CMPAL,3
JZiiMI
CMPAL,4
JZiiFA
CMPAL,5
JZiiSO
CMPAL,6
JZiiLA
CMPAL,7
JZiiSI
CMPAL,16
JZiiLAL
CMPAL,15
JZiiSOL
CMPAL,17
JZiiSIL
iiDELAY:
CALLFARPTRDELAY;
调用延时
JMPiiUP
iiDO:
CALLFARPTRiDO;
调用发声程序
iiRE:
CALLFARPTRiRE
iiMI:
CALLFARPTRiMI
iiFA:
CALLFARPTRiFA
iiSO:
CALLFARPTRiSO
iiLA:
CALLFARPTRiLA
iiSI:
CALLFARPTRiSI
iiLAL:
CALLFARPTRiLAL
iiSOL:
CALLFARPTRiSOL
iiSIL:
CALLFARPTRiSIL
iiUP:
INCBX
DECCX
JZRETD
JMPMUSIC
MOVAH,0BH
INT21H
ORAL,AL
JNZRETD
RETD:
MOVAL,16H;
8253送控制字,结束发声
MOVDX,0EE23H
MOVAX,4C00H
DELAYPROCFAR;
延时函数
PUSHBX
MOVCX,TIM
L1:
MOVBX,9FFFH
L2:
DECBX
JNZL2
DECAX
JNZL1
POPBX
iSOLPROCFAR;
低So音发声
MOVDX,0EE20H;
送8253分频数值
MOVAL,0A6H;
53H
MOVAL,0D9H;
送数码管显示子
MOVDX,0EE00H
CALLFARPTRDELAY
iSOLENDP
iLALPROCFAR;
低La音发声
MOVDX,0EE20H
MOVAL,96H;
4BH
MOVAL,0DDH
iLALENDP
iSILPROCFAR;
低Si音发声
MOVAL,86H;
43H
MOVAL,61H
iSILENDP
iDOPROCFAR;
Do音发声
MOVAL,7DH
MOVAL,21H
CALLFARPTRDELAY
iDOENDP
iREPROCFAR;
Re音发声
MOVAL,6FH
OUTDX,AL
MOVAL,0F4H
iREENDP
iMIPROCFAR;
Mi音发声
MOVAL,64H
MOVAL,0F1H
iMIENDP
iFAPROCFAR;
Fa音发声
MOVAL,5DH
MOVAL,39H
iFAENDP
iSOPROCFAR;
So音发声
MOVAL,53H
MOVAL,0D9H
iSOENDP
iLAPROCFAR;
La音发声
MOVAL,4BH
iLAENDP
iSIPROCFAR;
Si音发声
MOVAL,43H
iSIENDP
ENDSTART
五、实验电路连接图
六、问题及解决
实验中遇到的首要问题是乐