您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 北邮微机原理硬件实验报告完整版
微机原理硬件实验I/O地址译码&简单并行接口班级:姓名:学号:一实验目的实验一:掌握I/O地址译码电路的工作原理。实验二:掌握简单并行接口的工作原理及使用方法。二、实验原理和内容实验一:1、实验电路如图4-1-1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,……当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。例如:执行下面两条指令MOVDX,2A0HOUTDX,AL(或INAL,DX)Y4输出一个负脉冲,执行下面两条指令MOVDX,2A8HOUTDX,AL(或INAL,DX)Y5输出一个负脉冲。图4-1-1利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。2、接线:Y4/IO地址接CLK/D触发器Y5/IO地址接CD/D触发器D/D触发器接SD/D角发器接+5VQ/D触发器接L7(LED灯)或逻辑笔实验二:1、按下面图4-2-1简单并行输出接口电路图连接线路(74LS273插通用插座,74LS32用实验台上的“或门”)。74LS273为八D触发器,8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电路L0~L7。2、编程从键盘输入一个字符或数字,将其ASCⅡ码通过这个输出接口输出,根据8个发光二极管发光情况验证正确性。图4-2-13、接线:按图4-2-1接线(图中虚线为实验所需接线,74LS32为实验台逻辑或门)三硬件接线图及软件程序流程图1硬件接线图实验一:实验二:2软件程序流程图实验一:实验二:四源程序开始Y4输出一个负脉冲灯亮,调用延时子程序灯灭,调用延时子程序Y5输出一个负脉冲结束实验一:DATASEGMENTDATAENDSSTACKSEGMENTSTACK'STACK'DB100HDUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK;延时子程序DELAY1PROCNEARMOVBX,500HPUSHCXLOOP2:MOVCX,0FFFHWAIT1:LOOPWAIT1DECBXJNZLOOP2POPCXRETDELAY1ENDP;L7闪烁START:MOVCX,0FFFFHLOOP1:MOVDX,2A0H;灯亮OUTDX,ALCALLDELAY1MOVDX,2A8H;灯灭OUTDX,ALCALLDELAY1LOOPLOOP1;循环闪烁CODEENDSENDSTART实验二:DATASEGMENTDATAENDSSTACKSEGMENTSTACK'STACK'DB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAH,1;键盘输入INT21HCMPAL,27;判断是否为ESC键JZEXITMOVDX,2A8HOUTDX,AL;输出JMPSTART;返回DOSEXIT:MOVDX,2A8HMOVAL,0OUTDX,AL;所有灯灭MOVAX,4C00HINT21HCODEENDSENDSTART五实验结果实验一:L7闪烁实验二:从键盘输入字符或数字,若不是Esc键,则二极管显示其ASCII码情况,若按下ESC,则返回dos,且各LED灯灭。六:实验总结1主要问题是对题目中所给的硬件接线图不是很理解,如第二个实验中或门的作用。向老师请教后明白了硬件接线图的原理,做实验就容易许多。2在第一个实验中起先对AL进行了赋值,后来发现是没必要的,不对AL赋值对产生负脉冲无影响,后来删掉了相应的赋值语句,精简了代码。七实验收获与心得体会这是第一次接触微原硬件实验,实验板比小学期单片机实验更丰富,但也会导致刚开始的时候不知道该把线接在哪。在明白了硬件接法,将自己的代码反映在硬件上时,觉得非常有趣。之前一直以为微原实验不如C++等高级语言编程有趣,现在看来丝毫不逊色。且通过自己动手实验,使我对理论课所学知识有了更好的理解。期待通过这几次微原实验能让我收获更多知识。微机原理硬件实验可编程并行接口8255&七段数码管&键盘显示控制实验班级:姓名:学号:一实验目的实验三:通过实验,掌握8255工作于方式0以及设置A口为输出口,C口为输入口的方法。实验四:掌握数码管显示数字的原理。实验五:掌握8255控制键盘及显示电路的基本功能及编程方法。掌握一般键盘和显示电路的工作原理。二实验原理和内容实验三:1、实验电路见硬件连接图,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。2、编程从8255C口输入数据,再从A口输出。实验四:静态显示:按下图连接好电路,将8255的A口PA0~PA7分别与七段数码管的段码驱动输入端a~dp相连,位码驱动输入端S0、S1、S2、S3接PC0、PC1、PC2、PC3,编程在数码管显示自己的学号的后四位。实验五:编程:使得在小键盘上每按一个健,4位数码管上显示出相应字符。三硬件接线图及软件程序流程图1硬件接线图实验三:实验四:2软件程序流程图实验三:(引用讲义上已给出的图)实验四:(引用讲义上已给出的图)实验五:开始扫描键盘是否有键按下是否四源程序实验三DATASEGMENTDATAENDSSTACKSEGMENTSTACK'STACK'DB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVDX,28BH;8255初始化,10001001,C口输入,A口输出MOVAL,89HOUTDX,ALLOOP1:MOVDX,28AH;C口输入INAL,DXMOVDX,288H;A口输出OUTDX,ALMOVAH,01HINT16HJNZEXIT;ZF=0说明有按键输入,故退出JMPLOOP1EXIT:MOVAX,4C00HINT21HCODEENDSENDSTART实验四DATASEGMENTDATAENDSSTACKSEGMENTSTACK'STACK'DB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVDX,28BH;8255控制寄存器端口地址28BHMOVAL,80H;工作方式为0OUTDX,AL;初始化8255DIGITAL:MOVDX,28AH;熄灭数码管MOVAL,00HOUTDX,ALMOVDX,288H;A口显示5MOVAL,6DHOUTDX,ALMOVDX,28AH;C口00000001(位码)MOVAL,01HOUTDX,ALMOVDX,28AH;熄灭数码管MOVAL,00HOUTDX,ALMOVDX,288H;A口显示2MOVAL,5BHOUTDX,ALMOVDX,28AH;C口00000010(位码)MOVAL,02HOUTDX,ALMOVDX,28AH;熄灭数码管MOVAL,00HOUTDX,ALMOVDX,288H;A口显示6MOVAL,7DHOUTDX,ALMOVDX,28AHMOVAL,04H;C口00000100(位码)OUTDX,ALMOVDX,28AH;熄灭数码管MOVAL,00HOUTDX,ALMOVDX,288H;A口显示0MOVAL,3FHOUTDX,ALMOVDX,28AHMOVAL,08H;C口00001000(位码)OUTDX,ALMOVDX,28AH;熄灭数码管MOVAL,00HOUTDX,ALMOVAH,01HINT16HJNZEXIT;ZF=0说明有按键输入,故退出JMPDIGITALEXIT:MOVAX,4C00HINT21HCODEENDSENDSTART实验五DATASEGMENTTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H;数码管显示0123456789ABCDEFNUMDB70H,0B0H,0D0H,0E0H;用于扫描键盘70H=01110000,0B0H=10110000,0D0H=11010000,0E0H=11100000DATAENDSSTACKSEGMENTSTACK'STACK'DB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK;延时子程序DELAYPROCNEARPUSHCXMOVCX,100HWAIT1:LOOPWAIT1POPCXRETDELAYENDP;获取键盘的输入数字的子程序,通过BX寄存器传递KEYPROCNEARPUSHAX;保护现场PUSHCXPUSHDXMOVCX,00H;从第一行开始扫描CHECK:MOVDX,28AH;C口地址给DXMOVBX,OFFSETNUMADDBX,CXMOVAL,[BX]OUTDX,AL;防抖INAL,DX;判断是否有键盘按下MOVAH,ALCALLDELAYINAL,DXCMPAL,AHJNZCHECK;不相等说明为抖动,重新检测;判断按下的列ANDAL,0FHCMPAL,0FHJZNEXTCMPAL,0EHJZNEXT1CMPAL,0DHJZNEXT2CMPAL,0BHJZNEXT3MOVBX,00HJMPGOTNEXT:INCCX;修改变量扫描下一行CMPCX,04HJNZJUMP1MOVCX,00HJUMP1:JMPCHECKNEXT1:MOVBX,03HJMPGOTNEXT2:MOVBX,02HJMPGOTNEXT3:MOVBX,01H;计算按下键盘的数值GOT:MOVAL,CLMOVDL,04HMULDLADDBL,AL;此时BX中所存即为对应的偏移量POPDX;恢复现场POPCXPOPAXRETKEYENDP;主程序START:MOVAX,DATAMOVDS,AXMOVDX,28BH;8255初始化MOVAL,81H;C口输入OUTDX,ALMOVDX,289H;B口位选数码管MOVAL,01HOUTDX,AL;扫描键盘LOOP1:CALLKEY;数码管显示字符MOVAX,BXMOVBX,OFFSETTABLEADDBX,AX;此时BX即为对应的地址MOVAL,[BX]CMPBX,OFFSETTABLE;按下的为0则退出JZEXITMOVDX,288H;A口输出OUTDX,ALMOVDX,28AH;C口输入INAL,DX;检测键盘是否弹起MOVAH,ALLOOP2:CALLDELAYINAL,DXCMPAL,AHJZLOOP2JMPLOOP1;返回DOSEXIT:MOVAL,00HMOVDX,288H;A口输出OUTDX,ALMOVAX,4C00HINT21HCODEENDSENDSTART五实验结果实验三:拨动K0~K7,对应的L0~L7亮,有按键输入则退出。实验四:数码管显示学号的后四位:0625。有按键输入则退出。实验五:按小键盘1~F则数码管显示对应的字符,按下0则结束。六:实验总结本次实验课做了三个实验,每个实验也都变换了端口重新操作以加深理解,觉得比第一次做的更熟练。本次实验遇到问题的主要是实验五,键盘扫描及防抖程序较为复杂,需要考虑很多。在添加按小键盘0则退出时起初代码位置不对导致有逻辑错误,修改了两次才正确。七实验收获与心得体会这次实验觉得和小学期的单片机实验有很多的想通之处。小学期使用的键盘扫描方法就是行扫描法,所以这次对扫描方法的理解更轻松一些。通过这次实验,我对8255的应用有了更深的了解。这次实验我更加注意了代码优化,每个实验都添加了退出的代码,觉得更可靠。实验三和四相对来说更容易,几乎是静态的,而实验五由于一直随着按键而变化所以需要考虑多种情况和变化,增加了难度,这也提高了我编程时考虑多种情况的意识,相信
本文标题:北邮微机原理硬件实验报告完整版
链接地址:https://www.777doc.com/doc-3733276 .html