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

为什么51单片机的定时器计时不准确?

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
为什么51单片机的定时器计时不准确?' _+ v/ w' |& a9 t3 c

4 V8 a" a: o) C# `8 n- ~$ y#include<reg51.h>
% T6 e- g& U( k5 f# V% |  Eint time;
, A9 |7 K" |9 L' xunsigned char code duan[10]={
% l7 ^1 c* l) k; b8 Y5 F0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,5 f% o$ }1 d' e* f$ Q
0x7f,0x6f};* i" b- n/ ?) @. m3 n8 ]2 d
//0、1、2、3、4、5、6、7、8、9的显示码, a- @/ j7 m& J8 }" I/ E  e* g+ k
void timer_init()
. B$ d) |' o4 x1 `3 p{
! A0 v% X  y- E5 e. B1 ^8 U    TMOD=0x02; //定时器工作方式24 ]+ Y0 @9 {/ d7 N, r& j
        TL0=0x9c;  //初值为156,256溢出,定时100*1us=0.1ms, [- N2 |0 r% a* p
        ET0=1;$ o1 w) r. N! ]- T+ h
        EA=1;4 g' U, H5 Q" E6 p0 A$ O
        TR0=1;. c* Q: e8 n) w% _7 ^5 g# S
}
1 L& [/ Z; A5 Y6 P+ R. s/ O: cvoid timer0_mod2() interrupt 1         //定时器0的中断编号是1
. e3 J+ Y& j% x# N: K% m{
3 r: _: d. Z- C- t5 C* c. s! I    time++;
$ O/ I- y9 o$ f- x* a1 ]* ^}$ `* L: j0 u# K3 q; d
main()
, _+ S/ m7 @8 l, y$ N{% ~; a" z) ~( b
    char i=0;
4 o8 j& c, Q/ F1 B8 m5 R5 o    P0=0xff;6 b7 d2 p3 Q: ?/ G9 s
        i=0;
& }/ }6 T- z. m* o& L4 {        timer_init();
4 M0 Q: y: ?4 {/ ^7 Z" w        while(1)
. r: I" A) i0 D( S        {
2 v- k" @! R& U/ W- D% X* Q* u            P0=~duan;//我用共阳数码管
4 F+ d0 {' J& k! y                if(time==1000) { time=0;i++; }//理论上0.1秒显示一个数字,实际上慢很多
4 M+ K6 i# x5 f" N2 ]4 _7 ~) {                if(i==10)       i=0;
8 \* a& E  S8 `4 T' F        }# l5 n& }5 l6 n0 P1 L2 t* C3 L$ E
}
* x5 ^% B/ ^2 c. @( G
' Z* [& a3 W, }1 x7 C" O
9 Q4 [* J9 b: h6 l" k- w

5 d7 ?6 Y" l; P# Z我选择了定时器0的工作方式2, Y1 r. B. I  w6 [" r. k
单片机STC90C51; o! Z7 H4 N, D' o
烧录后观察到数码管的数字变化为什么明显比0.1秒慢
- {. N8 R8 K: |5 V" h: |

1 j+ o* e& X' |

该用户从未签到

2#
发表于 2019-4-23 10:47 | 只看该作者
跟晶振有关吧

点评

不会啊。工作方式1定时1秒就正常  详情 回复 发表于 2019-4-23 10:56

该用户从未签到

3#
 楼主| 发表于 2019-4-23 10:56 | 只看该作者
helendcany 发表于 2019-4-23 10:475 K* O) m: L; X+ t
跟晶振有关吧
/ ~9 \3 D* K  C3 e# a0 T* `
不会啊。工作方式1定时1秒就正常
0 \3 `! F9 E7 ]4 I% e

该用户从未签到

4#
发表于 2019-4-23 11:08 | 只看该作者
应该是代码在执行过程中还有什么的中断函数调用中另外消耗了时间吧

该用户从未签到

5#
发表于 2019-4-23 13:13 | 只看该作者
有这种问题,我用STC89C52RC单片机的定时器0来计时NEC(红外)脉冲时也出现过这种现象。计时1.125ms的脉冲时,明显定时器TL0、TH0中的数据小于理论计算值,而且还相关比较大(200~300个定时器周期)。但当计时13.5ms的脉冲时,定时器TL0、TH0中的数据与理论计算值接近。不知道是什么原因,有测试过晶振波形,平均是11.079MHZ
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-23 04:20 , Processed in 0.078125 second(s), 27 queries , Gzip On.

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

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

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