北邮 通信工程 微机原理与接口技术 硬件实验 实验报告.docx
《北邮 通信工程 微机原理与接口技术 硬件实验 实验报告.docx》由会员分享,可在线阅读,更多相关《北邮 通信工程 微机原理与接口技术 硬件实验 实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
北邮通信工程微机原理与接口技术硬件实验实验报告
微机原理硬件实验报告
学院:
信息与通信工程学院
专业:
通信工程
班级:
学号:
班内序号:
姓名:
实验一I/O地址译码
一、实验目的
掌握I/O地址译码电路的工作原理。
二、实验原理和内容
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灯)或逻辑笔
三、硬件接线图与软件程序流程图
1、硬件接线图
2、软件程序流程图
四、源程序
DATASEGMENT
DATAENDS
STACKSEGMENTSTACK'STACK'
DB100HDUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
DELAY1PROCNEAR;延时子程序
MOVBX,500H
PUSHCX
LOOP2:
MOVCX,0FFFH
WAIT1:
LOOPWAIT1
DECBX
JNZLOOP2
POPCX
RET
DELAY1ENDP
;L7闪烁
START:
MOVCX,0FFFFH;最大可循环次数
LOOP1:
MOVDX,2A0H;灯亮
OUTDX,AL
CALLDELAY1
MOVDX,2A8H;灯灭
OUTDX,AL
CALLDELAY1
LOOPLOOP1;循环闪烁
CODEENDS
ENDSTART
五、实验结果
灯L7闪烁,一段时间后停止。
六、实验总结
1、采用的是软件延时,更改延时子程序中给BX、CX的赋值可以改变LED闪烁的频率;
2、灯的闪烁并不是无限的,在主程序中给CX赋了最大值0FFFFH,循环完这个次数后就停止循环了。
另外,若给CX赋予0,会比赋予0FFFFH多循环一次。
七、实验收获与心得体会
“纸上得来终觉浅,绝知此事要躬行。
”不得不说,虽然在理论课上已经学到了很多知识,但第一次面对硬件的连接还是有种无从下手的感觉。
看到编的程序通过硬件得到了实现,不仅更直观的感受到了编程逻辑,而且还提高了对微机原理这门课程的兴趣。
实验四七段数码管
一、实验目的
掌握数码管显示数字的原理
二、实验原理和内容
1、8255的工作方式
一片8255内部有3个端口,A口可以工作在方式0、方式1或方式2,B口可以工作在方式0、方式1,C口可以工作在方式0。
方式0是基本型输入/输出。
这种方式和外设交换数据时,8255端口与外设之间不使用联络线。
方式1为选通型输入/输出。
用这种方式和外界交换数据时,端口和外设之间要有联络信号。
方式2是双向数据传送,仅A口有这项功能。
当A口工作在方式2时,B口仍可以工作在方式0或方式1,但此时B口方式1只能用查询方式与CPU交换信息。
2、工作方式选择字
8255工作方式选择字共8位(如图),存放在8255控制寄存器中。
最高位D7为标志位,D7=1表示控制寄存器中存放的是工作方式选择字,D7=0表示控制寄存器中存放的是C口置位/复位控制字。
3、C口置/复位控制字
8255的C口可进行位操作,即:
可对8255C口的每一位进行置位或清零操作,该操作是通过设置C口置/复位字实现的(如图)。
C口置/复位字共8位,各位含义如下:
4、静态显示:
按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接地。
)
5、接线:
PA7~PA0/8255接dp~a/LED数码管
PC3~PC0/8255接S3~S0/LED数码管
CS/8255接Y1/IO地址
三、硬件接线图与软件程序流程图
1、硬件接线图
2、软件程序流程图
四、源程序
DATASEGMENT
DATAENDS
STACKSEGMENTSTACK'STACK'
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVDX,28BH;8255控制寄存器端口地址28BH
MOVAL,80H
OUTDX,AL;初始化8255
DIGITAL:
MOVDX,28AH;熄灭数码管
MOVAL,00H
OUTDX,AL
MOVDX,288H;A口显示2
MOVAL,5BH
OUTDX,AL
MOVDX,28AH;选最低位数码管
MOVAL,01H
OUTDX,AL
MOVDX,28AH;熄灭数码管
MOVAL,00H
OUTDX,AL
MOVDX,288H;A口显示5
MOVAL,6DH
OUTDX,AL
MOVDX,28AH;选第二位数码管
MOVAL,02H
OUTDX,AL
MOVDX,28AH;熄灭数码管
MOVAL,00H
OUTDX,AL
MOVDX,288H;A口显示4
MOVAL,66H
OUTDX,AL
MOVDX,28AH
MOVAL,04H;选第三位数码管
OUTDX,AL
MOVDX,28AH;熄灭数码管
MOVAL,00H
OUTDX,AL
MOVDX,288H;A口显示0
MOVAL,3FH
OUTDX,AL
MOVDX,28AH
MOVAL,08H;C口00001000(位码)
OUTDX,AL
MOVDX,28AH;选第四位数码管
MOVAL,00H
OUTDX,AL
MOVAH,01H
INT16H
JNZEXIT;ZF=0说明有按键输入,故退出
JMPDIGITAL
EXIT:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
五、实验结果
数码管显示0452,有按键输入则退出。
六、实验总结
在这个循环中,要注意切换数码管的选位时,要先将输出的段位清零再进行切换,再给输出段位赋予新值,否则会出现数码管显示错误,即亮度降低、且无法正确显示数字。
七、实验收获与心得体会
有时会出现“明明感觉自己写的代码什么问题都没有,但是就是无法正确得到想要的结果”。
这种时候不妨换种角度思考,也许会收获新思路。
不过还是想要一个和小学期那样的可以单步运行,并且可以检视内存变化情况的软件。
数码管本身其实很简单,给予选位和选段之后就可以显示,但在数字电路实验与本实验中,代码的思路是不同的,这点要予以区分和注意,不能生搬硬套。
实验八可编程定时器/计数器(8253/8254)
一、实验目的:
学习掌握8253用作定时器的编程原理;
二、实验原理及内容
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码数
3、实验要求
完成一个音乐发生器,通过喇叭或蜂鸣器放出音乐,并在数码管上显示乐谱。
音符频率对照
4、扩展部分
利用小键盘实现弹琴功能,并显示弹奏的乐谱。
注意:
8253输入频率应小于2MHz。
三、硬件接线图与软件程序流程图
1、硬件接线图
2、软件程序流程图
四、源程序
DATASEGMENT
FENPINDW0001H,3906,3472,3125,2932,2604,2344,2083,1953;分频比
DIGITALDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH;数码管
MUSICDB5,5,6,5,4,3,4,5,2,3,4,3,4,5,5,6,5,4,3,4,5,2,5,5,3,1,1;存放播放的乐曲音符
NUMDB00H,070H,0B0H,0D0H,0E0H;检测键盘输入
DATAENDS
STACKSEGMENTSTACK'STACK'
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
;延时子程序
DELAYPROCNEAR
PUSHCX
MOVCX,100H
WAIT0:
LOOPWAIT0
POPCX
RET
DELAYENDP
;延时子程序2
DELAY1PROCNEAR
PUSHCX
MOVCX,0FFFFH
WAIT1:
LOOPWAIT1
POPCX
RET
DELAY1ENDP
;获取键盘输入值的子程序
KEYPROCNEAR
PUSHAX;保护现场
PUSHCX
PUSHDX
MOVCX,01H
CHECK:
MOVDX,28AH;C口地址给DX
MOVBX,OFFSETNUM
ADDBX,CX
MOVAL,[BX]
OUTDX,AL
;防抖
INAL,DX;判断是否有键盘按下
MOVAH,AL
CALLDELAY
INAL,DX
CMPAL,AH
JNZCHECK;不相等说明为抖动,重新检测
;判断按下的列
ANDAL,0FH
CMPAL,0FH
JZNEXT
CMPAL,0EH
JZNEXT1
CMPAL,0DH
JZNEXT2
CMPAL,0BH
JZNEXT3
MOVBX,01H
JMPGOT
NEXT:
INCCX;修改变量扫描下一行
CMPCX,05H
JNZJUMP1
MOVCX,01H
JUMP1:
JMPCHECK
NEXT1:
MOVBX,04H
JMPGOT
NEXT2:
MOVBX,03H
JMPGOT
NEXT3:
MOVBX,02H
;计算按下键盘的数值
GOT:
SUBCX,01H
MOVAL,CL
MOVDL,04H
MULDL
ADDBL,AL
SUBBL,01H;此时BX中所存即为对应的偏移量
POPDX;恢复现场
POPCX
POPAX
RET
KEYENDP
;主程序
START:
MOVAX,DATA
MOVDS,AX
;8253初始化
MOVDX,283H
MOVAL,36H
OUTDX,AL
;8255初始化
MOVDX,28BH
MOVAL,81H;C口输入
OUTDX,AL
MOVDX,289H;B口位选数码管
MOVAL,01H
OUTDX,AL
;扫描键盘
LOOP1:
CALLKEY
CMPBX,0;按0播放音乐
JZPLAY0
CMPBX,9;按9退出
JZEXIT
;按1~8发出对应音
MOVCX,BX
MOVBX,OFFSETDIGITAL;数码管显示音符
ADDBX,CX
MOVAL,[BX]
MOVDX,288H;A口输出
OUTDX,AL
;播放该音符
MOVBX,OFFSETFENPIN
MOVAX,CX
ADDAX,AX
ADDBX,AX
;计数,先低八位后高八位
MOVAX,[BX]
MOVDX,280H
OUTDX,AL
MOVAL,AH
OUTDX,AL
CALLDELAY1
CALLDELAY1
MOVDX,28AH;C口输入
INAL,DX
;检测键盘是否弹起
MOVAH,AL
LOOP2:
CALLDELAY
INAL,DX
CMPAL,AH
JZLOOP2
;初始化8253,停止播放音乐
MOVAX,0H
MOVDX,283H
MOVAL,36H
OUTDX,AL
JMPLOOP1
;播放音乐
PLAY0:
MOVCX,01H
PLAY:
PUSHCX
;读取音符,存于CX中
MOVBX,OFFSETMUSIC
ADDBX,CX
MOVAL,[BX]
MOVCL,AL
MOVCH,0H
;数码管显示
MOVBX,OFFSETDIGITAL
ADDBX,CX
MOVAL,[BX]
MOVDX,288H
OUTDX,AL
;播放该乐符
MOVBX,OFFSETFENPIN
MOVAX,CX
ADDAX,AX
ADDBX,AX
;计数,先低八位后高八位
MOVAX,[BX]
MOVDX,280H
OUTDX,AL
MOVAL,AH
OUTDX,AL
POPCX
;延时,持续播放
MOVAX,90H
LOOP3:
CALLDELAY1
DECAX
JNZLOOP3
;乐曲未结束时,CX加1
INCCX
CMPCX,1BH;共27个音符
JNZJUM
JMPLOOP1
JUM:
JMPPLAY
EXIT:
MOVAL,0
MOVDX,288H
OUTDX,AL
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
五、实验结果
1、按键盘的0时,播放预置音乐《Londonbridgeisfallingdown》,同时数码管显示相应的音符;
2、按键盘的9时,熄灭数码管,回到dos;
3、按键盘的1~8时,分别发出do,re,mi,fa,so,la,si,高音do,数码管显示按下的音符;
六、实验总结
1、在子程序KEY中,“ANDAL,0FH”这一语句十分重要。
因为AX的高四位并不是全0,需要用这一句来将AH清零,这样当按下对应按键时,才能准确把列位置传送给8255。
例如,如果将这一句话注释掉,运行结果将是一直循环播放存储的乐曲,按下键盘任何键都没有反应。
这就是因为程序一直在播放乐曲的子程序中循环而导致的;
2、在子程序KEY中,判断键盘列位置的跳跃使用十分频繁,应小心谨慎方不致出错;
3、在调整延时程序时,应保证音乐播放时长适中,符合人按键时长习惯。
七、实验收获与心得体会
本次实验最大的收获是与同学讨论,明白了语句“ANDAL,0FH”的功能。
另外,如何判断持续按键?
如何改变I/O的输出?
这里的防抖与数字电路实验中的防抖代码有什么相似和不同?
在老师的问题中,我得以进一步思考。
八、思考题
写出8253计数初值,输入频率和输出频率的关系:
答:
输出频率=输入频率(1MHZ)/8253计数初值