LIST p=18F46k22
#INCLUDE <p18f46k22.inc>
CONFIG IESO = OFF
CONFIG FCMEN = OFF
CONFIG PRICLKEN = OFF
CONFIG PLLCFG = ON
CONFIG FOSC = INTIO67
CONFIG PWRTEN = OFF
CONFIG BOREN = OFF
CONFIG BORV = 285
CONFIG WDTEN = OFF
CONFIG WDTPS = 1
CONFIG CCP2MX = PORTC1 ;B3
CONFIG PBADEN = OFF
CONFIG CCP3MX = PORTB5 ;C6
CONFIG HFOFST = OFF
CONFIG T3CMX = PORTC0 ;B5
CONFIG P2BMX = PORTC0 ;B5
CONFIG MCLRE = INTMCLR
CONFIG STVREN = OFF
CONFIG LVP = OFF
; CONFIG XINST = OFF ;DUDA
CONFIG DEBUG = OFF
CONFIG CP0 = OFF
CONFIG CP1 = OFF
CONFIG CP2 = OFF
CONFIG CP3 = OFF
CONFIG CPB = OFF
CONFIG CPD = OFF
CONFIG WRT0 = OFF
CONFIG WRT1 = OFF
CONFIG WRT2 = OFF
CONFIG WRT3 = OFF
CONFIG WRTC = OFF
CONFIG WRTB = OFF
CONFIG WRTD = OFF
CONFIG EBTR0 = OFF
CONFIG EBTR1 = OFF
CONFIG EBTR2 = OFF
CONFIG EBTR3 = OFF
CONFIG EBTRB = OFF
CBLOCK 0x000
BSR_TEMP
W_TEMP
STATUS_TEMP
W_TEMP_2
AUX_SPI
LTC_B4
LTC_B3
LTC_B2
LTC_B1
VH
VL
ENDC
ORG 0x000
GOTO INICIO
ORG 0x008
GOTO ALTA_PRIORIDAD
ORG 0x018
BAJA_PRIORIDAD
FIN_INTER
RETFIE ;FAST ; REGRESO DE INTERRUPCIÓN
ALTA_PRIORIDAD ; ALTA PRIORIDAD INTER
MOVWF W_TEMP_2 ; AL ENTRAR GUARDO DATOS EN W
FIN_INTER_ALTA ; RUTINA DE INTERRUPCIÓN ALTA PRIORIDAD
MOVF W_TEMP_2,W ; RESTAURO VALOR DE W2 A W
RETFIE ; REGRESO DE INTERRUPCIÓN
INICIO
;*********************************************************************************
;**************************CONFIGURACIÓN DEL OSCILADOR ***************************
;*********************************************************************************
BSF OSCCON,IRCF2 ; CONFIGURO EL OSCILADOR INTERNO
BSF OSCCON,IRCF1 ; A 16MHZ
BSF OSCCON,IRCF0 ; CON LOS BITS IRCF
BSF OSCTUNE,PLLEN ; PRENDO EL PLL X4 PARA ALCANZAR 64MHZ
;*********************************************************************************
;**************************CONFIGURACIÓN DE LOS PUERTOS***************************
;*********************************************************************************
CLRF ANSELA ; LIMPIO ANSELA ADCs EN EL PUERTO A
CLRF ANSELB ; LIMPIO ANSELA ADCs EN EL PUERTO B
CLRF ANSELC ; LIMPIO ANSELA ADCs EN EL PUERTO C
CLRF ANSELD ; LIMPIO ANSELA ADCs EN EL PUERTO D
CLRF ANSELE ; LIMPIO ANSELA ADCs EN EL PUERTO E
CLRF LATA ; LIMPIO LATCH CORRESPONDENTE AL PUERTO A
CLRF LATB ; LIMPIO LATCH CORRESPONDENTE AL PUERTO B
CLRF LATC ; LIMPIO LATCH CORRESPONDENTE AL PUERTO C
CLRF LATD ; LIMPIO LATCH CORRESPONDENTE AL PUERTO D
CLRF LATE ; LIMPIO LATCH CORRESPONDENTE AL PUERTO E
MOVLW B'00000000' ; ASIGNO ENTRADAS/SALIDAS
MOVWF TRISA ; CONFIGURACIÓN I/O PUERTO A
MOVLW B'00000000' ; ASIGNO ENTRADAS/SALIDAS
MOVWF TRISB ; CONFIGURACIÓN I/O PUERTO B
MOVLW B'00000000'
MOVWF TRISC ; CONFIGURACIÓN I/O PUERTO C
MOVLW B'00000000'
MOVWF TRISD ; CONFIGURACIÓN I/O PUERTO D
CLRF TRISE ; CONFIGURACIÓN I/O PUERTO E
;*********************************************************************************
;**************************CONFIGURACIÓN DE RETARDOS *****************************
;*********************************************************************************
CALL CONFIG_RETARDO ; INICIO EL TIMER ASOCIADO A LOS RETARDOS
CALL INI_LCD ; INICIALIZO LCD
;*********************************************************************************
;***********************CONFIGURACIÓN DEL MODULO MSSP*****************************
;*********************************************************************************
CLRF SSP1STAT
MOVLW B'00110010'
MOVWF SSP1CON1
BSF TRISC,4
BSF TRISC,6
;**********************************************************************************
;************************ MENSAJES DE BIENVENIDA **********************************
;**********************************************************************************
CALL CONF_ADC
CALL M1_LTC
; CALL INI_LTC
#DEFINE BUSYP PORTC,6
PRINCIPAL
BSF LATB,6
BTFSC BUSYP
GOTO PRINCIPAL
BCF LATD,2
CALL SPI_READ
MOVWF LTC_B4
CALL SPI_READ
MOVWF LTC_B3
CALL SPI_READ
MOVWF LTC_B2
CALL SPI_READ
MOVWF LTC_B1
BSF LATD,2
CALL LCD_L3
MOVLW ' '
CALL ENVIAR_DATO
MOVF LTC_B4,W
CALL ENVIA_BYTE
MOVLW ' '
CALL ENVIAR_DATO
MOVF LTC_B3,W
CALL ENVIA_BYTE
MOVLW ' '
CALL ENVIAR_DATO
CALL LCD_L4
MOVLW ' '
CALL ENVIAR_DATO
MOVF LTC_B2,W
CALL ENVIA_BYTE
MOVLW ' '
CALL ENVIAR_DATO
MOVF LTC_B1,W
CALL ENVIA_BYTE
MOVLW ' '
CALL ENVIAR_DATO
CALL LCD_L2
MOVLW 'A'
CALL ENVIAR_DATO
MOVLW 'D'
CALL ENVIAR_DATO
MOVLW 'C'
CALL ENVIAR_DATO
MOVLW '='
CALL ENVIAR_DATO
CALL CON_CH0
;MOVF VH,W
;CALL ENVIA_BYTE
MOVLW '0'
BTFSC VH,1
MOVLW '1'
CALL ENVIAR_DATO
MOVLW '0'
BTFSC VH,0
MOVLW '1'
CALL ENVIAR_DATO
MOVF VL,W
CALL ENVIA_BYTE
CALL RET_100ms
BCF LATB,6
CALL RET_100ms
GOTO PRINCIPAL ; LOOP PRINCIPAL
SPI_READ
BCF PIR1,SSP1IF
CLRF SSP1BUF
SPSW
BTFSS PIR1,SSP1IF
GOTO SPSW
MOVF SSP1BUF,W
RETURN
CON_CH0
BSF ADCON0,ADON
BSF ADCON0,GO
PROCESO
BTFSC ADCON0,GO
GOTO PROCESO
MOVFF ADRESH,VH
MOVFF ADRESL,VL
RETURN
CONF_ADC
MOVLW B'10001110' ; JUSTIFICADO A LA IZQUIERDA
MOVWF ADCON2
MOVLW B'00000100'
MOVWF ADCON1
MOVLW B'00000000' ; VAMOS A SELECCIONAR EL ADC 0 Y HABILITAR EL PUERTO DE CONVERSIÓN
MOVWF ADCON0
BSF TRISA,0
BSF ANSELA,ANSA0 ;CONFIGURAMOS LA ENTRADA A0 PARA LEERLA
RETURN
M1_LTC
CALL LCD_L1
CALL MENSAJE_LTC
RETURN
;**********************************************************************************
;************************ RUTINAS DE ENVIO DE MENSAJES ****************************
;**********************************************************************************
MENSAJE_LTC
MOVLW UPPER(LTC) ; DIRECCIÓN UPPER MENSAJE
MOVWF TBLPTRU ; LO MUEVO A LA DIRECCIÓN UPPER DE LA TABLA
MOVLW HIGH(LTC) ; DIRECCION H DEL MENSAJE
MOVWF TBLPTRH ; LO MUEVO A DIRECCIÓN H DE LA TABLA
MOVLW LOW(LTC) ; DIRECCION L DEL MENSAJE
MOVWF TBLPTRL ; LO MUEVO A DIRECCION L DE LA TABLA
GOTO SENDING_TEXT ; ME DIRIJO A MANDAR LOS CARACTERES
MENSAJE_AE3
MOVLW UPPER(AE3) ; DIRECCIÓN UPPER MENSAJE
MOVWF TBLPTRU ; LO MUEVO A LA DIRECCIÓN UPPER DE LA TABLA
MOVLW HIGH(AE3) ; DIRECCION H DEL MENSAJE
MOVWF TBLPTRH ; LO MUEVO A DIRECCIÓN H DE LA TABLA
MOVLW LOW(AE3) ; DIRECCION L DEL MENSAJE
MOVWF TBLPTRL ; LO MUEVO A DIRECCION L DE LA TABLA
GOTO SENDING_TEXT ; ME DIRIJO A MANDAR LOS CARACTERES
MENSAJE_AE2
MOVLW UPPER(AE2) ; DIRECCIÓN UPPER MENSAJE
MOVWF TBLPTRU ; LO MUEVO A LA DIRECCIÓN UPPER DE LA TABLA
MOVLW HIGH(AE2) ; DIRECCION H DEL MENSAJE
MOVWF TBLPTRH ; LO MUEVO A DIRECCIÓN H DE LA TABLA
MOVLW LOW(AE2) ; DIRECCION L DEL MENSAJE
MOVWF TBLPTRL ; LO MUEVO A DIRECCION L DE LA TABLA
GOTO SENDING_TEXT ; ME DIRIJO A MANDAR LOS CARACTERES
MENSAJE_AE1
MOVLW UPPER(AE1) ; DIRECCIÓN UPPER MENSAJE
MOVWF TBLPTRU ; LO MUEVO A LA DIRECCIÓN UPPER DE LA TABLA
MOVLW HIGH(AE1) ; DIRECCION H DEL MENSAJE
MOVWF TBLPTRH ; LO MUEVO A DIRECCIÓN H DE LA TABLA
MOVLW LOW(AE1) ; DIRECCION L DEL MENSAJE
MOVWF TBLPTRL ; LO MUEVO A DIRECCION L DE LA TABLA
GOTO SENDING_TEXT ; ME DIRIJO A MANDAR LOS CARACTERES
SENDING_TEXT
TBLRD*+ ; LEO TABLA E INCREMENTO EN UNO LA DIRECCION DESPES DE LEER
MOVF TABLAT,W ; MOVEMOS EL REGISTRO TBLAT A W PARA LEER EL DATO
BTFSS STATUS,Z ; PREGUNTO SI YA FUE CERO AL VALOR PARA SALIR
BRA TEXTO ; SI NO FUE ASI NOS DIRIGIMOS A ENVIAR A LA LCD EL DATO OBTENIDO
RETURN ; LLEGAMOS A ESTE PUNTO CUANDO YA ENCONTRAMOS EL 0X00 DE LA TABLA
TEXTO
MOVF TABLAT,W ; MOVEMOS EL REGISTRO TABLAT A W
CALL ENVIAR_DATO ; LO ENVIAMOS A LA LCD
BRA SENDING_TEXT ; SEGUIMOS LEYENDO EL SIGUIENTE DATO DE LA TABLA
SENDING_BAR
TBLRD*+ ; LEO TABLA E INCREMENTO EN UNO LA DIRECCION DESPES DE LEER
MOVF TABLAT,W ; MOVEMOS EL REGISTRO TBLAT A W PARA LEER EL DATO
BTFSS STATUS,Z ; PREGUNTO SI YA FUE CERO AL VALOR PARA SALIR
BRA TEXTOB ; SI NO FUE ASI NOS DIRIGIMOS A ENVIAR A LA LCD EL DATO OBTENIDO
RETURN ; LLEGAMOS A ESTE PUNTO CUANDO YA ENCONTRAMOS EL 0X00 DE LA TABLA
TEXTOB
MOVF TABLAT,W ; MOVEMOS EL REGISTRO TABLAT A W
CALL ENVIAR_DATO ; LO ENVIAMOS A LA LCD
CALL RET_100ms ; RETARDO 100ms
CALL RET_100ms ; RETARDO 100ms
BRA SENDING_BAR ; SEGUIMOS LEYENDO EL SIGUIENTE DATO DE LA TABLA
;**********************************************************************************
;************************ MENSAJES PARA LCD EN TABLAS *****************************
;**********************************************************************************
LTC: DATA " MONITOR CORRIENTE ",0X00
#INCLUDE<RETARDOS.INC>
#INCLUDE<LCD_4BIT.INC>
;#INCLUDE<LTC2400.INC>
END