其实所有的定时器都是用计数器做的,PLC也是由单片机构成的。看看单片机的定时程序就明白了5 T0 |' v" {9 V" m" {3 X5 \: @
/****************************中断子程序_定时***************************************/
3 o3 V" `1 l3 ?- u0 ^void Timer0() interrupt 1, v% \1 d& Y4 H$ _
{7 o4 W8 Q$ @0 N. k9 b0 @
static Count1=0,Count2=0; //静态变量计数器1
$ e1 f4 S3 g6 p8 K5 V5 X$ K Count1++; //每次中断计数器加1: v5 h( P3 ^% B4 v7 J
Count2++; //每次中断计数器加1
6 q$ r" s8 T W# _' v x% ?, ? if(Count1>=12) //如果计数器1超过12. U8 [ P8 l: f* m" d6 r& ^
{3 ]( F6 R& w7 A G( E( i
time_led_sansuo=!time_led_sansuo;
. B" T! `) z+ n$ U# \- g/ y Count1=0;
9 {; h) ]7 p6 b. a7 d; K4 T }, u, |6 x5 {) V# [! B
if(time_led_sansuo)
1 w. J F8 ~& x6 B9 k0 i- {7 K0 z1 e+ Z9 l led_dis &= 0xbf;7 h1 O# L$ _1 H
else
' D7 p1 d) J% m7 l) U& A4 U, X! ]. N) j led_dis |= 0x40; 0 x' H. o) B! X# q& n* C, ]
if(Count2>=100) //如果计数器2超过100% D" h% d$ q+ H: F
{
$ D0 I& Y4 m6 n7 L- w time_run--;! }! }: k% ^( u; x
if(time_run==0)
9 {* ?8 W: m/ ^; ]0 a; I {
8 N. \7 a& c$ ` ET0=0; //关定时器0
" ?5 R/ J/ |7 H& _- t Time_on=2;
% ~: h- e0 V6 C, m: T EX0=1; //开外部0中断;
0 { `5 h' }& u S } r3 k* H6 O7 R1 ~ v1 z$ C2 s0 }/ y
Count2=0; //计数器清零6 q% D8 _+ {6 e; @% O
}* Z4 D4 X- F( N2 R. D4 e# n/ J4 ~2 M
+ V0 w$ ~; m: N3 }9 i TH0=0x28; //重置定时初值
" O2 u F( L) t! a: Y TL0=0x4b;# _: C( l* k$ I a% d3 z
} |