您的当前位置:首页正文

电子时钟课程设计

2024-04-08 来源:步旅网
课程设计报告 王世蛟

目 录

1 概述„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 1.1设计目的„„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 1.2设计要求„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 1.3 电子时钟„„„„„„„„„„„„„„„„„„„„„„„„„„„„„2 2 概要设计„„„„„„„„„„„„„„„„„„„„„„„„„„„„„3 2.1设计内容„„„„„„„„„„„„„„„„„„„„„„„„„„„3 2.2设计环境与器材„„„„„„„„„„„„„„„„„„„„„„„„3 2.3设计思想„„„„„„„„„„„„„„„„„„„„„„„„„„„3 2.4电路原理与主要心片功能„„„„„„„„„„„„„„„„„„„„4 2.4.18255主要功能„„„„„„„„„„„„„„„„„„„„„5 2.4.28259主要功能„„„„„„„„„„„„„„„„„„„„„6 2.4.38254主要功能„„„„„„„„„„„„„„„„„„„„„7 3 详细设计„„„„„„„„„„„„„„„„„„„„„„„„„„„„9 3.1显示模块的实现„„„„„„„„„„„„„„„„„„„„„„„9 3.2运算模块的实现„„„„„„„„„„„„„„„„„„„„„„„9 3.3主程序流程图„„„„„„„„„„„„„„„„„„„„„„„„12 3.4实验连接线路图„„„„„„„„„„„„„„„„„„„„„„„13 总结体会„„„„„„„„„„„„„„„„„„„„„„„„„„„„„14 致谢„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„15 参考文献„„„„„„„„„„„„„„„„„„„„„„„„„„„„„16 附录„„„„„„„„„„„„„„„„„„„„„„„„„„„„„17

1

课程设计报告 王世蛟

1 概述

1.1设计目的

通过一个学期对《微机原理及接口技术》学习,掌握的知识还停留在理论的上。但是这是一门实践性较强的课程,让学生在学完该课程之后,进行一次课程设计,使学生将课堂所学的知识和实践有机结合起来,初步掌握计算机应用系统设计的步骤和接口设计的方法,提高分析和解决实际问题的能力。

通过设计实践,培养学生查阅专业资料,工具书或参考书,了解有关工业标准,掌握现代设计手段和软件工具,并能以图纸和说明书表达设计思想和结果的能力。

通过设计,不但要培养和提高学生解决工程具体问题,动脑动手的技术工作能力,而且还要逐步建立科学正确的设计和科研思想,培养良好的设计习惯,牢固树立实事求是和严肃认真的工作态度。具体要求如下:

 1、掌握DMA工作原理,中断工作原理,定时计数原理,并行通信原理,A/D和D/A工作原理。

 2、 掌握8237芯片,8259芯片,8254芯片,8255芯片,ADC0809芯片功能,结构。

 3、掌握8237芯片,8259芯片,8254芯片,8255芯片,ADC0809芯片的编程。  4、能运用所提到的芯片,设计系统并进行程序开发,满足用户需求。

1.2设计要求

●总体内容:设计一电子时钟,能在数码管上显示时间并计时。

● 接口设计:根据题目和所用的接口电路芯片设计出完整的接口电路,并在实验系统

上完成电路的连接和调试通过.

●程序设计:要求画出程序框图,设计出全部程序并给出程序设计说明和程序注释。 ●课程设计报告:正文字数约

4000字以上(不包含程序清单),内容主要有总体设

计方案,工作和组成原理(框图)或设计说明,采用的技术路线,接口电路设计,程序设计(程序框图和程序清单及注释),对设计中所存在的问题和不足进行分析和总结,提出解决的方法,措施,建议。

●前期完成的实验有:8259A

中断控制器实验,8254定时计数器实验,8255并行接

2

课程设计报告 王世蛟

口实验。

1.2.1在课程设计报告中实现

在实际的实验当中,由于实验设备上的差异,所以很难实现时、分等较为完美的显示,但在课程设计的报告中则没有这些限制。所以在课程设计报告中必须实现的功能有:用4个数码管实验0分0秒到59分59秒的显示。2)将数码管上的信息同时显示在显示器上。

