;*********************************************************************
;	PROGRAMA:		Programa que simula un calendario
;	OBJETIVO:		Usar instrucciones para sacar valores por un puerto 
;	FECHA:			20 de Junio de 2008
;	DIESÑO:			JLCM
;*********************************************************************

;-------------- INCLUYO LA LIBRERIAS BÁSICAS DEL PROCESADOR ----------
		#INCLUDE "P18F452.INC"
		LIST P=18F452
;---------- CONFIGURACIÓN DE FUSIBLES DEL PROCESADOR -----------------
 __CONFIG _CONFIG1H, _HS_OSC_1H
 __CONFIG _CONFIG2L, _BOR_OFF_2L & _PWRT_ON_2L
 __CONFIG _CONFIG2H, _WDT_OFF_2H	
	
;--------- DECLARACION DE VARIABLES TIPO BIT -------------------------

#DEFINE ENABLE PORTD,0,0
#DEFINE RS     PORTD,1,0

;---------DECLARACION DE VARIABLES TIPO BYTE -------------------------
TIEMPO_1		EQU 	20H
TIEMPO_2		EQU		21H
TIEMPO_3		EQU		22H
CONT_AÑO_M		EQU		30H
CONT_AÑO_C		EQU		31H
CONT_AÑO_D		EQU		32H
CONT_AÑO_U		EQU		33H
CONT_MES_D		EQU		34H
CONT_MES_U		EQU		35H
CONT_DIA_D		EQU		36H
CONT_DIA_U		EQU		37H
CONT_HORA_D		EQU		38H
CONT_HORA_U		EQU		39H
CONT_MIN_D		EQU		3AH
CONT_MIN_U		EQU		3BH
CONT_SEG_D		EQU		3CH
CONT_SEG_U		EQU		3DH
CONT_AÑO_BIS	EQU		3EH
CONT_DIA_LETRA	EQU		3FH
TMP_H			EQU		40H
TMP_L			EQU		41H
LCD				EQU		PORTB
TMP				EQU		50H
IDIOMA			EQU		51H
;---------- VECTOR DE PROGRAMA PRINCIPAL------------------------------
			ORG		0000H
			CALL	CONFIG_PTOS
			CALL    INI_LCD
			BRA		INICIO
				
;------------ PROGRAMA PRINCIPAL -------------------------------------
INICIO		CALL VALORES_INICIALES
MA_0		MOVLW 09H
			MOVWF TBLPTRH,0
			MOVLW 60H
			MOVWF TBLPTRL,0
			CALL CURSOR_INICIO
			CALL PRINT_LCD
			CALL DELAY_1_SEG
			
			MOVLW 09H
			CPFSEQ CONT_SEG_U,0
			BRA MA_1
			MOVLW 05H
			CPFSEQ CONT_SEG_D,0
			BRA MA_2
			MOVLW 09H
			CPFSEQ CONT_MIN_U,0
			BRA MA_3
			MOVLW 05H
			CPFSEQ CONT_MIN_D,0
			BRA MA_4
			MOVLW 02H
			CPFSEQ CONT_HORA_D,0
			BRA MA_5
			MOVLW 03H
			CPFSEQ CONT_HORA_U,0
			BRA ET_A
			MOVLW 04H
			CPFSEQ CONT_AÑO_BIS,0
			BRA MA_6
			MOVLW 00H
			CPFSEQ CONT_MES_D,0
			BRA MA_6
			MOVLW 02H
			CPFSEQ CONT_MES_U,0
			BRA MA_6
			MOVLW 29H
			MOVWF TABLAT
			BRA ET_B
	
MA_6		MOVLW 50H
			ADDWF CONT_MES_D,0,0
			MOVWF TBLPTRH,0
			MOVFF CONT_MES_U,TMP
			MOVLW 0F0H
			ADDWF TMP,1,0
			SWAPF TMP,0,0
			MOVWF TBLPTRL,0
			TBLRD*
			
ET_B		SWAPF CONT_DIA_D,0,0
			ADDWF CONT_DIA_U,0,0
				
			CPFSEQ TABLAT,0
			BRA MA_7
			MOVLW 01H
			CPFSEQ CONT_MES_D,0
			BRA MA_8
			MOVLW 02H
			CPFSEQ CONT_MES_U,0
			BRA ET_D
			MOVLW 09H
			CPFSEQ CONT_AÑO_U,0
			BRA MA_9
			MOVLW 09H
			CPFSEQ CONT_AÑO_D,0
			BRA MA_10
			MOVLW 09H
			CPFSEQ CONT_AÑO_C,0
			BRA MA_11
			MOVLW 09H
			CPFSEQ CONT_AÑO_M,0
			BRA MA_12

