微机原理课程设计——电子时钟设计2010级微机原理课程设计实验报告设计题目:电子时钟设计班级:电信10102班分组名单:2012-6-283目录第一章设计部分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电子时钟按键说明第四章学习心得附录参考文献………………………………………………………………………………94第一章设计部分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、时钟运算模块5该模块的主要功能是对时、分、秒的运算,并把运算出的最终结果存到事先已经开辟的内存单元里,以便显示模块即时地显示出来。该模块可以细分为秒定时模块和运算模块。秒定时模块负责提供中断信号,由于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最小工作方式62.3.2秒脉冲发生器2.3.3时、分调整电路72.3.4.显示电路2.4、元件功能说明2.4.1、8253的主要功能:可编程定时器/计数器,其定时与计数功能可由程序灵活地设定,设定后与CPU并行工作,不占用CPU的时间。计数器2工作在模式3方式下,提供计算一秒的中断请求信号。82.4.2、D触发器74ls273管脚排列图及功能表介绍74LS273是一种带清除功能的8D触发器,1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作数据锁存器,地址锁存器。92.4.3、单向总线驱动器74ls244功能介绍74LS244是8路3态单向缓冲驱动,也叫做总线驱动门电路或线驱动。简单地说,它有8个输入端,8个输出端,可以增加信号的驱动能力.为单向驱动。A为输入,Y为输出,高电平有效。102.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,SEC11ANDBX,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,0600H12INAL,DXTESTAL,01HJNZNEXTHOUCALLDISP;消抖CALLDISPCALLDISPMOVDX,0600HINAL,DXTESTAL,01HJNZNEXTHOUMOVAL,MINADDAL,1;分调整DAAMOVMIN,ALCMPMIN,60HJBNEXTHOUMOVMIN,0NEXTHOU:MOVDX,0600HINAL,DXTESTAL,02HJNZEXITKEYCALLDISP;消抖CALLDISPCALLDISPMOVDX,0600HINAL,DXTESTAL,02HJNZEXITKEYMOVAL,HOUADDAL,1DAA;时调整MOVHOU,ALCMPHOU,24H