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)