其實所有的定時器都是用計數器做的,PLC也是由單片機構成的。看看單片機的定時程序就明白了
8 W/ i# t% D9 Q: } /****************************中斷子程序_定時***************************************/. A8 P- W! m: ~2 X# O
void Timer0() interrupt 13 \; Z) c- w6 a& W1 ?! E4 _
{ C2 B- d- k# q( q7 Y# D0 b H) x
static Count1=0,Count2=0; //靜態變量計數器1
1 M5 {" ]# s5 x4 G, n# e+ I* g5 c Count1++; //每次中斷計數器加1
0 {; u' e [$ c$ ~$ u* q Count2++; //每次中斷計數器加1
: B7 @0 X C7 b9 { F if(Count1>=12) //如果計數器1超過12, O' D( `' N" x* F# @+ ]) H
{
; c0 M% j7 O+ ]- J0 s2 Y time_led_sansuo=!time_led_sansuo;
" m; a: O1 p. r/ [ Count1=0;
% i- i) F; [6 ^2 |; x }6 g8 R& c% \( s( @* {/ w7 p
if(time_led_sansuo)
* p! {+ g5 w+ s% d; m led_dis &= 0xbf;3 h9 {, v: z9 E1 F* s0 h
else
* ?, M+ o/ t2 x5 ^8 ? led_dis |= 0x40;
& n$ x7 e# T( |9 u6 T7 [' I if(Count2>=100) //如果計數器2超過100
! w( ^/ m# T) p% o+ y {
$ O) b% r* C$ I' F* C; @0 a time_run--;5 u% I2 H5 ]' @+ S( ?
if(time_run==0)% u6 F9 M1 W; [+ Z& S' j1 P) e
{
0 J# R, T C+ Q ET0=0; //關定時器01 `8 |8 O5 n; G- ?2 k% i
Time_on=2;9 G1 m. ^+ x' ?5 B0 P+ V [0 s
EX0=1; //開外部0中斷;8 F- Z- x3 B5 e) G1 x
}
" M& t) o0 b2 i m' U1 ~ Count2=0; //計數器清零$ \6 U# e2 E; c! B7 q3 j
}
+ {! Z; ?, _; w' s/ @# A. G9 V2 E8 F4 Q4 R
TH0=0x28; //重置定時初值1 ]4 V: M& g- ^4 M
TL0=0x4b;
/ N) h1 w0 U0 b4 r/ L% {. B4 o } |