Thanks for the example code, I modified it to my variable names and included the main loop but it just gives me vales of 0 for BUFFER, what have I done wrong. I checked if it was interrupting and it is.
Here is my code:
'************************************************* **
@ device hs_OSC, wdt_on, pwrt_on, protect_off
define osc 20
Include "modedefs.bas"
trisc.6=0
TRISC.7=1
TRISA.0=0
RCSTA = %10010000 ' ENABLE USART AND SET TO CONTINUOUS RECEIVE
SPBRG = 64 'SET TO 4800bps
INTCON = %11000000 'ENABLE GLOBAL & PERIFERAL INTERRUPTS
RCIF VAR PIR1.5 'FLAG IS THE INTERRUPT WHEN A BYTE IS IN THE USART BUFFER
RCIE VAR PIE1.5
OERR VAR RCSTA.1
CREN VAR RCSTA.4
test var porta.0
BAUD CON 16390
BUFFER VAR BYTE[8] 'BUFFER FROM USART TO COLLECT THE 8 BYTES
BYTECOUNTER VAR BYTE 'USED TO COUNTER BYTES INTO THE BUFFER
BFULL VAR BIT 'FLAGS THAT THE BUFFER HAS ALL 8 BYTES
VALUE VAR BYTE 'A TEMP SINGLE BYTE RECEIVED FROM THE USART
COUNTER VAR WORD 'USED FOR LOOP IN MAIN PROGRAM
BUFFER = 0
BYTECOUNTER = 0
BFULL = 0
VALUE = 0
RCIE=1 'ENABLE USART RECEIVE INTERRUPT FLAG
ON INTERRUPT GOTO GETDATA
GOTO MAIN:
disable
GETDATA:
if RCIF=1 then 'IF RECEIVE FLAG IS ON
VALUE=RCREG 'READ THE VALUE IN THE USART BUFFER
IF VALUE = $A0 THEN 'CHECK TO SEE IF THE BYTE IS THE START BYTE
BYTECOUNTER=0 'AND SET THE COUNTER TO FIRST BYTE
ENDIF
IF BYTECOUNTER < 8 THEN
BUFFER[BYTECOUNTER] = VALUE
BYTECOUNTER=BYTECOUNTER+1 'INCREMENT FOR NEXT BYTE
IF (BYTECOUNTER = 8) AND (VALUE=$AF) THEN
TOGGLE PORTD.0
GOTO MAIN
ENDIF
ENDIF
'CHECK IF OVERRUN HAS OCCURRED:
IF OERR=1 THEN
Serout2 test,BAUD,["OERR",10,13] 'FOR DEBUGGING SHOW ERROR
CREN=0 'STOP CONTINUOUS RECEIVE
CREN=1 'RESTART CONTINUOS RECIEVE & CLEAR THE FLAG
BYTECOUNTER=0 'RESET COUNTER
GOTO GETDATA
ENDIF
ENDIF
RESUME
ENABLE
'===============================================
MAIN:
ON INTERRUPT GOTO GETDATA
if counter= 5000 THEN 'SEND PELCO VALUE EVERY FEW LOOPS
serout2 test,BAUD,["BUFFER=",HEX BUFFER.0,HEX BUFFER.1,10,13]
'(JUST CHECK 1ST 2 VALUES)
toggle portd.1 'LED TO INDICATE TO ME THAT THE LOOP IS LOOPING
counter=0
else
counter=counter+1
endif
goto main
end
Bookmarks