Ok here is a snippet from the code i am working on.
Maybe this will trigger some ideas.
	Code:
	
DEFINE  OSC 48
DEFINE  LOADER_USED 1       
DEFINE  RESET_ORG       800h           ' For Microchip USB Bootloader
DEFINE  INTERRUPT_ORG   808h           ' For Microchip USB Bootloader
'-------------------------------------------------------------------------------
' System Settings
'-------------------------------------------------------------------------------
ADCON1 = 15                            ' Set all I/Os to Digital
INTCON2.7 = 1                          ' Disable PortB Pullups         
CMCON = 7                              ' Disable Comparators
My_Address           VAR BYTE
i                    VAR BYTE
ii                   VAR WORD
i = 0
ii = 0
My_Address = 0
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
' RF Settings
'-------------------------------------------------------------------------------
DEFINE  HSER_BAUD       9600
DEFINE  HSER_RCSTA      90h
DEFINE  HSER_TXSTA      20h
'DEFINE  HSER_SPBRG      25
DEFINE  HSER_CLROERR    1
RF_ACK               CON $01        ' Expected acknowledge char from RS-485
RF_STX               CON $02        ' Start of Transmission Byte
RF_ETX               CON $03        ' End of Transmission Byte
RF_POS               CON $04
                        
RF_To_Address        VAR BYTE
RF_From_Address      VAR BYTE
RF_Command           VAR BYTE
RF_Parameter         VAR WORD
RF_Data              VAR BYTE
RF_Buffer            VAR BYTE[7]
RF_Bytes_Sent        VAR BYTE
RF_Bytes_Received    VAR BYTE
RF_Sending_Data      VAR BIT
RF_Receiving_Data    VAR BIT
RF_Send              VAR BIT
RF_ACK_Received      VAR BIT
RF_PPP_Received      VAR BIT
RF_POS_Received      VAR BIT
RF_B0                VAR BYTE
RF_B1                VAR BYTE
RF_To_Address = 0
RF_From_Address = 0
RF_Command = 0
RF_Parameter = 0
RF_Send = 0
RF_Bytes_Received = 0
RF_Receiving_Data = 0
RF_ACK_Received = 0
RF_PPP_Received = 0
RF_POS_Received = 0
RF_B0 = 0
RF_B1 = 0
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
' Interrupt Settings
'-------------------------------------------------------------------------------
INTCON.6 = 1			' Enable Peripheral Interrupts
INTCON.7 = 1			' Enable Global Interrupt Handler
PIE1.4 = 0              ' Disable USART Transmit Interrupt
PIE1.5 = 1              ' Enable USART Receive Interrupt
'-------------------------------------------------------------------------------
PAUSE 500
My_Address = 18
ON INTERRUPT GOTO Main_Interrupt_Handler
ENABLE INTERRUPT
'-------------------------------------------------------------------------------
' Main Program Loop
'-------------------------------------------------------------------------------
MainLoop:
    GOSUB Get_My_Address
    'IF RF_Receiving_Data = 0 THEN
    '    IF RF_Command != 0 THEN
    '        IF RF_To_Address = My_Address THEN
    '            GOSUB RF_Process_Command
    '        ENDIF
    '    ENDIF
    'ENDIF
    
    PAUSE 50
    
    GOTO MainLoop
'-------------------------------------------------------------------------------
 
'-------------------------------------------------------------------------------
' Send RF data
'-------------------------------------------------------------------------------
RF_Send_Data:
    RF_From_Address = My_Address
    RF_Ack_Received = 0
    RF_PPP_Received = 0
    
    RF_Buffer(1) = RF_STX                      'Start
    RF_Buffer(2) = RF_To_Address + 4           'To Address
    RF_Buffer(3) = RF_Command                  'Command
    RF_Buffer(4) = RF_Parameter.HighByte + 4   'Parameter High Byte
    RF_Buffer(5) = RF_Parameter.lowbyte + 4    'Parameter Low Byte
    RF_Buffer(6) = RF_From_Address + 4         'From Address
    RF_Buffer(7) = RF_ETX                      'End
    FOR i = 1 TO 25
        PAUSE 10
    NEXT
    FOR i = 1 to 7
        RF_Data = RF_Buffer(i)
        HSEROUT [RF_Data]                      'Send the Data Byte
        PAUSE 25
    NEXT
    
    FOR i = 1 TO 25
        PAUSE 10
    NEXT
    FOR i = 1 TO 7
        RF_Buffer(i) = 0
    NEXT
    RF_To_Address = 0
    RF_From_Address = 0
    RF_Command = 0
    RF_Parameter = 0
    
    RETURN
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
' Interrupt Handler
'-------------------------------------------------------------------------------
    DISABLE INTERRUPT                        ' No interrupts past this point
Main_Interrupt_Handler:
    '---------------------------------------------------------------------------
    ' USART Receive Interrupt
    '---------------------------------------------------------------------------
    IF PIR1.5 = 1 THEN
        PAUSE 50
        
        HSERIN [RF_B0]
        SELECT CASE RF_B0
            CASE RF_STX
                RF_Bytes_Received = 1
                RF_Receiving_Data = 1
                RF_Bytes_Received = 0
                FOR i = 2 TO 7
                    RF_Buffer[i] = 0
                NEXT
                RF_Bytes_Received = RF_Bytes_Received + 1
                RF_Buffer(RF_Bytes_Received) = RF_B0
                
            CASE RF_ETX
                RF_Bytes_Received = RS485_Bytes_Received + 1
                RF_Buffer(RF_Bytes_Received) = RF_B0
                RF_Receiving_Data = 0
                
                RF_To_Address = RF_Buffer(2) - 4
                RF_Command = RF_Buffer(3) - 4
                RF_Parameter.HighByte = RF_Buffer(4) - 4
                RF_Parameter.LowByte = RF_Buffer(5) - 4
                RF_From_Address = RF_Buffer(6) - 4
                
            CASE ELSE
                IF RF_Receiving_Data = 1 THEN
                    RF_Bytes_Received = RF_Bytes_Received + 1
                    RF_Buffer(RF_Bytes_Received) = RF_B0
                ENDIF
        END SELECT
        PIR1.5 = 0
    ENDIF
    '---------------------------------------------------------------------------
    '---------------------------------------------------------------------------
    ' USB Interrupt
    '---------------------------------------------------------------------------
	IF PIR2.5 = 1 THEN
        DEBUG 13, 10, "[ INTERRUPT ] USB Interrupt", 13, 10
        PIR2.5 = 0
    ENDIF
    '---------------------------------------------------------------------------
        
IntDone:
    RESUME					' Return to main program
    ENABLE INTERRUPT
'-------------------------------------------------------------------------------
	END
 
				
			
Bookmarks