哈工大 计算机组成课程设设计文档格式.docx
《哈工大 计算机组成课程设设计文档格式.docx》由会员分享,可在线阅读,更多相关《哈工大 计算机组成课程设设计文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
则初值X满足(216-X)×
1/12MHz×
12μs=50000μs
X=15536→0011110010110000→3CB0H
(2)采用中断方式进行溢出次数累计,计满20次为秒计时(1秒);
(3)从秒到分和从分到时的计时是通过累加和数值比较实现。
2.1.1LED显示
6个LED数码显示可以采用P0、P2口实现。
此次设计是基于MCS-51对LED的接口,选用八段共阳LED。
八段LED显示管由八只发光二极管组成,编号是a,b,c,d,e,f,g和SP,分别与同名管脚相连。
八段LED数码显示管原理很简单,是通过同名管脚上所加电平的高低来控制发光二极管是否点亮从而现实不同的字形的。
如图2.1为共阳八段LED数码显示管原理图。
图2.2中,所有发光二极管阳极共连后接到G脚。
正常显示时G脚接+5V,各发光二极管是否点亮取决于a~SP各引脚上是否是低电平0伏。
2.1LED显示结构2.2LED显示原理
2.1.2硬件电路
2.1.3电路原理设计
2.3电路原理图
2.2软件设计思想及流程图
2.2.1.软件设计思想
程序的设计主要有T0中断服务程序,动态显示程序,数字分离程序,键盘扫描程序,键处理程序,设置时间,设置年月日初值,判闰年程序,清除显示缓冲区程序这几个功能模块。
运用汇编语言,设计一个简单的电子日历,在6位LED七段显示器动态的显示出来年、月、日、和时、分、秒,实现计时,秒到60,分加1分到60,时加1在通过键盘按键的切换小时到24时天加1,由于公历是比较有规律的,1、3、5、7、8、10、12月为大月,每月31天;
4、6、9、11月为小月,每月只有30天;
而2月份,则要根据当前的年份来决定,平年,2月份有28天,闰年,2月份有29天。
所以处理2月份天数前要先判断是平年还是闰年。
因为每个月份的天数不同,则需要设置一个月值表,通过查表找到相应月的天数,先判断到哪个月份,再从月份表中查出此月份的天数值。
实现月加1,月到12时候年再加1.,还需请注意:
平年与闰年的二月份的天数不同,平年二月28天,闰年的二月29天。
2.2.2程序设计模块
1.本程序采用模块化设计的方法,主要由主函数,显示模块,判断是否闰年模块,提取系统日期模块组成
以下是对各个模块的说明:
(1)主函数。
主函数体现着本程序设计的基本思路。
从程序流程图上可以看到主函数执行的过程,这里不再赘述。
需要注意的是主程序中有一段循环结构,其作用是为了等待停止中断服务的申请,即键盘按键,一旦检测到有键盘按键,则跳出循环,根据按键的内容来判断下一步应要做什么。
(2)显示模块。
程序中INITJM子程序,作为显示界面的初始化程序,主要实现显示输入字符提示语和显示当前日期的提示语,根据光标定位的不同分别将其显示在不同的位置
2.主要模块流程图
主程序流程图
中断子程序
2-2-1主程序流程图
3.数字分离程序
R0为计时单元地址,R1为显示缓冲区地址。
因为时分秒,都需分离,则设置R2的循环次数为3。
先将41H单元内的时传送给累加器A,再与0F与,保留低四位,这样就使得时的低位被分离出来了。
分离后送与显示缓冲区R1的50H单元。
再将41H单元内的时传送给累加器A,使高低位交换。
交换之后,再与0F进行与运算。
使时的高位也分离出来,并送给显示缓冲区的51H单元内。
分和秒的分离方法与时一样,最终的分离结果为:
时分秒在50H—55H内显示。
同理,年月日,其分离方法也是同时分秒的分离原理一样。
其分离程序的流程图如下所示:
2-2数字分离流程图
4.设置年月日初值程序
先清除显示区的内容,因为年是四位,而月日是一起显示也是4位,所以将R0指向显示区53H单元并设置循环次数为4,再调用键盘扫描程序,判断是否有键按下设置年,然后将R0指向30H单元,键值区。
等到输入四个数,即年份。
这是年份在数码管上的显示,再将其低、高两位分别存放在46H,47H存储区内。
其设置月日的的方法与设置年的方法也是一样的,但将日月分别存放在44H、45H存储区里。
2-3设置年月日初值程序流程图
5.动态显示程序
动态显示程序实现的功能是将年月日,时分秒在LED管中显示出来。
使用第一组工作寄存器组,再调用数字分离程序,数字分离程序能将键如的数值在LED数码管正确显示出来。
然后设置循环次数为6再将其存入R2中,,再将R3,R0分别指向地址为01H和50H。
将显示管字型表首址放如DPTR中再将50H单元的内容送到A中,接着R0加1,查字型码表。
循环6次查字型码表即可在LED上显示出时分秒,年月日。
2-4动态显示程序流程图
6.判断闰年
因为年是四位,而月日是一起显示也是4位。
让A指向46H单元,判断里面的内容是不是世纪年,若是世纪年,则要判断能不能被400整除。
能就是闰年,不能就不是;
若不是世纪年,要判断能不能被4整除,不能被100整除。
满足这两个条件就是闰年,不满足就不是。
在判断过程中,使用A中的高低位互换,再让A中的内容与03H相与,若结果为0,则是闰年,若不为0,则不是闰年。
2-5判断闰年流程图
2.2.3程序
INTCSR_BYTE0EQU9438H
INTCSR_BYTE1EQU9439H
INTCSR_BYTE2EQU943AH
INTCSR_BYTE3EQU943BH
IMB4_BYTE3EQU941FH
MY8254_COUNT0EQU9C40H
MY8254_COUNT1EQU9C41H
MY8254_COUNT2EQU9C42H
MY8254_MODEEQU9C43H
MY8255_AEQU9C60H
MY8255_BEQU9C61H
MY8255_CEQU9C62H
MY8255_MODEEQU9C63H
IRQEQU01C8H
DATASEGMENT
CSBAKDW?
IPBAKDW?
MKBAKDB?
ADJUSTDB00H;
调整位标志
FLASHDB00H;
闪烁标志位
PAUSEDB0B;
暂停标志位
KEYMARKDB0B;
按键标志位
INKEYDB00H;
按键
SECONDADB00H;
秒个位
SECONDBDB00H;
秒十位
MINUTEADB00H;
分个位
MINUTEBDB00H;
分十位
HOURDB00H;
时个位
时分十位
LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;
数码管0-9的编码
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
CLI
MOVAX,DATA
MOVDS,AX
MOVDX,INTCSR_BYTE0
MOVAL,00H
OUTDX,AL
MOVDX,INTCSR_BYTE1
MOVAL,1FH
MOVDX,INTCSR_BYTE2
MOVAL,3FH
MOVDX,INTCSR_BYTE3
MOVAX,0000H
MOVES,AX
MOVDI,01ccH;
保存系统中断矢量
MOVAX,ES:
[DI]
MOVIPBAK,AX
MOVAX,OFFSETMYINT
CLD
STOSW
[DI]
MOVCSBAK,AX
MOVAX,SEGMYINT;
设置中断矢量
INAL,0A1H
MOVMKBAK,AL
ANDAL,0F7H
OUT0A1H,AL
STI;
开中断
MOVDX,MY8254_MODE;
8254初始化
MOVAL,15H;
00010101:
计数器0,只读低八位,方式2分频器,十进制
OUTDX,AL
MOVDX,MY8254_COUNT0
MOVAL,0
MOVDX,MY8255_MODE;
8255初始化
MOVAL,81H;
10000001:
A口:
方式0,输出,B口:
方式0,
;
输出,C口:
低四位输入,高四位输出
A1:
NOP;
等待
MOVCX,32H
A2:
MOVDX,MY8255_B
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETLED
MOVAL,SECONDA
XLATLED
CMPADJUST,01H;
是否调整秒的个位
JNEDIS_SECONDA
CMPFLASH,0FFH;
是否闪烁
ANDAL,00H;
熄灭数码管(若FLASH=1)
DIS_SECONDA:
;
显示秒的个位
OUTDX,AL
MOVDX,MY8255_A
MOVAL,0111B
CALLKEYCTR;
调用按键处理程序
CALLDELAY;
调用延迟程序
MOVDX,MY8255_B
MOVBX,OFFSETLED
MOVAL,SECONDB
CMPADJUST,02H;
是否调整秒的十位
JNEDIS_SECONDB
CMPFLASH,0FFH
ANDAL,00H
DIS_SECONDB:
显示秒的十位
MOVAL,1011B
CALLKEYCTR
CALLDELAY
MOVAL,MINUTEA
XLATLED
CMPADJUST,03H;
是否调整分的个位
JNEDIS_MINUTEA
DIS_MINUTEA:
显示分的个位
ADDAL,80H;
显示XX.XX中的点“.”
MOVAL,1101B
MOVBX,OFFSETLED
MOVAL,MINUTEB
CMPADJUST,04H;
是否调整分的十位
JNEDIS_MINUTEB
DIS_MINUTEB:
显示分的十位
MOVAL,1110B
CALLDELAY
LOOPSK1
JMPSK2
SK1:
JMPA2
SK2:
JMPA1
MYINT:
PUSHDS
PUSHAX
PUSHDX
MOVDX,IMB4_BYTE3
INAL,DX
清8259中断标志
MOVAL,63H;
根据中断号修改
OUT0A0H,AL
MOVAL,62H
OUT20H,AL
NOTFLASH;
中断处理程序
MOVKEYMARK,0B
CMPPAUSE,0B
JNEL1
INCSECONDA
CMPSECONDA,0AH
JCL1
MOVSECONDA,00H
INCSECONDB
CMPSECONDB,06H
MOVSECONDB,00H
INCMINUTEA
CMPMINUTEA,0AH
INCMINUTEB
MOVMINUTEA,00H
CMPMINUTEB,06H
MOVMINUTEB,00H
L1:
POPDS
POPAX
POPDX
IRET
KEYCTRPROCNEAR
MOVINKEY,AL
MOVDX,MY8255_C
INAL,DX
ANDAL,03H;
高六位清零
CMPAL,10B;
是否按下Y1行
JNEINY2
ADDINKEY,00H
JMPJUDGKEY
INY2:
CMPAL,01B;
是否按下Y2行
JNESKIP
ADDINKEY,10000B
JUDGKEY:
CMPINKEY,01110B;
是否按下C键
JNEKEY2
ANDSECONDA,00H;
时间位清零
ANDSECONDB,00H
ANDMINUTEA,00H
ANDMINUTEB,00H
SKIP:
JMPBACK
KEY2:
CMPINKEY,01101B;
是否按下G键
JNEKEY3
ANDPAUSE,0B;
启动计时
KEY3:
CMPINKEY,01011B;
是否按下P键
JNEKEY4
MOVPAUSE,1B;
暂停计时
JMPBACK
KEY4:
CMPINKEY,00111B;
是否按下M键
JNEKEY5
MOVAL,0FFH;
熄灭数码管,程序退出
MOVAX,4C00H
INT21H
KEY5:
CMPINKEY,11110B;
是否按下F键
JNEKEY6
CMPKEYMARK,0B
JNEKEY6
MOVKEYMARK,1B
MOVPAUSE,1B
是否已调整完分的十位
JETL
INCADJUST
TL:
ANDADJUST,00H
KEY6:
CMPINKEY,11101B;
是否按下6键
JNEBACK
CMPKEYMARK,0B
是否调整秒的个位
JNEAD1
INCSECONDA;
秒的个位加1
CALLOUTCLEAR;
判断溢出
AD1:
JNEAD2
CALLOUTCLEAR
AD2:
JNEAD3
AD3:
CALLOUTCLEAR
BACK:
RET
KEYCTRENDP
OUTCLEARPROCNEAR;
溢出清零程序
JCQ1
ANDSECONDA,00H
Q1:
JCQ2
Q2:
JCQ3
Q3:
JCQ4
Q4:
OUTCLEARENDP
DELAY:
PUSHCX;
延迟程序
MOVCX,1111H
DXMS:
LOOPDXMS
POPCX
CODEENDS
ENDSTART
3测试
利用proteus仿真软件进行仿真测试,测试结果如下:
总结
作为本学期计算机组成技术最后的课程设计,其综合性使我将本学期所学的内容融会贯通,将所学习的知识综合运用,将各芯片的使用方法和具体使用时的细节。
将课堂上的知识应用到实际的生活中并且遇到了之前从未想到的问题并自己和同学讨论设法解决。
在课程设计中,我们对实验原理有了更加深刻的认识,熟悉了protues仿真系统的使用,对8255、8253、8259芯片在实际中的应用有了更加深刻的理解。
在调试程序过程中,也使自己的编程与调试程序的能力得到了锻炼,同时理解了汇编、计算机所组成原理以及接口技术这三门课程之间的联系与融合渗透,也使我们体会到学习计算机接口技术的乐趣。
这次硬件部件设计与调试实践,使我学习了很多的东西。
通过两个礼拜的学习和实践,使我对所学的知识进行了系统的复习和巩固,同时,通过课设,培养和锻炼了我的动手能力,这一点非常重要,不仅对我以后的学习有帮助,还可以为以后的工作打下一定的基础。
这一次的课设对我的帮助很大,使我真正的认识到了理论与实际的区别,这将成为我的学习目标和动力,更进一步的挖掘自己的能力,使自己获得进一步的提高。
这段时间的学习,使我了解到了理论和实际之间的差别,第一次真正接触到了实际中的问题,并通过和老师、同学交流,加强了自身的分析问题、解决问题的能力。
同时,我也发现了自己在某些方面的不足,这是我以后要加以改进的方面。
在组织电路图的过程中使我也学会了如何搭建硬件电路,如何根据硬件电路图来编制相误码的程序,使我对硬件课程的学习有了更浓的兴趣,使我对我所学的这个方向服了更浓的兴趣。
虽然在做课设的过程中遇到过许多困难,犹其是思路一开始不正确的时候也产生过放弃的念头,但最终还是坚持了下来,终于把这个课设完整圆满的做完了。
参考文献
[1]李建忠编著.单片机原理及应用.西安:
西安电子科技大学出版社,2002
[2]李群芳,肖看编著.单片机原理、接口及应用.北京:
清华大学出版社,2005
[3]于海生编著.微型计算机控制技术.北京:
清华大学出版社,2008
[4]戴梅萼,史嘉权编著.微型计算机技术及应用(第3版).北京:
[5]江晓安,董秀峰编著.数字电子技术(第二版).西安:
西安电子科技大学出版社,2005