其实所有的定时器都是用计数器做的,PLC也是由单片机构成的。看看单片机的定时程序就明白了* U) q7 N) s6 X4 k/ e3 P
/****************************中断子程序_定时***************************************/
3 \) {$ X4 l" J4 {- c$ Avoid Timer0() interrupt 1
6 n, ^$ B- `; \" J {
/ V: O' H$ c/ W: T( U/ J; w1 ` static Count1=0,Count2=0; //静态变量计数器1 l4 {. \1 N6 I2 i! ]+ O
Count1++; //每次中断计数器加1) B5 i+ X) M2 C* ~6 o# C7 ?
Count2++; //每次中断计数器加1# m" a4 v2 Y- K# d8 J/ G
if(Count1>=12) //如果计数器1超过12$ R- j9 ?& ~) }. L* R
{
5 O* p! l$ W" ^" h) B* e( B0 g time_led_sansuo=!time_led_sansuo;2 U. ^* Z) l# @# Y% f( N
Count1=0;
/ h; s' f5 g- m }! F; z' ]3 n7 R* c6 s7 I' L
if(time_led_sansuo); v, M" V9 N+ d4 p b/ N; S
led_dis &= 0xbf;$ d0 o- ^* q, z0 d! D
else
6 v9 X3 h( B3 Y. k* X+ h' F led_dis |= 0x40; ; K" e6 l( P; `1 H. o/ l
if(Count2>=100) //如果计数器2超过100
0 O3 z4 C# J4 d( W# J, e6 i { 2 X$ W7 M6 m4 x9 P; R
time_run--;
5 g! y. J) J8 }3 X( r if(time_run==0)% M) |7 M3 `+ w* F: S; T% S
{: F2 u) E0 h- t% s
ET0=0; //关定时器0* M" `, [3 q! ?/ \, d# W% P
Time_on=2;
7 l; l% D+ S6 }7 g& R+ Q) v0 J EX0=1; //开外部0中断;0 ]% I! }: E/ c: p5 l7 o* p. G
}# J& I6 ~6 {0 d, X ~7 x' w6 P' J" u6 H
Count2=0; //计数器清零% r1 @! d5 N" u0 M
}7 K5 K$ T+ C7 ^8 N$ Z m
8 ~# @3 o: A4 W- W2 L2 h | TH0=0x28; //重置定时初值: `) b. g$ W& J6 b7 b
TL0=0x4b;
8 ?2 u4 u5 d5 d6 Y0 p8 z1 C } |