1.3电子时钟

电子时钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。传统的设计方法有两种,一是利用组合逻辑电路和时序电路等中小规模集成电路来设计;一是利用单片机编程技术来设计。这两种设计都存在硬件复杂,设计周期长,成本高等缺点。并且本学期通过对《现代微机原理与接口技术》的学习,利用掌握的知识进行实践是必要的,以巩固基础知识,培养独立操作能力。而本次课程设计要实现的功能为:利用定时器从0开始进行计时,将计时的结果显示在数码管上。每隔1秒,秒钟计时一次,到60秒,分钟加1,到60分小时加1。根据需要,需选择的芯片有8254,8259,8255,系统时钟频率1.041667MHz;

3

课程设计报告 王世蛟

2 概要设计

2.1设计内容

本次课程设计的内容为电子时钟的设计与实现,利用定时器从0开始进行计时,将计时的结果显示在数码管上。每隔1秒,秒钟计时一次,到60秒,分钟加1,到60分小时加1。根据需要,需选择的芯片有8254,8259,8255,系统时钟频率1.041667MHz;

由于实验箱上的数码管一次只能用一个,设计者可考虑先完成下面实验要求: 利用8254计时,计时从0秒到9秒,到9秒后又从0秒重新开始计时,同时将0秒~9秒的数字变动信息通过8255送数码管显示。由系统时钟频率1.041667MHz,同学们考虑如何利用8254计数器实现1秒的计时。

2.2设计环境与器材

(1)PC微机一台

用于对程序的编译测试等,同时还需要对实验设备进行控制,提供整个程序的运行平台,并且收集和释放硬件信号,实现程序功能。 (2)TD-PIT+一台

此设备必须能提供8254、8255、8259和显示灯等必要芯片。并且能通过接受PC机传来的信息,显示出相应的功能。以支持电子时钟的实现。 (8)0.55mm单总线若干条 用于电路和芯片之间的连接。

2.3设计思想

本系统所要完成的是电子钟的计时等功能,其中最基本的就是实现计时功能,并把相应的数值送到数码管上显示出来。

在本系统中,用到的8254的功能只是相当于一个定时计,我们给定时器输入30KHz频率的脉冲,这样每隔一秒就会在OUT0端产生0到1的跃变,作为中断IRQ的请求信号。当然,时钟的计数也有其特定的规则,那就是秒、分的个位逢十进一,十位逢六进一,所以,我们可以通过中断处理程序来控制其进位。这样我们便完成了计时功能。然

4

课程设计报告 王世蛟

而,如果仅仅将计时得到的相应数据送入数码管,我们会发现,四个数码管同时显示,无法完成其时钟的显示功能。但是,我们知道,四个数码管的亮灭与小键盘X1,X2,X3,X4各列是否为低电平是相对应的(即:X1,X2,X3,X4依次对应从左到右的四个数码管,若X1为低电平,则数码管1亮;若X2为低电平,则数码管2亮;)•,于是,我们就可以将低电平输出到相应的键盘上,来实现对应数码管的显示。

通过以上分析,我们可以用四位二进制码分别对应表示X4X3X2X1的逻辑值(1--高电平,0--低电平),这样要实现时钟的显示功能,便可以按照以下方法来进行:首先将秒的个位数据通过8255的B端口送给数码管,同时将二进制码“0111”通过8255的A端口送给小键盘X4X3X2X1,这样通过计算机的扫描后,就会在数码管4上显示秒的个位值;接着将秒的十位数据送给数码管,同时将二进制码“1011”送给小键盘X4X3X2X1,这样就会在数码管3上显示相应的数值;同样的道理,分别将分的个位、十位送给数码管,“1101” 、“1110”送给小键盘X4X3X2X1,就会依次在数码管2、1上显示分的个位、十位数值。另外,必须注意的一点就是,显示的时间应该是:XX.XX,中间的一点显示在分的个位上,也就是说在数码管2上显示那一点,以区分分与秒。所以,我们将显示分个位的数码管的二进制码最高位置“1”,其他数码管置“0”,便达到了显示点的功能。从上面的方法我们可以看出,电子钟分秒各位的显示并不是同时进行的,而是按顺序依次循环显示的,它利用的就是人的视觉暂留现象来欺骗人们的眼睛,造成一种“四位数值同时显示”的假象。

