#INCLUDE "16F84.INC"
;===========================================================
; Asignacion de la RAM
;===========================================================
CONTADORH EQU 0x10 ; Contador de tiempo byte alto
CONTADORL EQU 0x11 ; Contador de tiempo byte bajo
;===========================================================
; Asignacion de los puertos
;===========================================================
#DEFINE V_12_ PORTA,0x00 ; Voltaje en pin 12 de la piña
#DEFINE V_9_ PORTA,0x01 ; Voltaje en pin 19 de la piña
#DEFINE Freno PORTA,0x02 ; Freno de la CV activado
#DEFINE V_C_ PORTA,0x03 ; Cargador de 220V funcionando
#DEFINE RL_1 PORTB,0x00 ; Rele 1 Luces desde la bateria de la CV
#DEFINE RL_2 PORTB,0x01 ; Rele 2 Luces desde la piña
#DEFINE RL_3 PORTB,0x02 ; Rele 3 ATC
#DEFINE RL_4 PORTB,0x03 ; Rele 4 Frigo
#DEFINE RL_5 PORTB,0x04 ; Rele 5 Luces interiores CV
#DEFINE RL_6 PORTB,0x05 ; Rele 6 Conexion baterias
#DEFINE ALRM PORTB,0x07 ; Chicharra
;===========================================================
; Vector de reset
;===========================================================
ORG 0x0000
RESET:
MOVLW 0x03
MOVWF PCLATH ; Fijamos la pagina 3 de la memoria para las tablas
BSF STATUS, RP0 ; Seleccionamos banco 1 para manipular puertos
MOVLW 0xFF
MOVWF TRISA ; Puerto A es entrada en todos sus bits
MOVLW 0x00
MOVWF TRISB ; Puerto B es salida en todos sus bits
BCF STATUS,RP0 ; VOlvemos a seleccionar el banco de registros 0
BUCLE:
MOVF PORTA,W ; Leemos el estado del puerto A
CALL TABLA_ESTADOS ; Buscamos la salida para este estado en la tabla
MOVWF PORTB ; Ponemos el estado de la salida en el puerto B
MOVLW 0xE0 ; Se pone el contador para unos pocos segundos de tiempo
MOVWF CONTADORH
TEMPO_1:
MOVLW 0x00
MOVWF CONTADORL
TEMPO_2:
INCF CONTADORL,F ; Incrementamos el contador
BTFSS STATUS,C ; Repetimos hasta que desborde (256 veces)
GOTO TEMPO_2
INCF CONTADORH,F ; Incrementamos la parte alta del contador
BTFSS STATUS,C ; Repetimos desde el principio
GOTO TEMPO_1
GOTO BUCLE ; y volvemos a empezar
;===========================================================
; Tablas en pagina 3
;===========================================================
ORG 0x0300
TABLA_ESTADOS:
ADDWF PCL,F ; Salto al valor adecuado
RETLW 0x01 ; Rele 1
RETLW 0x02 ; Rele 2
RETLW 0x80 ; Chicharra
RETLW 0x80 ; Chicharra
RETLW 0x10 ; Rele 5
RETLW 0x02 ; Rele 2
RETLW 0x80 ; Chicharra
RETLW 0x2C ; Reles 3, 4 y 6
RETLW 0x01 ; Rele 1
RETLW 0x22 ; Reles 2 y 6
RETLW 0x80 ; Chicharra
RETLW 0x80 ; Chicharra
RETLW 0x90 ; Rele 5 + chicharra
RETLW 0x82 ; Rele 2 + chicharra
RETLW 0x80 ; Chicharra
RETLW 0x80 ; Chicharra
END