|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为什么51单片机的定时器计时不准确?
) j2 [8 J0 a* `
8 Z6 e$ y% Y& v8 j) W; L#include<reg51.h>" A6 _& A4 r5 h$ R4 H) y6 C
int time;4 H- o7 Q. C i) Q8 k
unsigned char code duan[10]={; p! f9 s5 N+ T, P) q y6 z
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
: w* y0 @& U O# |4 b5 y6 m' U0x7f,0x6f};
$ M/ F# o0 s# w3 ]) U2 a//0、1、2、3、4、5、6、7、8、9的显示码
4 v- F6 j4 }' b$ W0 y/ Qvoid timer_init()- b# ?+ h- Z8 r6 e) d
{7 v" i/ N' @$ @, f. t7 h" U7 {, T8 W
TMOD=0x02; //定时器工作方式22 J" S& h. z8 K6 X+ ~
TL0=0x9c; //初值为156,256溢出,定时100*1us=0.1ms
3 e" {: \- v) D8 s7 m! d5 f: c ET0=1;
. d! g: S1 D! ^9 R9 e p) W8 r0 Z+ H EA=1;' O' b4 w+ q. d2 X2 T' J
TR0=1;
( T- W! E' {8 f1 X' d" P}
5 A$ R7 D1 M' _8 j! f7 tvoid timer0_mod2() interrupt 1 //定时器0的中断编号是1; K X c/ D+ [. s* Y1 {) |
{6 h# g! W9 C' ?! ^4 ?
time++;; L$ S. E" S4 D& S/ h& u, D3 u. M
}
+ B% ^. U. N0 [+ m/ u, Nmain()
8 M/ b H" L# X/ K2 v2 h& Y{: e9 v |" a; w
char i=0;5 T) C8 x1 |2 ]
P0=0xff;: R- A3 F' F# a9 E8 J& G* D
i=0;: e+ T" S2 e9 s, C$ R
timer_init();
5 F7 u) ~. d9 J0 A while(1)
4 ?* t- G c1 N: w. ]6 v$ A* ] {
/ R9 k. j; B6 A7 |1 h. { P0=~duan;//我用共阳数码管
& O6 P# p5 H# _0 H: z if(time==1000) { time=0;i++; }//理论上0.1秒显示一个数字,实际上慢很多) I ]6 I5 G- W/ h
if(i==10) i=0;( F1 i7 f% r3 @, y6 c
}
2 F8 o# T9 A# a7 L6 z- @6 D}
" K* y% E1 g7 S& L6 ?) e% H9 r4 E$ f8 Y4 v( a( i' W6 a
r6 N' D: S C6 N
/ h. N, m! Z( V我选择了定时器0的工作方式2
1 H# Y# N8 I# u+ k2 B9 l0 u# H. S" O单片机STC90C51' N- _/ v7 _: }) o/ X
烧录后观察到数码管的数字变化为什么明显比0.1秒慢
1 q5 u; B. y! N$ v
/ G$ F- H; [% d. O |
|