收藏 分销(赏)

北邮微机原理与接口技术硬件实验报告.pdf

上传人:曲**** 文档编号:6649661 上传时间:2024-12-19 格式:PDF 页数:47 大小:2.78MB
下载 相关 举报
北邮微机原理与接口技术硬件实验报告.pdf_第1页
第1页 / 共47页
北邮微机原理与接口技术硬件实验报告.pdf_第2页
第2页 / 共47页
北邮微机原理与接口技术硬件实验报告.pdf_第3页
第3页 / 共47页
北邮微机原理与接口技术硬件实验报告.pdf_第4页
第4页 / 共47页
北邮微机原理与接口技术硬件实验报告.pdf_第5页
第5页 / 共47页
点击查看更多>>
资源描述

1、信息与通信工程学院 微机原理硬件实验报告班姓学序日级 名 号 号 期目 录实验一熟悉实验环境及IO的使用.1一、实验目的.1二、实验内容.1三、实验过程.1四、心得体会.5实验二8255A并行接口应用.6一、实验目的.6二、实验内容.6三、实验过程.61、八段数码管位选规律.62、六位数码管静态显示.73、六位数码管动态显示.104、扩展:数码管显示键盘输入学号.14四、心得建议.20实验三8253计数器/定时器的应用.21一、实验目的.21二、实验内容.21三、实验过程.211、音乐发生器.212、键盘弹奏乐曲.27I四、实验总结.331、思考题.332、问题和解决方案.333、心得体会与建

2、议.34实验四 审行口 8251A实验.36一、实验目的.36二、实验内容.36三、实验过程.361、自收自发.362、双机通信.433、思考题.44四、实验总结.44II,”微机原理硬件实验报告实验一熟悉实验环境及IO的使用一、实验目的1.通过实验了解和熟悉实验台的结构,功能及使用方法。2.通过实验掌握直接使用Debug的I、0命令来读写I/O端口。3.学会Debug的使用及编写汇编程序。二、实验内容1.学习使用Debug命令,并用I、0命令直接对端口进行读写操作。2.川汇编语言编写跑马灯程序。实现功能:A.通过读入端口状态,选择工作模式(灯闪烁方式、速度等);B.通过输出端口控制灯的工作状

3、态(低电平灯亮)。三、实验过程1.在Debug下,用I是命令读输入端口的状态,即拨码开关的状态,川0命令 向端口输出数据,通过发光管来查看。测试结果:A.使用命令:I E800读取开关状态,得出的结果是从左低右高,即S。是 低位,S7是高位。B.使用命令:O E800 0测试数码管的低位,改变输入的值可依次测试各 个数码管是否正常。七段数码管左边为高位,右边为低位。2.分析以下程序段的作用MOV AH,OBHINT 21HOR AL,ALJZ 0100INT 20H该段程序实现了检测键盘状态,在键盘有任意键输入时退出程序返回DOS的功能。该实现依赖于0BH号中断调用和巧妙使用程序入口返回地址直

4、接返回。第1页y 土交t.”全微机原理硬件实验报告在DOS的DEBUG模式下,地址不用添加十六进制H标志。地址默认为16进制,多写了反而画蛇添足产生错误。普通数据为了区分需要添加H。3.编写跑马灯程序。程序流程图如下:第2页微机原理硬件实验报告程序源码如下:DATA SEGMENTDB 100 DUP(0)DATA ENDSSTACK SEGMENT STACK 1 STACK1;D;fine STACK SegmentDB 100 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODEA DS:DATA,SS:STACK;Use two loops to del

5、ay;Read in to decide how long to loop,this can control speedPUASE MACROLOCAL LOPP1Z LOPP2,HERPUSH AXPUSH BXPUSH DXHER:READ;here can implement PAUSE functionSHLAH,1SHLAH,1;D6 control pauseJCHERMOVDH,ALANDDH,6FH;Used to control running speedLOPP1:MOVAX,0FFFHLOPP2:DECAXJNZLOPP2DECDXJNZLOPP1;Two loops,s