2.4电路原理与主要芯片功能

本次设计实现的电子时钟的功能,电子时钟主要采用可编程并行接口芯片8255A、中断控制器2859A、定时/计数器8253、LED数码显示管和两个按键来设置一个控制灯的开关来组合设计。

其中主要用8259A的IR7中断服务程序完成秒、分、时的运算即计时功能,IR6的中断服务程序完成调时、调分功能。8253用来产生50ms的脉冲作为IR7的中断请求信号。8255A负责将内存里的时位、分位和秒位数值输出到数码管。8279A用来控制显示器显示时钟。按键K1+和K2+分别作为IR2和IR6的中断请求信号。按键K1+启动/关闭对时功能,它决定是否屏蔽IR7和IR6中断源。

2.4.1 8255主要功能

5

课程设计报告 王世蛟

8255 可编程外围接口芯片是 Intel 公司生产的通用并行I/O 接口芯片,它具有A、B、C 三个并行接口,并行接口是以数据的字节为单位与I/O 设备或被控制对象之间传递信息。CPU 和接口之间 的数据传送总是并行的,即可以同时传递8 位、16 位、32 位等。用+5V 单电源供电,能在以下三种方式下工作:方式0--基本输入/出方式、方式1--选通输入/出方式、方式2--双向选通工作方式。8255 的内部结构及引脚如图2.1所示:

图2.1 内部结构及引脚

8255 工作方式控制字和C口按位置位/ 复位控制字格式如图3-7-2 所示:

图2.2 置位/ 复位控制字格式

6

课程设计报告 王世蛟

2.4.2 8259主要功能

中断控制器8259A 是Intel 公司专为控制优先级中断而设计开发的芯片。它将中断源优先级 排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A 进行编程,就可以管理8 级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编 程来设定。同时,在不需增加其他电路的情况下,通过多片8259A 的级连,能构成多达64 级的矢量中断系统。它的管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应 和响应哪一级中断,3)响应中断时,向CPU 传送中断类型号。8259A 的内部结构和引脚如图2.3所示:

图2.3 内部结构和引脚

8259A 的命令共有7 个,一类是初始化命令字,另一类是操作命令。8259A 的编程就是根据 应用需要将初始化命令字ICW1-ICW4 和操作命令字OCW1- OCW3 分别写入初始化命令寄存器 组和操作命令寄存器组。

OCW1-OCW3 各命令字格 式如图2.4所示,其中OCW1 用于设置中断屏蔽操作字,OCW2 用于设置优先级循环方式和 中断结束方式的操作命令字,OCW3 用于设置和撤销特殊屏蔽方式、设置中断查询方式以及设 置对8259 内部寄存器的读出命令。

7

课程设计报告 王世蛟

图2.4 OCW1-OCW3 各命令字格

2.4.3 8254主要功能

8254 是Intel 公司生产的可编程间隔定时器。是8253 的改进型,比8253 具有更优良的性能。8254 具有以下基本功能:

●有

3 个独立的16 位计数器;

6 种

●每个计数器可按二进制或十进制(BCD)计数; 每个计数器可编程工作于

不同工作方式;每个计数器允许的最高计数频率为10MHz(8253 为2MHz);

●8254 有读回命令(8253 没有),除了可以读出当前计数单元的内容外,还可以

读出状态寄存器的内容。

●计数脉冲可以是有规律的时钟信号,也可以是随机信号。计数初值公式为n=fCLKi

÷fOUTi,其中fCLKi是输入时钟脉冲的频率,fOUTi是输出波形的频率。

图2.5 内部结构框图和引脚图

8

课程设计报告 王世蛟

上图是8254 的内部结构框图和引脚图,它是由与CPU 的接口、内部控制电路和三个计数器组成。8254 的工作方式如下述:

