微机原理与汇编语言课程设计-多功能定时器设计.doc

上传人:爱问知识人 文档编号:5022424 上传时间:2020-01-29 格式:DOC 页数:21 大小:290KB
返回 下载 相关 举报
微机原理与汇编语言课程设计-多功能定时器设计.doc_第1页
第1页 / 共21页
微机原理与汇编语言课程设计-多功能定时器设计.doc_第2页
第2页 / 共21页
微机原理与汇编语言课程设计-多功能定时器设计.doc_第3页
第3页 / 共21页
微机原理与汇编语言课程设计-多功能定时器设计.doc_第4页
第4页 / 共21页
微机原理与汇编语言课程设计-多功能定时器设计.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《微机原理与汇编语言课程设计-多功能定时器设计.doc》由会员分享,可在线阅读,更多相关《微机原理与汇编语言课程设计-多功能定时器设计.doc(21页珍藏版)》请在三一文库上搜索。

1、中北大学微机原理与汇编语言课程设计任务书 2009/2010 学年第 二 学期学 院:电子与计算机科学技术学院专 业:计算机科学技术学 生 姓 名:学 号:设 计 题 目:多功能定时器设计起 迄 日 期: 2010.6.12-2010.6.25设 计 地 点:指 导 教 师:下达任务书日期: 2010 年 6 月 12 日微机原理与汇编语言课程设计任务书1设计目的:通过微机原理与汇编语言课程设计,使学生根据所学的微机原理与汇编语言知识,进一步学习掌握汇编语言程序设计知识,充分理解计算机内部的管理、接口内容以及系统功能调用。能针对一个简单的控制或汇编语言程序设计项目,做出分析,设计其硬件、软件,

2、达到预期的控制目的。2设计内容和要求(包括原始数据、技术参数、条件、设计要求等):设计内容:利用8086汇编语言,多功能定时器设计。设计要求: 主要功能:1、 具有7段数码管显示2、 圆盘指针式显示3、 具有操作提示功能4、 带夏令时/冬令时转换5、 最小设定时间为1分钟,最大设定时间:7天 。每天最多可置20组开与关,每星期最多可设置140组,可参照某些手机上的定时器功能。6、 利用键盘鼠标操作7、 菜单功能,所有功能可通过菜单执行8、 文件读写,把设置信息写入/读出文件,定时信息等9、 整点音乐提醒(注意此处应设计成背景音乐)10、 显示修改当前系统时间日期11、 秒表功能,具有起停等功能

3、12、 数码管和圆盘钟表大小及位置可调3设计工作任务及工作量的要求:组长王小帆:与同组同学协商完成本设计的实现方法和原理,合理分配所设计软件的功能模块,督促同组其他成员独立完成各自负责的模块,以及将全组其他同学的软件进行连接,完成整个设计任务。王小帆:绘制钟表(包括数码和模拟钟表)杜龙:声音编程,如制作背景音乐及嘀嗒声徐龙 孔艳萍:文件读写,如定时时间是否声音提醒,是否重复重复方式等等等陈继强:键盘及鼠标操作,如设置时间,定时开始结束等其他没有提及的功能由组长协同组员分配。在设计内容完成的条件下,编写微机原理与汇编语言课程设计说明书中北大学微机原理与汇编语言课 程 设 计 说 明 书学生姓名:

4、孔艳萍学 号:0706034448学 院:电子计算机科学技术专 业:计算机科学技术题 目:多功能定时器成绩 指导教师潘广贞 雷海卫 乔道迹2010 年 6月24日1. 引言通过微机原理与汇编语言课程设计,使学生根据所学的微机原理与汇编语言知识,进一步学习掌握汇编语言程序设计知识,充分理解计算机内部的管理、接口内容以及系统功能调用。能针对一个简单的控制或汇编语言程序设计项目,做出分析,设计其硬件、软件,达到预期的控制目的。2需求分析“时钟功能处理程序”是运行于Windows 系统下的应用软件,主要用于实现时钟显示 时钟调整以及倒计时功能。此程序为用户提供了一个简单的人机对话界面。在屏幕上显示系统

5、当前的时间以及操作方法,它可以接受用户对系统系统时间 颜色 声音的常规性修改,并在确认修改后实现定时闹钟,画面颜色更改等功能。3总体设计 下面从程序的整体流程、各个功能模块以及数据结构几个方面进行总体设计。 本程序的设计基本是参照微型计算机原理与接口技术教程里“汇编语言程序设计”一章中的DOS功能调用,中断程序的代码,然后设计出本程序各子程序的代码。 关于时钟信息的更新,由于试了好久都无法常驻内存,所以这里只好用最原始的办法延时与循环。延时的子程序是参照其他教程中发声程序的延时程序,利用in al,61h获得与cpu频率无关的延时。4. 详细设计文件读写主要是在键盘上输入信息,在界面上实现定时