6、o tim is long enoughPOPDXPOPBXPOPAXENDM第3页3 什名勺老上岂一 微机原理硬件实验报告READ MACRO;Read in control informationMOV DX,0E8E0HIN ALZ DXMOV AH,ALENDM;Main programSTART:MOV AX,DATAMOVDS,AXMOVDX,0E8E0HLOP:READSHLAL,1JNCLOPSHRAH,1JCRTOLJNCLTORRTOL:MOVBL,OFEHLOP1:ROLBL,1PUSH AXMOVAL,BLOUTDX,ALPOPAXPUASEREADSHLAL,1JNC

7、EXITSHRAH,1JCLOP1LTOR:MOVBL,OFEHLOP2:RORBL,1PUSH AXMOVAL,BL;D7 is the switch;DI controls the running direction;Right to 1ft running;One digit on,others if off;BL cyclic shifting,light changes;Pause some time so the eye can see;Judge if the control command changes;If switch is off,exit program;If run

8、ning direction hasnt been changed;Left to Right running;Just like what we do in;Right to Left sgmnt.弟4贝,”微机原理硬件实验报告OUT DX,AL POP AX PUASE READ SHL AL,1 JNC EXIT SHR AH,1 JNC LOP2 JMP RTOL EXIT:MOV AX,4coOH;Back to DOSINT 21HCODE ENDSEND START四、心得体会这是微原硬件实验的第一次,主要是熟悉了将要使用的实验系统,学习了 最基本的硬件测试的方法,对接口的地址、

9、LED灯的控制、拨码开关的高低位 等有了测试和记录,为后续实验作好准备。跑马灯程序是第一次软件对硬件的控制实验,我在控制设计方面考虑了速 度、方向、暂停、按键控制退出等功能,并加以实现,验收通过。跑马灯的程 序控制的关键在于读取拨码开关的状态,然后对相应的控制位进行判断,然后 更加判断结果对速度、方向等进行置位,并在检测到有暂停时反复循环读取状 态进行判断,直到暂停键取消,同时,任何时候判断到关闭程序的按键,则立 即退出程序。整个程序实际上是在一种检测、执行、再检测、再执行的循环中 反复。前面刚刚完成了微原软件实验,微原硬件实验和软件实验有一定的差别,主要体现在硬件需要去读取硬件状态,然后采取

10、相应的控制方案,另外要向接 口输出数据和控制信息,驱动硬件正常工作。第5页,”微机原理硬件实验报告实验二8255A并行接口应用一、实验目的1.掌握8255A的功能及方式0、1的实现。2.熟悉8255A与CPU的接口,以及传输数据的工作原理及编程方法。3.了解七段数码管显示数字的原理。4.掌握同时显示多位数字的技术。二、实验内容1.查找八段数码管的显示规律及数码管的位选规律。2.六位数码管静态显示。在数码管电路上静态地显示6位学号,当主机键盘按 下任意键时,停止显示,返回DOS。3.六位数码管动态显示。要求在数码管电路16位数码管上,动态显示字符 审HELLO,当主机键盘按下任意键时结束。4.扩

11、展部分:完成扫描键盘(PC 口)输入自己的学号,并在数码管上显示。三、实验过程1、八段数码管位选规律在方式0(输入/输出)下,以A 口为输出口,B 口为输出口,A 口接六个 共阴极数码管的八位段码,高电平点亮数码管的某一段,B 口接数码管的位选(即要使哪个数码管亮),高电平选中某一位数码管点亮。测试结果如下图所示。PA3PA2第6页,”微机原理硬件实验报告由此,容易得出数字09以及字母AH的编码,如下表所示。字形01234567编码0EDH21H0F4H0F1H39H0D9H0DDH61H字形89ABCDEF编码0FDH0F9H7DH9DH0CCH0B5H0DCH5CH2、六位数码管静态显示电