(1) 方式0 :计数到0 结束输出正跃变信号方式。 (2) 方式1:硬件可重触发单稳方式。 (3) 方式2 :频率发生器方式。 (4) 方式3 :方波发生器。 (5) 方式4 :软件触发选通方式。 (6) 方式5 :硬件触发选通方式。

8254 的控制字有两个:一个用来设置计数器的工作方式,称为方式控制字;另一个用来设 置读回命令,称为读回控制字。这两个控制字共用一个地址,由标识位来区分。控制字格式如表3-9-1 所示。读回控制字格式如表3-9-2 所示。当读回控制字的D4 位为0 时,由该读回控制字D1~D2 位指定的计数器的状态寄存器内容将被锁存到状态寄存器中。状态字格式如表2.6所示:

图2.6 8254状态字格式

9

课程设计报告 王世蛟

3 详细设计

3.1 显示的实现

使用8259控制,用数码管的显示功能来设计,显示部分用八只LED为显示管,这些LED发光二极管的阴极是互相连接在一起的,所以称为共阴极数码管。通过在这八只发光二极管的阳极加+5V或0V的电压使不同的二极管发光,形成不同的字符和数字。电子时钟用到的是0-9十个数字,它们所对应的字符表依次是3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、6FH。

图3.1 显示模块流程图

该模块主要是将运算模块和对时模块运算出来并存放在内存单元里的十八进制时

位、分位和秒位数值转化为十进制,并通过八只数码管显示出来。此模块实现的硬件是

10

课程设计报告 王世蛟

使用实验箱中的LED单元,采用软件译码,即在程序中设置一个段选码表。CPU直接往LED输出八段代码,省去了硬件译码器。8259输出B0-B3,A0-A3作为八段数据输出口,经74LS07驱动后到达各LED。只要做到每次送一次段选码时也送一次扫描码,并且每送一次位扫描码后,位码中的0右移一位作为下一次的位扫描码,即可实现从右向右使八只LED依次出现数字显示,这里位扫描码的送出和右移是由8259自动实现的。

显示的基本代码如下:

MOV AX,SEC ;完成秒计时值的显示

CALL DECSHOW

MOV AX,0E0DH ;回车,置光标到行首 INT 10H

这是对秒的显示,以此类推可以得到显示分、时的代码。

3.2 计时的实现

该模块的主要功能是对时、分、秒的运算,并把运算出的最终结果存放到事先已经开辟的内存单元里,以便显示模块即时地显示出来。该模块可细分为秒定时模块和运算模块。

秒定时模块负责提供中断信号,由于CPU运算模块中的指令消耗一定的时间,所以中断信号最好通过硬件来实现,可以选择实验箱中的8253或8254定时/计数器来提供,但又因为8254所能提供的信号的周期是毫秒级的,因此必须通过软件的方法在运算模块中设置一个统计中断次数的变量,并且这一变量必须事先在内存里开辟存储单元。中断信号是8254的通道2工作方式3时,产生一个30HZ的脉冲信号。

运算模块负责时、分、秒的计算,该模块主要通过8259的IR7号中断来实现,但由于每30HZ一次中断请求,所以在中断服务程序必须利用已申请内存单元COUNT来统计中断请求的次数,只有当COUNT的值为30时,才能让秒单元内的数值加1。另外,在中断服务程序里,必须对秒、分和时的单元内的数值进行判断,当秒加到60时,分必须加1,秒清零;当分加到60时,时加1,分清零;当时加到24时,直接清零,然后转到调用处。

11

课程设计报告 王世蛟

运算模块流程图如下图所示:

Count=30? Y Count=count+1 IR7中断

S=60? S=s+1 Count=0

Y N M=m+1 S=0 Y

Y N M=60? N

H=24? H=h+1 M=0

H=0 IRET

图3.2 运算模块流程图

这是计时的基本代码,为是实现准确的计时1秒。利用了8254的OUTO 30HZ输出一个脉冲。即1/30秒产生一次中断。所以count自加到30则记数1秒。其他以次类推。

