;--------------------------------------------------------------------------------------------------------------------------
; Software ECO de USART para PIC18F452
;
; Descripción: El siguiente software está concebido con fines educativos únicamente.
; El código no contiene secretos ni cosas raras, está permitido el uso parcial o total del mismo
; sin necesidad de consultar al autor o nombrarlo
;
; Elegí este PIC por ser el más popular de la familia aunque será discontinuado, es fácil migrar código de este pic a otros.
; La migración a otros microcontroladorse de la familia 18F es posible y bastante sencilla previa lectura de
; los aspectos que lo diferencia con el 18F452.
;
;--------------------------------------------------------------------------------------------------------------------------
list p=18F452
#include <p18f452.inc>
;Code Protection Deshabilitado
CONFIG CP0=OFF
;Oscillator switch deshabilitado. Oscilador tipo HS. PLL desactivado
CONFIG OSCS=OFF, OSC=HS
;Brown-OutReset enabled, Voltage de Brown Out es 2.5V
CONFIG BOR=OFF, BORV=25
;Watch Dog Timer Habilitado, Watch Dog Timer PostScaler 1:128
CONFIG WDT=OFF, WDTPS=128
;Low Voltage Programming Deshabilitado
CONFIG LVP=OFF
;CCP2 pin Mux enabled
CONFIG CCP2MUX=ON
;Stack over/underflow Reset Habilitado.
CONFIG STVR=ON
TEMPVAR equ 0x00 ;En Banco 0.
org 0x0000
_BOOT:
goto _INICIO
org 0x00A0
_INICIO:
movlw b'10111111' ;TRISC<6> como salida de USART (en los 18F es así)
;y TRISC<7> en 1, para ser configurados como pines USART
movwf TRISC
;---------------------------------------------------------------------------------
; Configuración USART Transmisor
;---------------------------------------------------------------------------------
movlw .64 ;9600 bps - Clock 10Mhz - PLL apagado
movwf SPBRG
movlw b'00100100' ;TXEN=on , SYNC = 0 , BRGH = 1
movwf TXSTA
;---------------------------------------------------------------------------------
; Configuración USART Receptor
;---------------------------------------------------------------------------------
movlw b'00000000'
movwf RCSTA
bsf RCSTA,SPEN ;SPEN = 1 habilita el puerto serie, con recepcion continua
call _USARTCLEAR
bsf RCSTA,CREN ;Habilita Usart. Recepción Continua
_USARTLOOP:
btfss PIR1,RCIF ;Espera próximo caracter
goto _USARTLOOP
btfsc RCREG,OERR
call _USARTCLEAR ;Error de Sobreescritura
btfsc RCREG,FERR
call _USARTCLEAR ;Error de Trama
movff RCREG,TEMPVAR
btfsc PIR1,TXIF ;Con esto garantizo que si el buffer está ocupado
;no será sobreescrito. Se recibe el caracter pero no se responde.
movwf TXREG
goto _USARTLOOP
_USARTCLEAR
bcf RCSTA,CREN
movf RCREG,w
movf RCREG,w
movf RCREG,w ;Vacío buffers de usart
bsf RCSTA,CREN
return
end