基于PC机的实时时钟实现

时间:2022-07-01 09:24:18

基于PC机的实时时钟实现

摘要:该文给出了基于PC机的实时时钟的具体实现方法。该方法利用晶体振荡器产生周期波,并根据实际需求来分频得到所需要的频率的脉冲,再利用得到的脉冲对CPU进行中断申请。这样即可把中断申请的次数转换成时间来实现时间的显示,使计时精确到0.1秒位。

随着集成电路飞速的发展,该方法具有很强的稳定性、实用性和扩展性,在日常生活和工业生产中应用时可根据实际情况来控制其精确度。

关键词:PC机;实时时钟;中断控制

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2009)15-4032-02

Realization of the Real-time Clock Based on Personal Computer

DONG Wei, WANG Jie-qiong, ZHANG Xiao-ye

(Institute of Electronic Information in Wuhan University, Wuhan 430072, China)

Abstract: This text introduces the concrete way to realize the real-time timing clock based on personal computer. The main methods are as follows: First, take advantage of the crystal oscillator to generate the periodic wave. Then, according to the actual demand, we can carry out frequency demultiplication to obtain the pulse with the needed frequency. Last, use the final pulse to apply for the interruption towards the CPU. Thus, the times of the interruption application towards the CPU are transformed to the displayed time which is accurate to 0.1 seconds.

With the rapid development of the integrated circuit, the method has strong stability, practicality and expansibility. In the daily life and industrial production we can control the accuracy on the basis of the actual demand.

Key words: personal computer; real-time clock; interrupt control

1 引言

随着集成电路向着甚大规模集成电路日新月异的发展,使得复杂电路的微小化变成了可能。实时时钟电路的实用性已广为接受,而如今高度集成化使其又具有了便携的优势。它在机械自动化、智能化、传感器等方面都有广泛的应用。本文以PC机结合其它芯片来进行实时时钟的适当模拟,从而为实时时钟的实际应用提供参考。

2 系统设计

本系统以PC机为核心,并结合CB555、8253和8259等芯片来实现实时时钟。由多谐振荡器CB555产生的高频振荡信号,经过定时器8253分频后可得到时钟信号。利用时钟信号向CPU发出中断申请,中断管理利用系统的中断控制器实现。每个脉冲发出时就会产生一次中断,若让中断时实现计数的功能,即可把计时转化成记录中断次数。最终得到一个可精确到0.1秒的实时时钟。系统实现流程如图1所示。

系统设计图如图2所示。

3 系统实现

3.1 振荡信号的产生

本设计采用多谐振荡器CB555来产生振荡信号。CB555输出脉冲的占空比和振荡频率为:

CB555最高振荡频率达500KHz。现利用CB555产生100KHz的时钟频率,占空比为2/3的信号,则R1=R2。若取C=10μF,可得R1=R2=0.48Ω。此时CB555的输出信号即为100KHz的方波。

3.2 分频作用

多谐振荡器CB555产生100KHz的方波后,利用8253对其进行分频。由于需要得到10Hz的时钟信号,为此需要两级分频。采用8253通道0和通道1构成分频电路。通道0进行一级分频,得到1KHZ的方波,将该方波输入通道1,再次进行分频,得到10HZ的方波。现通过编程来实现其初始化。设8253的I/O地址为300~303H,相应代码如下:

MOV DX,303H

MOV AL,35H

OUT DX,AL;8253通道0控制字

MOV AL,75H

OUT DX,AL;8253通道1控制字

MOV DX,300H

XOR AL,AL

OUT DX,AL

MOV AL,01H;8253通道0初始字

OUT DX,AL;100D

INC DX

XOR AL,AL

OUT DX,AL

MOV AL,01H;8253通道1初始字

OUT DX,AL;100D

3.3 时钟的显示

芯片8259是一个中断管理器,当外部产生中断时,中断通过8259向CPU申请中断,CPU响应中断以后,程序就会转去执行中断程序。本文设计的实时时钟,实际上是对中断次数进行计数。中断请求由8253分频后的时钟信号来提供。现定义七个单元,分别存放小时十位、小时个位、分十位、分个位、秒十位、秒个位、0.1秒位。程序为:

DATA SEGMENT

TIME DB 7DUP(30H)

DATA ENDS

3.3.1 中断向量的设置

要在中断时调用中断子程序,必须在程序初始化时将中断子程序的入口地址放入中断矢量表中,程序为:

MOV DX,INT_0

MOV AX,250FH

INT 21H

3.3.2 秒位与分钟位的进位

每执行一次中断,0.1秒位增加一位,当其计数达到最大计数值10后,则将该位清0,并将其高位加1。对于秒个位、秒十位、分个位和分十位执行相同的操作,只是秒十位和分十位的最大计数值是6。实现秒位与分钟位从低位到高位变化的流程如图3示。

主要代码如下:

LEA SI,TIME+x;x为常数,由待处理位确定,待处理位相对TIME的相对量

MOV AL,[SI]

INC AL

CMP AL,yyH;yy由待处理位确定,是待处理位计满的数值

JNZ INT_0

MOV AL,30H

MOV [SI],AL;待处理位清0

DEC SI

MOV AL,[SI];读下一位

INT_0: MOV AL,20H;中断返回

OUT 20H,AL

IRET

3.3.3 小时的进位

对于小时的显示,当计数达到10后,则将小时个位清0,小时的十位加1。若计数到24小时,则将小时位全部清0,重新开始计时。实现小时位计数的流程图如图4。

主要代码如下:

MOV AL,[SI];读入时个位

INC AL

MOV [SI],AL

CMP AL,3AH;是否达到十小时

JE L2

DEC SI

MOV AL,[SI]

CMP AX,3234;是否达到24小时

JNE INT_0

MOV AX,3030H;时个、十位清0

MOV [SI],AX

JMP INT_0

L2: MOV AL,30H

MOV [SI],AL

DEC SI

MOV AL,[SI]

INC AL

MOV [AI],AL

INT_0:

3.3.4 时间的显示

中断返回后则利用单字符显示在屏幕上显示出时间,主要代码如下:

MOV AH,2

MOV DL,X ; X 为要显示的字符

INT 21H

显示完时间后,读取键盘值,若有键按下,则屏蔽中断,返回DOS,结束程序。否则,继续计时,显示时间。

至此,实时时钟的计时已完成,最终的计时结果显示在屏幕上。

4 结束语

该文设计的实时时钟,其耗电量少、精确度高、实用性强。当大规模生产时,成本也可大大降低。随着集成技术的发展,其有着更为广阔的应用前景。在上述基础之上,还可以对它进一步的拓展。当采用8255接口芯片和八段显示器,利用动态显示法,则可将时间在八段显示器上显示。这已在交通灯、数字钟、传感器温控显示等多方面广泛应用。

参考文献:

[1] 茹国宝.微机原理与接口技术实验指导书[D].武汉:武汉大学电子信息学院,2001.

[2] 周荷琴,吴秀清.微型计算机原理与接口技术[M].合肥:中国科学技术大学出版社,2008.

[3] 阎石.数字电子技术基础[M].北京:高等教育出版社,2006.

上一篇:C语言课程的教学初探 下一篇:知识对象在学校数字化建设中的作用