INC COUNT

12

课程设计报告 王世蛟

CMP COUNT,30 JNZ OVER MOV COUNT,0 INC SEC

CMP SEC,10 ;计时值自增,到10即归0 JNE DIS

MOV SEC,0MOV AX,HOUR

MOV DX,0 ;完成时计时值的显示 MOV BX,10 DIV BX

3.3主程序流程图

图3.3系统实现流程图

13

课程设计报告 王世蛟

主程序的流程图是对整个程序的逻辑的图象表示。首先是设置

8254、8255、8259

的各个端口地址。接着初始化各个芯片,开始计时,并通过8259中断控制时间的正确显示。在整个过程中都在检测是否有铵键响应。有则停止,没有则返回继续执行。

3.4实验连接线路图

系统的连线图主要由五个部分构成。8259中断控制器、8255并口控制器、8254定

时计数器、键盘及数码管显示单元、开关及LED显示单元构成。如下图所示:

图3.4 实物连线图

14

课程设计报告 王世蛟

总结体会

通过近两周的课程设计时间,课程设计的基本目的达到了。另外还有很多其它有益的地方。本系统完成了电子时钟的基本功能。利用8254定时器从0开始进行计时,将计时的结果显示在数码管上。每隔1秒,秒钟计时一次,到60秒,分钟加1,到60分小时加1,数字变动信息通过8255送数码管显示。期间通过8259中断控制器实现秒到分,分到时的转变,准确实现了计时。

随着科技的进步电子时钟的实现方法已经很多,由传统的物理实现转变到软件实现,而且起精确程度也大大的提高,且实现方法也越来越简单。在这里是在学完了《微机原理及接口技术》进行的课程设计,所以这里是基于微机原理的基础知识来实现电子时钟的,首先应该画出硬件设计图,这个过程是基础,然后是流程图,这个是重点,流程图的完成在很大程度上等于程序的完成,然后是程序的编写。

通过辅导老师的指导,同学们的相互帮助,我收获了很多,也通过设计增强了自己动手的能力,同时也对自己所学到的知识作一个肯定。学好这门课程在自己今后的学习和工作中都有很大的作用,对自己以后的帮助也很大.这次课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做,困难在你的勇气和毅力下是抬不了头的。

而在这次课程设计中,也是对《汇编语言》的复习。同时在设计中使我的编程水平提高了一大步,使我认识到合作的可贵。这次设计涉及到很多芯片的应用,最大特点是软,硬件的结合,对动手能里的要求很大。也使我更加的体会到,在一定程度和科技水平上,硬件和软件是可以实现对等转化的。电子时钟的发展史就很好的诠释了这个过程。从物理硬件实现到软件实现。

15

课程设计报告 王世蛟

致 谢

在这个课程设计的过程中得到了张亚军/伍建全/王成敏老师的悉心指导。每个老师都多次询问课程设计的进程,并为我指点迷津,帮助我开拓解决问题思路,精心点拨、热忱鼓励。老师门一丝不苟的作风,严谨求实的态度,踏踏实实的精神,不仅授我以文,而且教我做人,虽然只有断断的两周时间,却给以终生受益无穷之道。对各位老师的感激之情是无法用言语表达的。

感谢学校对我们此次课程设计的大力支持,在学校的教学设备相对紧张的情况下,依然为我们安排了充分的时间使用学校的机房。为我们安排了三个出色并且负责的老师来解答我们的疑虑。在重庆如此热的夏天,学校也在机房配置空调,是同学门静心学习。

感谢我的同学在这个时间段对完成课程设计的的支持。是你们在我遇到困难时,及时的帮助了我,使得程序等进展顺利。

最后我还要感谢我的父母、亲人。是他们养育并培养了我。才有了的今天。在这里对你们辛勤的付出,才有了我的今天。

16

课程设计报告 王世蛟

参考文献

[1] 陈忠强.现代微机原理与接口技术.冶金工业出版社.2006年 [2] 郭兰英. 微机原理与接口技术. 清华大学出版社. 2006年

