
;
;PROPIETARIO:			RUBEN DARIO FIGUEREDO
;						
;FECHA:					02 OCTUBRE DE 2010 13:58 HS
;PROFESOR:				
;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	SW1				PORTB,0
	#DEFINE	SW2				PORTA,1
	#DEFINE	SW3				PORTA,2
;*****************************************************************************
;*****************************************************************************	 	
 		ORG		000H

INICIO
		CALL	SETUP

		CALL	LCD_Inicializa
		CALL	MENSAJE1
	
	
		
		
		
		

;****************************************************************************
;MENU RUTINA PPAL DEL PROGRAMA
;*****************************************************************************
		
		
MENSAJE1
		CALL	LCD_Linea1
	
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   'G'
        CALL    LCD_Caracter
		MOVLW   'R'
        CALL    LCD_Caracter
		MOVLW   'A'
        CALL    LCD_Caracter
        MOVLW   'C'
        CALL    LCD_Caracter
		MOVLW   'I'
        CALL    LCD_Caracter
        MOVLW   'A'
        CALL    LCD_Caracter
		MOVLW   'S'
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
        MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW	' '
        CALL    LCD_Caracter
        MOVLW   ' '
        CALL    LCD_Caracter

		CALL	LCD_Linea2

		MOVLW   'T'
        CALL    LCD_Caracter
		MOVLW   'O'
        CALL    LCD_Caracter		
		MOVLW   'D'
        CALL    LCD_Caracter
		MOVLW   'O'
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   'P'
        CALL    LCD_Caracter
		MOVLW   'I'
        CALL    LCD_Caracter
        MOVLW   'C'
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
        MOVLW   '!'
        CALL    LCD_Caracter
		MOVLW   '!'
        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   'K'
        CALL    LCD_Caracter
		MOVLW   'I'
        CALL    LCD_Caracter
		MOVLW   'L'
        CALL    LCD_Caracter
        MOVLW   'L'
        CALL    LCD_Caracter
		MOVLW   'E'
        CALL    LCD_Caracter
        MOVLW   'R'
        CALL    LCD_Caracter
		MOVLW   'J'
        CALL    LCD_Caracter
		MOVLW   'C'
        CALL    LCD_Caracter
        MOVLW   ' '
		CALL	LCD_Caracter
      

		CALL	LCD_Linea2

		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter		
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
        MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
        MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
        MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW	' '
        CALL    LCD_Caracter
		

		RETURN

MENSAJE3
		CALL	LCD_Borra
		CALL	LCD_Inicializa

		CALL	LCD_Linea1
	

		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   'P'
        CALL    LCD_Caracter
		MOVLW   'I'
        CALL    LCD_Caracter
		MOVLW   'N'
        CALL    LCD_Caracter
        MOVLW   'O'
        CALL    LCD_Caracter
		MOVLW   'L'
        CALL    LCD_Caracter
        MOVLW   'I'
        CALL    LCD_Caracter
		MOVLW   'L'
        CALL    LCD_Caracter
		MOVLW   'L'
        CALL    LCD_Caracter
        MOVLW   'O'
		CALL	LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
      

		CALL	LCD_Linea2

		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter		
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
        MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
        MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
        MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW	' '
        CALL    LCD_Caracter
		

		RETURN
MENSAJE4
		CALL	LCD_Borra
		CALL	LCD_Inicializa

		CALL	LCD_Linea1
	
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   'M'
        CALL    LCD_Caracter
		MOVLW   'U'
        CALL    LCD_Caracter
		MOVLW   'N'
        CALL    LCD_Caracter
        MOVLW   'D'
        CALL    LCD_Caracter
		MOVLW   'O'
        CALL    LCD_Caracter
        MOVLW   ' '
        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   ' '
        CALL    LCD_Caracter
		MOVLW   'P'
        CALL    LCD_Caracter
		MOVLW   'I'
        CALL    LCD_Caracter
		MOVLW   'C'
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
        MOVLW   'S'
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
        MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW   ' '
        CALL    LCD_Caracter
        MOVLW   ' '
        CALL    LCD_Caracter
		MOVLW	' '
        CALL    LCD_Caracter
		

		RETURN
MENSAJE_MENU
		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   'N'
        CALL    LCD_Caracter
		MOVLW   'D'
        CALL    LCD_Caracter
		MOVLW   'O'
        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


; Subrutina "ServicioInterrupcion" -----------------------------------------------------
;
;
; Subrutina de servicio a la interrupción. Una vez apretado Menu muestra en pantalla ENTRADA A MENU 
;
ServicioInterrupcion
call Retardo_20ms 			; Espera a que se estabilice el nivel de tensión.
btfss SW1 					; Comprueba si es un rebote.
goto FinInterrupcion		; Era un rebote y por tanto sale.
CALL	MENSAJE_MENU		; voy a ver el msj MENU
FinInterrupcion
bcf INTCON,INTF				; Limpia flag de reconocimiento (INTF).
retfie 						; Retorna y rehabilita las interrupciones (GIE=1).
;******************************************************************************
DELAY	MOVLW		.255		;1535 uS
		MOVWF		TOTO
AA		NOP
		NOP
		NOP
		DECFSZ		TOTO
		GOTO		AA	
		RETURN
;******************************************************************************
	

SETUP

		BANK1						;SUBO A BANCO1
	
		MOVLW		B'00000111'   	;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		.6
		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'00000001'
		MOVWF		PORTA
		MOVLW		B'00000000'
		MOVWF		PORTB
		MOVLW		B'00000000'
		MOVWF		PORTC
		MOVLW		B'00000000'
		MOVWF		PORTD
		MOVLW		B'00000000'
		MOVWF		PORTE

		MOVLW	    B'10010000' 	; Habilita la interrupción INT y la general.
		MOVWF 		INTCON
				
		RETURN						;RETORNO




include <RETARDOS.INC>
include <LCD_4BIT_1.INC>

	
END
