|
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" O9 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' | |
|