Gracias soymoe, usé el programa del foro para la determinación de los retardos, este es el programa:
;-------------------------------------------------------------------------------------
; Programa principal.
;-------------------------------------------------------------------------------------
Continua
bsf OPTOS ; OPTOS=1 que corresponde al pulso de refuerzo.
call t750ms ; Deja encendido durante 750ms.
bcf OPTOS ; OPTOS=0 ahora se apaga, cada 60 seg. se realiza esto.
call PulsosControl ; Llama subrutina PulsosControl, que consiste en la
goto Continua ; generación de tren de pulsos: 112ms bajo y 24ms alto.
;-------------------------------------------------------------------------------------
; Subrutina "PulsosControl". Se generan 441 ondas de 112ms + 24ms para dar 60seg.
;-------------------------------------------------------------------------------------
PulsosControl
bcf OPTOS ; OPTOS=0 inicia en estado bajo.
call t112ms ; Valor que corresponde al estado bajo de la onda de
bsf OPTOS ; de control, después se enciende, OPTOS=1.
call t24ms ; Valor para el estado alto de la onda.
bcf OPTOS ; OPTOS=0, lo vuelve a apagar.
movlw .44 ; Carga w con 44 para ONDAS1
movwf ONDAS1
movlw .10 ; Carga w con 10 para ONDAS2
movwf ONDAS2 ; Así se obtienen 440 ondas mas una inicial.
Generando
bcf OPTOS ; OPTOS=0, asegura que este apagado.
call t112ms ; Asi permanece 112ms. Estado bajo.
bsf OPTOS ; OPTOS=1.
call t24ms ; Así permanece 24ms. Estado alto.
bcf OPTOS ; OPTOS=0, lo vuelve a apagar.
decfsz ONDAS2,1 ; Decrementa ONDAS2 y pregunta si es 0?
goto Generando ; No es cero, regresa a seguir generando.
decfsz ONDAS1,1 ; Si es 0, termino ese bucle, decrementa ONDAS1.
goto ReestableceONDAS2 ; No es 0 aún, entonces reestablece valor de ONDAS2.
goto Retorna ; Regresa al programa principal, termina la subrutina.
ReestableceONDAS2
movlw .10 ; Carga w con 10 para ONDAS2
movwf ONDAS2 ; Así se obtienen 440 ondas mas una.
goto Generando
Retorna
return
;-------------------------------------------------------------------------------------
; Subrutina "t750ms"
;-------------------------------------------------------------------------------------
t750ms
movlw .241 ; 1 set numero de repeticion (C)
movwf PDel0 ; 1 |
PLoop0 movlw .7 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .110 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;-------------------------------------------------------------------------------------
; Subrutina "t24ms"
;-------------------------------------------------------------------------------------
t24ms
movlw .31 ; 1 set numero de repeticion (B)
movwf PDel3 ; 1 |
PLoop11 movlw .154 ; 1 set numero de repeticion (A)
movwf PDel4 ; 1 |
PLoop21 clrwdt ; 1 clear watchdog
clrwdt ; 1 ciclo delay
decfsz PDel4, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop21 ; 2 no, loop
decfsz PDel3, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop11 ; 2 no, loop
clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;-------------------------------------------------------------------------------------
; Subrutina "t112ms"
;-------------------------------------------------------------------------------------
t112ms
movlw .65 ; 1 set numero de repeticion (B)
movwf PDel5 ; 1 |
PLoop12 movlw .191 ; 1 set numero de repeticion (A)
movwf PDel6 ; 1 |
PLoop22 clrwdt ; 1 clear watchdog
PDelL12 goto PDelL22 ; 2 ciclos delay
PDelL22 goto PDelL32 ; 2 ciclos delay
PDelL32 clrwdt ; 1 ciclo delay
decfsz PDel6, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop22 ; 2 no, loop
decfsz PDel5, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop12 ; 2 no, loop
return ; 2+2 Fin.
;-------------------------------------------------------------------------------------
end