aqui van las modificaciones que les comente.. ojala funcionen .. las voy aprobar mas tarde
LIST P=16f628
INCLUDE "P16f628.inc"
ERRORLEVEL -302
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _XT_OSC
CBLOCK 0x20
VAR01 ;equ 0x20 variable a modificar para poder variar el brillo de las lamparas
VAR02 ;equ 0x21
VAR03 ;equ 0x22
VAR04 ;equ 0x23
VAR05 ;equ 0x24 Bandera que indica al codigo que se a producido el zero cross
VAR06 ;equ 0x25
ENDC
org 0x00 ;inicio de programa y direccion de interrupcion
goto Inicio
org 0x04
goto Inter
org 0x05
Inter
bcf PORTA,0 ;desactivamos el triac PORTA,1
movlw b'00010000'
movwf INTCON
bsf VAR05,0 ;Se levanta la bandera zero cross
retfie
Inicio
org 0x20
bsf STATUS,RP0 ;Banco 01
bsf OPTION_REG,INTEDG ;Configurar la INT. flanco de bajada de la INT
movlw b'11111111'
movwf TRISB ;El Puerto B como entrada
clrf TRISA ;El Puerto A como salida
bcf STATUS,RP0 ;Banco 00
clrf PORTA ;Limpiamos el Puerto
bsf INTCON,INTE ;Activamos la interrupcon INT externa
programa
nop
bcf INTCON,INTF ;bajamos la bandera señalizadora de INT_EXT
program
btfss INTCON,INTF ;para sincronizar con el pic al iniciar el programa
goto program
bcf INTCON,INTF ;bandera señalizadora de INT_EXT
progra1
call Ret_ZC
disparo
bsf INTCON,GIE ;permiso global de interrupciones
bsf PORTA,0 ;Disparo del triac, hasta que se produsca un cruce por zero
Zero_cross btfss VAR05,0 ;Espera la bandera de zero cross
goto Zero_cross
bcf VAR05,0 ;bajamos la bandera señalisadora de zero cross
goto progra1
;-----------------------------------------------
;la interrupcion lo tomo como flancos de subida INTE.
;El tiempo de la interrupcion del cruze por cero es de 8.31ms
;de disparo del triac varie desde el 0% hasta el 100%..idealmente pero nunca llegara al 100% ya que tenemos un retrazo de
;1ms porque el ancho de pulso del cruce por cero es de 0.9ms, y como ahora si estamos usando la interupcion..es necesario
;-----------------------------------------------
Ret_ZC ; retardo de aproximadamente 1ms, periodo del ancho de pulso del cruce por cero
movlw 0x0B
movwf VAR01
salt
call usg25
decfsz VAR01,F
goto salt
goto Ang_Disp
usg25
movlw 0x96 ;retardo de 91.4 us
movwf VAR02
sal4
decfsz VAR02,F
goto sal4
return
Ang_Disp
movf PORTB,W
movwf VAR06
rrf VAR06,F ;corrige la falta del pin RB0
bcf STATUS,Z ;ponemos en cero bit "Z"
movf VAR06,W ;comprueba si RB1 a RB7 = 0x00
xorlw 0x00
btfsc STATUS,Z
return ;si es = 0x00 retorna al disparo del triac, este es el mayor punto de iluminacion de la bonbilla
movf VAR06,W
movwf VAR03
salte
call usg72
decfsz VAR03,F
goto salte
return
usg72
movlw 0x78 ;retardo de 72.2 us
movwf VAR04
sal5
decfsz VAR04,F
goto sal5
return
END