#include "p18f26k40.inc"
; CONFIG1L
CONFIG FEXTOSC = XT ; External Oscillator mode Selection bits (XT (crystal oscillator) above 100 kHz, below 8 MHz; PFM set to medium power)
CONFIG RSTOSC = EXTOSC_4PLL ; Power-up default value for COSC bits (EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits)
; CONFIG1H
CONFIG CLKOUTEN = OFF ; Clock Out Enable bit (CLKOUT function is disabled)
CONFIG CSWEN = ON ; Clock Switch Enable bit (Writing to NOSC and NDIV is allowed)
CONFIG FCMEN = OFF ; Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)
; CONFIG2L
CONFIG MCLRE = EXTMCLR ; Master Clear Enable bit (If LVP = 0, MCLR pin is MCLR; If LVP = 1, RE3 pin function is MCLR )
CONFIG PWRTE = OFF ; Power-up Timer Enable bit (Power up timer disabled)
CONFIG LPBOREN = OFF ; Low-power BOR enable bit (ULPBOR disabled)
CONFIG BOREN = SBORDIS ; Brown-out Reset Enable bits (Brown-out Reset enabled , SBOREN bit is ignored)
; CONFIG2H
CONFIG BORV = VBOR_2P45 ; Brown Out Reset Voltage selection bits (Brown-out Reset Voltage (VBOR) set to 2.45V)
CONFIG ZCD = OFF ; ZCD Disable bit (ZCD disabled. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON)
CONFIG PPS1WAY = ON ; PPSLOCK bit One-Way Set Enable bit (PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle)
CONFIG STVREN = ON ; Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
CONFIG DEBUG = OFF ; Debugger Enable bit (Background debugger disabled)
CONFIG XINST = OFF ; Extended Instruction Set Enable bit (Extended Instruction Set and Indexed Addressing Mode disabled)
; CONFIG3L
CONFIG WDTCPS = WDTCPS_31 ; WDT Period Select bits (Divider ratio 1:65536; software control of WDTPS)
CONFIG WDTE = OFF ; WDT operating mode (WDT enabled regardless of sleep)
; CONFIG3H
CONFIG WDTCWS = WDTCWS_7 ; WDT Window Select bits (window always open (100%); software control; keyed access not required)
CONFIG WDTCCS = SC ; WDT input clock selector (Software Control)
; CONFIG4L
CONFIG WRT0 = OFF ; Write Protection Block 0 (Block 0 (000800-003FFFh) not write-protected)
CONFIG WRT1 = OFF ; Write Protection Block 1 (Block 1 (004000-007FFFh) not write-protected)
CONFIG WRT2 = OFF ; Write Protection Block 2 (Block 2 (008000-00BFFFh) not write-protected)
CONFIG WRT3 = OFF ; Write Protection Block 3 (Block 3 (00C000-00FFFFh) not write-protected)
; CONFIG4H
CONFIG WRTC = OFF ; Configuration Register Write Protection bit (Configuration registers (300000-30000Bh) not write-protected)
CONFIG WRTB = OFF ; Boot Block Write Protection bit (Boot Block (000000-0007FFh) not write-protected)
CONFIG WRTD = OFF ; Data EEPROM Write Protection bit (Data EEPROM not write-protected)
CONFIG SCANE = ON ; Scanner Enable bit (Scanner module is available for use, SCANMD bit can control the module)
CONFIG LVP = OFF ; Low Voltage Programming Enable bit (HV on MCLR/VPP must be used for programming)
; CONFIG5L
CONFIG CP = OFF ; UserNVM Program Memory Code Protection bit (UserNVM code protection disabled)
CONFIG CPD = OFF ; DataNVM Memory Code Protection bit (DataNVM code protection disabled)
; CONFIG5H
; CONFIG6L
CONFIG EBTR0 = OFF ; Table Read Protection Block 0 (Block 0 (000800-003FFFh) not protected from table reads executed in other blocks)
CONFIG EBTR1 = OFF ; Table Read Protection Block 1 (Block 1 (004000-007FFFh) not protected from table reads executed in other blocks)
CONFIG EBTR2 = OFF ; Table Read Protection Block 2 (Block 2 (008000-00BFFFh) not protected from table reads executed in other blocks)
CONFIG EBTR3 = OFF ; Table Read Protection Block 3 (Block 3 (00C000-00FFFFh) not protected from table reads executed in other blocks)
; CONFIG6H
CONFIG EBTRB = OFF ; Boot Block Table Read Protection bit (Boot Block (000000-0007FFh) not protected from table reads executed in other blocks)
;*****************************************************************************************
;************** ZONA DE DECLARACIÓN DE VARIABLES PARA PROGRAMA ***************************
;*****************************************************************************************
CBLOCK
W_TEMP
STATUS_TEMP
BSR_TEMP
PAUSE
PAUSE2
ENDC
;*****************************************************************************************
;*****************************************************************************************
;*****************************************************************************************
ORG 0X00
GOTO RES_VECT
ORG 0x008 ; ORIGEN ISR ALTA PRIORIDAD
GOTO BAJA_PRIORIDAD
ORG 0x018 ; ORIGEN ISR BAJA PRIORIDAD
BAJA_PRIORIDAD
MOVWF W_TEMP ; MUEVO EL ULTIMA VALOR DE W
MOVFF STATUS,STATUS_TEMP ; DE STATUS Y DE BSR
MOVFF BSR,BSR_TEMP ; PARA RESTAURARLOS AL VALOR ANTES DE LA INTERRUPCION
FIN_INTER
MOVWF W_TEMP ; MUEVO EL ULTIMA VALOR DE W
MOVFF STATUS,STATUS_TEMP ; DE STATUS Y DE BSR
MOVFF BSR,BSR_TEMP ; PARA RESTAURARLOS AL VALOR ANTES DE LA INTERRUPCION
RETURN FAST ; REGRESO DE INTERRUPCION
RES_VECT ; processor reset vector
; LOS REGISTROS PMD ESTAN ASOCIADOS A LOS PERIFERICOS Y EN ESTA SECCION SE PUEDEN DESHABILITAR
; CON EL OBJETIVO DE CONSEGUIR UN MENOR CONSUMO DE CORRIENTE
CLRF PMD0 ; LIMPIO REGISTRO PDM
CLRF PMD1 ; LIMPIO REGISTRO PDM
CLRF PMD2 ; LIMPIO REGISTRO PDM
CLRF PMD3 ; LIMPIO REGISTRO PDM
CLRF PMD4 ; LIMPIO REGISTRO PDM
CLRF PMD5 ; LIMPIO REGISTRO PDM
MOVLW 0X20 ; CARGO LA CONFIGURACION
MOVWF OSCCON1 ; AL REGISTRO OSCCON1
CLRF OSCCON3 ; LIMPIO OSCCON3
CLRF OSCEN ; LIMPIO REGISTRO
MOVLW 0X02 ; ASIGNO EL VALOR QUE INDICA 4 MHZ
MOVWF OSCFRQ ; PARA CONTROL DEL MICRO
CLRF OSCTUNE ; LIMPIO ESTE REGISTRO PARA VELOCIDAD NOMINAL
;PLL_READY
; BTFSC OSCSTAT,PLLR ; ESPERO A QUE SE ESTABILICE EL PLL
; BRA PLL_READY ; ME REGRESO HASTA QUE SEA ESTABLE
;*****************************************************************************************
;**************** ZONA DE INICIALIZACION DE LOS PUERTOS Y PERIFERICOS ********************
;*****************************************************************************************
CLRF LATA ; LIMPIO EL LATCH A
CLRF LATB ; LIMPIO EL LATCH B
CLRF LATC ; LIMPIO EL LATCH C
CLRF TRISA ; CONFIGURACION PUERTO A
CLRF TRISB ; CONFIGURACION PUERTO B
CLRF TRISC ; CONFIGURACION PUERTO C
CLRF ANSELA ; LIMPIO REGISTRO DE ADC PUERTO A
CLRF ANSELB ; LIMPIO REGISTRO DE ADC PUERTO B
CLRF ANSELC ; LIMPIO REGISTRO DE ADC PUERTO C
CLRF WPUA ; APAGO RESISTENCIAS PULL UP
CLRF WPUB ; APAGO RESISTENCIAS PULL UP
CLRF WPUC ; APAGO RESISTENCIAS PULL UP
CLRF ODCONA ; REGISTRO OPEN DRAIN DE PUERTO
CLRF ODCONB ; REGISTRO OPEN DRAIN DE PUERTO
CLRF ODCONC ; REGISTRO OPEN DRAIN DE PUERTO
CLRF SLRCONA ; AJUSTO EL SLEW RATE AL MAXIMO PUERTO A
CLRF SLRCONB ; AJUSTO EL SLEW RATE AL MAXIMO PUERTO B
CLRF SLRCONC ; AJUSTO EL SLEW RATE AL MAXIMO PUERTO C
MOVLW 0XFF ; CONFIGURACION DEL NIVEL DE ENTRADA EN REGISTRO
MOVWF INLVLA ; ASOCIADO AL PUERTO A
MOVLW 0XFF ; CONFIGURACION DEL NIVEL DE ENTRADA EN REGISTRO
MOVWF INLVLB ; ASOCIADO AL PUERTO B
MOVLW 0XFF ; CONFIGURACION DEL NIVEL DE ENTRADA EN REGISTRO
MOVWF INLVLC ; ASOCIADO AL PUERTO C
MOVLW 0X08 ; CONFIGURACION DEL NIVEL DE ENTRADA EN REGISTRO
MOVWF INLVLE ; ASOCIADO AL PUERTO E
;*****************************************************************************************
;**************** ZONA DE INICIALIZACION DE PUERTO SERIE A 2400 BAUDIOS ******************
;*****************************************************************************************
MOVLW 0X08 ; CONFIGURO LA GENERACION DE BAUDIOS A 16 BITS
MOVWF BAUD1CON ; CON EL REGISTRO ASOCIADO A SERIAL 1
MOVLW 0X90 ; CONFIGURO LA RECEPCION DE 8 BITS
MOVWF RC1STA ;
MOVLW B'00100100';0X24 ; B'10010000'
MOVWF TX1STA ;
MOVLW 0X82 ; VAOR BAJO
MOVWF SP1BRGL ; DE GENERADOR DE BAUDIOS
MOVLW 0X06 ; VALOR ALTO DE
MOVWF SP1BRGH ; GENERADOR DE BAUDIOS
BSF TRISC,3 ; CONFIGURO COMO ENTRADA EL PIN RC3 RX
MOVLW B'00010011' ; CONFIGURO EL PUERTO RC3 COMO RX
MOVWF RX1PPS ; DEL PUERTO SERIAL
;*******************************************************************************
BCF INTCON,GIE ; Disable interrupts:
BANKSEL PPSLOCK ; Bank to PPSLOCK register
MOVLW 0X55 ; Required sequence, next 4 instructions
MOVWF PPSLOCK ;
MOVLW 0XAA ;
MOVWF PPSLOCK ; Clear PPSLOCKED bit to enable writes
BCF PPSLOCK,PPSLOCKED ; Only a BCF instruction will work
;*******************************************************************************
; MOVLW B'00010011' ; CONFIGURO EL PUERTO RC3 COMO RX
; MOVWF RX1PPS ; DEL PUERTO SERIAL
MOVLW 0X14 ;
MOVWF SSP1CLKPPS ;
MOVLW 0X0F ;
MOVWF RC4PPS ;
MOVLW 0X09 ; CONFIGURO EL REGISTRO RC2 PPS
MOVWF RC2PPS ; COMO TRANSMISION SERIAL TX
MOVLW 0X10 ; CONFIGURO EL REGISTRO RC5 PPS
MOVWF RC5PPS ; COMO CANAL SDA DEL PUERTO I2C
MOVLW 0X15 ;
MOVWF SSP1DATPPS ;
;*******************************************************************************
BCF INTCON,GIE ;
BANKSEL PPSLOCK ; Bank to PPSLOCK register
MOVLW 0X55 ; Required sequence, next 4 instructions
MOVWF PPSLOCK
MOVLW 0XAA
MOVWF PPSLOCK ; Set PPSLOCKED bit to disable writes
BSF PPSLOCK,PPSLOCKED ; Only a BSF instruction will work
; ;BSF INTCON,GIE ; Enable Interrupts
;*******************************************************************************
;*******************************************************************************
;*******************************************************************************
#DEFINE REC_LED LATC,6
#DEFINE PLAY_LED LATC,7
#DEFINE PROGRAMA PORTA,0
#DEFINE START PORTC,0
#DEFINE ACCION PORTA,1
;*******************************************************************************
;*******************************************************************************
;*******************************************************************************
CALL CONFIG_RETARDO
;*******************************************************************************
; MAIN PROGRAM
;*******************************************************************************
STARTw
BTFSS PIR3,RC1IF
GOTO STARTw
MOVFF RC1REG,LATB
MOVLW 0XAA
CALL TX_DATO
GOTO STARTw
BTFSC PIR3,RC1IF
BRA RECIBIDO
BTFSS RC1STA,OERR
GOTO STARTw
BCF RC1STA,SREN
NOP
BSF RC1STA,SREN
GOTO STARTw
RECIBIDO
;CALL RX_DATO
;MOVWF LATB
TX_DATO
MOVWF TX1REG
TX_DAT
BTFSS PIR3,TX1IF
GOTO TX_DAT
BCF PIR3,TX1IF
RETURN
RX_DATO
BTFSS PIR3,RC1IF
GOTO RX_DATO
; BTFSC RC1STA,OERR
; RETURN;LW 0XFF
;;
MOVF RC1REG,W
BCF PIR3,RC1IF
RETURN
; SYNC SERIAL = 1
;#INCLUDE<RET.INC>
END