您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 北邮―微机原理与接口技术(2)
微机原理与接口技术硬件实验报告2/22目录2.实验二8255A并行接口应用..............................................................................32.1.实验目的......................................................................................................32.2.实验内容......................................................................................................32.2.1.静态显示学号....................................................................................32.2.2.动态显示HELLO.............................................................................92.2.3.回显小键盘输入..............................................................................152.3.心得体会....................................................................................................21参考资料......................................................................................................................22声明与致谢..................................................................................................................223/222.实验二8255A并行接口应用2.1.实验目的2.1.1.掌握8255A的功能及方式0、1的实现;2.1.2.熟悉8255A与CPU的接口,以及传输数据的工作原理及编程方法;2.1.3.了解七段数码管显示数字的原理;2.1.4.掌握同时显示多位数字的技术。2.2.实验内容2.2.1.静态显示学号在数码管电路上静态地显示6位学号,当主机键盘按下任意键时,停止显示,返回DOS。首先,我通过debug命令,探索各个段对应的位。结果如下图:08H04H80H01H20H40H02H10H图1七段数码管利用这张图,我们可以制作出一些常见符号与段选信号的对应表。其中,0~9是为了第三个小步骤而列举的。表1本实验中使用的一些符号对应的数码管表示符号二进制代码十六进制代码0或O11101101ED10010000121211110100F4311110001F1400111001394/22511011001D9611011101DD70110000161811111101FD911111001F9A011111017Db100111019DC11001100CCd10110101B5E11011100DCF010111005CH001111013DL100011008C多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环依次点亮多个数码管,利用人眼的视觉暂留现象,只要扫描的频率足够大,将看不到闪烁现象。实验证明,在扫描显示过程中,每一位显示延迟1ms是最佳选择。在代码中,Show这个过程是来显示数码管的。主程序流程图:5/22StartEndInitializeShowDigitsReturntoDOS?DelayAccordingtoSpeedNY图2主程序流程图源代码:CODE(070141.asm);FILENAME:070141.asm;AUTHOR:XIAO,Zhiqing(No.13,Cl.07105);DATE:20091216;DESCRIPTION:display070141onseventubesarray;macro:myOut(WARNING:itmaychangethevalueofAL);it'sstronglyrecommendedthatdatabeALmyOutMACROportAddr,dataPUSHDXMOVDX,portAddrMOVAL,dataOUTDX,ALPOPDX6/22ENDM;macro:myDigitOut(WARNING:itmaychangethevalueofAL);it'sstronglyrecommendedthatdatabeALmyDigitOutMACROportAddr,dataPUSHDXPUSHBXMOVBX,OFFSETSegLutMOVAL,dataXLATSegLutMOVDX,portAddrOUTDX,ALPOPBXPOPDXENDM;macro:myIn(WARNING:itmaychangethevalueofAL);it'sstronglyrecommendedthatdatabeALmyInMACROportAddr,dataPUSHDXMOVDX,portAddrINAL,DXMOVdata,ALPOPDXENDMDataSEGMENT;SegmentLookupTableSegLutDB0EDH,21H,0F5H,0F1H,39H;01234DB0D9H,0DDH,61H,0FDH,0F9H;56789DB7DH,9DH,0CDH,0D5H,0DCH;ABCDEFDB3DH,8CH;HL;ContentindexarraytoprintContentDB00H,07H,00H,01H,04H,01H;8255PortAEQU0E800HPortBEQU0E801HPortCEQU0E802H7/22PortControlEQU0E803HDataENDSStackSEGMENTSTACK'STACK'DB100HDUP(?)StackENDSCodeSEGMENTASSUMECS:Code,DS:Data,SS:StackMainPROCPUSHDSXORAX,AXPUSHAXMOVAX,DataMOVDS,AXmyOutPortControl,80H;10000000Bmeans:;A--mode0,output;B--mode0,output;CHigh--output;CLow--outputview:CALLShowJMPviewRET;unreachableinstructionMainENDP;procShow;inputargumentlists:POINTShowPROCPUSHBXPUSHCXPUSHSIMOVBX,OFFSETContentMOVCL,01H;initialize;makeCL=00000001B,whichmeansenabletheleftmostdigitMOVSI,08/22nextDigit:myOutPortB,CL;selecttubesPUSHCXMOVAL,BYTEPTR[BX+SI];myDigitOutPortA,AL;selectsegmentsPOPCXROLCL,1;displaytheleftdigitnexttocurrentoneINCSI;nextletterCALLDelayCALLCheckAndQuitCMPSI,6JNZnextDigitPOPSIPOPCXPOPBXRETShowENDPDelayPROCPUSHCXMOVCX,0F000HloopLabel:NOPLOOPloopLabelPOPCXRETDelayENDPcheckAndQuitPROCPUSHAXMOVAH,0BH;checkwhetheruserinputsomethingfromkeyboardINT21HORAL,AL;ifhedoes,thenreturntoDosJZexitCheckAndQuitmyOutPortA,0;selecttubesmyOutPortB,0;selecttubesMOVAX,4C00H9/22INT21HexitCheckAndQuit:POPAXRETcheckAndQuitENDPCodeENDSENDMain经编译、连接、运行,显示正常,且能够成功返回DOS。图3静态显示学号2.2.2.动态显示HELLO要求在数码管电路1-6位数码管上按下图所示的规律,动态显示字符串HELLO,当主机键盘按下任意键时结束。利用实验一读入端口的功能,控制动态显示的速度。第一屏H第二屏HE第三屏HEL第四屏HELL第五屏HELLO第六屏HELLO图4HELLO显示次序按照我的设计,该程序要像上一个程序(070141.asm)一样,通过更新显示的下标数组Content来改变数码管显示。但是,实验指导要求使用以下方法:REQUIREMENT(实验二8255A并行接口应用.pdf)在数据段,按下列规律设置12个字型码:MESGDB0,0,0,0,0,0,3DH,0DCH,8CH,8CH,0EDH,0POINTDWMESG……POINT单元存放MESG单元的有效地址,程序取出POINT单10/22元的内容→BX,然后用BX间址取数送数码管电路,扫描显示6个字符。每过0.5s将POINT单元的内容加1,再将POINT单元的内容→BX,……。POINT单元内容加1,使字符串显示的首地址向高地址移动一个单元,从而使6位字符串向“左”移动一位,实现动态显示。为了满足实验指导书的要求,我改动了程序的结构,不再使用查表的方法。StartEndInitializeShowDigitsReturntoDOS?DelayAccordingtoSpeedNYUpdateViewIndexAndContentifNecessary图5动态显示HELLO流程图在本程序中,拨码开关S0控制是否移动。拨码开关往上拨,移动停止在第五屏;否则移动。拨码开关S1控制移动速度。拨码开关往上拨,移动变慢;拨码开关往下拨,移动变快。源代码如下:11/22CODE(hello.asm);FILENAME:Hello.asm;AUTHOR:XIAO,Zhiqing(No.13,Cl.07105);DATE:20091216;DESCRIPTION:displayHelloonseventubesarray;USAGE:;S0:UPstill,DOWNmove;S1:UPslow,DOWNfast;macro:myOut(WARNING:itmaychangethevalueofAL)myOutMACROportAddr,dataPUSHDXMOVDX,portAddrMOVAL,dataOUTDX,ALPOPDXENDM;macro:myIn(WARNING:itmaychangethevalueofAL)myInMACROportAddr,dataPUSHDXMOVDX,portAddrINAL,DXMOVdata,ALPOPDXENDMDataSEGMENTMESGDB0,0,0,0,0,0,3DH,0DCH,8CH,8CH,0EDH,0;HELLOPOINTDWMESG;XUE9MODEPortSwEQU0E8E0H;JIAO2MODE;PortSwEQU0EEE0HSwStateDB0;switchers:01H-'1'still,'0'move;02H-'1'slow,'0'fast;825512/22PortAE
本文标题:北邮―微机原理与接口技术(2)
链接地址:https://www.777doc.com/doc-3385849 .html