LIST p=16f84a
#include <p16f84a.inc>
;*********************************************************************************************************************************
_config_CP_OPP & _WDT_OFF & _PWRTE_ON & _XT_OSC
;****************************************VARIABLES QUE ASIGNA EL DESTINO DONDE SE GUARDA
w EQU 0x00 ; EL RESULTADO SE GUARDA EN W
f EQU 0x01 ;EL RESULTADO SE GUARDA EN EL REGISTRO
;****************************************DECLARACION DE VARIABLES
PORTA EQU 0x05 ;DECLARACION DEL PUERTO A
PORTB EQU 0x06 ;DECLARACION DEL PUERTO B
STATUS EQU 0x03 ;DECLARACION DE ESTADO
RP0 EQU 0x05 ;BIT RP0 DEL REGISTRO STATUS
;*********************************************************************************************************************************
CONTA1 EQU 0x0C ;REGISTRO UTILIZADO PARA EL RETARDO
CONTA2 EQU 0x0D ;REGISTRO UTILIZADO PARA EL RETARDO
CONTA3 EQU 0x0E ;REGISTRO UTILIZADO PARA EL RETARDO
;********************************************************************************************************************************
ORG 0x000
goto main ;REGRESA AL INICIO DEL PROGRAMA
ORG 0x05 ;INICIO DEL PROGRAMA
main bcf STATUS,RP0 ;SELECCIONA LA PAGINA 1 DE LA MEMORIA PARA TENER ACCESO AL TRIS
clrf TRISB ;SELECCIONA EL PUERTO B COMO SALIDA
bcf STATUS,RP0 ;VUELVE A LA PAGINA 0
clrf PORTB ;APAGA LOS LEDS DEL PUERTO
clrf CONTA1 ;LIMPIA LOS REGITROS DEL CONTADOR DEL RETARDO
clrf CONTA2 ;LIMPIA LOS REGITROS DEL CONTADOR DEL RETARDO
clrf CONTA3 ;LIMPIA LOS REGITROS DEL CONTADOR DEL RETARDO
;*********************************************************************************************************************************
RETARDO
movlw P ;1
movwf CONAT3 ;1
CICLO3 movlw M ;1
movwf CONTA2 ;1
CICLO2 movlw N ;1
movwf CONTA1 ;1
CICLO decfsz CONTA1,f ;1*(N-1)+1
goto CICLO ;2*(N-1)
decfsz CONTA2,f ;1*(M-1)+1
goto CICLO ;2*(M-1)
decfsz CONTA2,f ;1*(P-1)+1
goto CICLO ;2*(P-1)