QUEZA_10	CLRF CONT_AÑO_M,0
			CLRF CONT_AÑO_C,0
QUEZA_9		CLRF CONT_AÑO_D,0
QUEZA_8		CLRF CONT_AÑO_U,0
QUEZA_7		MOVLW 04H
			CPFSEQ CONT_AÑO_BIS,0
			BRA ET_E
			MOVLW 01H
			MOVWF CONT_AÑO_BIS,0
ET_F		CLRF CONT_MES_D,0
			MOVLW 01H
			MOVWF CONT_MES_U,0
QUEZA_6		CLRF CONT_DIA_D,0
			MOVLW 01H
			MOVWF CONT_DIA_U,0
QUEZA_5		MOVLW 07H
			CPFSEQ CONT_DIA_LETRA,0
			BRA ET_G
			MOVLW 01H
			MOVWF CONT_DIA_LETRA,0
ET_H		CLRF CONT_HORA_D,0
			BRA ET_C

MA_1		INCF CONT_SEG_U,1,0
			BRA MA_0

MA_2		INCF CONT_SEG_D,1,0
QUEZA_1		CLRF CONT_SEG_U,0
			BRA MA_0

MA_3		INCF CONT_MIN_U,1,0
QUEZA_2		CLRF CONT_SEG_D,0
			BRA QUEZA_1

MA_4		INCF CONT_MIN_D,1,0
QUEZA_3		CLRF CONT_MIN_U,0
			BRA QUEZA_2
		
MA_5		MOVLW 09H
			CPFSEQ CONT_HORA_U,0
			BRA ET_A
			INCF CONT_HORA_D,1,0
ET_C		CLRF CONT_HORA_U,0

QUEZA_4		CLRF CONT_MIN_D,0
			BRA QUEZA_3

ET_A		INCF CONT_HORA_U,1,0
			BRA QUEZA_4

MA_7		MOVLW 09H
			CPFSEQ CONT_DIA_U,0
			BRA ET_I
			INCF CONT_DIA_D,1,0
			CLRF CONT_DIA_U,0
			BRA QUEZA_5

MA_8		MOVLW 09H
			CPFSEQ CONT_MES_U,0
			BRA ET_D
			INCF CONT_MES_D,1,0
			CLRF CONT_MES_U,0
			BRA QUEZA_6
		
ET_D		INCF CONT_MES_U,1,0
			BRA QUEZA_6

MA_9		INCF CONT_AÑO_U,1,0
			BRA QUEZA_7
			
MA_10		INCF CONT_AÑO_D,1,0
			BRA QUEZA_8

MA_11		INCF CONT_AÑO_C,1,0
			BRA QUEZA_9

MA_12		INCF CONT_AÑO_M,1,0
			BRA QUEZA_10

ET_E		INCF CONT_AÑO_BIS,1,0
			BRA ET_F
	
ET_G		INCF CONT_DIA_LETRA,1,0
			BRA ET_H

ET_I		INCF CONT_DIA_U,1,0
			BRA QUEZA_5
	

CONFIG_PTOS	CLRF TRISB,0
			CLRF TRISD,0
			RETURN

VALORES_INICIALES			MOVLW 02H
					MOVWF CONT_AÑO_M,0
					MOVLW 00H
					MOVWF CONT_AÑO_C,0
					MOVLW 01H
					MOVWF CONT_AÑO_D,0
					MOVLW 05H
					MOVWF CONT_AÑO_U,0

					MOVLW 00H
					MOVWF CONT_MES_D,0
					MOVLW 02H
					MOVWF CONT_MES_U,0
					
					MOVLW 02H
					MOVWF CONT_DIA_D,0
					MOVLW 08H
					MOVWF CONT_DIA_U,0

					MOVLW 02H
					MOVWF CONT_HORA_D,0
					MOVLW 03H
					MOVWF CONT_HORA_U,0

					MOVLW 05H
					MOVWF CONT_MIN_D,0
					MOVLW 09H
					MOVWF CONT_MIN_U,0

					MOVLW 04H
					MOVWF CONT_SEG_D,0
					MOVLW 00H
					MOVWF CONT_SEG_U,0

					MOVLW 03H
					MOVWF CONT_DIA_LETRA,0
					MOVLW 04H
					MOVWF CONT_AÑO_BIS,0
	
								







					RETURN
				
