多功能时钟微机原理及应用课程设计.docx
《多功能时钟微机原理及应用课程设计.docx》由会员分享,可在线阅读,更多相关《多功能时钟微机原理及应用课程设计.docx(18页珍藏版)》请在冰豆网上搜索。
多功能时钟微机原理及应用课程设计
课程设计
课程名称微机原理及应用课程设计
题目名称多功能时钟
学生学院
专业班级
学号
学生姓名
指导教师
2013年1月2日
多功能时钟
一.小组介绍
二.任务要求
用8086/8088CPU设计一个多功能时钟。
要求实现:
日常使用时正确显示的是时、分、秒;根据需要,还可以作为秒表使用;还可以显示日期。
三.设计方案
整个时钟分为5个模块,主程序模块,时钟模块,数码管模块,键盘模块,秒表模块。
1.主程序模块:
主程序模块为循环键盘扫描和显示模块
2.时钟模块:
时钟新号由8254跟模拟8259A共同提供,8254的clk0接18.432KHZ的时钟源,分频为1HZ的时钟信号,作为8259A的中断(IRQ6)请求(即每秒加1),然后控制时钟的增加
3.数码管模块:
用了动态扫描数码管的方法显示
4.键盘模块用了四个按键:
日期,秒表,计时/暂停,清零
A.日期:
控制日期与其他显示的切换(一般是显示时间的)
B.秒表:
控制秒表与其他显示的切换
C.计时/暂停:
控制秒表的计时/暂停
D.让秒表清零,并暂停
5.秒表模块:
在IRQ6中控制秒表是否计数
四、上机操作记录
1.按照电路装置连线,输入源程序且检查无误,编译连接并加载,点击run开始运行
2.一开始数码管显示时间(时分秒)
3.按“日期”按键,数码管显示日期(年月日),再按“日期”按键,退出日期显示,显示回时间
4.A按“秒表”按键,数码管显示秒表(开始的时候记时为0);
B接着按“计时/暂停”按键,秒表开始计时,再按“计时/暂停”按键,秒表暂停计时;
C按“清零”按键,秒表的数值变为0,并暂停记时,再按“计时/暂停”按键,秒表重新从0开始记时;
D按“秒表”按键,数码管退出秒表显示,返回时间显示。
五、心得及体会
虽然有一定的基础,且经过近一个学期的汇编实训,对简单系统的设计有一定的经验,但是完成规模相对较大的课程设计仍然会有困难。
任务下发伊始感觉无从下手,不过经过仔细查找阅读相关资料,小组的设计思路慢慢清晰。
设计时我们采用分模块设计的思想,程序的核心是算法的运用,经过大家的思考和不断讨论,终于顺利写出算法,课程设计也突破了最大的难关,直至最后整个程序成功完成。
经过此次课程设计,不仅增强了编程技巧和实验操作技能,对代码的运用更加熟练,也让小组成员对系统设计有了更清晰的认识,强化了合理的设计思想,更重要的是让大家对汇编产生了更强烈的兴趣,我们也已计划查阅相关书籍资料,更加深入地了解使用汇编语言,争取在复杂系统的设计上有所建树。
六、系统设计流程图
(见下页)
设置IRQ6中断向量
开放IRQ6中断
设置8255工作方式
设置8254工作方式、分频示数
PC4按下
PC5按下
N
显示日期
显示时间
N
PC4是否再次按下
Y
(日期优先)
显示秒表
Y
秒表暂停/计数切换
N
N
Y
N
Y
秒表清零且暂停计数
注:
要进入秒表,需先退出日期显示。
七、程序清单
STACKSEGMENTSTACK
DW64DUP(?
)
STACKENDS
DATASEGMENT
DATA1DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
DATA2DB0DFH,0EFH,0F7H,0FBH,0FDH,0FEH;位选
BUFFER1DB3FH,3FH,3FH,3FH,3FH,3FH;存放时间的数码管段选
BUFFER2DB06H,3FH,06H,3FH,5BH,06H;存放日期的数码管段选
BUFFER3DB3FH,3FH;存放秒表的数码管段选
GETKEYDB00H;00无按键,0FF有按键
XIANRIQIDB00H;00不显,0FF有PC4按下,显示日期
XIANMIAOBIAODB00H;00退出,0FF有PC5按下,显示秒表,并且为秒表计数加1的条件
JISHUDB00;00暂停,0FF有PC6按下开始计数
SECONDDB00H
MINUTEDB00H
HOURDB09H
DATEDB01H
MONTHDB01H
YEARDB12H
BIAODB00H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
CLI
;-------------------------------------------------------设置irq6向量
PUSHDS
MOVAX,0
MOVDS,AX
MOVAX,OFFSETIRQ6
MOVSI,38H
MOV[SI],AX
MOVAX,SEGIRQ6
MOVSI,3AH
MOV[SI],AX
POPDS
;--------------------------------------------------------;开放irq6
INAL,21H
ANDAL,BFH
OUT21H,AL
;---------------------------------------8255端口跟工作方式;AB出,C入
MOVAL,88H
MOVDX,0606H
OUTDX,AL
;--------------------------8254初始化,gate0,方式2,先低后高,二进制
MOVAL,34H
MOVDX,06C6H
OUTDX,AL
MOVAL,00H;输入频率18432十六进制是4800H
MOVDX,06C0H
OUTDX,AL
MOVAL,48H
OUTDX,AL
;-----------------------------------------------------------主程序
STI
A1:
CALLKEYTEST
CMPGETKEY,0FFH
JNZA2
CALLKEYSCAN;扫描按键
A2:
CALLDISP;显示数码管
JMPA1
;---------------------------------------------------IRQ6中断处理程序
IRQ6:
PUSHAX
PUSHCX
CMPJISHU,0FFH
JNZIAA
MOVAL,BIAO
ADDAL,01H
DAA
MOVBIAO,AL
CMPBIAO,99H
JNZIEXIT
MOVBIAO,00H
IAA:
MOVAL,SECOND
ADDAL,01H
DAA
MOVSECOND,AL
CMPSECOND,60H
JNZIEXIT
MOVSECOND,0
MOVAL,MINUTE
ADDAL,01H
DAA
MOVMINUTE,AL
CMPMINUTE,60H
JNZIEXIT
MOVMINUTE,0
MOVAL,HOUR
ADDAL,01H
DAA
MOVHOUR,AL
CMPHOUR,24H
JNZIEXIT
MOVHOUR,0
MOVAL,DATE
ADDAL,01H
DAA
MOVDATE,AL
CMPDATE,30H;假设一个月有30天
JNZIEXIT
MOVDATE,0
MOVAL,MONTH
ADDAL,01H
DAA
MOVMONTH,AL
CMPMONTH,12H
JNZIEXIT
MOVMONTH,0
MOVAL,YEAR
ADDAL,01H
DAA
MOVYEAR,AL
IEXIT:
CALLDEAL;
MOVAL,20H;结束中断
OUT20H,AL
POPCX
POPAX
IRET
;------------------------------------------------------------按键检测
KEYTEST:
MOVAL,0FEH
MOVDX,0602H
OUTDX,AL
MOVDX,0604H
INAL,DX
ANDAL,0F0H
CMPAL,0F0H
JZKEYTEST_1
MOVGETKEY,0FFH
KEYTEST_1:
RET
;------------------------------------把时间日期秒表转换成数码管的段选
DEAL:
PUSHSI
PUSHDI
LEASI,SECOND
LEADI,BUFFER1
MOVBX,OFFSETDATA1
MOVCX,07H
DEAL_1:
MOVAL,[SI]
ANDAL,0FH
XLAT
MOV[DI],AL
INCDI
MOVAL,[SI]
PUSHCX
MOVCL,4
SHRAL,CL
XLAT
POPCX
MOV[DI],AL
INCDI
INCSI
LOOPDEAL_1
POPDI
POPSI
RET
;------------------------------------------------------显示子程序
DISP:
PUSHSI
PUSHDI
LEADI,DATA2
CMPXIANRIQI,0FFH
JNZDISP_1
LEASI,BUFFER2;显示日期
MOVCX,06H
JMPDISP_3
DISP_1:
CMPXIANMIAOBIAO,0FFH
JNZDISP_2
LEASI,BUFFER3;显示秒表
MOVCX,02H
JMPDISP_3
DISP_2:
LEASI,BUFFER1;显示时间
MOVCX,06H
DISP_3:
MOVAL,[SI];送段选
MOVDX,0600H
OUTDX,AL
MOVAL,[DI];送位选
MOVDX,0602H
OUTDX,AL
CALLTIME
INCSI
INCDI
LOOPDISP_3
POPDI
POPSI
RET
;------------------------------------------------查看按下的是哪个键
KEYSCAN:
CALLTIME;去抖动
MOVGETKEY,00H
CALLKEYTEST
CMPGETKEY,0FFH
JZKEYSCAN_1
JMPEXIT1
KEYSCAN_1:
TESTAL,10H
JNZNEXT_1
CALLKEYRIQI
JMPEXIT
NEXT_1:
TESTAL,20H
JNZNEXT_2
CALLKEYMIAOBIAO
JMPEXIT
NEXT_2:
TESTAL,40H
JNZNEXT_3
CALLKEYJISHU
JMPEXIT
NEXT_3:
CALLKEYCLEAR
EXIT:
MOVAL,0FEH;按键释放检测
MOVDX,0602H
OUTDX,AL
MOVDX,0604H
INAL,DX
ANDAL,0F0H
CMPAL,0F0H
JNZEXIT
EXIT1:
MOVGETKEY,00H
RET
;----------------------------------------------------KEYRIQI子程序
KEYRIQI:
CMPXIANRIQI,0FFH
JNZKEYRIQI_1
MOVXIANRIQI,00H
JMPKEYRIQI_2
KEYRIQI_1:
MOVXIANRIQI,0FFH
KEYRIQI_2:
RET
;--------------------------------------------------KEYMIAOBIAO子程序
KEYMIAOBIAO:
CMPXIANMIAOBIAO,0FFH
JNZKEYMIAOBIAO_1
MOVXIANMIAOBIAO,00H
JMPKEYMIAOBIAO_2
KEYMIAOBIAO_1:
MOVXIANMIAOBIAO,0FFH
KEYMIAOBIAO_2:
RET
;-----------------------------------------------------KEYJISHU子程序
KEYJISHU:
CMPXIANMIAOBIAO,0FFH
JNZKEYJISHU_2
CMPJISHU,0FFH
JNZKEYJISHU_1
MOVJISHU,00H
JMPKEYJISHU_2
KEYJISHU_1:
MOVJISHU,0FFH
KEYJISHU_2:
RET
;-----------------------------------------------------KEYCLEAR子程序
KEYCLEAR:
CMPXIANMIAOBIAO,0FFH
JNZKEYCLEAR_1
MOVBIAO,00H
MOVJISHU,00H
KEYCLEAR_1:
RET
;----------------------------------------------------------延时子程序
TIME:
PUSHAX
PUSHCX
MOVCX,0002H
TIME1:
MOVAX,0021H
TIME2:
DECAX
JNZTIME2
LOOPTIME1
POPCX
POPAX
RET
CODEENDS
ENDSTART
八、电路装置连接图
(见附页)