
;
;PROPIETARIO:			RUBEN DARIO FIGUEREDO
;						
;FECHA:					10 DE MARZO DE 2016 15:49
;PROFESOR:				FORO TODO PIC
;VERSION DEFINITIVA:		MICRO 16F877A 
;GRABAR CON:			WDT=				OFF
;						POWER UP TIMER=		OFF
;						BROWN OUT DETECT=	OFF
;						CODE PROTECT=		ON
;**************************************************************************
        			 list p=16f877a	
                     #include <p16f877a.inc> 
;*************************************************************************************************************
;FUSIBLES DE PROGRAMACIÓN, EVITA TENER QUE ESCRIBIRLOS CADA VEZ QUE SE EJECUTA EL PROGRAMA WINPICPROG O IC-PROG
;*************************************************************************************************************
 #define		FOSC	D'4000000'  

;**************************************************************************************************************
;FUSIBLES DE PROGRAMACIÓN, EVITA TENER QUE ESCRIBIRLOS CADA VEZ QUE SE EJECUTA EL PROGRAMA WINPICPROG O IC-PROG
;*************************************************************************************************************
__CONFIG _BODEN_OFF & _CP_OFF & _WRT_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC & _DEBUG_OFF & _CPD_OFF & _LVP_OFF 
;*************************************************************************************************************
CBLOCK	0X20
GRAL1,GRAL2,GRAL3,FLAG,TGRAL,DECE,CENTE,UNID,UNID1,DECE1,TGRAL1,TEMP,NUMERO,NUMERO1,COCIENTE,COCIENTE1,NUM,NUM1,DIRECCION
DATOAGUARDAR,CALLE,DATOLEIDO,AUXILIAR,AUXILIAR1,PDel0,PDel1,PDel2,PDel01,PDel11,PDel21,PDel02,PDel12,PDel22 , letra ,TOTO ,
CACA , POSIC
	ENDC
;*************************************************************************
CARRY   		equ     1
C				EQU		0
Z       		equ     2
pcl				equ		3
PULSADOR		EQU		4
;*************************************************************************
;BANCOS PARA CAMBIO DE PAGINA - para 16f877
;***********************************************************************
BANK0    MACRO
      BCF   STATUS,RP0
      BCF   STATUS,RP1
      ENDM

BANK1      MACRO
      BSF   STATUS,RP0
      BCF   STATUS,RP1
      ENDM

BANK2      MACRO
      BSF   STATUS,RP1
      BCF   STATUS,RP0
      ENDM

BANK3      MACRO
      BSF   STATUS,RP1
      BSF   STATUS,RP0
      ENDM
;*****************************************************************************
;DEFINICION DE PUERTOS
;******************************************************************************
;*****************************************************************************

	#DEFINE	MENU			PORTB,5
	#DEFINE	LED				PORTA,0
	#DEFINE	BAJA			PORTA,2
;*****************************************************************************
;*****************************************************************************	 	
 		ORG		000H		;VECTOR DE RESET
		GOTO	SETUP
		ORG		0X04		;VECTOR DE INTERRUPCION


;**********************************************************************************************
;			CONFIGURACION DE PUERTOS
;**********************************************************************************************
SETUP

		BANK1						;SUBO A BANCO1
	
		MOVLW		B'00000110'   	;1 input, 0 output
		MOVWF		TRISA			;DESCARGO EN TRISA
		MOVLW		B'00000000'   	;1 input, 0 output
		MOVWF		TRISB			;DESCARGO EN TRISB
		MOVLW		B'00000000' 	;1 input, 0 output
		MOVWF		TRISC			;DESCARGO EN TRISD
		MOVLW		B'00000000'   	;1 input, 0 output
		MOVWF		TRISD			;DESCARGO EN TRISE
		MOVLW		B'00000000' 	;1 input, 0 output
		MOVWF		TRISE
		
		MOVLW		.7
		MOVWF		ADCON1


		BANK0						;BAJO A BANCO 0
	
		CLRF		PORTA			;LIMPIO PORTA
		CLRF		PORTB			;LIMPIO PORTB
		CLRF		PORTC			;LIMPIO PORTC
		CLRF		PORTD			;LIMPIO PORTD
		CLRF		PORTE			;LIMPIO PORTE
		MOVLW		B'00000000'
		MOVWF		PORTA
		MOVLW		B'00100000'
		MOVWF		PORTB
		MOVLW		B'00000000'
		MOVWF		PORTC
		MOVLW		B'00000000'
		MOVWF		PORTD
		MOVLW		B'00000000'
		MOVWF		PORTE

;****************************************************************************************************
;			CONFIGURACION DE INTEERRUPCIONES
;****************************************************************************************************

CONF_INTERRUPCION

		BSF INTCON,RBIE 			; HABILITAR INTERRUPCION RBIE
		BCF INTCON,RBIF 			; LIMPIAR LA BANDEERA DE INTERRUPCION
		BSF INTCON,GIE 				; HABILITAR INTERRUPCION

;******************************************************************************************************
;			RUTINA PRINCIPAL PRENDE UN LED Y MUESTRA UN MENSAJE
;******************************************************************************************************