;*************** FINAL DEL PROGRAMA PRINCIPAL ************************	
;------------ INICIALIZA LA LCD --------------------------------------
INI_LCD		CLRF LCD,0
			BCF RS 
			BCF ENABLE 
			CALL DELAY_45_MS
			MOVLW 38H
			MOVWF LCD,0
			CALL ENA_DIS
			MOVLW 38H
			MOVWF LCD,0
			CALL ENA_DIS
			MOVLW 38H
			MOVWF LCD,0
			CALL ENA_DIS
			MOVLW 38H
			MOVWF LCD,0
			CALL ENA_DIS
			MOVLW 08H
			MOVWF LCD,0
			CALL ENA_DIS
			MOVLW 01H
			MOVWF LCD,0
			CALL ENA_DIS
			MOVLW 06H
			MOVWF LCD,0
			CALL ENA_DIS
			MOVLW 0CH
			MOVWF LCD,0
			CALL ENA_DIS
			
			BSF RS
			RETURN

SAL_REN		BCF RS
			MOVLW 0C0H
			MOVWF LCD,0
			CALL ENA_DIS
			BSF RS
			RETURN

CLR_LCD		BCF RS
			MOVLW 01H
			MOVWF LCD,0
			CALL ENA_DIS	
			BSF RS
			RETURN

CURSOR_ON	BCF RS
			MOVLW 0CH
			MOVWF LCD,0
			CALL ENA_DIS
			BSF RS
			RETURN

CURSOR_OFF	BCF RS
			MOVLW 0EH
			MOVWF LCD,0
			CALL ENA_DIS
			BSF RS
			RETURN

CURSOR_BLINK BCF RS
			MOVLW 0FH
			MOVWF LCD,0
			CALL ENA_DIS
			BSF RS
			RETURN

CURSOR_INICIO BCF RS
			MOVLW 02H
			MOVWF LCD,0
			CALL ENA_DIS
			BSF RS
			RETURN

ENA_DIS		BSF ENABLE
			CALL DELAY_4.1_MS
			BCF ENABLE
			CALL DELAY_4.1_MS
			RETURN

DELAY_45_MS MOVLW 10H
			MOVWF TIEMPO_3,0
ET_3		MOVLW 10H
			MOVWF TIEMPO_2,0
ET_2		MOVLW 40H
			MOVWF TIEMPO_1,0
ET_1		DECFSZ TIEMPO_1,1,0
			BRA ET_1
			DECFSZ TIEMPO_2,1,0
			BRA ET_2	
			DECFSZ TIEMPO_3,1,0
			BRA ET_3
			RETURN
		
DELAY_4.1_MS MOVLW 10H
			MOVWF TIEMPO_3,0
ET_6		MOVLW 10H
			MOVWF TIEMPO_2,0
ET_5		MOVLW 10H
			MOVWF TIEMPO_1,0
ET_4		DECFSZ TIEMPO_1,1,0
			BRA ET_4
			DECFSZ TIEMPO_2,1,0
			BRA ET_5	
			DECFSZ TIEMPO_3,1,0
			BRA ET_6
			RETURN

DELAY_1_SEG MOVLW 05H
			MOVWF TIEMPO_3,0
ET_9		MOVLW 05H
			MOVWF TIEMPO_2,0
ET_8		MOVLW 40H
			MOVWF TIEMPO_1,0
ET_7		DECFSZ TIEMPO_1,1,0
			BRA ET_7
			DECFSZ TIEMPO_2,1,0
			BRA ET_8	
			DECFSZ TIEMPO_3,1,0
			BRA ET_9
			RETURN
;-------------FINALIZA LA LCD-------------------------		
PRINT_LCD	TBLRD *+
			MOVLW 00H
			CPFSEQ TABLAT,0
			BRA NE_1
			RETURN
NE_1		MOVLW 01H
			CPFSEQ TABLAT,0
			BRA NE_2
			CALL SAL_REN
			BRA PRINT_LCD
NE_2		MOVLW 02H
			CPFSEQ TABLAT,0
			BRA NE_3
			MOVFF TBLPTRH,TMP_H
			MOVFF TBLPTRL,TMP_L
			MOVLW 52H
			MOVWF TBLPTRH,0
			SWAPF  CONT_DIA_LETRA,0,0
			ADDWF IDIOMA,0,0
			MOVWF TBLPTRL,0
ET_10		TBLRD *+
			MOVFF TABLAT,LCD
			CALL ENA_DIS
			TBLRD *+
			MOVFF TABLAT,LCD
			CALL ENA_DIS
			TBLRD *+
			MOVFF TABLAT,LCD
			CALL ENA_DIS
			MOVFF TMP_H,TBLPTRH
			MOVFF TMP_L,TBLPTRL
			BRA PRINT_LCD
