#INCLUDE <P16F84A.INC> ; Lista de etiquetas de microchip
; Fuses, configuran opciones externas de hardware para la programacion
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _RC_OSC
;=================== Mapa de Memoria ======================
;STATUS equ 0x03 ; Haciendo asignaciones
;TRISA equ 0x05
;TRISB equ 0x06
;PORTA equ 0x05
;PORTB equ 0x06
llaves equ 0x0C ; almacenara el STATUS de las llaves
PDel0 equ 0x0D ; variable para Demora
PDel1 equ 0x0E ; variable para Demora
ORG 0x0000
GOTO inicio
ORG 0005
inicio BSF STATUS,5 ; cambio al banco 1 del pic
MOVLW 0x5E
MOVWF PORTA ; Asigna al puerto A como entrada
MOVLW 0X00
MOVWF PORTB ; y Al puerto B como salida
BCF STATUS,5 ; Regresa al banco 0
CLRF PORTA ; limpia el puerto A
CLRF PORTB ; limpia el puerto B
swich MOVF PORTB,0 ; carga w con el puerto A
ANDLW 0xFF ; retiene los 4 bits de interes (las llaves)
MOVWF llaves ; y los guarda en llaves
XORLW 0x01 ; verifica si es el primer efecto
BTFSC STATUS,2 ; si es así
CALL efect1 ; lo llama y lo ejecuta
MOVF llaves,0 ; sino, carga llaves en w
XORLW 0x02 ; y verifica si es el segundo efecto
BTFSC STATUS,2 ; si es así
CALL efect1 ; lo llama y lo ejecuta
MOVF llaves,0 ; y así con los demás
XORLW 0x03 ; ya me aburrí
BTFSC STATUS,2 ; como verás el resto es lo mismo
CALL efect2
MOVF llaves,0
XORLW 0x04
BTFSC STATUS,2
CALL efect1
MOVF llaves,0
XORLW 0x05
BTFSC STATUS,2
CALL efect2
MOVF llaves,0
XORLW 0x06
BTFSC STATUS,2
CALL efect2
MOVF llaves,0
XORLW 0x07
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x08
BTFSC STATUS,2
CALL efect1
MOVF llaves,0
XORLW 0x09
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x0A
BTFSC STATUS,2
CALL efect2
MOVF llaves,0
XORLW 0x0B
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x0C
BTFSC STATUS,2
CALL efect2
MOVF llaves,0
XORLW 0x0D
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x0E
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x0F
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
MOVF llaves,0
XORLW 0x10
BTFSC STATUS,2
CALL efect1
MOVF llaves,0
XORLW 0x11
BTFSC STATUS,2
CALL efect2
MOVF llaves,0
XORLW 0x12
BTFSC STATUS,2
CALL efect2
MOVF llaves,0
XORLW 0x13
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x14
BTFSC STATUS,2
CALL efect2
MOVF llaves,0
XORLW 0x15
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x16
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x17
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x18
BTFSC STATUS,2
CALL efect2
MOVF llaves,0
XORLW 0x19
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x1A
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x1B
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x1C
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x1D
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x1E
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x1F
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x20
BTFSC STATUS,2
CALL efect1
MOVF llaves,0
XORLW 0x21
BTFSC STATUS,2
CALL efect2
MOVF llaves,0
XORLW 0x22
BTFSC STATUS,2
CALL efect2
MOVF llaves,0
XORLW 0x23
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x24
BTFSC STATUS,2
CALL efect2
MOVF llaves,0
XORLW 0x25
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x26
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x27
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x28
BTFSC STATUS,2
CALL efect2
MOVF llaves,0
XORLW 0x29
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x2A
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x2B
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x2C
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x2D
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x2E
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x2F
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x30
BTFSC STATUS,2
CALL efect2
MOVF llaves,0
XORLW 0x31
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x32
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x33
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x35
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x36
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x37
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x38
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x39
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x3A
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x3B
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x3C
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x3D
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x3E
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x3F
BTFSC STATUS,2
CALL efect6
MOVF llaves,0
XORLW 0x40
BTFSC STATUS,2
CALL efect1
MOVF llaves,0
XORLW 0x41
BTFSC STATUS,2
CALL efect2
MOVF llaves,0
XORLW 0x42
BTFSC STATUS,2
CALL efect2
MOVF llaves,0
XORLW 0x43
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x44
BTFSC STATUS,2
CALL efect2
MOVF llaves,0
XORLW 0x45
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x46
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x47
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x48
BTFSC STATUS,2
CALL efect1
MOVF llaves,0
XORLW 0x49
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x4A
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x4B
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x4C
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x4D
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x4E
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x4F
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x50
BTFSC STATUS,2
CALL efect2
MOVF llaves,0
XORLW 0x51
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x52
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x53
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x54
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x55
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x56
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x57
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x58
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x59
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x5A
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x5B
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x5C
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x5D
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x5E
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x5F
BTFSC STATUS,2
CALL efect6
MOVF llaves,0
XORLW 0x60
BTFSC STATUS,2
CALL efect2
MOVF llaves,0
XORLW 0x61
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x62
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x63
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x64
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x65
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x66
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x67
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x68
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x69
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x6A
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x6B
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x6C
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x6D
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x6E
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x6F
BTFSC STATUS,2
CALL efect6
MOVF llaves,0
XORLW 0x70
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x71
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x72
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x73
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x74
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x75
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x76
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x77
BTFSC STATUS,2
CALL efect6
MOVF llaves,0
XORLW 0x78
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x79
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x7A
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x7B
BTFSC STATUS,2
CALL efect6
MOVF llaves,0
XORLW 0x7C
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x7D
BTFSC STATUS,2
CALL efect6
MOVF llaves,0
XORLW 0x7E
BTFSC STATUS,2
CALL efect6
MOVF llaves,0
XORLW 0x7F
BTFSC STATUS,2
CALL efect7
GOTO swich ; Comienza a revisar de nuevo
efect1 CLRF PORTA ; limpia el puerto B
BSF PORTA,0 ; (10000000)
CALL Demora
BCF PORTA,0 ; (11000000)
CALL Demora
RETURN ; a revisar nuevamente las llaves
efect2 CLRF PORTA ; limpia el puerto B
BSF PORTA,0 ; (10000000)
CALL Demora2
BCF PORTA,0 ; (11000000)
CALL Demora2
CLRF PORTA ; limpia el puerto B
BSF PORTA,0 ; (10000000)
CALL Demora2
BCF PORTA,0 ; (11000000)
CALL Demora2
RETURN
efect3 CLRF PORTA ; limpia el puerto B
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
RETURN
efect4 CLRF PORTA ; limpia el puerto B
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
RETURN
efect5 CLRF PORTA ; limpia el puerto B
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
RETURN ; a revisar nuevamente las llaves
efect6 CLRF PORTA ; limpia el puerto B
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
RETURN ; a revisar nuevamente las llaves
efect7 CLRF PORTA ; limpia el puerto B
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
BSF PORTA,0 ; (10000000)
CALL Demora1
BCF PORTA,0 ; (11000000)
CALL Demora1
RETURN ; a revisar nuevamente las llaves
Demora movlw 0XFF ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop1 movlw .252 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
Demora1 movlw .50 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop3 movlw .252 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop4 clrwdt ; 1 clear watchdog
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop4 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop3 ; 2 no, loop
PDelL4 goto PDelL3 ; 2 ciclos delay
PDelL3 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
Demora2 movlw .200 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop5 movlw .252 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop6 clrwdt ; 1 clear watchdog
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop6 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop5 ; 2 no, loop
PDelL6 goto PDelL5 ; 2 ciclos delay
PDelL5 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
END