Sviluppo software pilotaggio scheda Triac

Calcoli

F.Clock uP 11.059.200,
F.Clock Cnt = (F.Clock uP/16) 921.600,
T.Clock Cnt = (1/(F.Clock Cnt)) 0,000001085069444
 
T Semiperiodo 50Hz 0,01
Suddivisioni 40,
Dt =(T Semiperiodo 50Hz/Suddivisioni) 0,00025
Conteggio Timer per Dt = (dt/T.Clock Cnt) 230,4
Conteggio Timer per Dt senza decimali 230
Dt cont tron  0,000249565972222

Sorgente

   org 8200h
;Per spefiche e tempi vedere foglio Excel    
    
ModFt0   =0002h ;Maschera per T0 in modo 2
;-------------------------------------------------------------------------------
;Contatori di ritardo innesco
crTriacA = 10h
;Set point di ritardo innesco
rTriacA  = 14h
;Set point di durata innesco
iTriac   = 2 
;-------------------------------------------------------------------------------
;Pilotaggio TRIACs, 0=TRIAC on, 1=TRIAC off     
TriacA = p1.0    

       call Init
main:
       jmp main 

;-------------------------------------------------------------------------------
;Chiamato ogni 10mS         
si_ex0: 
;Inizializzazione contatori ritardo innesco
       mov crTriacA,rTriacA
       cpl p1.6    ;Marker interrupt passaggio zero  (per debugging)         
       reti
;-------------------------------------------------------------------------------
;Chiamato ogni 250uS        
 si_t0:
;Conteggi di durata innesco
        jb TriacA,ctA
        mov a,crTriacA
        jz ciB
        djnz crTriacA,ciB
        setb TriacA
        jmp ciB
;Conteggi di ritardo innesco        
ctA:
        mov a,crTriacA  
        jz u_si_t0
        djnz crTriacA,u_si_t0
        clr TriacA
        mov crTriacA,#iTriac
u_si_t0:
        cpl p1.7      ;Marker interrupt timer  (per debugging)
        reti        

;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
;Inizializzazione vettori di interruzione
Vett_ex0 = 80a1h ;Vettore interruzione esterna 0
Vett_t0  = 80A4H ;Vettore interruzione timer 0 
Init: 
;Init vettore Int0
      mov dptr,#Vett_ex0
      mov a,#high(si_ex0)
      movx @dptr,a
      inc dptr
      mov a,#low(si_ex0)
      movx @dptr,a
;Init vettore T0
      mov dptr,#Vett_t0
      mov a,#high(si_t0)
      movx @dptr,a
      inc dptr
      mov a,#low(si_t0)
      movx @dptr,a
;-------------------------------------------------------------------------------      
;Init timer T0     
       mov a,tmod
       anl a,#0f0h
       orl a,#ModFt0
       mov tmod,a 
       mov th0,#26
       mov tl0,#26
;-------------------------------------------------------------------------------      
;Init  interrupt    
       setb ex0
       setb et0
       setb it0
       setb ea 
       setb TR0
;-------------------------------------------------------------------------------           
;Inizializzazione Setpoints                   
       mov rTriacA,#20
;-------------------------------------------------------------------------------           
;Inizializzazione I/O                   
       mov p1,0ffh
       ret
       end