[3] 西安唐都科教仪器公司.32位微机原理与接口技术实验教程.2005年 [4] 西安唐都科教仪器公司.32位微机原理与接口技术用户手册.2005年 [5] 胡汉才. 微机原理与接口技术课程设计[M]. 北京:清华大学出版,1996 [6] 付家才. 微型计算机及其接口技术学习指导与题典[M]. 北京:化学工业出版社,2004.5

[7] 潘新民.微型计算机控制技术[M].北京:人民邮电出版社,1999.9

[8] 余锡存 .曹国华. 汇编语言、微机原理及接口技术[M].陕西:西安电子科技大学出版社,2000.7

[9] 雷丽文.微机原理与接口技术[M].北京:电子工业出版社,1997.2 [10] 李银华.《电子线路技术指导》.北京航空航天大学出版社,2005

17

课程设计报告 王世蛟

附 录

;***************根据CHECK配置信息修改下列符号值******************* INTR_IVADD EQU 01CCH ;INTR对应的中断矢量地址

INTR_OCW1 EQU 0A1H ;INTR对应PC机内部8259的OCW1地址 INTR_OCW2 EQU 0A0H ;INTR对应PC机内部8259的OCW2地址 INTR_IM EQU 0F7H ;INTR对应的中断屏蔽字 PCI_INTCSR EQU 0DF38H ;PCI卡中断控制寄存器地址 IOY0 EQU 0DA00H IOY1 EQU 0DA40H

;***************************************************************** MY8254_COUNT0 EQU IOY0+00H*4 ;8254计数器0端口地址 MY8254_COUNT1 EQU IOY0+01H*4 ;8254计数器1端口地址 MY8254_COUNT2 EQU IOY0+02H*4 ;8254计数器2端口地址 MY8254_MODE EQU IOY0+03H*4 ;8254控制寄存器端口地址

MY8255_A EQU IOY1+00H*4 ;8255的A口地址 MY8255_B EQU IOY1+01H*4 ;8255的B口地址 MY8255_C EQU IOY1+02H*4 ;8255的C口地址 MY8255_MODE EQU IOY1+03H*4 ;8255的控制寄存器地址 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATA SEGMENT

CS_BAK DW ? ;保存INTR原中断处理程序入口段地址的变量 IP_BAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量 IM_BAK DB ? ;保存INTR原中断屏蔽字的变量 SEC DW 0 ;秒计时变量 MIN DW 9

18

课程设计报告 王世蛟

HOUR DW 0 COUNT DB 0 DATA ENDS DATA1 SEGMENT

VALUE DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH,77H DATA1 ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA1 START: MOV AX,DATA MOV DS,AX CLI

MOV DX,PCI_INTCSR SUB DX,19H IN AL,DX

MOV DX,PCI_INTCSR ;初始化PCI卡中断控制寄存器 MOV AX,1F00H ;向PCI_INTCSR中写入003F1F00H OUT DX,AX ADD DX,2 MOV AX,003FH OUT DX,AX

MOV AX,0000H ;替换INTR的中断矢量 MOV ES,AX

MOV DI,INTR_IVADD MOV AX,ES:[DI]

MOV IP_BAK,AX ;保存INTR原中断处理程序入口偏移地址 MOV AX,OFFSET MYISR

MOV ES:[DI],AX ;设置当前中断处理程序入口偏移地址 ADD DI,2 MOV AX,ES:[DI]

MOV CS_BAK,AX ;保存INTR原中断处理程序入口段地址

19

课程设计报告 王世蛟

MOV AX,SEG MYISR

MOV ES:[DI],AX ;设置当前中断处理程序入口段地址 MOV DX,INTR_OCW1 ;设置中断屏蔽寄存器,打开INTR的屏蔽位 IN AL,DX

MOV IM_BAK,AL ;保存INTR原中断屏蔽字 AND AL,INTR_IM OUT DX,AL

MOV DX,MY8255_MODE ; MOV AL,80H ; OUT DX,AL

