Define CONFIG = 0x2f50
Define CONFIG2 = 0x3ffc
'********************************************************************************
'Ejemplo de Buffer Serie *************************************************************
'Puerto serie 38400 Baudios, almacena en un vector los bytes recibidos ************************
'By COS, 20/04/2016, Pic Simulator IDE v7.40 *******************************************
'Pic EBasic con 16F88 **************************************************************
'********************************************************************************
Define CLOCK_FREQUENCY = 8 'Clock a 8Mhz
Define SIMULATION_WAITMS_VALUE = 1
'Biblioteca de funciones
Include "_FuncionesPic16F88.bas"
'-------------------------------------Puertos del LCD---------------------------------------
Define LCD_BITS = 4 'Indicamos que el bus de datos del lcd sera de 4bit
Define LCD_DREG = PORTA 'Bus de datos sera el puerto A
Define LCD_DBIT = 0 'Bus de datos seran los 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 = 2000 'Tiempo de espera despues de ejecutar un comando del lcd en uSeg.
Define LCD_DATAUS = 50 'Tiempo de espera despues de enviar un dato al LCD en uSeg.
Define LCD_INITMS = 50 'Tiempo de espera despues de inicializar el Display.
'-------------------------------------------------------------------------------------------
AllDigital 'Pin analogicos como digitales
CMCON = 0x07 'Comparador a off
Call _setup_oscillator(_osc_8mhz)
Call _setup_oscillator_mode_select_bit(_oscillator_mode_defined_by_fosc)
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 'Como salida(RB5,Tx RS232)
TRISB.2 = 1 'Como entrada (RB2, Rx RS232)
TRISB.4 = 1 'Como entrada (RHT03 inicio)
PORTB.3 = 1 'Luz lcd a ON (RB3)
PORTA.7 = 1 'Led amarillo a OFF
PORTB.0 = 1 'Led verde a OFF
PORTB.1 = 0 'LED RHT03 a OFF
Lcdinit 'Activa el LCD
'-----------------------------------------------
Hseropen 38400 'Selecciona la velocidad del puerto serie RS232
Lcdout "Test Buffer" 'Datos al Lcd
Hserout CrLf 'Linea en blanco al hyperterminal
WaitMs 100
Symbol _buffer = PIR1.RCIF 'Se pone a 1 cuando hay datos en el buffer usart Rx
Dim indice As Byte
indice = 0
Dim dato(8) As Byte 'Buffer serie de 8 elementos (0... 7)
'**************************************************************************************
main:
'Desbloquea la Usart en modo Rx
If RCSTA.OERR = True Then 'Hay error en la Usart, entraron más datos de los que se extrajero (está bloqueada)
Dim papelera As Byte
RCSTA.CREN = 0 'Disable, continua recepción
Hserget papelera 'Vacía registros usart
Hserget papelera
RCSTA.CREN = 1 'Enable, Continuous Receive Enable bit*/
Endif
'Va almacenando los bytes recibidos en el vector de 8 elementos DATO
If _buffer = True Then 'Si hay caracteres en el puerto serie (registro de la Usart)
Hserget dato(indice)
indice = indice + 1
Endif
'Envia los bytes recibidos al puerto serie en orden inverso
If indice > 7 Then
While indice > 0
indice = indice - 1
Hserout #dato(indice), CrLf
Wend
Endif
Goto main
End