找回密码
 注册
关于网站域名变更的通知
查看: 550|回复: 5
打印 上一主题 下一主题

单片机时钟的软件微调

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2016-8-16 10:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
在设计单片机定时控制系统时,常常会遇到系统的时钟误差问题。在时间精度要求较高的场合通常采取微调石英晶振的并联谐振电容的方法来校正时钟误差。此方法虽然简便,但也有缺点,如制作麻烦、调校不能定量进行,不易校准,而且微调电容本身就是一个频漂因素。笔者在开发一套自动广播控制系统时,选用稳定性较好的固定云母电容作为晶振的并联谐振电容,编制了时间微调程序,用软件对时间进行微调。
0 M& F( M) n9 f+ ?6 v+ a( D# G6 D    单片机系统中通常利用片内定时器定时发出中断请求,CPU响应中断后在中断服务程序中对中断计数,根据计数结果进行秒、分、时各寄存计数单元的处理,得到所需要的时间值。改变定时器的初值即可改变产生中断的时间,达到时间调整的目的。用户可根据时钟运行的误差,从键盘输入调整量,CPU经计算得到定时器修正后的初值。此后定时器运行均采用修正后的值,就实现了时钟的调校。
( b+ }& c2 W8 e    设系统采用6M晶振,每100ms产生一次中断信号,那么定时器初值每增(减)1,1次中断减(增)2μs,时钟每天的增(减)值为:△t=24小时×60分/时×60秒/分×1秒/100毫秒×2微秒≈1.7秒。时钟最小调整幅度为1.7秒,显然不实用。
; J2 u) k3 k* H( a) O; [    由于大多数系统以秒为计数单位,若定时器每100ms中断一次,则计满10次向秒进1。如果第1~第9次中断定时器均用原来的初值,只在第10次才装入修正后的初值,即修正值每增减1个单位,时钟每天变化量为:△t=24小时×60分/小时×60秒/分×2微秒≈0.17秒。忽略其它因素,时钟经调校后的最大误差为△t,即0.086秒/日。为了使用方便,笔者设计的系统采用初始化时存入某标准值(譬如选50),进行时钟微调时使该值在0~99之间变化。调校输入完成后,进行运算处理,根据该值与标准值的差,对微调修正值进行调整。该值每增(减)1,定时器修正值也就增(减)1,每天时钟就快(慢)0.17秒。修正结果存于寄存器中以备调用。
1 z8 D: J, P) Y& Y. g9 v    下面是时钟调校及修正量输入完成后的运算处理的源程序。9 G1 Y9 \& j/ H! z  N3 ?
  ;2FH——定时器低位修正初装值单元$ m! O, }; D4 b. e+ j
  ;22H——100ms计数次数单元4 J& i* b" E1 @8 o0 ]6 w
  ;20H——校正数据存放单元7 M: T8 y5 ~% N( u4 d
  ;时钟调校程序:' V, E9 H9 r( {; o5 e2 C
         ORG  0000H
$ |+ b1 {" C8 B% U/ |" n         AJMP MAIN
; V+ N. _9 M$ @# X7 N2 A         ORG   000BH    ;T0中断入口9 e8 ]# M% v) ?3 m8 F. [9 q
         AJMP CLOCK
$ _. m- {) o- N8 k$ z. D: T+ NMAIN  :MOV   TMOD,#01  ;置T0为工作方式12 f9 x1 n2 C/ A7 Q! d
         MOV  TL0,#0B0H ;送定时器初值
, g) ]+ G: A0 \2 x/ U9 i! I         MOV  TH0,#3CH8 S, t( U6 X! h4 x5 F0 ^, A- r$ _
         MOV  IE,#82H      ;开中断
+ X+ N; ]# n. o2 ~9 |) @# v         SETB TR0     ;启动T00 l: ~3 B6 |1 t2 v( J3 k8 Q* O
         MOV  22H,#10D    ;100ms计数次数
! B0 f7 }6 e% t( j; k' b+ M; y( n/ @         MOV  20H,#50D    ;调校预设值
/ y( b' ^7 s1 v! P2 N9 p3 `$ `HERE  :AJMP HERE    ;等待中断) a5 l1 i, K9 v4 ?. j( ^: x
CLOCK:DJNZ 22H,CLO2   ;未计满0.9s,继续计数
# g/ }& M  a8 t6 t+ k: O1 [         MOV  TL0,2FH      ;已计数满0.9s,进行- s1 K+ l) a. o2 k; h4 B* N& m1 p
         MOV  TH0,#3CH   ;调整2 I& r* E" m2 h- [9 g8 {0 r
         SETB TR06 g2 U7 U! C1 j4 d$ a
         MOV  22H,#10D    ;重设计数值8 s0 r0 u" g* f. w6 x+ ~" F4 \$ J
         RETI: i. v7 n# C) {4 Q: n7 j6 o
CLO2  :MOV  TL0,#0A6H  ;T0原始设定值% |0 ~* c8 ]  T! }
         MOV  TH0,#3CH
; `# U% f7 g& S9 a  {9 w) b& R1 r6 e         SETB TR0
0 |* G4 x3 x  ?& p4 z9 W  J% H         RETI
3 B# ^& r+ W$ N# s  ;校正输入完成后处理子程序:$ X' R! i9 ?% {: k# c# H. @  G
         CLR   C
+ ]9 w: s$ F# [  X7 K0 }) e& c- X         MOV  A,#0A6H2 o. h) v, u( w' x
         SUBB A,#50D        ;计算修正时T0的实际值
( r- W. _8 s0 T1 h            ADD A, 20H$ Y0 |$ U9 R5 L9 k: s% j1 m+ `8 v
            MOV  2FH, A          ;计算结果暂存备用8 s, J" m: y, E6 p) c# j" I3 Y% Y

该用户从未签到

2#
 楼主| 发表于 2016-8-16 10:08 | 只看该作者
看贴学心得,回贴是美德
$ [9 [& l/ \% Y) ]

该用户从未签到

3#
发表于 2016-8-17 14:19 | 只看该作者
学习中,谢谢分享( r4 a2 S% a$ {3 C2 Z8 c, @

该用户从未签到

4#
发表于 2016-8-17 14:38 | 只看该作者
谢谢分享,必须赞一个~
; J* W# X4 q9 \

该用户从未签到

5#
发表于 2016-8-17 14:45 | 只看该作者
谢谢分享,必须赞一个~
' ]  a: h% i9 s# E. P7 m
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-10 21:05 , Processed in 0.093750 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表