微机原理硬件实验报告

微机原理硬件实验报告

ID:21810887

大小:326.96 KB

页数:34页

时间:2018-10-24

上传者:U-6309
微机原理硬件实验报告_第1页
微机原理硬件实验报告_第2页
微机原理硬件实验报告_第3页
微机原理硬件实验报告_第4页
微机原理硬件实验报告_第5页
资源描述:

《微机原理硬件实验报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

信息与通信工程学院微机原理硬件实验报告班级:2012211126姓名:刘禹铭杨孟琨学号:20122106932012210705第2页 序号:0517日期:2014年12月第2页 微机原理硬件实验·报告实验一熟悉实验环境及IO的使用一、实验目的1.通过实验了解和熟悉实验台的结构,功能及使用方法。2.通过实验掌握直接使用Debug的I、O命令来读写I/O端口。3.学会Debug的使用及编写汇编程序。二、实验内容1.学习使用Debug命令,并用I、O命令直接对端口进行读写操作。2.用汇编语言编写跑马灯程序。实现功能:A.通过读入端口状态,选择工作模式(灯闪烁方式、速度等);B.通过输出端口控制灯的工作状态(低电平灯亮)。三、实验过程1.在Debug下,用I是命令读输入端口的状态,即拨码开关的状态,用O命令向端口输出数据,通过发光管来查看。输出结果如下:1)当输入-OE8E000时,8位LED全部变亮;当输入-OE8E0FF时,8位LED全部变灭。可以判断,向端口输出低电平可以使灯亮2)首先将开关全部拨下,当输入-IE8E0时,显示00;再将开关全部拨上去,输入-IE8E0时,显示FF。可以判断,拨下去读入的值为0,拨上来读入的值为1。2.分析以下程序段的作用MOVAH,0BHINT21HORAL,ALJZ0100INT20H第32页 微机原理硬件实验·报告本程序首先调用0B号DOS调用,检测键盘,当键盘有输入时,AL的值会变成FF;当键盘没有输入时,AL的值是00。将AL自身与自身相或,可以置标志位,当AL为全0时,标志位Z会置为1。所以当键盘没有按下时,系统会自动跳到代码段偏移量为0100H的地方;当键盘按下时,JZ指令不执行,将执行20号中断,程序正常退出。此程序可以在控制硬件不停的循环时,作为出口判断的条件,使得用户可以自由控制程序的退出,是编写硬件控制程序所必须的。1.编写跑马灯程序。程序流程图如下:对以上的流程图做如下解释:第32页 微机原理硬件实验·报告1)首先,BL寄存器专门存储灯型,内存中专门开辟一段空间作为延时时间的参数,DX作为输出地址的寄存器,AL作为读入拨码开关的寄存器。2)延时子程序采用二重循环的模式,每一重循环的次数由内存中的TIMES变量值决定。3)所有的控制判断均由读入的某一个拨码开关的值决定。程序源码如下:DATASEGMENTDATAENDS;数据段STACKSEGMENTSTACK'STACK';堆栈段DB100HDUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK;代码段DELAYPROCNEAR;此处为延时子程序开始PUSHCX;CX入栈W1:MOVCX,0FFFFH;赋予CX基地址W:LOOPWDECBX;此处为循环内部嵌套JNZW1;循环,此举为了之后POPCX;调节速度方便RETDELAYENDP;延迟此程序结束START:PUSHDS;主程序开始XORAX,AXPUSHAXMOVAX,DATAMOVDS,AX;完成AX清零以及MOVDX,0EEE0H;DATA进入DSMOVBL,01;赋予地址偏移量第32页 微机原理硬件实验·报告MOVAH,00LP1:INAL,DX;把DX地址赋予ALTESTAL,40H;检测AL是否为40HJNZFINAL;决定程序是否结束TESTAL,80H;检测AL是否为80HJNZSPECIAL;跳到SPECIALJMPLP2;否则执行LP2SPECIAL:TESTAL,10H;检测AL是否为10HJZSEP;跳到SPECIALJNZSEP2SEP:MOVBL,01;通过BL改变BX从JMPLP1;而改变延时速度SEP2:MOVBL,0FEH;第二档速度跳转JMPLP1LP2:MOVAL,BL;此段代码为亮灯表示OUTDX,ALPUSHBXINAL,DX;把DX地址赋予ALTESTAL,02H;检测AL是否为02HJZK2MOVBX,00FFHJMPLP3K2:MOVBX,01FFHLP3:CALLDELAYPOPBX;再次使用BX寄存器INAL,DX;控制亮灯方向TESTAL,01H;检测AL是否为01HJZK1;决定亮灯顺序ROLBL,1;控制亮灯顺序向左JMPLP1第32页 微机原理硬件实验·报告K1:RORBL,1;控制亮灯顺序向右JMPLP1FINAL:MOVAX,4C00H;程序结束INT21H;STARTENDP;代码结束CODEENDSENDSTART4.实验附加问题:DEBUG录入-a的小程序里,有些变量不需要加H,请解释。DEBUG中的-a录入的程序中MOV后的十六进制数默认不需要加H,这对于程序中的地址变量会增加便利的程度。但是有些变量是可以加H的,例如INT后的中断向量号,可以加入H也可以不加入。四、心得体会这是微原硬件实验的第一次,主要是熟悉了将要使用的实验系统,学习了最基本的硬件测试的方法,并且对于外部的硬件通过汇编语言实现控制。实验中主要应用了公共端口的读和写指令,使我们对于软件控制硬件的方式有了实体化的理解。跑马灯程序是第一次软件对硬件的控制实验,我们在设计过程中,考虑了灯型,速度,方向,暂停等方面的形象化的内容,然后将这些形象化的思考加以抽象化,在原先能够正常运转的跑马灯程序上进行添加以及修改,便可以成功。首先我们写出了最基本的跑马灯程序,不改变任何参数,使得灯自由运转,然后将我们的控制功能一项一项加上去。控制功能是一个系统,有输入以及输出,我们默认输入是拨码开关,于是控制开始会先读入拨码开关的值;第32页 微机原理硬件实验·报告然后系统内进行处理,例如暂停系统,会循环读入拨码开关的值直到有所改变;最后是系统输出,最终都会落实到灯型的变化上。这样,所有的控制功能也就完成了。最后是完成基本的跑马灯程序设计,受到debug下的控制灯型的启发,我们采用了一个专门的寄存器用于保存当前的灯型并且给AL输出,另外加入一层循环,每次循环改变一次灯型,就完成了基本的跑马灯功能。本次实验我们接触到了简单的软件控制硬件的方式,我们收获到了一种基本的控制方法理论,即满足基本要求后,慢慢添加新功能。在以后的实验中,我们只需要将这套理论继续应用下去,并且每次应用都为它增加新的经验,便可以完美的完成本次的实验。第32页 微机原理硬件实验·报告实验二8255A并行接口应用一、实验目的1.掌握8255A的功能及方式0、1的实现。2.熟悉8255A与CPU的接口,以及传输数据的工作原理及编程方法。3.了解七段数码管显示数字的原理。4.掌握同时显示多位数字的技术。二、实验内容1.查找八段数码管的显示规律及数码管的位选规律。2.六位数码管静态显示。在数码管电路上静态地显示6位学号,当主机键盘按下任意键时,停止显示,返回DOS。3.六位数码管动态显示。要求在数码管电路1-6位数码管上,动态显示字符串HELLO,当主机键盘按下任意键时结束。4.扩展部分:完成扫描键盘(PC口)输入自己的学号,并在数码管上显示。三、实验过程1、八段数码管位选规律在方式0(输入/输出)下,以A口为输出口,B口为输出口,A口接六个共阴极数码管的八位段码,高电平点亮数码管的某一段,B口接数码管的位选(即要使哪个数码管亮),高电平选中某一位数码管点亮。测试结果如下图所示:第32页 微机原理硬件实验·报告PA5PA0PA3PA2PA7PA1PA6PA4由此,容易得出数字0~9以及字母A~H的编码,如下表所示。字形01234567编码0EDH21H0F4H0F1H39H0D9H0DDH61H字形89ABCDEF编码0FDH0F9H7DH9DH0CCH0B5H0DCH5CH2、六位数码管静态显示电路6个数码管的同名阳极段已经复接,当段选寄存器寄存了一个字型编码之后,6个数码管都将显示出相同的数字。如果要使6个数码管“同时”显示不同的数字,必须采用扫描显示的方法。通过选位寄存器选择某一位数码管,显示其数字(对应段值为1),然后关闭此数码管,再选择下一位数码管进行显示;如果在一秒钟内,每一位数码管都能显示30次以上,则人眼看到的是几位数码管同时在显示。实验证明,在扫描显示过程中,每一位显示延迟1ms是最佳选择。本程序采用了每次扫描一排6个数码管,然后反复循环的方式。每个数码管间隔一定时间,也即显示延迟。通过在每一排扫描之后检测键盘状态,可以达到任意键退出的功能。第32页 微机原理硬件实验·报告程序框图如下:对以上的流程图做如下解释:1、将需要显示的2个同学的学号对应的段码存放在data段的两段连续的空间中,SI存放需要显示的段码的起始位置,通过改变SI指向不同内存空间,实现显示不同学号的功能。2、在退出时,将位码置为全零,再退出程序,实现数码管关闭后再退出。第32页 微机原理硬件实验·报告程序源代码如下:DATASEGMENT;此处为代码段定义NUMDB0DDH,0F9H,0F1H,61H,0EDH,0D9H;此处为我和同组同学学号DATAENDS;代码段结束STACKSEGMENTSTACK'STACK';堆栈段开始DB100DUP(0);申请100字节内存STACKENDS;堆栈段结束CODESEGMENT;代码段开始ASSUMECS:CODE,DS:DATA,SS:STACKSTAT:MOVAL,10000000B;偏移地址的转移MOVDX,0EE03HOUTDX,ALMOVAX,DATA;通过AX把DATA转移到DS内MOVDS,AXMOVES,AXLOP1:XORSI,SI;SI清零MOVCX,06HMOVDX,0EE00H;此段代码为第一段循环第32页 微机原理硬件实验·报告MOVBL,00000001BLOP2:MOVAL,NUM[SI];此段代码为第二段循环OUTDX,ALMOVAL,BLINCDX;DX减1OUTDX,ALDECDX;DX加1ROLBL,1;向左移动INCSICALLDELAY;触发延迟子程序CALLKEYLOOPLOP2JMPLOP1DELAYPROCNEAR;显示程序开始PUSHBXPUSHCX;接下来的程序调用两个寄存器先入栈MOVBX,000CHLOP3:MOVCX,00HLOOP$DECBX;BX加1JNZLOP3第32页 微机原理硬件实验·报告POPCX;完成寄存器调用出栈POPBXRET;结束DELAYENDP;显示程序结束KEYPROCNEAR;键盘键入程序开始PUSHAXMOVAH,0BH;先对数码管显示执行停止指令INT21HORAL,ALJZGOONMOVAH,4CH;之后对程序进程停止INT21HGOON:POPAXRETKEYENDP;检测键盘键入程序结束CODEENDS;程序结束ENDSTAT第32页 微机原理硬件实验·报告代码实现思路:程序需要实现6个数码管的显示,因此控制数码管的位码循环点亮和段码赋值显示对应数字的循环过程是少不了的。同时,为了实现功能的提升,我们期望本程序能够实现根据拨码开关的输入显示不同同学学号的功能,所以,我们需要改变段码的赋值过程。这一过程最简单的方法便是在段码循环赋值过程之前,改变指针指向的内存空间的偏移量,这样,6次段码赋值循环过程便会显示不同的学号。除此之外需要实现键盘输入的检测,但是键盘输入的频率很低,可能很久才会有键盘输入,因此,不需要将其放在内层显示循环过程中,只需要在完成一轮段码和位码循环赋值之后再判断键盘即可。综上,实现过程便可设计为:检测键盘->根据拨码开关设置指针->位码、段码赋值、延时的6次循环->返回检测键盘。这样便将键盘输入退出、学号选择和学号显示三个功能同时实现了。3、六位数码管动态显示数码管动态显示“HELLO”字符串,相当于每次显示6位静态字符串,然后显示一定的时间间隔之后,显示另外6位静态字符串。其核心代码和静态显示并无差别,可将静态显示学号的代码作为一个子程序封装起来直接使用。需要增加的只是在一定的时间间隔内去移位读取“HELLO”字符串中需要显示的部分。实际实现时可以存储为码表的形式,移位往后读取即可。可以在移位读取前通过读取拨码开关的状态,获得控制信息,比如暂停、速度变化等。程序框图如下:第32页 微机原理硬件实验·报告第32页 微机原理硬件实验·报告程序源代码如下:DATASEGMENTMESGDB0,0,0,0,0,0,3DH,0DCH,8CH,8CH,0EDH,0POINTDWMESGDATAENDS;基本设定端口STACKSEGMENTSTACK'STACK'DB100DUP(0);申请100堆栈段内存STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTAT:MOVAL,10000000B;控制字的设定MOVDX,0EE03HOUTDX,ALMOVAX,DATAMOVDS,AXMOVES,AXLOP0:MOVBX,POINT;本段代码与上述代码大体一致MOVDI,07H第32页 微机原理硬件实验·报告LOP1:XORSI,SIPUSHDXMOVDX,0EEE0HINAL,DXTESTAL,01;检测AL是否为01JZD1;从头开始显示MOVCX,07HJMPD2D1:MOVCX,1AHD2:POPDXMOVDX,0EE00HLOP4:MOVAH,00000001BPUSHCXMOVCX,06HMOVSI,0LOP2:MOVAL,[BX+SI]OUTDX,ALMOVAL,AHINCDXOUTDX,ALDECDXROLAH,1;控制字符移位达到循环显示效果INCSI第32页 微机原理硬件实验·报告CALLDELAY;触发延迟程序CALLKEY;触发键盘检测程序LOOPLOP2POPCXLOOPLOP4INCBXDECDIJZLOP0JMPLOP1DELAYPROCNEAR;显示程序开始PUSHBXPUSHCXMOVBX,000CHLOP3:MOVCX,00HLOOP$DECBXJNZLOP3;通过循环控制延迟POPCXPOPBXRETDELAYENDP第32页 微机原理硬件实验·报告KEYPROCNEAR;检测有无键盘输入PUSHAXMOVAH,0BHINT21H;若有键盘输入先停止数码管显示ORAL,ALJZGOONMOVAH,4CH;之后停止程序运行INT21HGOON:POPAXRET;退出程序KEYENDPCODEENDS;结束ENDSTAT代码的实现思路及过程如下:如同前面的静态显示代码,使用一个寄存器像指针一样指向内存单元,然后在段码显示时,便显示这个指针指向的内容,然后每点亮一位数码管便显示其对应的段码,此段思想与前述静态显示相同,不再赘述。本次程序需要实现显示内容的滚动,则必须要对一组显示内容进行循环,循环一定时间后切换到下一组内容的循环,当切换到最后一组后又切换回第一组内容进行循环。因此主体思想确定后,便以SI作为指针指向存储段码的内存空间,如静态显示一样循环6次显示不同的代码,每循环完6次,SI赋为POINT(指向本轮显示的起始段码),继续进行内层循环,并在此循环过程中,判断有无键盘输入,同时第32页 微机原理硬件实验·报告设置外层循环次数,当拨码开关选择“快速”的时候外层循环次数较少,反之,选择慢速的时候则循环次数较多,单轮显示时间较长,在循环完这一外层循环之后,需要把POINT指向下一个地址空间,这样在循环显示时便显示接下来的6个段码,实现了数码管显示的滚动以及有无键盘输入的判断,当滚动了7次之后便还原为第一次显示的状态,这样滚动就变成了循环滚动,实现了要求的功能,同时还附加了滚动速度的快慢选择,实现了功能的提升。四、心得建议这一次的第二次实验相比之前的第一次实验,难度略有提升。因为已经不仅仅是输入输出端口的控制那么简单,需要对键盘、拨码开关读入时机进行正确设置,对读入数据进行正确反馈才能完成预想的功能,同时,对于输出的数据也需要正确控制才能达到正确显示的效果,已经不能手动直接输出,而要结合寄存器间接寻址的方式进行数据的自动切换读出。这些相比于之前的实验,对我们提出了更高的要求。加上拓展功能的实验,虽然3个实验在难度上不断加大,但是却是一个层层递进的过程,而且其中的思想和实现方法也不断被后续实验所借鉴,正是第一个实验中静态代码的编写,我们开始采用在内存中存放段码而是用寄存器间接寻址读出的方式实现段码的输出,同时后续的实验也是建立在这基础之上,难度上的加大大都出现在寄存器指针所指向位置内外层循环移动,和内存单元段码内容的写入、更改和清空等等,而这些都是与我们之前所学习的C语言的内容及其相似相通的,将其转换为C语言中的概念后,我们在实现过程中就顺利许多而且理解更为透彻。通过本次汇编语言硬件实验的练习,我们更理解了汇编语言的具体实现和运行过程,同时更加深了自己debug的能力,这也是建立在我们对程序更深入更透彻的理解上的。第32页 微机原理硬件实验·报告实验三8253计数器/定时器的应用一、实验目的学习掌握8253用作定时器的编程原理。二、实验内容1.完成一个音乐发生器,通过蜂鸣器放出音乐,并在数码管上显示乐谱。2.扩展部分:利用小键盘实现弹琴功能,并显示弹奏的乐谱。三、实验过程1、键盘弹奏乐曲和音乐发生器(两功能同时实现)查阅相关音乐资料和进行换算后,我们得出下表,表中数据为在输出不同的音调音阶时计数器应该对应的计数值。1(do)2(re)3(mi)4(fa)5(so)6(la)7(si)低音7D6F645D534B42高音3E37322E292521本次实验便是在此基础上完成,为了方便程序的设计,对于每一个需要演奏的8位音符我们采用了这样的数据结构:高4位为0或1,分别表示低音或高音,低四位对应其音阶,如3表示mi。而键盘弹奏乐曲则是采用前面8255键盘控制显示程序中使用的行列置换法读取键盘输入,然后转换为对应的音调输出,并在显示屏幕上显示输出的音调。第32页 微机原理硬件实验·报告下面给出程序设计流程图:第32页 微机原理硬件实验·报告下面是音调输出过程的流程图:程序源代码如下:DATASEGMENT;此处为基本设置;CountnumberLOUDB122,108,97,91,81,72,64;此三行为基本音域设定第32页 微机原理硬件实验·报告MIDDB61,54,48,45,40,36,32;中音HIGDB30,27,24,22,20,18,16;高音BOKDB5,1,6,5,5,3,5,6,1,5,5,6,5,3,2,2;此处为音阶变换构成旋律DB3,5,3,2,3,1,6,5,6,5,3,6,5DB5,5,3,2,1,1,1,2,3,1LENEQU$-BOK;Howmanychars.;TON1-LOW,2-MID,3-HIG;TONDB2,3,2,2,2,2,2,2,3,2,2,2,2,2,2,2;此处为音域设定;DB2,2,2,2,2,2,2,2,2,2,2,2,2;DB2,2,2,2,2,2,2,2,2,2;RHY1-Quarterbeat;2-Halfbeat;4-Onebeat;8-Twobeat;12-Threebeat.;此处为节拍设定,即为音长RHYDB4,2,2,4,4,2,2,2,2,4,4,4,2,2,4,4DB4,2,2,2,2,4,4,4,4,4,4,4,8DB2,2,2,2,8,2,2,2,2,8KEYDB21H,0F4H,0F1H,39H,0D9H,0DDH,61H;0~7charcodeTBOKDB0TTONDB0TRHYDB0第32页 微机原理硬件实验·报告COUNTDB0DATAENDS;-------------------------------------------------------------STACKSEGMENTSTACK'STACK';堆栈段设定DB50DUP(?)STACKENDS;-------------------------------------------------------------CODESEGMENTASSUMEDS:DATA,CS:CODE,SS:STACK;-------------------------------------------------------------DELAYMACROTIME;延时程序开始LOCALLOPAPUSHCXMOVAX,TIME;可以再此处设定音阶时长LOPA:MOVCX,00HLOOP$DECAXJNZLOPAPOPCX第32页 微机原理硬件实验·报告ENDM;-------------------------------------------------------------MUSICMACRO;音乐程序开始MOVAL,COUNT;宏定义MOVDX,0EE20HOUTDX,ALENDM;-------------------------------------------------------------READPROCNEAR;读取节奏音长音域MOVAL,BOK[BX]XORAH,AHMOVSI,AXDECSIMOVTBOK,AL;存取音阶MOVAL,RHY[BX]MOVTRHY,AL;存取节奏;PUSHAX;存取音高PUSHDXMOVAX,0EEE0H第32页 微机原理硬件实验·报告MOVDX,AXINAL,DXPOPDXCMPAL,00H;低音JEISLOWCMPAL,01H;中音JEISMIDCMPAL,03H;高音JEISHIGISLOW:MOVAL,LOU[SI]JMPEXITRISMID:MOVAL,MID[SI]JMPEXITRISHIG:MOVAL,HIG[SI]EXITR:MOVCOUNT,ALRETREADENDP;-------------------------------------------------------------RHYMEPROCNEAR;控制节奏第32页 微机原理硬件实验·报告MOVAL,TRHYMOVAH,0FFH;AH时长作为四分之一拍MULAHDELAYAX??;节奏延迟存放在AX中RETRHYMEENDP;-------------------------------------------------------------DISPPROCNEAR;显示程序MOVDX,0EE00HMOVAL,BOK[BX]XORAH,AHMOVDI,AXDECDIMOVAL,KEY[DI]OUTDX,ALMOVAL,00000001B;只有一个数码馆进行显示MOVDX,0EE01HOUTDX,AL;控制哪一个数码管显示RET第32页 微机原理硬件实验·报告DISPENDP;-------------------------------------------------------------MAIN:;程序正式开始MOVAX,DATAMOVDS,AXMOVES,AXMOVDX,0EE23H;8253芯片运行MOVAL,00010110B;0通道可以使用OUTDX,ALMOVAL,80H;8255芯片的调用MOVDX,0EE03HOUTDX,ALPLAY:MOVCX,LEN;读取时长XORBX,BX;清零程序LOP:CALLREAD;读取节奏时长音高CALLDISP;调用显示程序MUSIC;开始播放音乐CALLRHYME;控制节奏第32页 微机原理硬件实验·报告INCBX;下一个音符LOOPLOP;一直循环知道音乐播放结束MOVAH,0BH;检查有无键盘输入INT21HORAL,ALJNZOVER;键盘输入如若存在就停止程序JMPPLAY;继续播放OVER:MOVDX,0EE23H;恢复8253AMOVAL,16HOUTDX,ALMOVAX,4C00H;结束INT21H;-------------------------------------------------------------CODEENDSENDMAIN代码实现思路及过程:第32页 微机原理硬件实验·报告本程序设计的关键点在于设置音符、节奏、音高表,以合理的方式存储和查找乐谱。在这个程序中,我们主要利用蜂鸣器的连续发音的特点,只要将每一个音符置为四分之一拍,当需要一个一拍的音时,将四个音符连续响就是一拍了,并且在存储音符时,低音的高位是0,高音的高位是1,这样将一首歌压缩成一维数组进行存储,虽然处理更为复杂,但是存储更为方便,更具有面向用户的特性,如果以三位数组的形式分别存储节拍,高低音和音符,输入数据时更麻烦。另外,我们在程序中加入了休止符,根据人耳能听到的频率:20Hz到20KHz的特点,在有休止符的地方时让蜂鸣器发出超声波,这样人耳就听不见了。通过引入休止符,使得演奏起来更加具有节奏感,音乐更加具有韵律了。四、实验总结1、思考题写出8253计数初值、输入频率和输出频率的关系。答:8253计数初值=输入频率/输出频率,即。2、问题和解决方案问题一:乐谱的数据结构对于音符的数据结构问题,我们思考了很久,最终我们采用以每个音符演奏的最小时间作为音符的演奏时间单位,一个二分之一拍的re音符可以转换为两个相同的四分之一拍的re音符的重复来进行转换,这样通过乐谱中音符的增加来实现音符演奏长短的变化。而音符则采用音调和音阶的结合来形成,其中音符用一个2位16进制码来表示,第一位为0或1,表示音调高地,第二位为1~7,表示do、re、mi等等音阶,这样一段乐谱就能转化为一固定的16进制数序列,转化三维为一维,大大精简了程序。问题二:第32页 微机原理硬件实验·报告如何实现像钢琴一样通过按键进行演奏时间的控制?我们采取的方法是当第一次检测到有按键输入时,读取按键信息,然后便开始声音的输出,随即再次反复读取C口状态,直到读到0FFH,则判断本次按键已经释放。由于CPU执行速度较快,而按键的机械速度较慢,此种探测是可行的,不会因为错过探测的时机而导致误判。当键盘输入完毕,读到0FFH时,则停止声音的输出,这种探测方法,可用来在按键产生音符的实验中根据按键的长短决定发生的长短,这样做出来的效果就和普通钢琴有类似感了。3、心得体会与建议第三实验相比之前来说,复杂度更上一层,在代码的开始阶段就涉及到了程序的整体设计及构建问题,一开始我们采用的也是音符长度、音调、音阶的三维音符信息的方式来共同控制音调的演奏。但是在实际代码编写中,发现实现难度较大,而且体现不出将信息分开的优势,最终我们在多次试验后,采取了将节奏时间转化为音调的重复,并将音调音阶合二为一的方式精简了乐谱,降低了寄存器的使用度和程序的复杂度,然后程序实现的过程就精简了许多。不过之后仍然遇到了其他的问题,就是在实现数码管滚动显示6个当前和即将演奏的音符时,时钟不能正确显示,最终改为了单个音符,显示正确实现了功能。这三次实验,其实每个在完成之后回想起来都不是特别难,但是实际代码编写过程中却总是有问题,尤其是第二个实验的滚动显示功能,多次实验多次验证仍然没有找到问题,最终改写了一些代码的循环结构,才正确完成了功能,这些过程让我在debug过程中逐渐加深了理解,最终代码成功是带给我们的喜悦也是难以磨灭的,虽然第二次实验时最后验收的,但是我们凭借着自己编写的代码,实现所有自己预想的功能,便是对自己最好的历练。三次第32页 微机原理硬件实验·报告实验,我们最终都圆满验收,都独立完成了普通功能和扩展功能,虽然实验次数不多,但是感觉收获颇丰,耐心与能力都得到了大幅提升。第32页

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