LIST P=16F876A
#INCLUDE P16F876.INC
#define LCDE PORTC,0 ;Habilitación del LCD
#define LCDRS PORTC,1 ;Selección de modo del LCD
ORG 00H
GOTO INICIO
ORG 04H
GOTO ISR
ORG 05H
PCL equ 0x02
LCDlinea1 equ H'0080'
LCDlinea2 equ H'00c0'
LCDCLR equ H'0001'
LCDCasa equ H'0002'
LCDInc equ H'0006'
LCDDec equ H'0004'
LCDOn equ H'000C'
LCDOff equ H'0008'
CursorOn equ H'000E'
CursorOff equ H'000C'
CursBlink equ H'000F'
LCDIzda equ H'0018'
LCDDecha equ H'001C'
CursIzda equ H'0010'
CursDecha equ H'0014'
LCDFuncion equ H'0038'
LCDCGRAM equ H'0040'
RTCWRT equ b'11010000'
RTCRD equ b'11010001'
AUX equ H'0021'
AUX1 equ H'0022'
tiempo1 equ 0x23 ;Usados para temporizar
tiempo2 equ 0x24
SEG equ H'0025' ; usados para guardar los
MIN equ H'0026' ; datos que
HOR equ H'0027' ; se
DIA equ H'0028' ; muestran
FECHA equ H'0029' ; en
MES equ H'002A' ; el
AÑO equ H'002B' ; LCD
DIRI2C equ H'002C' ; DATO TEMPORAL A SER ENVIADO A TRAVES DEL BUS I2C
rtc_SEG equ H'00'
rtc_MIN equ H'01'
rtc_HOR equ H'02'
rtc_DIA equ H'03'
rtc_FECHA equ H'04'
rtc_MES equ H'05'
rtc_AÑO equ H'06'
rtc_CONTROL equ H'07'
INICIO BCF STATUS,RP0
BCF STATUS,RP1
BCF ADCON0,0
BSF STATUS,RP0
MOVLW H'06'
MOVWF ADCON1
BCF STATUS,RP1
MOVLW H'D5'
MOVWF OPTION_REG
CLRF TRISA
CLRF TRISB
CLRF TRISC
BSF TRISC,3
BSF TRISC,4
CLRF PIE1
CLRF PIE2
BCF STATUS,5
CLRF PIR1
CLRF PIR2
CLRF PORTA
CLRF PORTB
MOVLW .4
CALL Pausa5ms
CALL INILCD
CALL INIMSSP
MOVLW .0 ;EMPIEZO DESDE LOS SEGUNDOS
CALL I2CSTARTW
MOVLW H'51'
CALL I2CDATOW
MOVLW H'45'
CALL I2CDATOW
MOVLW H'23'
CALL I2CDATOW
MOVLW H'01'
CALL I2CDATOW
MOVLW H'14'
CALL I2CDATOW
MOVLW H'01'
CALL I2CDATOW
MOVLW H'99'
CALL I2CDATOW
MOVLW H'10'
CALL I2CDATOW
CALL I2CSTOPACK
CLRF STATUS
MOVLW .10
CALL Pausa5ms
MOVLW H'FF'
CALL DATO
MOVLW H'57'
CALL CONTROL
MOVLW H'FF'
CALL DATO
MOVLW H'C0'
CALL CONTROL
MOVLW H'FF'
CALL DATO
MOVLW H'67'
CALL CONTROL
MOVLW H'FF'
CALL DATO
NOP
GOTO $-1
;*************RUTINA DE SERVICIO DE INTERRUPCION*****************
ISR
RETFIE
;*********************BUS I2C***********
INIMSSP CLRF STATUS
MOVLW H'28'
MOVWF SSPCON ;HABILITA PINES SDA Y SCL Y CONFIGURA AL PIC COMO I2C MASTER
BSF STATUS,RP0
MOVLW .9
MOVWF SSPADD; VALOR NECESARIO PARA QUE EL CLOCK SEA DE 100KHZ (CK=OSC/4(SSPADD+1)) OK
BSF SSPSTAT,7; TRANSMISION A 100KHZ
BCF SSPCON2,5; VALOR DEL ACK CUANDO TERMINA DE RECIBIR UN BYTE (1 ES NACK)
BCF PIE1,3
BCF STATUS,RP0
BCF PIR1,3
RETURN
I2CSTARTW BCF STATUS,RP1 ; ESCRIBIR EN W LA PRIMER DIRECCION DE MEMORIA DONDE SE QUIERE ESCRIBIR Y LLAMAR
BCF STATUS,RP0
MOVWF DIRI2C
BSF STATUS,RP0
BSF SSPCON2,0; START
CALL I2CHEK ; EL MODULO ESTA OCUPADO?
BCF STATUS,RP0
MOVLW RTCWRT ; DIRECCION DEL RTC MAS BIT DE ESC 0
MOVWF SSPBUF
CALL I2CHEK ; EL MODULO ESTA OCUPADO?
MOVF DIRI2C,W ; PRIMER DIRECCION DONDE VOY A ESCRIBIR
MOVWF SSPBUF
CALL I2CHEK ; EL MODULO ESTA OCUPADO?
RETURN
I2CDATOW ; CARGAR EN W EL SIG DATO Y LLAMAR
CALL I2CHEK
BCF STATUS,RP0
BCF STATUS,RP1
MOVWF SSPBUF
CALL I2CHEK
RETURN
I2CSTOPACK BCF STATUS,RP1
BSF STATUS,RP0
BCF SSPCON2,5 ;ANTES DEL STOP HABRA UN ACK SI ESTUVIESE EN RECIBIR
CALL I2CHEK
BSF SSPCON2,2; STOP
CALL I2CHEK
RETURN
I2CSTOPNACK BCF STATUS,RP1
BSF STATUS,RP0
BSF SSPCON2,5 ;NACK ANTES DEL STOP
BSF SSPCON2,4; NACK
CALL I2CHEK
BSF SSPCON2,2 ; STOP
CALL I2CHEK
RETURN
I2CHEK BCF STATUS,RP1
BSF STATUS,RP0
BTFSC SSPSTAT,2; TRANSMICION EN PROGRESO?
GOTO $-1;ENTONCES ESPERA
VER MOVF SSPCON2,W ;CHEQUEA
ANDLW H'1F' ;QUE NO ESTE HACIENDO
BTFSS STATUS,Z ;OTRA TAREA
GOTO VER
BCF STATUS,RP0
RETURN
;*************RUTINA DE ESCRITURA Y CONTROL LCD*******
CONTROL BCF LCDRS
GOTO CHEK
DATO BSF LCDRS
CHEK CLRF STATUS
MOVWF PORTB
BSF STATUS,RP0
BSF TRISB,7
CLRF STATUS
BSF LCDE
NOP
BCF LCDE
NOP
BTFSC PORTB,7
GOTO $-1
BSF STATUS,RP0
BCF TRISB,7
CLRF STATUS
RETURN
;******INICIACION DEL LCD***********
INILCD CLRF STATUS
MOVLW .6
MOVWF AUX1
MOVF AUX1,0 ;AUX1 -> W
CALL LISTA1
CALL CONTROL
CLRF STATUS
DECFSZ AUX1
GOTO $-4
MOVLW CursorOff
CALL CONTROL
RETURN
LISTA1 ADDWF PCL,1
RETLW CursBlink
RETLW LCDCLR
RETLW CursorOn
RETLW LCDOn
RETLW LCDInc
RETLW LCDFuncion
;******RUTINAS DE TEMPORIZACION*********
Pausa5ms CLRF STATUS
MOVWF AUX
HOLD clrf INTCON
movlw .178
movwf TMR0
btfss INTCON,2
goto $-1
DECFSZ AUX
GOTO HOLD
return
END