ORG $0
LJMP Start ; Main program
ORG $3
LJMP ZeroCrossing ; Zero crossing detector
ORG $B
LJMP TriggerTRIAC ; Trigger TRIAC
;
Start:
MOV TMOD,#1 ; Timer0 mode
SETB EX0 ; enable INT0 interrupt
SETB IT0 ; ‘1’ ke ‘0’ transition
SETB EA ; enable system interrupt
MOV B,#5 ; P/Pmax = 0,5
SJMP * ; program utama
;
ZeroCrossing:
MOV DPTR,#DelayTime
MOV A,B ; P/Pmax value
MOVC A,@A+DPTR ; get delay constant
MOV TL0,A ; save to Timer0
MOV A,B ; P/Pmax value
INC A ; 2nd byte
MOVC A,@A+DPTR ; get delay constant
MOV TH0,A ; save to Timer0
SETB TR0 ; start Timer0
SETB ET0 ; enable Timer0 interrupt
RETI
;
*** Delay constant table
DelayTime:
DW $FFFF-10000,$FFFF-7440,$FFFF-6550
DW $FFFF-5940,$FFFF-5400,$FFFF-5000
DW $FFFF-4550,$FFFF-4050,$FFFF-3380
DW $FFFF-2710
;
TriggerTRIAC:
CLR TR0 ; stop Timer0
CLR ET0 ; stop Timer0 interrupt
CLR P1.7 ; turn on MOC3021 LED
NOP ; wait a moment
SETB P1.7 ; turn off LED MOC3021 LED
RETI