微机原理与接口技术课程设计报告音乐流水灯

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

微机原理与接口技术课程设计论文题目:音乐流水灯姓名:鞠强学号:201330020228班级:1330202专业:自动化2015年6月一、实验任务及要求任务:1、掌握综合使用基本输入输出设备、通用接口芯片、专用接口芯片的方法;2、掌握实时处理程序的编制和调试方法。要求:用8255、8253、8259配合8086使蜂鸣器发出唱歌声同时还能够使用数码管进行边跳舞边唱歌实验。二、硬件连线键盘的控制、LED显示模块:采用74系列模块控制键盘的行信号Q_0、Q_1、Q_2、Q_3分别与开放的输入信号Q0、Q1、Q2、Q3相连,键盘的列信号P_0、P_1、P_2和开放的输出信号P0、P1、P2相连。74芯片的片选信号CS1接地址译码信号340H,CS2接地址译码信号360H。蜂鸣器发声控制:由8255模块控制;PC0直接与蜂鸣器相连,CS_4连接到实验仪中部的地址输出端CS_4中断处理模块:由8259控制8259的片选CS-1连地址输出300H,INT1连总线输入INTR,8259模块的INT-A连总线的INTA,8259的SP/1连+5V,8259的IRQ0连接到8253的OUT0。三、程序流程图主程序初始化各阶段寄存器及相关变量初始化8253、8255芯片设置中断向量、开放8253中断屏蔽开放处理器中断扫描键盘G键S键其他键Stop值取反Stop置0FF调用键盘扫描程序设置当前时分秒值Stop置为0中断服务程序保护现场判断时间是否不小于59分55秒报时扫描键盘G键?调用启停子程序S键?调用设置时间子程序COUNT加1COUNT=40?修改时间,调用ADDONE子程序COUNT清0显示时间,调用显示时间子程序结束中断(发EOI命令)恢复现场中断返回YNYNYYN四、实验源代码DATASEGMENTAT0USE16ORG1000HHOURDW?MINDW?SECDW?SLLDB?COUNTDB?DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATAORG1500HBEG:JMPSTARTTABDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,00H;0~F的共阴极七段译码表00H表示不显示任何东西KEYCODDB0EEH,0DEH,0BEH,0EDH,0DDH,0BDH,0EBH,0DBH,0BBH,0E7H,0D7H,0B7H;行列编码值KEYVALDB0,1,2,3,4,5,6,7,8,9,0AH,0BH;所有键的键面值PORT1EQU340H;数码管段选端口PORT2EQU360H;数码管位选端口,键盘矩阵的行列端口START:MOVEAX,60000000HMOVCR0,EAXMOVAX,DATAMOVDS,AXMOVHOUR,0203H;小时分钟以及秒的初始化MOVMIN,0509HMOVSEC,0502HLEABX,TABMOVSLL,0;开始暂停标志位置0MOVCOUNT,0;中断次数计数初始值为0;8255初始化,用于产生报时的脉冲MOVEAX,80808080H;控制字MOVDX,20CH;后面的是4个8255的控制端口20C-20F(这个地址由实验台决定)OUTDX,EAX;初始化8255,A、B、C口均为方式0输出MOVDX,20BHMOVAL,0FFHOUTDX,AL;8253初始化,用于产生周期为25ms的中断MOVAL,00110110B;计数器0,先低后高,方式三,二进制MOVDX,32cH;写往控制口OUTDX,ALMOVDX,320H;计数器0写初值:47KHz*25msMOVAX,1175OUTDX,ALMOVAL,AHOUTDX,ALMOVAL,0FEH;IR0开屏蔽OUTDX,ALXORAX,AX;装载中断向量MOVES,AXMOVDI,08H*4MOVAX,OFFSETINTSRMOVES:[DI],AXMOVAX,SEGINTSRMOVES:[DI+2],AXSTI;开中断JMP$INTSRPROC;中断服务程序CMPMIN,0509H;比较当前时间是否在59分55秒~00分00秒之间JLNEXT1CMPSEC,0505HJLNEXT1MOVDX,20BHMOVAL,00H;蜂鸣器低有效,报时OUTDX,ALJMPNEXT2NEXT1:CMPMIN,0JNENEXT3CMPSEC,0JNENEXT3MOVDX,20BHMOVAL,00H;蜂鸣器低有效,报时OUTDX,ALJMPNEXT2NEXT3:MOVDX,20BHMOVAL,0FFHOUTDX,ALNEXT2:CMPCOUNT,20;用8255产生0.5ms的蜂鸣JLENEXT4MOVDX,20BHMOVAL,0FFHOUTDX,ALNEXT4:CMPSLL,0JZLOBCALLTSTARTLOB:CALLKEYCHECK;检测有无键按下CMPAL,0AH;启停键按下,调用启停程序JNZNEXT5CALLTSTARTJMPNEXT6NEXT5:CMPAL,0BH;设置键按下,调用设置时间程序JNZNEXT6CALLSETTIMEINTSRENDPTSTARTPROC;控制时间暂停和开始。CMPSLL,0JNZR1DECSLLR1:CALLKEYCHECKCMPAL,0AHJZR2CALLSHOWJMPR1R2:INCSLLRETTSTARTENDPADDONEPROC;加1秒子程序MOVAX,SEC;当前秒个位为9,加1后变0,十位加1CMPAL,9JEN1INCALMOVSEC,AXJMPN6N1:INCAHMOVAL,0CMPAH,6;十位加1后为6,则秒变为00,分钟个位加1JEN2MOVSEC,AXJMPN6N2:MOVAX,0MOVSEC,AXMOVAX,MIN;当前分钟个位为9,加1后变0,十位加1CMPAL,9JEN3INCALMOVMIN,AXJMPN6ADDONEENDPSETTIMEPROC;设置时间子程序LEABX,TABMOVHOUR,0MOVMIN,0MOVSEC,0NOPNOPL1:CALLKEYCHECK;调用KEYCHECK,无键按下时,AL中值为0CHCALLDELAYCMPAL,0CHJNZL2JMPL1L2:CMPAL,02HJGL1;设置小时十位时,将其他各位数码管灭掉及对应的七段译码表0CHMOVAH,ALMOVBYTEPTR[HOUR+1],ALMOVBYTEPTR[HOUR],0CHMOVMIN,0C0CHMOVSEC,0C0CHL3:CALLSHOWCALLKEYCHECK;设置小时的个位CALLDELAYCMPAL,0CHJZL3MOVAH,BYTEPTR[HOUR+1]SETTIMEENDPKEYCHECKPROC;判断有无键按下子程序PUSHBXCALLCLEARMOVDX,PORT2NEXT:MOVAL,BLMOVDX,PORT2OUTDX,ALNOPNOPINAL,DXANDAL,0FHCMPAL,0FHJNZKEYROLBL,1LOOPNEXTJMPEXITKEY:SHLBL,4ORAL,BL;形成一个字节的键码信息存入AL,高4位为列信息低4位为行信息LEASI,KEYCODLEADI,KEYVALMOVCX,12NEXT11:CMPAL,[SI]JZFINDINCSIINCDILOOPNEXT11JMPEXITFIND:MOVAL,[DI];AL中内容为所按键的键面值PUSHAXNOPNOPWAIT1:INAL,DX;判断按键是否已释放,若无则等待ANDAL,0FHCMPAL,0FHJNZWAIT1POPAXJMPEXIT2EXIT:MOVAL,0CHEXIT2:NOPPOPBXRETKEYCHECKENDPOUTDX,ALMOVDX,PORT2;位选输出分钟的十位MOVAL,0C4HOUTDX,ALCALLDELAYCALLCLEARMOVAX,SECXLATMOVDX,PORT1;段选输出数据OUTDX,ALMOVDX,PORT2;位选输出秒的个位MOVAL,0E0hOUTDX,ALCALLDELAYCALLCLEARRETSHOWENDPDELAYPROC;延时子程序PUSHCXMOVCX,1000LOOP$POPCXRETCLEARENDPCODEENDSENDBEG五、总结两天的课程设计到了尾声,在这几天中,通过音乐流水灯实验实验,知道了很多自己的不足,例如,知识不会运用,经常翻书,以及查看相似的例子往实验上套,不过总算完成了实验,实验中遇到很多问题,例如,我的代码可以在一台实验箱上运行,结果良好,不过第二天换了台机子就不行了,数码管不能显示,有的时候蜂鸣器一直响,诸如此类。

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功