6、器对声音,颜色,倒计时的控制。Press a to change the time 12-24 ! 按a键可实现时间12制到24制的转换Press c to edit the alarm time ! 按c键可实现对闹钟的设定。Press Q t to change color !按W=T可实现界面颜色的更改。Press b to reset!按b键可以重置时间。Press x to edit the final countdown!按x键可实现倒计时功能。Press ESC to exit ESC键为推出此界面。否 是 否 是 否 是 否 是结束延时是s?Call setTime是q?是a?

7、Call setDate判断输入?开始Call show_menu ;显示菜单更新时钟信息Call show_dt ;显示时间 程序流程图 5. 软件测试图1 总界面图2 字母a12制到24制小时转换图3 字母T实现界面颜色的转换6. 程序清单guangbiao MACRO num1,num2 ;带参数的宏 mov bh,0h ;本宏用于置光标的位置 mov ah,2h mov dh,num1 mov dl,num2 int 10hendmdispcolor macro color push ax push bx push dx push cx mov ah,02h ;设置调色板和边框 mov

8、 dh,0 mov dl,0 mov bh,0 int 10h mov ah,9 ;读取调色板和边框 在当前光标处按指定属性显示字符 mov bl,color mov cx,2000 mov al, int 10h guangbiao 0,0 call showmenu pop cx pop dx pop bx pop axendm.model small.stack.data.code.startupjmp install;大海音乐(默认)freq dw 196,220 dw 262,262,262,262,262,220,196 dw 262,262,262,262,294,262,220

9、,262 dw 294,294,294,294,294,262,220 dw 294,294,294,294,330,294,330,392 dw 440,440,392,440,392,330 dw 294,294,330,294,262,220,196,220 dw 262,262,262,262,262,220 dw 262,196,220 dw 440,440,392,440,524,440 dw 392,330,294,262,220,196,220 dw 262,262,262,262,294,262 dw 262,330,392 dw 440,440,440,440,524,44

10、0 dw 392,392,392,440,392,330,294 dw 262,262,262,262,294 dw 330,330,294 dw 262,262,262,262,524,440 dw 392,392,392,440,392,330,392 dw 440,524,524,440,392 dw 392,330,392 dw 440,440,440,440,524,440 dw 392,392,392,440,392,330,294 dw 262,262,262,262,392 dw 330,330,294 dw 262,262,262,262,294,330 dw 392,392

11、,330,392,330,392 dw 440 dw 9,9,196,660,294,294,262 dw 262,-1 ;音乐频率表 time dw 400,400 dw 400,200,400,400,800,400,400 dw 400,200,400,200,200,800,400,400 dw 400,200,400,400,800,400,400 dw 400,200,400,200,200,800,400,400 dw 400,800,400,800,400,400 dw 400,200,200,400,400,800,400,400 dw 400,200,400,400,800

12、,800 dw 1600,800,800 dw 400,800,400,800,400,400 dw 400,400,400,400,800,400,400 dw 400,800,400,800,400,200 dw 2400,400,400 dw 400,800,400,800,400,400 dw 400,800,200,200,800,400,400 dw 400,800,400,800,800 dw 2400,400,400 dw 400,800,400,800,400,400 dw 400,800,200,200,800,400,400 dw 800,400,800,400,200

13、dw 2400,400,400 dw 400,800,400,800,400,400 dw 400,800,200,200,800,400,400 dw 400,800,400,800,800 dw 2400,400,400 dw 400,800,400,800,400,400 dw 400,800,400,800,400,400 dw 3200 dw 800,400,400,400,400,400,400 dw 4000 ;延时表 freq0 dw 262,294,330,262 dw 330,349,392 dw 392,440,392,349,330,262 dw 294,196,262

