|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为什么51单片机的定时器计时不准确?* n7 T8 e0 o c1 w6 V
) y7 g' D, ?7 t! a
#include<reg51.h>+ |2 \( Z8 H& D
int time;% _# o. J" N7 p* f
unsigned char code duan[10]={
0 M( o& |8 r" E1 w0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0 }% c( d1 ~; B, E0x7f,0x6f};
# H# h: C3 W* m. A1 U9 m8 y//0、1、2、3、4、5、6、7、8、9的显示码
* A2 Q: G8 @0 dvoid timer_init()9 B! h1 b! ? x/ p; i! Z
{
+ V. Q0 q; }5 J* o: \ TMOD=0x02; //定时器工作方式2
- w; U3 ?$ ]1 R& E TL0=0x9c; //初值为156,256溢出,定时100*1us=0.1ms
7 g3 F. u" ~9 T6 k# E5 p& @5 b ET0=1;8 n- b2 q6 S$ X' A. Y) H" M
EA=1;
' T! I: m* T' C$ i$ F TR0=1;0 v3 f+ F8 @" s% p5 q& l
}. ?+ u8 M0 T) m, H
void timer0_mod2() interrupt 1 //定时器0的中断编号是1
$ ~5 y! @& l% q4 D' b# J{, S+ G$ T5 k) W9 I3 ]3 z" n
time++;: F% I/ Y! R% O& E
}' y$ O6 @: f* v; C" @
main()3 s4 |0 D0 ~) e$ V" c7 S, J
{2 T1 b( Y; H8 `0 s4 w3 v/ b4 A r
char i=0;
" p: V9 k/ N _& W P0=0xff;# @7 e9 Y9 n. M6 _
i=0;% e4 m1 Z; x6 z& E' C w) V+ T
timer_init();
2 x# I! @1 {6 z- O# y: @ while(1)
" ^/ ]2 D2 Z$ T' E2 F5 q! {0 k! D) z5 l {, p" p9 l& d# ]- | Y
P0=~duan;//我用共阳数码管
9 x' r" Y3 M8 g3 N; i+ R if(time==1000) { time=0;i++; }//理论上0.1秒显示一个数字,实际上慢很多" C4 V" o$ D3 X. r
if(i==10) i=0;
7 l- q& @$ |( i; h }
& V: p% P3 ^* K( K) j$ H, N1 Z}
& `0 ?4 i, Y. s9 c" l) l: H$ w! w) C. d
: {9 @$ Z( Y. g
" D( v- A L; l
R5 X3 V! n, ]% y9 d; S我选择了定时器0的工作方式2
0 \; k% n6 v+ L% {/ {; ^7 T* C单片机STC90C51& R% R) ?# u4 C1 Q& J, X3 X
烧录后观察到数码管的数字变化为什么明显比0.1秒慢) |' W* M8 p5 g& r
/ Q6 V" f+ ?/ u# p4 y
|
|