微机原理与接口技术课程设计报告音乐流水灯文档格式.docx
- 文档编号:22621633
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:16
- 大小:79.66KB
微机原理与接口技术课程设计报告音乐流水灯文档格式.docx
《微机原理与接口技术课程设计报告音乐流水灯文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术课程设计报告音乐流水灯文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
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加1
COUNT=40?
修改时间,调用ADDONE子程序
COUNT清0
显示时间,调用显示时间子程序
结束中断(发EOI命令)
恢复现场
中断返回
四、实验源代码
DATASEGMENTAT0USE16
ORG1000H
HOURDW?
MINDW?
SECDW?
SLLDB?
COUNTDB?
DATAENDS
CODESEGMENTUSE16
ASSUMECS:
CODE,DS:
DATA
ORG1500H
BEG:
JMPSTART
TABDB3FH,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,60000000H
MOVCR0,EAX
MOVAX,DATA
MOVDS,AX
MOVHOUR,0203H;
小时分钟以及秒的初始化
MOVMIN,0509H
MOVSEC,0502H
LEABX,TAB
MOVSLL,0;
开始暂停标志位置0
MOVCOUNT,0;
中断次数计数初始值为0
;
8255初始化,用于产生报时的脉冲
MOVEAX,80808080H;
控制字
MOVDX,20CH;
后面的是4个8255的控制端口20C-20F(这个地址由实验台决定)
OUTDX,EAX;
初始化8255,A、B、C口均为方式0输出
MOVDX,20BH
MOVAL,0FFH
OUTDX,AL
;
8253初始化,用于产生周期为25ms的中断
MOVAL,00110110B;
计数器0,先低后高,方式三,二进制
MOVDX,32cH;
写往控制口
OUTDX,AL
MOVDX,320H;
计数器0写初值:
47KHz*25ms
MOVAX,1175
MOVAL,AH
MOVAL,0FEH;
IR0开屏蔽
OUTDX,AL
XORAX,AX;
装载中断向量
MOVES,AX
MOVDI,08H*4
MOVAX,OFFSETINTSR
MOVES:
[DI],AX
MOVAX,SEGINTSR
[DI+2],AX
STI;
开中断
JMP$
INTSRPROC;
中断服务程序
CMPMIN,0509H;
比较当前时间是否在59分55秒~00分00秒之间
JLNEXT1
CMPSEC,0505H
MOVAL,00H;
蜂鸣器低有效,报时
JMPNEXT2
NEXT1:
CMPMIN,0
JNENEXT3
CMPSEC,0
NEXT3:
MOVDX,20BH
NEXT2:
CMPCOUNT,20;
用8255产生0.5ms的蜂鸣
JLENEXT4
NEXT4:
CMPSLL,0
JZLOB
CALLTSTART
LOB:
CALLKEYCHECK;
检测有无键按下
CMPAL,0AH;
启停键按下,调用启停程序
JNZNEXT5
JMPNEXT6
NEXT5:
CMPAL,0BH;
设置键按下,调用设置时间程序
JNZNEXT6
CALLSETTIME
INTSRENDP
TSTARTPROC;
控制时间暂停和开始。
CMPSLL,0
JNZR1
DECSLL
R1:
CALLKEYCHECK
CMPAL,0AH
JZR2
CALLSHOW
JMPR1
R2:
INCSLL
RET
TSTARTENDP
ADDONEPROC;
加1秒子程序
MOVAX,SEC;
当前秒个位为9,加1后变0,十位加1
CMPAL,9
JEN1
INCAL
MOVSEC,AX
JMPN6
N1:
INCAH
MOVAL,0
CMPAH,6;
十位加1后为6,则秒变为00,分钟个位加1
JEN2
N2:
MOVAX,0
MOVAX,MIN;
当前分钟个位为9,加1后变0,十位加1
JEN3
MOVMIN,AX
ADDONEENDP
SETTIMEPROC;
设置时间子程序
MOVHOUR,0
MOVMIN,0
MOVSEC,0
NOP
L1:
调用KEYCHECK,无键按下时,AL中值为0CH
CALLDELAY
CMPAL,0CH
JNZL2
JMPL1
L2:
CMPAL,02H
JGL1;
设置小时十位时,将其他各位数码管灭掉及对应的七段译码表0CH
MOVAH,AL
MOVBYTEPTR[HOUR+1],AL
MOVBYTEPTR[HOUR],0CH
MOVMIN,0C0CH
MOVSEC,0C0CH
L3:
设置小时的个位
JZL3
MOVAH,BYTEPTR[HOUR+1]
SETTIMEENDP
KEYCHECKPROC;
判断有无键按下子程序
PUSHBX
CALLCLEAR
MOVDX,PORT2
NEXT:
MOVAL,BL
MOVDX,PORT2
INAL,DX
ANDAL,0FH
CMPAL,0FH
JNZKEY
ROLBL,1
LOOPNEXT
JMPEXIT
KEY:
SHLBL,4
ORAL,BL;
形成一个字节的键码信息存入AL,高4位为列信息低4位为行信息
LEASI,KEYCOD
LEADI,KEYVAL
MOVCX,12
NEXT11:
CMPAL,[SI]
JZFIND
INCSI
INCDI
LOOPNEXT11
FIND:
MOVAL,[DI];
AL中内容为所按键的键面值
PUSHAX
NOP
WAIT1:
INAL,DX;
判断按键是否已释放,若无则等待
JNZWAIT1
POPAX
JMPEXIT2
EXIT:
MOVAL,0CH
EXIT2:
NOP
POPBX
KEYCHECKENDP
MOVDX,PORT2;
位选输出分钟的十位
MOVAL,0C4H
CALLDELAY
MOVAX,SEC
XLAT
MOVDX,PORT1;
段选输出数据
位选输出秒的个位
MOVAL,0E0h
RET
SHOWENDP
DELAYPROC;
延时子程序
PUSHCX
MOVCX,1000
LOOP$
POPCX
CLEARENDP
CODEENDS
ENDBEG
五、总结
两天的课程设计到了尾声,在这几天中,通过音乐流水灯实验实验,知道了很多自己的不足,例如,知识不会运用,经常翻书,以及查看相似的例子往实验上套,不过总算完成了实验,实验中遇到很多问题,例如,我的代码可以在一台实验箱上运行,结果良好,不过第二天换了台机子就不行了,数码管不能显示,有的时候蜂鸣器一直响,诸如此类。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 课程设计 报告 音乐 流水
![提示](https://static.bdocx.com/images/bang_tan.gif)