微机原理课程设计-电子琴的设计微机原理课程设计-电子时钟设计_第1页
微机原理课程设计-电子琴的设计微机原理课程设计-电子时钟设计_第2页
微机原理课程设计-电子琴的设计微机原理课程设计-电子时钟设计_第3页
微机原理课程设计-电子琴的设计微机原理课程设计-电子时钟设计_第4页
微机原理课程设计-电子琴的设计微机原理课程设计-电子时钟设计_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计任务书学生姓名:专业班级:电气指导教师:工作单位:自动化学院题目:计算机电子琴软件软件设计初始条件:1.用于调试程序的IBM兼容PC机一台;2.安装DOS/WIN98操作系统或运行于DOS/WIN98兼容方式;3.EDIT等文本编辑器输入80x86汇编程序,MASM5.0编译及链接程序。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.使用汇编语言设计一个运行于计算机的电子琴软件,软件应实现弹奏功或演奏。其中弹奏:用户每按一琴键弹奏相应音符;演奏:按下某键后自动弹奏预存琴谱功能;还可以附加变调、变速和记录创作等其它功能。2.说明书撰写格式应符合《课程设计说明书统一书写格式》。时间安排:1.程序框图设计,3天2.编程,4天3.调试,3天4.编写设计报告,4天指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要································································=1\*ROMANI1设计任务和思路····················································11.1设计任务······················································11.2设计思路······················································12更件部分工作原理··················································22.18255工作原理·················································22.28253工作原理·················································23程序流程图························································43.1主程序流程图··················································43.2演奏子程序流程················································53.3音乐播放子程序流程············································63.4弹奏子程序流程图··············································63.5发音子程序流程图·············································74各部分功能实现说明················································74.1发音部分功能实现··············································74.2变调功能的实现················································84.3弹奏功能的实现················································84.4演奏功能的实现················································94.4.1歌曲选择功能实现········································94.4.2音乐播放功能实现········································95程序运行结果·····················································10结束语·····························································12参考文献···························································13附录程序清单······················································14成绩评定表·························································19摘要汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。利用汇编语言能够直接访问与硬件相关的存储器或I/O端口,从而最大限度地发挥硬件的功能。本文主要介绍了利用汇编语言设计一个运行于计算机的电子琴软件,软件能够实现弹奏,演奏的功能,当按下弹奏键时,实现弹奏功能,发出音符对应频率的声音,按下演奏键时,实现演奏功能,播放预存的音乐,按下指定的音调选择按键后,选择低音,中音或高音,则分别用低音,中音或高音进行弹奏或演奏。首先介绍了PC机内扬声器的控制电路,接着介绍了相关接口芯片8255和8253的内部结构和工作原理,接着讲述了各部分功能的具体实现方法。关键词:汇编语言,8255,8253,扬声器PAGEPAGE50计算机电子琴软件设计1设计任务和思路1.1设计任务使用汇编语言设计一个运行于计算机的电子琴软件,软件应实现弹奏功能或演奏功能。其中弹奏:用户每按一琴键弹奏相应音符;演奏:按下某键后自动弹奏预存琴谱功能;还可以附加变调、变速和记录创作等其它功能。软件预想功能为:按数字1-8为弹奏功能;按字母p为演奏功能;按d选择低音,按z选择中意,按g选择高音。1.2设计思路电子琴的设计实际上就是要设计一个程序,能够通过该程序控制PC机内扬声器的发声规律,按下相应的按键后,扬声器能发出指定频率的声音。PC机内的扬声器是通过并行接口芯片8255和定时芯片8253来控制发音的,其电路连接方式如下图所示。8255APB1PB08255APB1PB0CLK28253GATE2OUT2&扬声器1.19318MHZ图1PC机内扬声器控制电路由图可知,扬声器是由8253通道2产生的方波信号和8255的PB1相与后驱动发声的,且通道2的门信号由8255的PB0提供,要想让扬声器发声,PB0和PB1必须同时为高电平,因此,可以通过对8255的PB0和PB1的设置来控制扬声器的开通和关断,而其发音频率可以通过对8253通道2的计数初值的设置来控制。所设计程序的任务就是要通过对按键的判断来设置8255的PB0和PB1输出电平的高低,以及8253通道2计数初值的设置。计数初值N=时钟频率/音阶频率.各音阶的频率如下表所示。表1各音符频率表音符1234567频率(低)131147165175196220247频率(中)262294330349392440494频率(高)5245886606987848809882硬件部分工作原理2.18255工作原理8255的内部结构图如图2所示,它有3个数据端口,分为两组,A组由A口和C口高四位组成,B组由B口和C口低四位组成。其方式控制字如图3所示。图28255内部结构图图38255方式控制字图38255方式控制字方式控制字的特征位D0D7D6D5D4D3D2D11A组工作方式00——方式001——方式11——方式2B组工作方式0——方式01——方式1A口输入/输出1——输入0——输出PC7PC4输入/输出1——输入0——输出B口输入/输出1——输入0——输出PC3PC0输入/输出1——输入0——输出PC机内8255的A口,B口,C口和控制口的端口地址分别为:60H,61H,62H,63H。2.28253工作原理8253芯片中有3个计数通道,称为通道0,1,2,它们与外部电路相连的信号线有3根:CLK,GATE,OUT,CLK是脉冲输入端,GATE是门控信号,OUT是输出信号,计数器工作在减1状态。其内部结构图和方式控制字格式如图4,图5所示。其中当计数器工作在方式3时,输出信号为方波信号。内内部总线A1GATE0CLK0OUT0GATE1CLK1OUT1GATE2CLK2OUT2D0-D7计数器0计数器2计数器1控制寄存器A0数据总线缓冲器R/W逻辑电路图48253内部结构图D7D6D5D4D3D2D1D0计数器选择计数器选择00计数器001计数器110计数器211不用00计数器锁存01读写低8位10读写高8位11读写16位工作方式选择000方式0001方式1×10方式2×11方式3100方式4101方式5计数方式0二进制1BCD计数图58253控制字格式PC机内8253的通道0,通道1,通道2,控制口的端口地址分别为:40H,41H,42,43H。因为扬声器是由通道2来控制的,故应选择通道2,工作方式选为方式3,输出的信号则为方波信号。3程序流程图3.1主程序流程图主程序的流程图如下图所示:为d?为z?为g?开始显示输入提示信息从键盘读入字符为q?结束选择低音选择中音选择高音为d?为z?为g?开始显示输入提示信息从键盘读入字符为q?结束选择低音选择中音选择高音显示输入提示从键盘读入字符为q?为p?为1~8?调用演奏子程序调用弹奏子程序YNYNYNYNNYYNYN图6主程序流程图3.2演奏子程序流程图当按键为p为时,调用音乐播放子程序,音乐播放子程序的流程图如下图所示。显示输入提示从键盘读入字符为q?为1?为2?返回调用音乐1播放子程序调用音乐2播放子程序显示输入提示从键盘读入字符为q?为c?返回NYNNYYYNNY显示输入提示从键盘读入字符为q?为1?为2?返回调用音乐1播放子程序调用音乐2播放子程序显示输入提示从键盘读入字符为q?为c?返回NYNNYYYNNY图7音乐播放子程序流程图3.3音乐播放子程序流程图演奏时,通过判断按键为1或2来调用音乐播放子程序1或2,音乐播放子程序流程图如图8所示。计数器清零CL自增1CL>歌曲长度?返回查表得相应频率计算计数初值调用发音子程序NY计数器清零CL自增1CL>歌曲长度?返回查表得相应频率计算计数初值调用发音子程序NY图8音乐播放子程序流程图3.4弹奏子程序流程图当按键为1-8时,调用演奏子程序,演奏子程序的流程图如下图所示:查表得相应频率计算计数初值查表得相应频率计算计数初值返回调用发音子程序图9演奏子程序流程图3.5发音子程序流程图在弹奏和演奏时都需调用发音子程序,发音子程序的作用是控制扬声器的发音,其流程图如下:8253初始化8253初始化开扬声器延时关扬声器返回图10发音子程序流程图4各部分功能实现说明4.1发音部分功能实现由更件的连接形式可知,扬声器的开断是由8255的PB0和PB1以及8253通道2同时控制的,PB0和PB1同时为高电平时,扬声器开,有一个为低电平时,扬声器关断,又知8255B口地址为61H,8253通道2地址为42H,控制口地址为43H。具体程序编写如下。8253初始化程序段:moval,10110110b;选择8253的通道2,并设置为工作方式3out43h,almovax,bxout42h,al;将计数初值的低8位写入计数通道moval,ahout42h,al;将计数初值的高8位写入计数通道开扬声器程序段:inal,61h;读入B口数据oral,03h;将PB0和PB1置1out61h,al;将设置好的数据送回B口关扬声器程序段:inal,61h;读入B口数据andal,0fch;将PB0和PB1置0out61h,a;将设置好的数据送回B口4.2变调功能的实现扬声器发音的频率是由8253产生方波的频率决定的,而方波频率又是由通道的计数初值来决定的,因此可以通过改变通道的计数初值来实现变调功能。计数初值N=时钟频率/音阶频率,时钟频率为1.19318MHZ=1234DCH,可以将相应音调对应的时钟频率存入内存单元,当选择相应的音调时,计算计数初值时,采用对应的时钟频率值,具体程序如下。cmpal,'d';为d则选择低音jnej1movnum2,50jmpchoicej1:cmpal,'z';为z则选择中音jnej2movnum2,12hjmpchoicej2:cmpal,'g';为g则选择高音jneloop0movnum2,06h其中,num1和num2中存放的是时钟频率值,num1中固定为34DCH,选择低音时,num2值设为50,中音时设为12H,高音时设为06H。计算计数初值程序如下:movax,num1movdx,num2div音符频率通过这样的设置,即可实现电子琴的变调功能。4.3弹奏功能的实现当按键为数字1-8时,选择弹奏功能,通过对按键的判断,求得其偏移地址,然后通过查表得其相应频率值,再由上述计算计数初值的方法求得计数初值,然后将计数初值送人8253的通道2,最后调用发音子程序即实现弹奏功能。具体程序段如下:subal,31h;求偏移量shlal,1movbl,al;保存偏移量movbh,0movax,num1;计算计数初值movdx,num2divwordptr[tab+bx]movbx,ax;保存计数初值4.3演奏功能的实现4.3.1歌曲选择功能实现当按键为p时,选择演奏功能,播放预存的音乐,由于预存了两首歌曲,因此需进行选择,按下p后,显示输入提示信息,按1或2选择对应的歌曲,然后调用相应的音乐播放子程序,播放完后显示输入提示信息,按q退出,按c继续。具体程序实现如下:loop2:movdx,offsetmesg1;显示输入提示信息movah,09hint21hmovah,07h;从键盘读入一个字符int21hcmpal,'q';为q则退出jechoicecmpal,'1';为1则选择歌曲1jnenext1callmusic1jmploop3next1:cmpal,'2';为2则选择歌曲2jneloop2;不为q,1,2则重新选择callmusic2loop3:movdx,offsetmesg2;播放完后显示输入提示信息movah,09hint21hmovah,7;从键盘读入一个字符int21hcmpal,'q';为q则返回jechoicecmpal,'c';为c则继续播放jeloop2jmploop34.3.2音乐播放功能实现选择歌曲后,调用对应的音乐播放子程序,音乐播放需用到循环结构,首先将计数器清零,接着计数器自增1,求得偏移量,然后通过查表的到相应的频率,再计算计数初值,将计数初值送人8253计数通道,调用发音子程序,若计数器的值大于歌曲长度,则返回。具体程序段如下。movcl,0;将计数器清零ad:inccl;计数器值自增1cmpcl,31;计数器值若大于歌曲长度,则返回jereturnmoval,clsubal,1;求偏移量shlal,1movbl,al;保存偏移量movbh,0movax,num1;计算计数初值movdx,num2divwordptr[song2+bx]movbx,axcallspeaker;调用发音子程序jmpad5程序运行结果运行程序后,显示如下界面,等待输入字符。图11程序运行结果图1按提示输入字符,按q则退出,按d选择低音,按z选择中音,按g选择高音,选择音调后,显示如下界面:图12程序运行结果图2等待输入字符,按q则退出,按p则演奏,按数字1-8则弹奏。按下p后,程序运行如下:图13程序运行结果图3按提示输入字符,按下q则返回,按下1或2进行歌曲选择,歌曲播放完后程序运行如下:图14程序运行结果图4按提示按下键盘,若按下q,则推出,若按下c,则继续播放歌曲。下面是按下c后的运行结果:图15程序运行结果图5结束语通过这次课程设计,我从中学到了许多从课本上学不到的东西,锻炼了自己编程的能力,最后程序运行时能够实现目标,我感到很有成就感,从中也获得了很多乐趣,当然,最重要的是加深了我对课本理论知识的理解。当刚看到这个课设题目时,我感到无从下手,因为我都不知道PC机的内部具体结构,从理论课上只是了解了CPU的结构和工作原理,以及几个接口芯片的工作原理,还有汇编语言的一些基本指令。但我没有被吓到,我冷静下来思考后,发现其本质就是控制PC机内扬声器的发音,通过查阅资料我了解了PC机内扬声器的电路连接形式,发现它是由接口芯片8255和8253共同控制的,8255的PB0作为8253通道2的门信号,而8255的PB1和8253通道2的输出相与后的信号作为扬声器的驱动信号,了解了其内部接线方式后,思路也就有了,要想让扬声器发声,8255的PB0和PB1必须同时为高电平,其中之一为低电平时,扬声器就不能发声,而发声的音调则可通过改变8253的计数初值来实现,接下来的任务就是通过编程来控制8255和8253,从而间接地控制扬声器的发声规律,而8255和8253这两个接口芯片在理论课上都已介绍过,对其工作原理和编程方法都有一定的了解,看到这些熟悉的内容时,我淡定了很多。有了思路之后,我并没有急着写程序,因为我怀疑是不是每台PC机的扬声器接线方式都是这样的,所以我开始只编了一段控制扬声器发音的程序,来看看程序运行时扬声器到底发不发音,结果发声了,这让我很惊喜,也很有动力,更加激发了我的兴趣,接下来我就开始编写实现指定功能的程序了,首先是最简单的弹奏功能,通过对按键的判断来发出相应频率的声音,因为要判断按键,所以很自然地就想到了CMP指令,在计算计数初值时,因为要用到相应音符的频率,所以需要将按键转换为音符的频率,我开始想用课本上常见的XLAT换码指令,但AL存放的数最大为128,很明显容量不够,于是我采用了基址+变址的寻址方法,在编程的过程中,由于要程序实现多个功能,所以用子程序的结构会比较方便,需要完成某个功能时,只需调用相应子程序就可以了,这样会使得程序的结构清楚明了;在开扬声器和关扬声器之间需要一定的延时,当把计数器置为0ffffh时,延时还是显得太短,于是延时我采用了AX和CX相配合的方式,使得延时达到预期的目的;在完成基本功能后,我还试着加上一些附加功能,比如变调,录音,通过我的不断尝试,终于把变调功能实现了,但录音功能没能像预期的那样。总之,这次课程设计让我学到了许多从课本上学不到的知识,加深了对理论知识的理解,激发了我对汇编语言的兴趣。上理论课时,只是老师讲,我们听,那些指令让我感到很枯燥,因为不知道它到底有什么作用,而这次课程设计刚好把这些指令应用到了实际中来,加深了对各种指令功能的理解,最后功能实现时,感到很有成就感,觉得汇编语言很神奇,激发了我对它的兴趣。参考文献[1]彭虎,周佩玲.微机原理与接口技术(第二版).电子工业出版社,2010[2]陈慧杰.计算机扬声器发声的控制.内蒙古民族大学出版社,2001[3]PeterAbel著,沈美明等译.IBMPC汇编语言设计程序.人民邮电出版社,2002[4]冯继超.微机原理实验指导书.武汉理工大学出版社,2010附录程序清单datasegmentmesgdb'pressqtoquit,pressdorzorhtochoseyindiao',0ah,0dh,'$'mesg1db'pressqtoreturn,press1or2tochosemusic',0ah,0dh,'$'mesg2db'pressqtoreturn,pressctocontinue',0ah,0dh,'$'mesg3db'pressqtoreturn,pressptoplaymusic,press1~8tohandplay',0ah,0dh,'$'num1dw34dchnum2dw12htabdw262,294,330,347,392,440,494,524song1dw262,294,330,262,262,294,330,262dw330,347,392,330,347,392,392,440dw392,347,330,262,392,440,392,347dw330,262,392,262,392,392,262,392;两只老虎song2dw330,330,347,392,392,347,330,294dw262,262,294,330,330,294,294,330dw330,347,392,392,347,330,294,262dw262,294,330,294,262,262;欢乐颂dataendscodesegment assumecs:code,ds:datastart:movax,datamovds,axloop0:movdx,offsetmesg;显示输入提示信息movah,09hint21loop1:movah,07h;读入字符int21hcmpal,'q';为q则退出jedonecmpal,'d';为d,选择低音jnej1movnum2,50jmpchoicej1:cmpal,'z';为z选择中音jnej2movnum2,12hjmpchoicej2:cmpal,'g';为g选择高音jneloop0movnum2,06hchoice:movdx,offsetmesg3movah,09hint21hput1:movah,07hint21hcmpal,'q';为q则返回jeloop0cmpal,'p';为p选择演奏jnenextcallplayjmpput1next:cmpal,'1';为1-8,选择弹奏jlloop1cmpal,'8'jgput1callhandjmpput1handprocnear;弹奏子程序subal,31hshlal,1movbl,almovbh,0movax,num1movdx,num2divwordptr[tab+bx]movbx,axcallspeakerrethandendpplayprocnear;演奏子程序loop2:movdx,offsetmesg1movah,09hint21hmovah,07h;读入字符int21hcmpal,'q';为q则返回jechoicecmpal,'1';为1,播放歌曲1jnenext1callmusic1jmploop3next1:cmpal,'2';为2,播放歌曲2jneloop2callmusic2loop3:movdx,offsetmesg2movah,09hint21hmovah,7;读入字符int21hcmpal,'q';为q则退出jechoicecmpal,'c';为c则继续jeloop2jmploop3retplayendpmusic1procnear;音乐1播放子程序movcl,0ad:incclcmpcl,33jereturnmoval,clsubal,1;取偏移量shlal,1movbl,al;保存偏移量movbh,0movax,num1;计算计数初值movdx,num2divwordptr[song1+bx]movbx,axcallspeakerjmpadreturn:retmusic1endpmusic2procnear;音乐2播放子程序movcl,0ad:incclcmpcl,31jereturnmoval,clsubal,1shlal,1movbl,almovbh,0movax,num1movdx,num2divwordptr[song2+bx]movbx,axcallspeakerjmpadreturn:retmusic2endpspeakerprocnear;发音子程序moval,10110110bout43h,almovax,bxout42h,almoval,ahout42h,al;8253初始化inal,61h;开扬声器oral,03hout61h,alcalldelayinal,61h;关扬声器andal,0fchout61h,alretspeakerendpdelayprocnear;延时子程序pushaxpushcxmovax,12loop4:movcx,0ffffhloop5:looploop5decaxjnzloop4popcxpopaxretdelayendpdone:movax,4c00hint21hcodeendsendstart本科生课程设计成绩评定表姓名刘沛性别男专业、班级电气0901班课程设计题目:计算机电子琴软件设计课程设计答辩或质疑记录:成绩评定依据:评定项目1.选题合理、目的明确(10分)2.设计方案正确、具有可行性、创新性(20分)3.设计结果(20分)4态度认真、学习刻苦、遵守纪律(10分)5.设计报告的规范化、参考文献充分(20分)6.答辩(20分)7.总分(100分) 最终评定成绩(以优、良、中、及格、不及格评定)指导教师签字:年月日2010级微机原理课程设计实验报告设计题目:电子时钟设计班级:电信10102班分组名单:2012-6-28目录第一章设计部分1.1设计目的…………11.2设计要求…………11.3设计思路…………1第二章实现部分2.1、分析论证2.1.1显示模块……………………12.1.2时钟运算模块………………12.1.3对时模块……………………22.2、原理说明………………………22.3、设计电路图……………………22.3.18086最小工作方式…………22.3.2秒脉冲发生器………………32.3.3时、分调整电路……………32.3.4.显示电路………………………42.4、元件功能说明2.4.1.8253的主要功能……………42.4.2.D触发器74ls273管脚排列图及功能表介绍………………52.4.3单向总线驱动器74ls244功能介绍…………52.5、程序清单…………62.6、调试过程遇到问题及解决方法…………………9第三章电子时钟使用说明3.1电子时钟按键说明第四章学习心得附录参考文献………………9第一章设计部分1.1设计目的学习掌握protues软件功能及其使用方法熟练掌握TND86/88教学系统的基本操作和调试程序的各种指令。熟练掌握8086CPU的使用与编程调试程序的方法。掌握8253定时/计数器的工作原理、工作方式及其应用编程。练习7SEG-MPX8-CA-RED数码管的显示编程方法。1.2、设计要求利用8253定时器设计一个具有时、分、秒显示的电子时钟,并定义一个启动键,当按下该键时时钟从当前设定值(可在显示缓冲区中予置)开始走时。1.3、设计思路电子时钟主要由显示模块、对时模块和时钟运算模块三大部分组成。其中对时模块和时钟运算模块要对时、分、秒的数值进行操作,并且秒计算到60时,要自己清零并向分进1;分计算到60时,要自己清零并向时进1;时计算到24时,要清零。这样,才能循环记时。显示时利用7段显示器显示六位十进制数据。前两个显示小时,中间两个显示分钟,后两个显示秒。时钟的运算是利用中断来实现的,利用8253的模式三输出一定频率的方波作为触发中断的条件。8253A可编程定时/计数器的输入时钟为100KHz,设定时/计数器0的计数初值为100,工作在方式3,即方波发生器,其输出的1KHz方波作定时/计数器2的时钟。定时/计数器2的初值设为1000,工作在方式2,即每隔1s输出负脉冲,取反后用作不可屏蔽中断的中断申请信号,在中断服务程序中计算时间,并通过74ls273并行输出到数码管显示。第二章实现部分2.1、分析论证2.1.1、显示模块利用数码管的显示功能来设计。数码管是由八个条形发光二极管组成的,这些发光二极管的阴极是互相连接在一起的,所以称为共阴极数码管。通过在这八个发光二极管的阳极加+5V或0V的电压使不同的二极管发光,形成不同的字符和数字。电子时钟用到的是0到9十个数字,他们所对应的字符表依次是3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、6FH。该模块显示时先将保存在数据单元的当前时间包括小时和分钟读取出来,把十六进制数字转化成十进制用四个字节分别存放小时和分钟,并把这四个数值通过74ls273端口输出给数码管显示。2.1.2、时钟运算模块该模块的主要功能是对时、分、秒的运算,并把运算出的最终结果存到事先已经开辟的内存单元里,以便显示模块即时地显示出来。该模块可以细分为秒定时模块和运算模块。秒定时模块负责提供中断信号,由于CPU运算模块中的指令消耗一定的时间,所以中断信号最好通过硬件来实现,选择的是8253定时/计数器,但又因为8253所能提供的信号的周期时毫秒级的,因此必须通过软件的方法在运算模块中设置一个统计中断次数的变量,并且这一变量必须事先在内存里开辟存储单元。中断信号是8253的计数器2工作方式为方式2时,同过设置计数器2的初值来产生一个1s的脉冲信号。运算模块负责时、分、秒的计算,该模块主要通过8086的NMI信号中断来实现,首先将秒定时模块提供的中断信号为8086的NMI中断请求信号。但由于每1s一次中断请求。所以在中断服务程序必须利用已申请内存单元count来统计中断请求的次数,只有当count的值为1000时,才能让秒单元内的数值加1。另外,在中断服务程序里,必须对秒、分和时的单元内的数值进行判断,当秒加到60时,分必须加1、秒清零;当分加到60时,时加1、分清零。当时加到24啊,直接清零。2.1.3、对时模块该模块主要功能是修改小时、分钟内存单元的数值。在对时的时候,秒继续走时,并且在对分进行调整的时,时单元内的数值不变。由以上分析可见,对时、分的调整用两个优先级高于NMI的中断来完成。两个中断源的中断请求信号只需直接接在两个按键即可起到对时作用。2.2、原理说明电子时钟主要由74ls273锁存器、8253定时/计数器、74ls244反相器、LED数码显示管和两个按键组成。主要用8086的NMI的中断服务程序完成秒、分、时的运算即计时功能,两个开关的中断服务程序完成调时、调分功能。8253用来产生1s的脉冲信号作为NMI的中断请求信号。74ls273负责将内存里的时位和分位秒位值输出到数码管。2.3、设计电路图电子时钟的完整电路图如下:2.3.1.8086最小工作方式2.3.2秒脉冲发生器2.3.3时、分调整电路2.3.4.显示电路2.4、元件功能说明2.4.1、8253的主要功能:可编程定时器/计数器,其定时与计数功能可由程序灵活地设定,设定后与CPU并行工作,不占用CPU的时间。计数器2工作在模式3方式下,提供计算一秒的中断请求信号。2.4.2、D触发器74ls273管脚排列图及功能表介绍74LS273是一种带清除功能的8D触发器,1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作数据锁存器,地址锁存器。2.4.3、单向总线驱动器74ls244功能介绍74LS244是8路3态单向缓冲驱动,也叫做总线驱动门电路或线驱动。简单地说,它有8个输入端,8个输出端,可以增加信号的驱动能力.为单向驱动。A为输入,Y为输出,高电平有效。2.5、程序清单.MODELSMALL.8086.STACK.CODE.STARTUPNMI_INIT:PUSHES;nmi不可屏蔽中断向量表初始化XORAX,AXMOVES,AXMOVAL,02HXORAH,AHSHLAX,1SHLAX,1MOVSI,AX;相当于cs,ip入栈MOVAX,OFFSETNMI_SERVICE;调用中断处理程序MOVES:[SI],AXINCSIINCSIMOVBX,CS;?MOVES:[SI],BXPOPES;定时器初始化MOVAL,00110111BMOVDX,0406HOUTDX,ALMOVDX,0400HMOVAX,0100HOUTDX,ALMOVAL,AHOUTDX,ALMOVAL,10110101BMOVDX,0406HOUTDX,ALMOVDX,0404HMOVAX,1000HOUTDX,ALMOVAL,AHOUTDX,ALLOOP0:;主任务CALLKEYCALLDISPJMPLOOP0NMI_SERVICE:;中断服务程序PUSHAXMOVAL,SECADDAL,1DAAMOVSEC,ALCMPSEC,60HJBEXITMOVSEC,0MOVAL,MINADDAL,1DAAMOVMIN,ALCMPMIN,60HJBEXITMOVMIN,0MOVAL,HOUADDAL,1DAAMOVHOU,ALCMPHOU,24JBEXITMOVHOU,0EXIT:POPAXIRETDISPPROCNEARMOVAL,0FFH;不显示MOVDX,0201HOUTDX,ALMOVBL,SECANDBX,000FHMOVSI,BXMOVAL,SITUATION[SI];段码MOVDX,0200HOUTDX,ALMOVAL,0FEH;秒个位MOVDX,0201HOUTDX,ALCALLDELAYMOVAL,0FFH;不显示MOVDX,0201HOUTDX,ALMOVBL,SECANDBX,00F0HMOVCL,4SHRBX,CLMOVSI,BXMOVAL,SITUATION[SI];段码MOVDX,0200HOUTDX,ALMOVAL,0FDH;秒十位MOVDX,0201HOUTDX,ALCALLDELAYMOVAL,0FFH;不显示MOVDX,0201HOUTDX,ALMOVAL,40H;段码MOVDX,0200HOUTDX,ALMOVAL,0FBH;秒个位MOVDX,0201HOUTDX,ALCALLDELAYMOVAL,0FFH;不显示MOVDX,0201HOUTDX,ALMOVBL,MINANDBX,000FHMOVSI,BXMOVAL,SITUATION[SI];段码MOVDX,0200HOUTDX,ALMOVAL,0F7H;分个位MOVDX,0201HOUTDX,ALCALLDELAYMOVAL,0FFH;不显示MOVDX,0201HOUTDX,ALMOVBL,MINANDBX,00F0HMOVCL,4SHRBX,CLMOVSI,BXMOVAL,SITUATION[SI];段码MOVDX,0200HOUTDX,ALMOVAL,0EFH;分十位MOVDX,0201HOUTDX,ALCALLDELAYMOVAL,0FFH;不显示MOVDX,0201HOUTDX,ALMOVAL,40H;段码MOVDX,0200HOUTDX,ALMOVAL,0DFH;秒个位MOVDX,0201HOUTDX,ALCALLDELAYMOVAL,0FFH;不显示MOVDX,0201HOUTDX,ALMOVBL,HOUANDBX,000FHMOVSI,BXMOVAL,SITUATION[SI];段码MOVDX,0200HOUTDX,ALMOVAL,0BFH;时个位MOVDX,0201HOUTDX,ALCALLDELAYMOVAL,0FFH;不显示MOVDX,0201HOUTDX,ALMOVBL,HOUANDBX,00F0HMOVCL,4SHRBX,CLMOVSI,BXMOVAL,SITUATION[SI];段码MOVDX,0200HOUTDX,ALMOVAL,07FH;时十位MOVDX,0201HOUTDX,ALCALLDELAYRETDISPENDPKEYPROCNEARMOVDX,0600HINAL,DXTESTAL,01HJNZNEXTHOUCALLDISP;消抖CALL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论