其实所有的定时器都是用计数器做的,PLC也是由单片机构成的。看看单片机的定时程序就明白了
7 V* _* s: I3 u) `. _9 R! b7 B /****************************中断子程序_定时***************************************/
4 |) f$ o k' [: y: \void Timer0() interrupt 1
* y/ U* ^7 t0 T" |% c8 ? {
+ G! E. u, k: }4 z ]/ |) a static Count1=0,Count2=0; //静态变量计数器1* m" ~, d/ J% i+ @5 {
Count1++; //每次中断计数器加1# V% q( h+ K8 S. K
Count2++; //每次中断计数器加1
& m. O* X+ p4 T& L1 a if(Count1>=12) //如果计数器1超过12
1 U9 \! c. h, S8 ~ {0 w# M: o5 I z( C
time_led_sansuo=!time_led_sansuo;
8 e8 L) { H7 n( Y0 y Count1=0;
% U7 y3 [ n1 @+ a5 [! V }* T9 x v( x6 y' S8 r% [
if(time_led_sansuo)
6 @ v0 D! M; k- U led_dis &= 0xbf;
8 D' R( Y% s" t/ ` else' U( G( W: r( y4 C" `) ~. b+ G* n
led_dis |= 0x40; ( Z2 F7 t$ a9 ?
if(Count2>=100) //如果计数器2超过100
5 c6 u3 p2 m4 m6 H/ Y {
: ~2 Q3 W7 ] b4 s time_run--;" F8 P# c4 t3 w( L/ g# q' ?0 |8 W
if(time_run==0)
& |/ D# e; p) m. _9 F; } {
. N/ E# a! w7 {" w6 D; I: C' w ET0=0; //关定时器05 Z" n/ S5 ?8 O" L$ K
Time_on=2;- c% i% l. M4 x* r! |
EX0=1; //开外部0中断;* D, I/ p8 `8 d: b% L( S: S
}
7 [% m! z9 t- e: T& T8 V Count2=0; //计数器清零
D+ E9 ?$ } W3 K0 c }4 C) R$ n1 K4 U6 o! |1 p
" [+ W/ p) L5 x) i5 a: y4 @ TH0=0x28; //重置定时初值+ V" X0 D" X" W# i( F+ L; y: g- q
TL0=0x4b;1 R2 B4 H4 \9 U0 H8 x
} |