PRINCIPAL
		CALL	LCD_Inicializa
		CALL	MENSAJE1
		CALL	DEMORA
		BSF		LED
		CALL	DEMORA
	
		GOTO		PRINCIPAL

;*****************************************************************************************
;			 RUTINA DE SERVICIO DE INTERRUCION
;*****************************************************************************************
ISR

	 	BCF 		INTCON,GIE				 ; DESHABLITAR INTERRUPCIONES
	
;CHEQUEO BOTONES

		BTFSS		MENU
		BCF			LED
		CALL		DEMORA
		CALL		PRINCIPAL
		

SALIDA_ISR

		BCF			INTCON,RBIF				; LIMPIA LA BANDERA DE INTERRUPCION
		BSF 		INTCON,GIE 				; HABILITAR INTERRUPCIONES
		RETFIE 								; REGRESAR DE LA INTERRUPCION
	

;***********************************************************************************************
;			AREA DE MENSAJES
;***********************************************************************************************

MENSAJE1
		CALL	LCD_Linea1
	    
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   'R'
        CALL    LCD_Caracter
		MOVLW   'U'
        CALL    LCD_Caracter
		MOVLW   'B'
        CALL    LCD_Caracter
		MOVLW   'E'
        CALL    LCD_Caracter
		MOVLW   'N'
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
        MOVLW   'D'
        CALL    LCD_Caracter
		MOVLW   'A'
        CALL    LCD_Caracter
        MOVLW   'R'
        CALL    LCD_Caracter
		MOVLW   'I'
        CALL    LCD_Caracter
		MOVLW   'O'
        CALL    LCD_Caracter
        MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW	' '
        CALL    LCD_Caracter


		CALL	LCD_Linea2

        MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW	' '
        CALL    LCD_Caracter
		MOVLW   'F'
        CALL    LCD_Caracter
		MOVLW   'I'
        CALL    LCD_Caracter		
		MOVLW   'G'
        CALL    LCD_Caracter
		MOVLW   'U'
        CALL    LCD_Caracter
		MOVLW   'E'
        CALL    LCD_Caracter
		MOVLW   'R'
        CALL    LCD_Caracter
		MOVLW   'E'
        CALL    LCD_Caracter
        MOVLW   'D'
        CALL    LCD_Caracter
		MOVLW   'O'
        CALL    LCD_Caracter
        MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter

	
		RETURN

MENSAJE2
		CALL	LCD_Borra
		CALL	LCD_Inicializa

		CALL	LCD_Linea1
	
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   'E'
        CALL    LCD_Caracter
		MOVLW   'N'
        CALL    LCD_Caracter
		MOVLW   'T'
        CALL    LCD_Caracter
        MOVLW   'R'
        CALL    LCD_Caracter
		MOVLW   'A'
        CALL    LCD_Caracter
        MOVLW   'R'
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
        MOVLW   ' '
		CALL	LCD_Caracter
      

		CALL	LCD_Linea2

		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter		
		MOVLW   'A'
        CALL    LCD_Caracter
		MOVLW   'L'
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   'M'
        CALL    LCD_Caracter
		MOVLW   'E'
        CALL    LCD_Caracter
        MOVLW   'N'
        CALL    LCD_Caracter
		MOVLW   'U'
        CALL    LCD_Caracter
        MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
        MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW	' '
        CALL    LCD_Caracter
		

		RETURN

;******************************************************************************		
;            AREA DE DEMORAS
;******************************************************************************
DELAY	MOVLW		.255		;1535 uS
		MOVWF		TOTO
AA		NOP
		NOP
		NOP
		DECFSZ	TOTO
		GOTO		AA	
		RETURN
;******************************************************************************
;-------------------------------------------------------------
;DEMORA DE 25 SEGUNDOS
;-------------------------------------------------------------
; Generado con PDEL ver SP  r 1.0  el 30/09/2014 Hs 8:58:18
; Descripcion: Delay 25000000 ciclos
;-------------------------------------------------------------
DEMORA2  movlw     .106      ; 1 set numero de repeticion  (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .135      ; 1 set numero de repeticion  (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .249      ; 1 set numero de repeticion  (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  clrwdt              ; 1 ciclo delay
        decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
        goto      PLoop0    ; 2 no, loop
        clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.

;******************************************************************************
DEMORA 	

	 	MOVLW		.255 	;CARGO 255 A W
		MOVWF		GRAL1	;DESCARGO 4 EN GRAL1	
BN		MOVLW		.255		;CARGO 255 A W
		MOVWF		GRAL2	;DESCARGO EN GRAL2
NM		NOP					;NOP, UN CICLO DE MÁQUINA, UN BYTE
		DECFSZ		GRAL2	;DECREMENTO GRAL2, SALTO SI ES CERO
		GOTO		NM		;VOY A NM
		DECFSZ		GRAL1	;DECREMENTO GRAL1 SALTO SI ES CERO
		GOTO		BN		;VOY A BN
		RETURN				;RETORNO
;******************************************************************************

include <RETARDOS.INC>
include <LCD_4BIT_1.INC>

	
END