MOV DX,MY8255_A ; MOV AL,3FH OUT DX,AL STI MOV SEC,0 MOV AX,SEC CALL DECSHOW

MOV AX,0E0DH ; INT 10H

MOV DX,MY8254_MODE ; MOV AL,34H ; OUT DX,AL

MOV DX,MY8254_COUNT0 ; MOV AL,0A2H OUT DX,AL MOV AL,87H OUT DX,AL

WAIT1: MOV AH,1 ; INT 16H

JZ WAIT1 ;

初始化8255工作方式 工作方式0,A口输出 写A口发出的起始数据 回车,置光标到行首 初始化8254工作方式 计数器0,方式2 装入计数初值 判断是否有按键按下 无按键则跳回继续等待,有则退出

20

课程设计报告 王世蛟

QUIT: CLI

MOV DX,PCI_INTCSR ;恢复PCI卡中断控制寄存器 MOV AX,0000H OUT DX,AX

MOV AX,0000H ;恢复INTR原中断矢量 MOV ES,AX

MOV DI,INTR_IVADD

MOV AX,IP_BAK ; MOV ES:[DI],AX ADD DI,2

MOV AX,CS_BAK ; MOV ES:[DI],AX

MOV DX,INTR_OCW1 ; MOV AL,IM_BAK OUT DX,AL STI

MOV AX,4C00H ; INT 21H

MYISR PROC NEAR ; MOV AX,DATA MOV DS,AX INC COUNT CMP COUNT,30 JNZ OVER MOV COUNT,0 INC SEC

CMP SEC,10 ; JNE DIS MOV SEC,0 add MIN,1

恢复INTR原中断处理程序入口偏移地址 恢复INTR原中断处理程序入口段地址 恢复INTR原中断屏蔽寄存器的屏蔽字 返回到DOS 中断处理程序MYISR 计时值自增,到10即归0 21

课程设计报告 王世蛟

CMP MIN,10 JNE DIS MOV MIN,0 add HOUR,1

DIS: MOV AX,SEC ;完成秒计时值的显示 CALL DECSHOW

MOV AX,0E0DH ; INT 10H

OVER: MOV DX,PCI_INTCSR SUB DX,19H IN AL,DX

MOV DX,PCI_INTCSR ; ADD DX,2 MOV AX,003FH OUT DX,AX

MOV DX,INTR_OCW2 ; MOV AL,20H OUT DX,AL MOV AL,20H OUT 20H,AL IRET MYISR ENDP DECSHOW PROC NEAR MOV AX,DATA MOV DS,AX MOV AX,HOUR

MOV DX,0 ; MOV BX,10 DIV BX

ADD AL,30H ;

回车,置光标到行首 清PCI卡中断控制寄存器标志位 向PC机内部8259发送中断结束命令 完成时计时值的显示 显示计时值十位

22

课程设计报告 王世蛟

MOV AH,0EH INT 10H

ADD DL,30H ;显示计时值个位 MOV AL,DL MOV AH,0EH INT 10H mov al,3ah mov ah,0eh

int 10h

MOV AX,MIN

MOV DX,0 ; MOV BX,10 DIV BX

ADD AL,30H ; MOV AH,0EH INT 10H

ADD DL,30H ; MOV AL,DL MOV AH,0EH INT 10H mov al,3ah mov ah,0eh

int 10h

MOV AX,SEC

MOV DX,0 ; MOV BX,10 DIV BX

ADD AL,30H ; MOV AH,0EH INT 10H

完成分计时值的显示 显示计时值十位 显示计时值个位 完成秒计时值的显示 显示计时值十位 23

课程设计报告 王世蛟

XOR BX,BX MOV BL,DL

ADD DL,30H ;显示计时值个位 MOV AL,DL MOV AH,0EH INT 10H

MOV DX,MY8255_A ; MOV AX,DATA1 MOV ES,AX LEA DI,VALUE

MOV AL,ES:[DI+BX] OUT DX,AL RET DECSHOW ENDP

CODE ENDS END START

写A口 24

;ES: DATA1, DI: VALUE

因篇幅问题不能全部显示,请点此查看更多更全内容