其实所有的定时器都是用计数器做的,PLC也是由单片机构成的。看看单片机的定时程序就明白了
( r2 s d: X( }, m /****************************中断子程序_定时***************************************/. v B4 X8 s3 e- n
void Timer0() interrupt 1# ] q% S' h4 t$ |
{4 Q+ n% Z( T, Y( I" l
static Count1=0,Count2=0; //静态变量计数器1$ U, U N, V" ?( f/ R, ^. ]8 P( }
Count1++; //每次中断计数器加1
; M0 t0 t9 A5 d( M4 [4 H Count2++; //每次中断计数器加1
( N% P3 y& @( O) y- G4 a if(Count1>=12) //如果计数器1超过12( }4 N; o: y1 L8 A& ^. _3 S5 E
{
, X# Z7 j" X% x! G" J3 |0 q8 ~7 v5 ` time_led_sansuo=!time_led_sansuo;
$ v- o( _7 p9 S( [- m# R Count1=0;
. w" p& H1 E! ?. J! K/ u }6 Q- R0 L0 ~, P" y- Q
if(time_led_sansuo)
, V1 X G2 s @- f n% Y1 E$ z' K led_dis &= 0xbf;6 ^ a" _4 W; ^4 S% O( ^8 m8 e3 t
else
% n& c! @* Y7 I4 l% ] led_dis |= 0x40;
% [! P) w5 b8 ^1 L& Q if(Count2>=100) //如果计数器2超过100
a0 |6 l& Q; {6 `1 G5 E { ; G' g ]$ D) y. ^' M1 j$ J
time_run--;
1 @: q6 M( [7 s& X' u* { if(time_run==0)
& u: Y3 ]9 Z: {2 C! B {* F' d" h- r0 h3 e8 @( j
ET0=0; //关定时器0
2 F" ^3 N5 r) H, ^ |/ O Time_on=2;
5 Y4 Q) b* Q) a: W7 {4 ` EX0=1; //开外部0中断;) I. E e) S: k( b# P. p
} W! s) j: N. @9 t$ M# d! s
Count2=0; //计数器清零
* Z+ j- I( U# w }
- E0 l7 m, T. P7 R) q T% n
- Y, [7 b7 L4 h/ y2 r" s. R* G& b TH0=0x28; //重置定时初值. d Q- O; g, F+ [, a7 L1 H
TL0=0x4b;
6 H+ N, N( }3 l4 G } |