Hello,
I need to save in a variable some ASCII character.
I´m actually with USAR interrrupt using ON INTERRUPT PIC BASCI COMMAND.
I want to save all serial characters that i received in a variable and after be able to send with hserout command.
My code it here: This code is actually run well, but just send the latest character and not all the characters recieved.
*********************************************
INCLUDE "bs2defs.bas"
DEFINE LOADER_USER 1
DEFINE OSC 20
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_BAUD 9600
ADCON1 = 6 ' Set PortA to digital operation
RCIF VAR PIR1.5 ' Alias RCIF (USART Receive Interrupt Flag)
OERR VAR RCSTA.1 ' Alias OERR (USART Overrun Error Flag)
CREN VAR RCSTA.4 ' Alias CREN (USART Continuous Receive Enable)
LED VAR PORTB.7 ' Alias LED to PORTB.7
buffer_size CON 32 ' Sets the size of the ring buffer
buffer VAR BYTE[Buffer_size] ' Array variable for holding received characters
index_in VAR BYTE ' Pointer - next empty location in buffer
index_out VAR BYTE ' Pointer - location of oldest character in buffer
bufchar VAR BYTE
bufchar1 VAR BYTE
bufchar2 var byte
posicion VAR BYTE
cont var byte
' Stores the character retrieved from the buffer
i VAR BYTE ' loop counter
errflag VAR BYTE
' Holds error flags
' Initialize variables
cont=0
index_in = 0
index_out = 0
INTCON = %11000000 ' Enable interrupts
On INTERRUPT GoTo serialin ' Declare interrupt handler routine
PIE1.5 = 1 ' Enable interrupt on USART
' Main program starts here - blink an LED at 1Hz
Loop:
High LED ' Turn on LED connected to PORTD.0
For i = 0 To 250 ' Delay for .5 seconds (250*2mS)
Pause 2 ' Use a short pause within a loop
Next i ' instead of one long pause
Low LED ' Turn off LED connected to PORTD.0
For i = 0 To 250 ' Delay for .5 seconds (250*2mS)
Pause 2 ' Use a short pause within a loop
Next i
if porta.2=1 then calle
display:
IF errflag Then error
If index_in = index_out Then Loop ' loop if nothing in buffer
'gosub getbuf ':
'leemos buffer hasta encontrar las primeras "
'gosub getbuf
'hserout[bufchar]
'PAUSE 1000
'hserout[bufchar1]
'GOTO display
' Check for more characters in buffer
' Subroutines
Disable ' Don't check for interrupts in this section
getbuf: ' move the next character in buffer to bufchar
index_out = (index_out + 1) ' Increment index_out pointer (0 to 63)
If index_out > (buffer_size - 1) Then index_out = 0 ' Reset pointer if outside of buffer
bufchar1=buffer[index_out]
goto display
calle:
hserout["AT+CMFG=",34,"67741418",34,bufchar1]
goto display
'Return
error: ' Display error message if buffer has overrun
IF errflag.1 Then error1 ' Determine the error
error1:
hserout["Buffer Overrun"] ' Display buffer error on line-2
'Else
hserout["USART Overrun"] ' Display usart error on line-2
'End If
'LCDOut $fe,2 ' Send the LCD cursor back to line-1 home
'For i = 2 To col ' Loop for each column beyond 1
'LCDOut $fe,$14 ' Move the cursor right to the right column
'Next i
errflag = 0 ' Reset the error flag
CREN = 0 ' Disable continuous receive to clear overrun flag
CREN = 1 ' Enable continuous receive
GoTo display ' Carry on
' Interrupt handler
serialin:
disable
HIGH PORTB.3
' Buffer the character receive
If OERR Then usart_error ' Check for USART errors
index_in = (index_in + 1) ' Increment index_in pointer (0 to 63)
If index_in > (buffer_size - 1) Then index_in = 0 'Reset pointer if outside of buffer
If index_in = index_out Then buffer_error ' Check for buffer overrun
HSerin [buffer[index_in]]
LOW PORTB.3
IF RCIF then serialin ' Read USART and store character to next empty locationIf RCIF Then serialin ' Check for another character while we're here
Resume
enable ' Return to program
buffer_error:
errflag = 1 ' Set the error flag for software
' Move pointer back to avoid corrupting the buffer. MIN insures that it ends up within the buffer.
index_in = (index_in - 1) MIN (buffer_size - 1)
HSerin [buffer[index_in]] ' Overwrite the last character stored (resets the interrupt flag)
usart_error:
errflag = 1 ' Set the error flag for hardware
Resume ' Return to program
End
*************************
So i can´t save more than 1 character.
Some suggestions?
Thanks a lot.
Bookmarks