Here's a simple routine I use for testing. It will buffer up to 80 bytes, and
print it after receiving the end of message ~ character.
Code:DEFINE LOADER_USED 1 DEFINE OSC 20 DEFINE HSER_BAUD 9600 DEFINE HSER_CLROERR 1 ' Automatically clear over-run errors DEFINE HSER_RCSTA 90h ' Enable USART receive DEFINE HSER_TXSTA 24h ' TXSTA=%00100100. TX enable, BRGH=1 for high-speed 'DEFINE HSER_TXSTA 20h ' TXSTA=%00100000. TX enable, BRGH=0 for low-speed GP VAR BYTE ' GP variable BytesIn var byte[80] ' Up to 80 bytes ByteCnt var byte ' Indicates number of bytes in buffer EOM CON "~" ' EOM = "End Of Message" marker OERR VAR RCSTA.1 ' Alias USART over-run bit CREN VAR RCSTA.4 ' Alias USART continuous receive enable bit RCIF VAR PIR1.5 ' Alias USART received character interrupt flag bit INTCON = 0 ' Disable interrupts ByteCnt = 0 ' Zero counter ADCON1 = 7 ' A/D off, all digital Main: IF RCIF THEN ' If RCIF=1 there's a new character in RCREG BytesIn[ByteCnt]=RCREG ' Yes. Then store it in array IF BytesIn[ByteCnt]=EOM THEN OutMsg ByteCnt=ByteCnt+1 ' Increment array index pointer ENDIF GOTO Main OutMsg: HSEROUT [13,10,dec ByteCnt," bytes received",13,10] HSEROUT [STR BytesIn\ByteCnt,13,10] FOR GP=0 TO ByteCnt ' Clear array bytes 0 to ByteCnt BytesIn[GP]=0 ' NEXT ' ByteCnt=0 ' Reset index pointer back to first element WHILE RCIF ' Keep reading until RCIF is clear to flush buffer GP=RCREG ' after EOM is received WEND GOTO Main END




Bookmarks