北邮微原硬件实验报告.docx
《北邮微原硬件实验报告.docx》由会员分享,可在线阅读,更多相关《北邮微原硬件实验报告.docx(24页珍藏版)》请在冰点文库上搜索。
![北邮微原硬件实验报告.docx](https://file1.bingdoc.com/fileroot1/2023-5/6/ff28f9ad-5d87-44b0-8834-ed397bd79780/ff28f9ad-5d87-44b0-8834-ed397bd797801.gif)
北邮微原硬件实验报告
微原硬件实验报告
学院:
班级:
学号:
班内序号:
姓名:
实验一I/O地址译码3
一、实验目的3
二、实验原理及内容3
三、硬件接线图4
四、软件程序流程图4
五、源程序代码5
六、实验结果与总结6
实验二简单并行接口7
一、实验目的7
二、实验原理及内容(273、244选做一个)7
三、硬件连线图8
四、软件程序流程图8
五、源程序代码9
六、实验结果与总结10
七、实验收获与心得体会10
实验三七段数码管10
一、实验目的10
二、实验原理及内容10
三、硬件接线图11
四、软件程序流程图11
五、源程序代码12
六、实验结果与总结14
七、实验收获与心得体会14
实验四可编程定时器/计数器(8253/8254)14
一、实验目的14
二、实验原理及内容14
三、硬件接线图14
四、软件程序流程图15
五、源程序代码16
六、实验结果与总结18
七、实验收获与心得体会18
八、思考题18
实验五串行通讯接口8251实验19
一、实验目的19
二、实验原理及内容19
三、硬件接线图19
四、软件程序流程图20
五、源程序代码21
六、实验结果与总结23
七、实验收获与心得体会23
八、思考题23
实验一I/O地址译码
一、实验目的
掌握I/O地址译码的基本原理
二、实验原理及内容
实验电路如图所示,其中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闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。
三、硬件接线图
四、软件程序流程图
五、源程序代码
DATA1EQU2A0H;定义数据变量代表地址2A0H
DATA2EQU2A8H;定义数据变量代表地址2A8H
CODESEGMENT
ASSUMECS:
CODE
BEGIN:
MOVDX,DATA1;选择时钟Y4端口
OUTDX,AL
CALLDELAY;调用延时子程序
MOVDX,DATA2;选择数据口Y5
OUTDX,AL
CALLDELAY
MOVAH,1;检测是否有键盘输入
INT16H
JEBEGIN;如果没有输入,则循环
MOVAX,4C00H;返回DOS
INT21H
DELAYPROCNEAR;延时子程序
PUSHCX
PUSHBX
MOVBX,300
LP1:
MOVCX,0FFFFH
LP2:
LOOPLP2
DECBX
JNZLP1
POPBX
POPCX;保护BX,CX
RET
DELAYENDP
CODEENDS
ENDBEGIN
六、实验结果与总结
(1)实验结果:
小灯泡能按一定的时间间隔亮灭。
(2)总结:
本次实验主要考察我们用IO端口输出来控制其他器件以及对于delay函数的应用。
七、实验收获与心得体会
本次实验是第一次微原硬件实验。
由于课堂上学习的都是理论知识,实验刚开始还是有点不知所措的。
但是后来,通过看书上延时子函数以及DOS功能调用几节知识,然后编写代码,最终灯可以一闪一闪的。
通过计算频率,可实验灯以0.5秒的频率亮灭交替。
实验二简单并行接口
一、实验目的
掌握简单并行接口的工作原理及使用方法。
二、实验原理及内容(273、244选做一个)
1、按下面图1简单并行输出接口电路图连接线路(74LS273插通用插座,74LS32用实验台上的“或门”)。
74LS273为八D触发器,8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电路L0~L7。
2、编程从键盘输入一个字符或数字,将其ASCⅡ码通过这个输出接口输出,根据8个发光二极管发光情况验证正确性。
3、按下面图2简单并行输入接口电路图连接电路(74LS244插通用插座,74LS32用实验台上的“或门”)。
74LS244为八缓冲器,8个数据输入端分别接逻辑电平开关输出K0~K7,8个数据输出端分别接数据总线D0~D7。
4、用逻辑电平开关预置某个字母的ASCⅡ码,编程输入这个ASCⅡ码,并将其对应字母在屏幕上显示出来。
三、硬件连线图
图1输出电路图图2输入电路图
四、软件程序流程图
五、源程序代码
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAH,1
INT21H
CMPAL,27;判断是否为ESC
JEEXIT;是就返回DOS
MOVDX,2A8H;不是就从端口输出其ASC码
OUTDX,AL
JMPSTART
EXIT:
MOVAX,4CH
INT21H
CODEENDS
ENDSTART
六、实验结果与总结
实验结果:
输入一个字符,能够利用8个灯泡显示该字符的ASC码,例如数字1的ASC码是31H,其二进制码为00110001B,则8个灯泡依次显示为灭灭亮亮灭灭灭亮。
总结:
代码编写简单,主要是电路连接复杂本次实验了解了并行接口的工作原理及应用,并且加强巩固了DOS功能号的调用和十六进制与二进制数之间的转换,掌握了I/O接口的输入输出的应用。
七、实验收获与心得体会
这次实验连线较多,刚开始一不小心将芯片插口处的几个接口接错了,还好最后细心检查出来了。
看到可以通过键盘控制流水灯,当时觉得一切都很神奇。
很喜欢微机原理实验,自己编代码也很开心。
实验三七段数码管
一、实验目的
掌握数码管显示数字的原理。
二、实验原理及内容
静态显示:
按图连接好电路,将8255的A口PA0~PA7分别与七段数码管的段码驱动输入端a~dp相连,位码驱动输入端S0、S1、S2、S3接PC0、PC1、PC2、PC3,编程在数码管显示自己的学号的后四位。
(或编程在数码管上循环显示“00-99”,位码驱动输入端S0、S1接PC0、PC1;S2、S3接地。
)
三、硬件接线图
四、软件程序流程图
五、源程序代码
DATASEGMENT
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVDX,28BH;寄存器端口地址
MOVAL,80H;控制字10000000,设定工作方式0
OUTDX,AL
LOP1:
MOVDX,288H;A口地址,段选写0
MOVAL,3fH
OUTDX,AL
MOVDX,28AH;位选第4个LED,C口地址
MOVAL,08H
OUTDX,AL
MOVDX,28AH;熄灭数码管
MOVAL,0
OUTDX,AL
MOVDX,288H;段选写1
MOVAL,06H
OUTDX,AL
MOVDX,28AH;位选第3个LED
MOVAL,04H
OUTDX,AL
MOVDX,28AH;熄灭数码管
MOVAL,0
OUTDX,AL
MOVDX,288H;段选写7
MOVAL,07H
OUTDX,AL
MOVDX,28AH;位选第2个LED
MOVAL,02H
OUTDX,AL
MOVDX,28AH;熄灭数码管
MOVAL,0
OUTDX,AL
MOVDX,288H;段选写9
MOVAL,6fH
OUTDX,AL
MOVDX,28AH;位选第1个LED
MOVAL,01H
OUTDX,AL
MOVDX,28AH;熄灭数码管
MOVAL,0
OUTDX,AL
MOVAH,01H
INT16H
JNZEXIT;有键输入则跳出
JMPLOP1
EXIT:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
六、实验结果与总结
(1)实验结果:
能够在4位数码管上静态显示我的4位学号:
0179
(2)总结:
本次试验,我学习了8255芯片进行并行接口的应用,并在之前的预习明白了数码管的位选和段选规律。
并且由于一次只能显示一个数码管,所以只能靠动态扫描的办法,通过位寄存器选择一个数码管,显示指定数字,再选择另一个数码管并显示数字,这样由于数字停留时间非常短,有视觉停留效果,所以看起来是4位数字同时显示的。
七、实验收获与心得体会
在书上学习8255芯片,学习它的各个引脚的功能。
在这次实验中,对控制字还有8255的各种工作模式都有所了解了。
当然刚开始数码管就是显示不了,一直显示的都是8888,后来,换了台机器,发现可以用了。
实验中总是会有一些突发的事情出现,耐心和自信是很必须的。
实验四可编程定时器/计数器(8253/8254)
一、实验目的
学习掌握8253用作定时器的编程原理。
二、实验原理及内容
1.完成一个音乐发生器,通过喇叭或蜂鸣器放出音乐,并在数码管上显示乐谱。
音符频率对照
2.扩展部分:
利用小键盘实现弹琴功能,并显示弹奏的乐谱。
注意:
8253输入频率应小于2MHz。
三、硬件接线图
四、软件程序流程图
五、源程序代码
;系统输入频率为1赫兹,由音符的频率可以算出计数器的计数初值分别设置为3906,3472,3125,2932,2604,2344,2083,1953(1*10^6/f)
DATASEGMENT
MUSICDW3906,3906,2604,2604,2344,2344,2604,2604,2932,2932,3125,
3125,3472,3472,3906,3906,2604,2604,2932,2932,3125,3125,
3472,3472,2604,2604,2932,2932,3125,3125,3472,3472;存入乐谱值代表的频率
SHOWDB06H,06H,6DH,6DH,7DH,7DH,6DH,6DH,66H,66H,4FH,4FH,5BH,
5BH,06H,06H,6DH,6DH,66H,66H,4FH,4FH,5BH,5BH,6DH,6DH,
66H,66H,4FH,4FH,5BH,5BH;存入乐谱值
COUNTEQU$-MUSIC
DATAENDS
STACKSEGMENTSTACK‘STACK’
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVCX,COUNT
LEABX,MUSIC
LEASI,SHOW
MOVDX,28BH;数码管初始化,8255
MOVAL,10000000B
OUTDX,AL
AGAIN:
MOVDX,283H
MOVAL,00111110B;计数器0,16位,方式3,二进制
OUTDX,AL;写控制字
MOVDX,280H;写计数器初值
MOVAX,[BX]
OUTDX,AL
MOVAL,AH
OUTDX,AL
CALLDELAY
CALLSHUAMAGUAN
INCSI
ADDBX,2
MOVAH,01H
INT16H
JNZEXIT;有键输入则跳出
JMPLOOP
EXIT:
MOVAH,4CH
INT21H
DELAYPROCNEAR;延时子程序
PUSHCX
PUSHBX
MOVBX,230
DELAY:
MOVCX,0FFFFH
WAIT1:
LOOPWAIT1
DECBX
JNZDELAY1
POPBX
POPCX
RET
DELAYENDP
SHUMAGUANPROC;数码管显示子程序
MOVDX,288H;数码管数据口地址
MOVAL,[SI]
OUTDX,AL
RET
SHUMAGUANENDP
CODEENDS
ENDSTART
六、实验结果与总结
(1)实验结果:
能流畅播放儿歌《小星星》
(2)总结:
通过本实验,我学会了利用8253作为计时器来产生设定频率的方波信号,实现了音乐器的编写,对于计时器的应用有了更深的理解。
遗憾的是扩展部分:
利用小键盘实现弹琴功能,并显示弹奏的乐谱这个功能没有实现,所以下一步的目标就是实现这个功能。
七、实验收获与心得体会
这次实验使用的是8253,用8253来做计时器产生设定频率的方波信号,实现对音乐器的编写。
我们可以通过改变延时子程序的延长时间可以听到不同频率的音乐声。
当然在对CX赋初值的时候,刚开始赋的大了,结果最后有一段杂音,都是小问题,后来都解决了。
八、思考题
写出8253计数初值、输入频率和输出频率的关系。
答:
8253计数初值=输入频率/输出频率
实验五串行通讯接口8251实验
一、实验目的
1、了解串行通讯的基本原理。
2、掌握串行接口芯片8251的工作原理和编程方法。
二、实验原理及内容
1、按图连接好电路,(8251插通用插座)其中8254计数器用于产生8251的发送和接收时钟,TXD和RXD连在一起。
2、编程:
从键盘输入一个字符,将其ASCII码加1后发送出去,再接收回来在屏幕上显示,(或将内存制定区域内存放的一批数据通过8251A的TXD发送出去,然后从RXD接收回来,并在屏幕上或数码管上显示出来。
)实现自发自收。
三、硬件接线图
4、软件程序流程图
四、软件程序流程图
五、源程序代码
DATASEGMENT
DATASEGMENT
STRINGDB'Pleaseputinaword.',0DH,0AH,'$';提示字符
DATAENDS
STACKSEGMENTSTACK'SATCK'
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
;8254初始化
MOVDX,283H
MOVAL,16H
OUTDX,AL
MOVDX,280H
MOVAL,34H
OUTDX,AL
;8251初始化
MOVDX,2B9H;控制端口
MOVAL,40H;内部复位命令
OUTDX,AL
NOP
MOVAL,5EH;方式控制字
OUTDX,AL
MOVAL,37H;命令控制字
OUTDX,AL
;显示提示字符
MOVAH,09H
MOVDX,OFFSETSTRING
INT21H
;发送数据
GOON:
MOVDX,2B9H;读状态字
INAL,DX
TESTAL,01H;检测是否可以发送字符
JZGOON
MOVAH,01H;输入字符
INT21H
;检测是否为ESC键
CMPAL,1BH
JZEXIT
ADDAL,1H
;发送数据
MOVDX,2B8H
OUTDX,AL
;接受数据
RECIEVE:
MOVDX,2B9H;读入状态字
INAL,DX
TESTAL,02H;检测是否可以接受
JZRECIEVE
MOVDX,2B8H;接受数据
INAL,DX
MOVDL,AL
MOVAH,02H;显示接受的数据
INT21H
JMPGOON
;退出,回到DOS
EXIT:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
六、实验结果与总结
实验结果:
从键盘输入字符,在屏幕上能显示,且紧跟着能显示输入字符ASC码加1后的输出字符,按ESC键可退出。
总结:
本次实验,我利用8251实现了串行通信,完成自发自收。
通过对8251状态字的改变,可以达到发送数据和接收数据的效果。
通过DOS功能调用,实现键盘输入,控制8251发送数据,然后再自己接收,将其显示在我们输入数据的后面。
七、实验收获与心得体会
本次实验完成了自发自收。
用8253作为计时器,用8251实现数据的自发自收。
在上次实验中,对8253已经有很深的了解了,所以这次实验代码写起来比较简单,虽然没有做选作,但是已经可以达到对只是的了解了。
当然如果事先不接TX,键盘输入数据,我们会发现,输入一个数据之后就不会显示其他输入的数据了,但是当我们再接上TX时,会发现在屏幕上显示好多刚才发送的数据。
八、思考题
在实验中,你如何确定RXC、TXC的值,写出计算公式。
答:
RXC=TXC=8253输入时钟频率=8251的波特率×8251的波特因子