14、 time0 dw 1600,800,800,1600 dw 400,400,400,400,800,800 dw 800,800,1600;两只老虎音乐menudb *ELECTRONIC CLOCK* ,0ah,0dh db 1.Press a to change the time 12-24 ! ,0ah,0dh db ,0ah,0dh db 2.Press c to edit the alarm time ! (press s to stop),0ah,0dh db ,0ah,0dhdb 3.Press x to edit the final countdown !(press s t

15、o stop) ,0ah,0dh db ,0ah,0dhdb 4.Press Q t to change color !,0ah,0dh db ,0ah,0dh db 5.Press b to reset,0ah,0dhdb ,0ah,0dh db 6.Press ESC to exit,0ah,0dh,$ tc db Please input the alarmtime (hh:mm:ss):,$tc_buff db 40 db ? db 40 dup (?)temp_hdb ?temp_mdb ?temp_sdb ?tx db Please input the final countdow

16、n time(00-99):,$tx_buff db 40 db ? db 40 dup (?)txtemp db ?msg db Current time is: time_h db ?,? db :time_m db ?,? db :time_sdb ?,?,0,0hoursdb ?secondsdb 0flag1db 0flag2db 0flag3db 0oldint1c dd ?newint1c procpush ax push bx push cx push dx push si push di push escmp flag1,01hjnz acdcall showtxtempac

17、d: mov ax,0200h ;获取系统时间,chhours clminutes DHseconds,均为BCD码格式 int 1ahmov hours,ch;把小时送到hours中,以防变换12和24进制后出现异常 cmp flag2,01h jnz notchg cmp ch,12h jc notchg mov al,ch pushf sub al,12h das popf mov ch,alnotchg:cmp flag1,01h;判断是否开始倒计时jnz notdocmp dh,secondsjz notdomov seconds,dhcmp txtemp,0hjz notdomov

18、 al,txtemppushfsub al,01hdas mov txtemp,alpopfnotdo: mov al,ch lea si,time_h call bcd mov al,cl lea si,time_m call bcd mov al,dh lea si,time_s call bcd mov ax,0b800h ;显存地址 采用直接写显存的方法输出字符 mov es,ax ;es:di 指向显存地址 mov di,160*12+108d lea si,msgdisp: mov al,cs:si inc si or al,al jz disp0 ;cs=ds cld stosb

19、 inc di ;将cs:si指向的一个字节传送到es:di jmp dispdisp0: pop es pop di pop si pop dx pop cx pop bx pop ax jmp cs:oldint1c ;新1CH中断的事情做完后调用原来的1CH中断iret;中断返回bcd: mov ah,al shr ah,1 shr ah,1 shr ah,1 shr ah,1 and al,0fh add ax,00 xchg ah,al mov cs:si,ax retnewint1c endp;中断结束showtxtemp procpush axpush espush dipush

20、 simov ax,0b800h mov es,ax ;es:di 指向显存地址 mov di,160*10+130dmov al,txtempmov ah,alshr ah,1shr ah,1shr ah,1shr ah,1and al,0fhadd ax,00push axmov al,ahstosbinc dipop axstosbpop sipop dipop espop axretshowtxtemp endpedittime_c procpush axpush bxpush cxpush dxpushfmov ah,0ch;清除键盘 缓冲区int 21h guangbiao 14,

21、0mov dx,offset tc ;显示设置闹铃时间的格式提示mov ah,09hint 21hmov dx,offset tc_buffmov ah,0ahint 21hguangbiao 15,0add dx,0hlea bx,tc_buffinc bxinc bxmov dh,bxsub dh,30h ;将输入数值09的ASC码转化成09的数字inc bxmov dl,bxsub dl,30hmov cl,10hmov al,dhmul cladd al,dlmov ch,almov temp_h,al;小时存放于temp_h变量中 inc bx inc bxmov dh,bx sub

22、 dh,30h inc bx mov dl,bx sub dl,30h mov cl,10h mov al,dh mul cl add al,dlmov ch,al mov temp_m,al ;分钟存放于temp_m变量中 inc bx inc bx mov dh,bx sub dh,30h inc bx mov dl,bx sub dl,30h mov cl,10h mov al,dh mul cl add al,dlmov ch,almov temp_s,al ;秒钟存放于temp_s变量中 popf pop dx pop cx pop bx pop axjmp compreteditt

23、ime_c endpedittime_x procpush axpush bxpush cxpush dxpushfmov ah,0ch;清除键盘 缓冲区int 21h guangbiao 15,0mov dx,offset tx ;显示设置倒计时闹铃时间mov ah,09hint 21hmov dx,offset tx_buffmov ah,0ahint 21hguangbiao 16,0add dx,0hlea bx,tx_buffinc bxinc bxmov dh,bxsub dh,30h ;将输入数值09的ASC码转化成09的数字inc bxmov dl,bxsub dl,30hmo