NE_3		MOVLW 03H
			CPFSEQ TABLAT,0
			BRA NE_4
			MOVLW 30H
			ADDWF CONT_DIA_D,0,0
			MOVWF LCD,0
			CALL ENA_DIS
			MOVLW 30H
			ADDWF CONT_DIA_U,0,0
			MOVWF LCD,0
			CALL ENA_DIS
			BRA PRINT_LCD
NE_4		MOVLW 04H
			CPFSEQ TABLAT,0
			BRA NE_5
			MOVFF TBLPTRH,TMP_H
			MOVFF TBLPTRL,TMP_L
			MOVLW 50H
			ADDWF CONT_MES_D,0,0
			MOVWF TBLPTRH,0
			SWAPF CONT_MES_U,0,0
			ADDWF IDIOMA,0,0
			MOVWF TBLPTRL,0
			BRA ET_10
NE_5		MOVLW 05H
			CPFSEQ TABLAT,0
			BRA NE_6
			MOVLW 30H
			ADDWF CONT_AÑO_M,0
			MOVWF LCD,0
			CALL ENA_DIS,0
			MOVLW 30H
			ADDWF CONT_AÑO_C,0,0
			MOVWF LCD,0
			CALL ENA_DIS
			MOVLW 30H
			ADDWF CONT_AÑO_D,0,0
			MOVWF LCD,0
			CALL ENA_DIS
			MOVLW 30H
			ADDWF CONT_AÑO_U,0,0
			MOVWF LCD,0
			CALL ENA_DIS

			BRA PRINT_LCD

NE_6		MOVLW 06H
			CPFSEQ TABLAT,0
			BRA NE_7
			MOVLW 30H
			ADDWF CONT_HORA_D,0,0
			MOVWF LCD,0
			CALL ENA_DIS
			MOVLW 30H
			ADDWF CONT_HORA_U,0,0
			MOVWF LCD
			CALL ENA_DIS
			BRA PRINT_LCD
NE_7		MOVLW 07H
			CPFSEQ TABLAT,0
			BRA NE_8
			MOVLW 30H
			ADDWF CONT_MIN_D,0,0
			MOVWF LCD
			CALL ENA_DIS
			MOVLW 30H
			ADDWF CONT_MIN_U,0,0
			MOVWF LCD,0
			CALL ENA_DIS
			BRA PRINT_LCD
NE_8		MOVLW 08H
			CPFSEQ TABLAT,0
			BRA NE_9
			MOVLW 30H
			ADDWF CONT_SEG_D,0,0
			MOVWF LCD,0
			CALL ENA_DIS
			MOVLW 30H
			ADDWF CONT_SEG_U,0,0
			MOVWF LCD,0
			CALL ENA_DIS
			BRA PRINT_LCD
NE_9		MOVFF TABLAT,LCD
			CALL ENA_DIS
			BRA PRINT_LCD

			RETURN
			ORG 0960H
			DB 2," ",3,"/",4,"/",5,1,"  ",6,":",7,":",8," HRS",0
			ORG 5010H
			DB "ENE","JAN","JAN","GEN","JAN",31H
			ORG 5020H
			DB "FEB","FEB","FEV","FEB","FEV",28H
			ORG 5030H
			DB "MAR","MAR","MAR","MAR","MAR",31H
			ORG 5040H
			DB "ABR","APR","AVR","APR","ABR",30H
			ORG	5050H
			DB "MAY","MAY","MAY","MAY","MAY",31H
			ORG 5060H
			DB "JUN","JUN","JUI","GIU","JUN",30H
			ORG 5070H
			DB "JUL","JUL","JUL","JUL","JUL",31H
			ORG 5080H
			DB "AGO","AUG","AOU","AGO","AGO",31H
			ORG 5090H
			DB "SEP","SEP","SEP","SET","SET",31H
			ORG 5100H
			DB "OCT","OCT","OCT","OTT","OUT",30H
			ORG 5110H
			DB "NOV","NOV","NOV","NOV","NOV",30H
			ORG 5120H
			DB "DIC","DEC","DEC","DIC","DEZ",31H

			ORG 5210H
			DB "LUN","MON","LUN","LUN","SEG",00H
			ORG 5220H
			DB "MAR","TUE","MAR","MAR","TER",00H
			ORG 5230H
			DB "MIE","WED","MER","MER","QUA",00H
			ORG 5240H
			DB "JUE","THU","JEU","GIO","QUI",00H
			ORG 5250H
			DB "VIE","FRI","VEN","VEW","SEX",00H
			ORG 5260H
			DB "SAB","SAT","SAM","SAB","SAB",00H
			ORG 5270H
			DB "DOM","SUN","DIM","DOM","DOM",00H
			
		
			END


