12、路6个数码管的同名阳极段已经复接,当段选寄存器寄存了一个字型编 码之后,6个数码管都将显示出相同的数字。如果要使6个数码管“同时”显 示不同的数字,必须采用扫描显示的方法。通过选位寄存器选择某一位数码管,显示其数字(对应段值为1,然后 关闭此数码管,再选择下一位数码管进行显示;如果在一秒钟内,每一位数码 管都能显示30次以上,则人眼看到的是几位数码管同时在显示。实验证明,在 扫描显示过程中,每一位显示延迟1ms是最佳选择。本程序采用了每次扫描一排6个数码管,然后反复循环的方式。每个数码 管间隔一定时间,也即显示延迟。通过在每一排扫描之后检测键盘状态,可以 达到任意键退出的功能。程序框图如下。第

13、7页,”微机原理硬件实验报告程序源代码如下。DATA SEGMENTNUM DB 0F4B,21H,OEDH,0F1H,OFDH,61H;Char code of my IDDATA ENDSSTACK SEGMENT STACK STACKDB 100 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTAT:MOVAL,10000000BMOVDX,0E803H;Set 8255AA s control stateOUTDX,ALMOVAX,DATAMOVDS,AX;Set Data segmentMOVES,AXLOP

14、1:XORsi,SI;Which digit to displayMOVCX,06H;Record every scan,6 digits onceMOVDX,0E800HMOVBL,00000001B;Display one digit one timeLOP2:MOVAL,NUMSI;Move in digits char code弟8贝微机原理硬件实验报告OUT DX,AL MOV AL,BL INC DXOUT DXZALDEC DXROL BL,1 INC SICALL DELAYCALL KEYLOOP LOP2JMP LOP1;Display char;Control which

15、 LED on;Next LED on;Delay some time so we can seekyboard,if prssd then xit;Until 6 digits are all displayedDELAY PROC NEARPUSH BXPUSH CXMOV BXZ 000FHLOP3:MOV CXZ OOHLOOP$DEC BXJNZ LOP3POP CXPOP BXRETDELAY ENDP;Two loop to control delay time;Outer loop is small;Inner loop is OFFFFH timesKEYGOONKEY,PR

16、OC NEARPUSH AXMOV AHZ OBHINT 21HOR AL,ALJZ GOONMOV AH,4cHINT 21H:POP AXRETENDP;Testing key state;Call OBH DOS function;If no key prssd,go on display;Key pressed,exit program弟9贝,”微机原理硬件实验报告CODE ENDSEND STAT代码具体分析如下:程序的实现思路是很明确而简单的,首先对8255A进行初始化,设置控制 字,随即开始扫描数码管,这里使用了一个八位寄存器,赋值为一位为1,其 余全零,依靠移位容易实现不同时刻

17、亮不同的数码管,且每次只亮一个数码管,其余管熄灭。亮灯的管查找显示该位应该显示的数字,每个数码管亮灯之后暂 留一定的时间,依靠DELAY子程序来实现。每次扫描六个管,然后反复,即 可利用视觉暂留效应产生静态显示学号的功能。在显示了每一位数之后,调用KEY子程序检测计算机键盘的状态,如果有 任意键按下,则视为程序退出指令,终止程序并返回DOS,如果没有键按下,则跳回继续循环扫描。3、六位数码管动态显示数码管动态显示“HELLO”字符审,相当于每次显示6位静态字符审,然 后显示一定的时间间隔之后,显示另外6位静态字符审。其核心代码和静态显 示并无差别,可将静态显示学号的代码作为一个子程序封装起来直

18、接使用。需 要增加的只是在一定的时间间隔内去移位读取“HELLO”字符审中需要显示的 部分。实际实现时可以存储为码表的形式,移位往后读取即可。可以在移位读取前通过读取拨码开关的状态,获得控制信息,比如暂停、速度变化等。程序框图如下:第10页,”微机原理硬件实验报告程序源代码如下:DATA SEGMENT;Char code of、HELLOMESG DB 0,0,0,0,0,0,3DH,ODCH,8cH,8cH,OEDH,0DATA ENDSSTACK SEGMENT STACK 1 STACK1DB 100 DUP(0)STACK ENDSCODE SEGMENT第11页VIMWt T.if

19、rti.Mfi,|iWMMMiihr.,.微机原理硬件实验报告ASSUME DS:DATA,CS:CODE,SS:STACKMAIN PROC FARMOVAX,DATAMOVDS,AXMOVES,AXMOVAL,80HMOVDX,0E803H;SET PROT COUTDXZ ALLOP6:MOVBX,OFFSETMESGMOVCX,07H;Control 6 statesLOP5:MOVDX,0E8E0H;Read in to decide speed of displayingINAL,DXINCALANDAL,07HXORAH,AHMOVDX,AX;DX is the outside

20、loop timesLOPZ:CALL DISP;Display one stateDEC DXJNZ LOPZ;Display currentstateuntil DX is zeroINC BX;BX decide whichstateto displayLOOP LOP5;Redecide movingspe dvery stateJMP LOP6;Return to a newstartwhen 6 states doneMAIN ENDPDISP PROCNEARPUSHCXPUSHDXPUSHAXMOVBP,OOAAH;Control speed of displayLOPX:XO

21、RS工,S工MOVCX,06H;Record every scan,6 digits onceMOVDX,0E800HMOV AH,00000001B;Display one digit one timeLOP2:MOVALzMESGBX+SIOUTDX,ALMOVAL,AH;Control which char to display弟12贝微机原理硬件实验报告INC DXOUTDX,AL;Control which LED onDECDXROLAH,1;Next LED onINCSICALL DELAY;Every char needto delayCALL KEY;Testing whe

22、therkey is pressedLOOP(LOP2;Loop until all6 digits ardisplayedDECBPJNZLOPX;Outer loop r control time ofdisplayPOPAXPOPDXPOPCXRETDISP ENDPKEY PROC NEARPUSH AXMOV AH,OBHINT 21HOR AL,ALJZ GOONMOV AH,4cHINT 21HGOON:POP AXRETKEY ENDP;Testing key state;No key pressed;Has key pressed,then back to DOSDELAY

23、PROCPUSH AX PUSH CXMOV AX,000FHLOPD:MOV CX,0H LOOP$DEC AX JNZ LOPD POP CX;Delay time;Outer loop is small;Inner loop弟13贝,”微机原理硬件实验报告POP AXRETDELAY ENDPCODE ENDSEND MAIN代码的具体分析如下:代码直接使用了本实验中六位数码管静态显示部分的代码,封装成为了 DISP子程序,便于调用。DISP子程序即为反复扫描显示静态字形的程序。另 外有DELAY作为延时子程序供调用。这样主程序只要考虑把每个状态定义好,并以一定的时间间隔传递给DISP显

24、示即可。主程序中定义六种显示状态,分别 对应于动态显示的六个画面,主程序中加入了拨码开关读取的代码,这样读入 速度信息,依据速度信息置循环次数,用以控制显示速度。4、扩展:数码管显示键盘输入学号在前面数码管显示程序的基础上,本程序需要着重处理的是按键的检测,只要按键检测无误,将按键值存储下来,调川封装好的显示子程序就实现了按 键显示的功能,按键值同时可以作为控制信息,增加如删除输入的一个数字、清除所有数字、退出程序等控制功能。为了避免按键抖动的影响,程序设计中使用按键释放检测的方法。一次完 整的按键过程是按键、保持、释放的完整流程。按键值的检测采用查表的方式 完成,容易根据偏移量找到按键对应的

25、字符显示码,用以输出字符。程序框图如下:第14页y 土交t.”色微机原理硬件实验报告程序源代码如下:第15页VIMWt T.ifrti.Mfi,|iWMMMiihr.,.微机原理硬件实验报告DATA SEGMENTID DB6 DUP(0)ARRAYDBIIIOOIIIBIIIOIOIIB,1110110IB,1110111OBKEYDBDBDBDB11010111B.11011011B,1101110IB,1101111OBlOllOlllBlOlllOUB,1011110 IB,1011111 OBOlllOlllBOllllOllB,0111110IB,0111111OB0EDH,21H

26、f0F4H,0F1H,39H;05DB0D9H,0DDH,61H,0FDH,0F9H;69DATA ENDSSTACK SEGMENT STACK STACKDB 100 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE A SS:STACKMAIN PROC FARMOV AX,DATAMOVDS,AXMOVES,AXMOVDX,0E823HMOVAL,16HOUTDXZ ALCLEAR:XORDX,DX;Record how many digits has been storedMOVCX,6MOVAL,0XORS工,S工LOPC:MOV

27、IDSI,AL;Clear all ID valueINCSILOOP LOPCDELETE:CMPDX,0;Do nothing if no digitJENEXTDECDX;Digits number dcras oneMOVAL,0MOVS工,DX弟16贝微机原理硬件实验报告MOV IDSI,ALNEXT:CALL DISP;Display the digitsCALL READ;Read key stateCMP AL,OFFH;No Key pressed?JE NEXT;No key pressed;Key pressed!CLD DI+1MOV CX,16 MOV DIZ OFF

28、SET ARRAYREPNZ SCASB;S;arch array to find key codeCMP CX,0 JE NFD;Usually this is not going to;happen,except sth wrongMOV BXZOFFSET ARRAY SUB D工,BX DEC DICMP D工,9;Is the key 09?JBE ISNUM;K;y A and B not definedz;reserve for future us.CMP DI,12JE CLEAR;Key C means clear all input digitsCMP D工,13;Key

29、D means delete one digitJE DELETE CMP DI,14 JE EXIT;Key E means Exit the program.JMP NEXT ISNUM:NOPAGN:CALL READ CMP AL,OFFH JNE AGNMOV AL,KEYDIMOV S工,DXMOV IDSI,AL INC DX CALL DISP;Key pressed!;Has the key been released?;No:wait until it is;released;Yes:begin to judge the key;Store the input number

30、 to memery.弟17贝微机原理硬件实验报告INT 21HCMPDX,7;All display unit has beenoccupiedJECLEARJMPNEXTNFD:NOP;Unknown state,just terminatethe program.EXIT:MOV AX,4C00HMAIN ENDPREAD PROC NEAR;R;ad keyboard state,return key codPUSH DXMOV DXZ 0E803HMOV AL,81HOUT DXZALMOV AL,OOHMOV DXZ 0E802HOUT DX,ALIN AL,DX;Read Row

31、 infoMOV BL,ALMOV DXZ 0E803HMOV AL,88HOUT DXZALMOV AL,OOHMOV DXZ 0E802HOUT DXZALIN AL,DX;Read Colum infoOR AL,BL;Keep info in AL forSCASBPOP DXRETREAD ENDPDISP PROCNEAR;Display 6 digitsPUSHCXPUSHDXPUSHAXMOV BP,000FHLOPP:XOR S工,S工MOV CX,06H弟IX贝微机原理硬件实验报告代码的具体分析如下:MOV DX,0E800HMOV AH,00000001BLOPD:MOV

32、 AL,IDSIOUT DXZALMOV AL,AH;Control which charINC DXOUT DX,AL/Control which LEDDEC DXROL AH,1INC SICALL DELAY;Every char nd toLOOP LOPDDEC BPJNZ LOPPPOP AXPOP DXPOP CXRETDISP ENDPto displayondelayDELAY PROCPUSH AX PUSH CXMOV AX,0003HLOP1:MOV CX,OOH LOOP$DEC AX JNZ LOP1 POP CX POP AX RETDELAY ENDP;Del

33、ay;Outer;Innertimeloop loopCODE ENDSEND MAIN第19页,”微机原理硬件实验报告核心代码分为四部分:按键检测、键盘码查找、显示数字模块、控制模块。其中显示和控制在前述两个实验内容中已经解决,封装模块调用即可,此处不 再赘述。按键检测和键盘码查找是本实验的中心问题。按键检测为了避免抖动,采用的是释放检测的方法。首先调用READ子程 序(行反转扫描法)反复检测是否有键按下,一旦有键按下,则读取出键盘码,在数据段定义的键盘码中查找,根据查找的结果是数字还是字母来确定出是存 储数字还是执行控制(如删除和清除),接着继续反复检测键是否释放,即是 否恢复到了无按键状

34、态,如果按键已经释放,则执行其他操作,如显示等,否 则一直检测。反复以上过程可完成实验功能。键盘码的查找使用“数组”方式,以偏移量进行索引,可一次性根据下标得到数码管显示码。查表的方法在很多 程序中都有使用,这也类似于构建了数组这一高级数据结构。四、心得建议实验进入第二次,开始真正地通过接口芯片8255A控制外设的动作,实现 了更加复杂和精确的控制。数码管的动态扫描需要多重循环,程序设计的时候 需要有清晰的逻辑转移。我在实验中遇到的主要问题是时间的控制,具体在单个数码管显示时间、状态间转换的等待时间控制方面。由于循环较多,容易造成的问题是,外层循 环次数设置过大,导致整个程序的循环过大,单次大

35、循环时间太长,显示出现 问题。经过多次的调整才对时间的控制和配合找到了感觉。按键检测部分颇费了些心思去思考。单纯地检测是否有键按下是不完备的,一次完整的按键过程应该包含键按下、保持、键释放,否则不完整的过程容易 造成按键混乱。实验中的实验板是老师连接好了电路板和接口芯片,这样可以简化实验过 程,也使得大家的硬件平台一致。但这样存在的问题是,我们对芯片的地址和 连线失去了动手实践的机会,而这个恰恰是北邮学生的一大弱点,硬件接触过 少,不熟悉,而软件相对掌握熟练。建议给学生更多的空间去自己布线,更加 熟悉硬件和接口。第20页y 土交t.”全微机原理硬件实验报告实验三8253计数器/定时器的应用一、

36、实验目的学习掌握8253用作定时器的编程原理。二、实验内容1.完成一个音乐发生器,通过蜂鸣器放出音乐,并在数码管上显示乐谱。2.扩展部分:利川小键盘实现弹琴功能,并显示弹奏的乐谱。三、实验过程1、音乐发生器由参考资料中的音符与频率对应表,根据计数器的性质,利用公式n=心工=生,使用MATLAB矩阵运算可以快速计算出七种音符在高中低 f fJ note J note音时计数器应该对应的计数值,如下表所示。l(do)2(re)3(mi)4(fa)5(so)6(la)7(si)低音1221089791817264中音61544845403632高音30272422201816此次设计的音乐发生器主要

37、实现了以下功能:1.可演奏不同音阶的乐谱,音符间有节拍的控制和变化,因而音乐更加逼真;2.放音同时可以同步显示出乐谱;3.由表格形式给出乐谱,可调整性好,可以很容易更换乐谱。本程序设计的关键点在于设置音符、节奏、音高表,以合理的方式存储和查 找乐谱。这里采用的是音符、节奏、音高以类似“三维数组”的方式组织,依 靠当前播放的音符偏移值作为“下标”,容易一次性读取音符、节奏、音高信 息。音符送往显示模块,节奏用于设定音符的延时,音高用于查找计数器的值。第21页y 土交t.”全微机原理硬件实验报告下面给出程序设计流程图:第22页微机原理硬件实验报告VfHW*vw HM*1W|1H*t WMMiMhr

38、*f Mi程序源代码如下:DATA SEGMENT;Count numberLOU DB 122,108,97,91,81,72,64MID DB 61,54,48,45,40,36,32HIG DB 30,27,24,22,20,18,16;Song XiaoTuZiGuaiGuaiBOK DB 5,1,6,5,5,3,5,6,1,5,5,6,5,3,2,2DB 3,5,3,2,3,1,6,5,6,5,3,6,5DB 5,5,3,2,1,1,1,2,3,1LEN EQU$-BOK;How many chars.;TON 1-LOWZ 2-MID,3-HIGTON DB 2,3,2,2,2,2

39、,2,2,3,2,2,2,2,2,2,2DB 2,2,2,2,2,2,2,2,2,2,2,2,2DB 2,2,2,2,2,2,2,2,2,2;RHY 1-Quarter beat;2-Half beat;4-On beat;8-Two bat;12-Thr beat.RHY DB 4,2,2,4,4,2,2,2,2,4,4,4,2,2,4,4DB 4,2,2,2,2,4,4,4,4,4,4,4,8DB 2,2,2,2,8,2,2,2,2,8KEY DB 21H,0F4H,0F1H,39H,0D9H,ODDH,61H;07 char codeTBOK DB 0TTON DB 0TRHY DB 0

40、COUNT DB 0DATA ENDSSTACK SEGMENT STACK 1 STACK1DB 50 DUP(?)STACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODEz SS:STACKDELAY MACRO TIME/Delay timeLOCAL LOPA第23页微机原理硬件实验报告PUSH CXMOV AX,TIMELOPA:MOV CX,OOH LOOP$DEC AXJNZ LOPAPOP CXENDM;User can control timeMUSIC MACRO;Write count number,music onMOVAL,COUNT;

41、First gt count number.MOVDXZ 0E820H;Use Counter 0OUTDXZ AL;Write counter 0ENDMfREAD PROC NEAR;Read one note/rhyme/tone;BX is offset,means where to find;Result is savd in memoryMOVALABOKBXXORAH,AHMOVS工,AXDECSIMOVTBOK,AL;Save noteMOVAL,RHYBXMOVTRHY,AL;Save rhymeMOVAL,TONBXCMPAL,1JEI SLOWCMPAL,2JEISMID

42、CMPAL,3JEISHIGISLOW:MOV AL,LOUSI;To find counterJMP EXITRISMID:MOV AL,MIDSIJMP EXITRISHIG:MOV ALAHIGSI弟24贝3 什名勺老上岂一 微机原理硬件实验报告EXITR:MOV COUNTz AL;Save count valueRETREAD ENDPRHYMEPROC NEARMOV AL.TRHY;Control rhymeMOV AH,OFFHMUL AH;AH is time ofQuarter beatRHYMEDELAY AXRETENDP;Rhymez dlaytime in AXDI

43、SP PROC NEAR;Display note being playedMOV DX,0E800HMOV ALABOKBX;Get note charXOR AH,AHMOV D工,AXDEC DIMOV AL,KEYDI;Get char codeOUT DXZALMOV AL,00000001B;Only one digit onMOV DXZ 0E801HOUT DXZAL;Control which LED onRETDISP ENDPMAIN:;Main program start hereMOVAX,DATAMOVDS,AXMOVES,AXMOVDX,0E823H;Initia

44、lize 8253MOVAL,00010110B;Use counter 0OUTDXZ ALMOVAL,80H;initialize 8255MOVDX,0E803HOUTDXZ AL弟23贝,”微机原理硬件实验报告PLAY:MOV CX,LEN;Get book*s lengthXOR BX,BX;Record current char being playedLOP:CALL READnot/rhym/tonCALL DISP;Display note on LEDMUSIC;Play music nowCALL RHYME;Control rhymeINC BX;Next noteLO

45、OP LOP;Loop until music finishedMOV AH,OBH;Test keyboardINT 21HOR AL,ALJNZ OVER;Keyboard prssd,quit programJMP PLAY;Or go on to playOVER:MOV DX,0E823H;Reset 8253AMOV AL,16HOUT DX,ALMOV AX,4coOH;Back to DOSINT 21HCODEENDSEND MAIN代码的具体分析如下:程序代码设计分模块,综合应用了宏和子程序设计的方法,按照播放器的 功能,把代码分为主程序MAIN,读取乐谱的子程序READ,

46、显示音符子程序 DISP,节奏控制子程序RHYME,另外编写MUSIC和DELAY两个宏分别实现 音乐的播放和程序延时功能。程序执行时首先进入主程序MAIN,在当中完成 8253和8255的初始化工作,写入控制字;然后调用READ读取乐谱的一个音 符,包括音符信息、音高信息、节拍信息;之后将音符信息送入显示模块DISP 在数码管上显示,通过音高信息查表得到计数器的计数值,由宏MUSIC送入 8253计数器产生对应音高的频率,开始播放音符;此后程序转入节奏控制的 RHYME子程序,通过节拍信息控制DELAY宏的执行时间,实现音乐节奏的 控制。重复以上过程,可以播放连续的一段乐谱信息,产生一整段音

47、乐。第26页,”微机原理硬件实验报告2、键盘弹奏乐曲键盘弹奏乐曲的实现可以在实验二的扩展实验基础上来做,实际上只需要 稍加修改实验二的代码,增加给计数器赋值播放音乐这一项功能即可。程序设计的关键点在于检测实验板上键盘的状态,为了能够由按键的长短 来控制单个音符播放的时长,需要检测键盘的释放。也即当键盘按下时开始播 放对应的音符的声音,当按键松开的时候停止该音符的播放。检测键盘的状态采用的是行扫描反转法实现的。依次给8255的C 口高四位 和低四位写入和读取状态,可以分别获得行列的状态值,行和列中对应按下的 位为低电平,合成8位的键盘码信息,可以对应16位按键。在程序中把按键码 写为码表的形式,

48、和。9、AF依次对应。利用审搜索指令可以找到按键对 应的按键码,由按键码可以进一步对应数码管显示字形码和音符发声码。数码管不同字符同时显示的方法,和实验二中的方法一致。基本思路是按 位依次扫描6个数码管,每次选中一个管显示,其余管熄灭,亮灯的管显示对 应的字符,每个管亮灯的时间设置有一定的延时,这样快速反复扫描这六个数 码管,就能由视觉暂留效应产生稳定的显示。程序设计中有个关键问题需要处理。键盘检测模块需要CPU反复探测8255 的C 口读数,这将占据CPU的执行流水线,而同时显示一排不同的多个音符,需要使用扫描的方式,且扫描时间不能太短,因而键盘探测和多音符显示存在 争用CPU处理资源的情况

49、。这一矛盾在单处理器且没有中断控制硬件的情况下,很难做到而这并行。我设想的解决方案可以使用硬件中断的方法,对数码管设 置一个计数器,当显示到一定时间之后向CPU发出中断请求,CPU执行中断处 理,进行下一位的扫描,然后跳回继续检测键盘状态,这样利用分时和中断的 方法达到基本的并行处理。但由于时间和条件的限制,没能具体去实施。此程 序设计中采用的方式牺牲并行性,考虑在按键的时间并不长,可以灭灯,当按 键松开时予以显示音符。实际效果是可以接受的,按键瞬间的灭灯没有过多影 响观赏效果。第27页y 土交t.”全微机原理硬件实验报告程序的流程图如下:第28页微机原理硬件实验报告程序源代码如下:DATA

50、SEGMENTID DB 6 DUP(0);Store input note char;Keys codeARRAYDB11100111Bz11101011Bz1110110IB,1110111OBDB11010111Bz11011011Bz1101110IB,1101111OBDBDB;Charcode 09KEYDB 0EDH,21H,0F4H,0F1H,39H;05DB 0D9H,0DDH,61H,0FDH,OF9H;69;Count numberLOU DB0,122,108,97,91,81,72,64MID DB0,61,54,48,45,40,36,32HIG DB0,30,27

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服