24、v cl,10hmov al,dhmul cladd al,dlmov ch,almov txtemp,al;小时存放于txtemp变量中mov flag1,01h;设置标志位,以判断是否要求倒计时popf pop dx pop cx pop bx pop axretedittime_x endpchangecolor proc push ax in al,60h ;60h:键盘输入数据缓冲区 cmp al,10h jne i1 dispcolor 41h ;Q显示41h(红底蓝字)i1: cmp al,11h jne i2 dispcolor 20h ;W显示20h(绿底黑字)i2: cmp

25、 al,12h jne i3 dispcolor 02h ;E显示02h(黑底绿字)i3: cmp al,13h jne i4 dispcolor 40h ;R显示40h(红底黑字)i4: cmp al,14h jne i5 dispcolor 0f0h ;T显示0f0h(白底黑字)i5: pop ax retchangecolor endpshowmenu procpush axpush dxmov ah,09hmov dx,offset menuint 21hpop dxpop axretshowmenu endpyinyue proc ;音乐子程序push cs pop dscmp fl

26、ag3,01hjnz l0mov si,offset freq0 mov di,offset time0jmp l1l0: mov si,offset freq mov di,offset timel1: mov cx,si cmp cx,-1 jz return mov bx,di call gensound add si,2 add di,2in al,60hcmp al,1fhjz return jmp l1return: mov flag1,0hmov flag3,0hjmp f0 ;闹铃音乐结束返回主界面yinyue endp gensound proc near push dx m

27、ov al,0b6h ;计数器选择:计数器2;数据读/写格式:16 位计数先读写高字节,后读写低字节;工作方式:工作方式3;数制选择:二进制 out 43h,al ;43H可编程中断计时器,控制字寄存器(模式设置端口,写入方式控制字) mov dx,08h mov ax,3208h ;设置输出频率537096Hz(DX:AX) div cx ;控制实际输出频率ax=537096Hz/cx out 42h,al ;先写入低 8位 mov al,ah out 42h,al ;后写入高 8位(参数据读/写格式及计数器选择) in al,61h ;取得设备控制寄存器开关量 mov ah,al ;暂存以

28、下次恢复 or al,3 ;D0D1=11接通扬声器 out 61h,al ;设置设备控制寄存器开关量l2: push dx push ax mov dx,8h mov ax,0f05hs1: sub ax,1 sbb dx,0 jnz s1 pop ax pop dx dec bx jnz l2 mov al,ah out 61h,al pop dx retgensound endpcheck_c procpush axpush bxpush cxpush dxpush simov ax,0200hint 1ahmov ch,hours cmp ch,temp_h jnz cf cmp cl

29、,temp_m jnz cf cmp dh,temp_sjnz cfcall yinyuecf:pop sipop dxpop cxpop bxpop ax retcheck_c endpcheck_x proccmp flag1,01hjnz xfcmp txtemp,00hjnz xfcall yinyuexf:retcheck_x endpinstall:push cs pop ds mov ax,351ch ;获取中断向量ES:BX指向中断向量 int 21h mov word ptr oldint1c,bx mov word ptr oldint1c+2,es lea dx,newi

30、nt1c mov ax,251ch ;设置中断向量 DS:DX指向中断向量 int 21hdispcolor 0f0hguangbiao 14,0comp:call changecolorcall check_ccall check_xf0:in al,60hcmp al,2ehjnz f1call edittime_cf1:cmp al,2dhjnz f2call edittime_x f2:cmp al,1ehjnz f3xor flag2,01h;设置标志位,以判断是否要求变换12进制和24进制f3:cmp al,30h;重置jnz f4dispcolor 0f0hmov flag1,0

31、hmov flag2,0hmov flag3,0hguangbiao 14,0f4:cmp al,01h;按 ESC键退出jnz f5jmp quitf5:cmp al,20hjnz f6xor flag3,01hmov ah,0ch;清除键盘 缓冲区 int 21h f6:jmp compquit: .exit 0end7. 参考资料1曹加恒等编.新一代汇编语言课程设计. 北京:高等教育出版社,2003.6.第20-40页2王爽编.汇编语言. 北京:清华大学出版社,2003.5.第50-78页3杨路明等编.汇编语言程序设计. 长沙:中南大学出版社,2005.8.第112-200页4封博琴,吴宁.微型计算机与接口技术.北京:清华大学出版社,2007.4.第13-89页.5郑学坚编 微型计算机技术及应用 北京:清华大学出版社,2003.装订次序:1.课程设计说明书封面 2.任务书封面 3.任务书 4. 设计说明书正文

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1