|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为什么51单片机的定时器计时不准确?: x3 |9 H; s5 h& J0 R$ K8 E
$ w4 t: ~5 u+ m& X
#include<reg51.h>( d- x1 A8 y- ~( G. x
int time;
0 k2 x3 f0 O6 H0 Wunsigned char code duan[10]={# }! K7 i* R; b- ^3 \3 ?( x
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,3 x! l/ m7 r, O. h2 n
0x7f,0x6f};
5 ]0 r2 K, [" Z( w h# I, g//0、1、2、3、4、5、6、7、8、9的显示码8 ?$ f, {8 u M! W
void timer_init()% _1 ]) c G& Y
{0 w$ {2 m! O2 f2 Q
TMOD=0x02; //定时器工作方式2, m$ e1 W% k' a9 P3 ^9 p0 ?1 }
TL0=0x9c; //初值为156,256溢出,定时100*1us=0.1ms
0 G8 M$ Z& A" o" G6 P. x ET0=1;
# Z2 X2 X8 s3 ?0 H' b8 s3 m; n8 ]5 @ EA=1;
% `# T2 C% k1 K, Q TR0=1;
# m7 `' A a5 T6 c* |} f% l* m6 j% Q L# B
void timer0_mod2() interrupt 1 //定时器0的中断编号是1
- H! s& V$ E! D. x: N{
& [* [5 f, b) o- h1 F time++;" n2 Q% m8 O$ F# g$ k. p: h/ O
}, G% C o2 k) c3 x3 ?
main()
8 h/ K, c! L! J- k: E1 g/ @{ G z' t5 i2 m5 b! y
char i=0;
" W" Y3 C' ]" O( i: O+ f P0=0xff;7 U# k7 q" q5 i( G% D- G
i=0;
5 W. T% {! H# o5 F. g6 T7 \: F timer_init();
$ ~ H9 Z7 N0 n: Z. A while(1)2 c2 o5 B% B* n" H* X; j' f
{8 ~& k8 K0 U% C; Q, |* q
P0=~duan;//我用共阳数码管9 X( R" X1 T) U" e# n4 Q
if(time==1000) { time=0;i++; }//理论上0.1秒显示一个数字,实际上慢很多
- m) f) \5 z3 x7 l) d8 | if(i==10) i=0;2 ~7 I6 o9 c0 y' {
}
8 @+ {9 B+ C: A H}
?3 {# x1 N+ m* H+ U4 {1 o, |1 k" R6 z* R
" v e' T& M( L, Y
3 H! i0 g; o' _, u9 w8 v我选择了定时器0的工作方式2) _- R7 t# |5 U; ^4 ^, {, n6 Y* k
单片机STC90C51: D I: s+ O \- v( O& f* [
烧录后观察到数码管的数字变化为什么明显比0.1秒慢
& B, S/ a5 j( A' s" b
7 ]0 a- K4 z! { y |
|