this should give you a hand!
Code:
' Program to echo incoming serial data
' Baudrate : 2400 Bauds
' Method : Polling USART interrupts flags
' Pic Definition
' ==============
' Using PIC 18F2320 @ 4MHZ and bootloader
'
DEFINE LOADER_USED 1
DEFINE OSC 4
' Hardware configuration
' ======================
'
'
TRISC = %10000000 ' PORTC.7 is the RX input
' PORTC.6 is the TX output
' Serial communication definition
' ===============================
' Using internal USART and MAX232 to interface to PC
'
RCSTA=$90 ' enable serial port,
' enable continuous receive
'
TXSTA=$24 ' enable transmit,
' BRGH=1
'
SPBRG=103 ' set baudrate to 2400
DEFINE HSER_CLOERR 1
' Alias definition
' ================
'
'
RCIF VAR PIR1.5 ' Receive interrupt flag (1=full , 0=empty)
TXIF VAR PIR1.4 ' Transmit interrupt flag (1=empty, 0=full)
CREN var RCSTA.4 ' Receiver enable bit
' Variable definition
' ===================
'
'
SerialString var byte[40]
Counter var byte
Success var bit
i var byte
' Hardware initialisation
' =======================
'
'
pause 100 ' safe start-up delay
Main:
clear
if RCIF then ' incomming data?
I=RCREG ' take it
if i !="!" then discard ' is it the header character?
Redo:
hserin 500,discard,[i] ' get next character, if it's too long
' get out of here and wait the next header
' character
'
if i ="L" then discard ' is it the end?
serialstring[counter]=i ' Store into the array
counter=counter+1 '
goto Redo
Discard:
if i="L" then success=1 ' Yeah i got a valid string
endif
if success then
cren=0 ' Disable Receiver
hserout ["String received : ",str serialstring\counter,13,10,_
"Character count : ", dec counter,13,10]
cren=1 ' Enable receiver
endif
goto main
Bookmarks