摘要:本文是基于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 label 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机为核心,并结合CB实时5、8253、8259等芯片实现实时钟。多谐振荡器CB定时器8253分频后,可获得555产生的高频振荡信号。利用时钟信号向CPU使用系统的中断控制器实现中断管理。当每个脉冲发出时,就会产生一次中断。如果计数功能在中断时实现,计时可以转换为记录中断次数。最终得到一个可精确到0.实时钟1秒。如图1所示。
如图2所示。
3 系统实现
3.1 产生振荡信号
本设计采用多谐振荡器CB555产生振荡信号。CB555输出脉冲的比例和振荡频率为:
CB555最高振荡频率为50KHz。现利用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是一个中断管理器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接口芯片和8段显示器时,可以在8段显示器上显示时间。它已广泛应用于交通灯、数字钟、传感器温控显示等领域。
参考文献:
[1] 茹国宝.微机原理与接口技术实验指导书[D].武汉:2001年武汉大学电子信息学院.
[2] 吴秀清,周荷琴.微计算机原理与接口技术[M].合肥:2008年中国科技大学出版社.
[3] 阎石.数字电子技术基础[M].北京:2006年高等教育出版社.