;	07-04-2008
;	Practica 2.ASM
;	Alarma indicadora de jornada
;	PIC 16f84a
;	MPLAB 8.00
;	PROTEUS 7.2 SP2
;	Guido Carmona Girón

	LIST	P=16F84A,				; usar PIC 16F84A
	#include <p16f84A.inc>				; Etiqueta estandar
	errorlevel      -302    			; Eliminar banco mensajes
	__CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC	; code protec		off
							; power up timer	on
							; watchdog		off
							; osc	4 MHz		XT
;----------------------------Etiquetas--------------------

W       EQU     0
F       EQU     1
TMRO    EQU     01
STATUS  EQU     03
PORTA   EQU     05
PORTB   EQU     06
INTCON  EQU     0B
CONTA1  EQU     0C
CONTA2  EQU     0D

;----------------------------Programa----------------------
                                
        ORG     00              ;Inicia
        GOTO    INICIO
        ORG     04
        GOTO    RSI             ;Vector de Interrupcion

INICIO  BSF     STATUS,5        ;Acceso Banco 1                
        MOVLW   0X06            ;Preescaler 128
        MOVWF   TMRO
        MOVLW   0X01            ;Puerto B habilitado como entrada
        MOVWF   PORTB
        CLRF    PORTA           ;Puerto A habilitado como salida
        BCF     STATUS,5        ;Regresa al Banco 0
        CLRF    PORTA
        CLRF    PORTB
        BSF     PORTB,0         
        BSF     PORTA,4
VEA     BTFSC   PORTB,0         ;Verifica sistema encendido
        GOTO    VEA
CICLO   CALL    ALARMA          ;Llama alarma=sistema encendido 
        CALL    RETARD1         ;Llama Retardos
        CALL    ALARMA
        CALL    RETARD2         
        CALL    ALARMA
        CALL    RETARD3         
        CALL    ALARMA
        CALL    RETARD4         
        GOTO    CICLO           ;Ciclo indefinido

;--------------Subrutinas----------------------------------------

ALARMA  MOVLW   0X03            ;Prende alarma visual
        MOVWF   PORTA           ; Y sonora por 4 seg
        BCF     PORTA,4
        CLRF    CONTA1          ;Contador1 borrado
        CLRF    TMRO            ;TMRO borrado cuenta hasta 256
        MOVLW   0XA0            ;Controla interrupciones
        MOVWF   INTCON          ;TMRO desbordado
BUCLE   MOVF    CONTA1,W        
        XORLW   0X01            
        BTFSS   STATUS,2        ;Apagar alarmas 
        GOTO    BUCLE           
        CLRF    PORTA
        BCF     INTCON,7        ;Interrupciones deshabilitadas
        RETURN                  

RETARD1 MOVLW   0XEC            ;Carga CONTA2 con 236
        MOVWF   CONTA2           
        CLRF    TMRO            ;TMRO cuenta hasta 256D
        MOVLW   0XA0
        MOVWF   INTCON          ;Interrupciones configuradas
BUCLE1  MOVF    CONTA1,W        ;CONTA1 es igual A 225?
        XORLW   0XE1            ;Si CONTA es igual A 225 
        BTFSS   STATUS,2        ;Incrementa  CONTA2 hasta que llegue a 00
        GOTO    BUCLE1          
        INCFSZ  CONTA2,F
        GOTO    BUCLE1
        BCF     INTCON,7        ;Interrupciones deshabilitadas
        RETURN                    

RETARD2 MOVLW   0XF6            ;CARGA CONTA2 CON 246 
        MOVWF   CONTA2           
        CLRF    TMRO            ;TMRO borrado
        MOVLW   0XA0            ;Interrupciones configuradas
        MOVWF   INTCON          
BUCLE2  MOVF    CONTA1,W        ;CONTA1 igual A 180? 
        XORLW   0XB4            ;Si CONTA1=180 incrementa CONTA2
        BTFSS   STATUS,2
        GOTO    BUCLE2
        INCFSZ  CONTA2,F
        GOTO    BUCLE2
        BCF     INTCON,7
        RETURN                  

RETARD3 MOVLW   0XEC            ;CARGA CONTA2 CON 236 
        MOVWF   CONTA2          
        CLRF    TMRO
        MOVLW   0XA0
        MOVWF   INTCON
BUCLE3  MOVF    CONTA1,W
        XORLW   0XB4
        BTFSS   STATUS,2
        GOTO    BUCLE3
        INCFSZ  CONTA2,F
        GOTO    BUCLE3
        BCF     INTCON,7
        RETURN

RETARD4 MOVLW   0XCE            ;CARGA CONTA2 CON 206
        MOVWF   CONTA2          
        CLRF    TMRO
        MOVLW   0XA0
        MOVWF   INTCON
BUCLE4  MOVF    CONTA1,W
        XORLW   0XFE
        BTFSS   STATUS,2
        GOTO    BUCLE4
        INCFSZ  CONTA2,F
        GOTO    BUCLE4
        BCF     INTCON,7
        RETURN

;--------------Interrupciones------------------------

RSI     BTFSS   INTCON,2        
        RETFIE
        INCF    CONTA1,F
        CLRF    TMRO
        BCF     INTCON,2
        BSF     INTCON,5
        RETFIE
        END

