|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为什么51单片机的定时器计时不准确?
. K$ Y: O% b7 H: H3 {8 H* M9 d( J C: ~& ~/ F* o7 X
#include<reg51.h>& @& e$ `8 w* g# [1 a
int time;
1 f' H3 B- }$ b9 r( Uunsigned char code duan[10]={
) y$ U/ s% X! n& q4 T* h2 s0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
' U4 s2 k" s9 r! m0x7f,0x6f};7 ?4 ?! ?. S( ]9 |& X& B! w
//0、1、2、3、4、5、6、7、8、9的显示码
$ N: h. b% V" i0 {void timer_init()
: g" l5 N; k4 u7 g{
, y. |3 {% }" I+ G) `' K+ M* l; B TMOD=0x02; //定时器工作方式2
" J) z" c7 P4 }! a TL0=0x9c; //初值为156,256溢出,定时100*1us=0.1ms% v# f$ A- {- }9 r* R! Z$ g0 R0 ]
ET0=1;
; b) C1 g+ o8 X EA=1;
( `. s, {# m- Z2 _$ e TR0=1;
% S" S0 @! Q" y+ O! ^}8 w1 k6 o! H6 V$ y4 A! Y- w
void timer0_mod2() interrupt 1 //定时器0的中断编号是1
7 M+ _$ h0 _5 B8 h{
) c& h4 d! R$ r- p: T6 p, A* n# } time++;
9 \4 i. I+ [. s3 e( s2 C8 q8 o}& t) M& `5 a; \3 \
main()
$ a1 m9 I+ f7 `% x* \{
1 M F+ L. X& [: o. V- e char i=0;
/ B7 v) e! n( g P0=0xff;
/ U+ x0 S: M t! G% q8 @ i=0;* M' c! J8 S1 G" G' Y. ~+ ^4 d
timer_init();
9 p3 p M2 p$ Z/ H% m+ B& a8 u while(1)
4 F! T1 G4 W# g) S {
9 V9 [+ I. C+ I$ J& J9 w P0=~duan;//我用共阳数码管
. h. F" w. |9 L# j. V if(time==1000) { time=0;i++; }//理论上0.1秒显示一个数字,实际上慢很多
4 x$ N7 e5 J" S* |; V8 n* k- h if(i==10) i=0;
$ N, N8 e9 B7 c, v; g& _ }8 m0 I9 S/ Z$ S% h; N! H9 _
}. o7 Q/ o3 J. k9 t+ r
0 a4 G- k) `6 v: Z5 Z" o4 r
& o5 i* K, @& d) f# u
0 `6 L9 @" e: v& N1 [8 \: y我选择了定时器0的工作方式2 A/ B- T% I) P
单片机STC90C51* a& }9 q) l# ]2 f0 S8 S) j" Q! e
烧录后观察到数码管的数字变化为什么明显比0.1秒慢
. C0 M: ~7 p. o, {$ F0 o
) @% F& W% r& O& j& o |
|