Creo que si estudias este código y un pequeño vistazo al pequeño manual del PSI, no necesitaras ningún tipo de tutorial.
Define CONF_WORD = 0x2f10
Define CONF_WORD_2 = 0x3ffc
Define CLOCK_FREQUENCY = 8
'*************** PIC Entrenadora BASIC ********************
'NOMBRE: 16F88_Pic_EBasic_RS232_ECO_10
'VERSION: 1.0
'MICRO: PIC16F88
'Fecha/Autor: 8/11 by COS
'VERSION 1.0.
'Practicas con puerto serie "Para principiantes"
'Funciones basicas para el correcto manejo del puerto RS232
'Programa responde ECO por el Hyperterminal
'*******************************************************
'Puerto LCD----------------------------------------------------------------
Define LCD_BITS = 4 'Bus de datos del lcd sera de 4bit
Define LCD_DREG = PORTA 'Bus de datos sera el puerto A
Define LCD_DBIT = 0 'Bus datos seran 4 bit menos significativos del puerto A
Define LCD_RSREG = PORTB 'Bit de control RS sera del puerto B
Define LCD_RSBIT = 7 'Se usara el RB7 como RS
Define LCD_EREG = PORTB 'Bit de control E sera del puerto B
Define LCD_EBIT = 6 'Se usara el RB6 como E
Define LCD_COMMANDUS = 500 'Espera despues de ejecutar un comand del lcd en uSeg.
Define LCD_DATAUS = 50 'Espera despues de enviar un dato al LCD en uSeg.
Define LCD_INITMS = 50 'Espera despues inicializar LCD, solo se ejecuta una vez (mSeg).
'Configuración de los módulos-------------------------------------------
ANSEL = 0x00 'Los pin I/O digitales
CMCON = 0x07 'Comparador a off
OSCCON = 0x7e 'Set intrc To 8mhz, se usara reloj interno a 8Mhz
TRISA = 0x00 'Puerto A como salidas
TRISB = 0x00 'Puerto B como salidas
TRISA.4 = 1 'Como entrada (RA4, adc)
TRISA.6 = 1 'Como entrada (RA6, tecla S1)
TRISA.5 = 1 'Como entrada (RA5, tecla S2)
'TRISB.5 = 0 'RB5(Tx, RS232)
TRISB.2 = 1 'RB2 (Rx, RS232)
PORTB.3 = 1 'Luz lcd a On (RB3)
PORTA.7 = 1 'Led amarillo a Off
PORTB.0 = 1 'Led verde a Off
'******************************************************
Lcdinit 'Inicializa el LCD sin cursor
'Reasignacion de nombres----------------------------------------------
Symbol led_amarillo = PORTA.7 'Led amarillo
Symbol led_verde = PORTB.0 'Led verde
'******************************************************
Call clearbufer() 'Inicializa Uart
'******************************************************
main:
If overbufer = True Then Call clearbufer() 'Inicializa Uart
If bufer = True Then Call rd_byte() 'Lee un byte del puerto RS232
Goto main
End
'******************************************************
'Funciones lectura puerto serie RS232***********************
Symbol overbufer = RCSTA.OERR 'Bit error Uart
Symbol bufer = PIR1.RCIF 'Bit hay datos Uart
'Mantiene el modulo Usart operativo
'No datos de entrada, no datos de salida
'Call clearbufer()
'If overbufer = True Then Call clearbufer()
Proc clearbufer()
Dim papelera As Byte
Hseropen 9600 'Velocidad del puerto serie, configura Usart
RCSTA.CREN = 0 'Disable
Hserget papelera 'Limpia bufer Uart
Hserget papelera
Hserget papelera
RCSTA.CREN = 1 'Enable, Continuous Receive Enable bit*/
End Proc
'Lee bufer Uart, eco serie RS232
'Retorna el dato en la variable rd_byte
'No datos de entrada, si dato de salida en rd_byte
'Call rd_byte()
'If bufer = True Then Call rd_byte()
Function rd_byte() As Byte
Hserget rd_byte 'Carga el dato en el bufer
Hserout rd_byte 'Envia dato puerto serie RS232
End Function
'*************************************************