Serial interrupt on PicBasic Pro


Results 1 to 3 of 3

Threaded View

  1. #1
    Join Date
    Feb 2011
    Posts
    4

    Default Serial interrupt on PicBasic Pro

    I need some help with this serial interrupt... It's working but not so well because when the interrupt happens I receive the serial data and treat the information. The problem is when the program return from the 1st interrupt to the Loop, I can't do another interrupt. I send serial data but the interrupt not happens.

    So, please, can anyone help me?

    Thanks...

    Here's my code..

    define LOADER_USED 1 INCLUDE "modedefs.bas"


    DEFINE OSC 4



    RX VAR PORTC.7 'SERIAL'S RECEIVE BIT.

    TX VAR PORTC.6 'SERIAL'S TRASMITTER BIT.

    CMD VAR PORTD.2

    CONT VAR BYTE

    CMD = 0
    CONT = 0

    TRISC = 000000
    TRISD = 000100
    TRISE = 0




    INTCON = 000000 ; GENERAL AND PERIPHERALS INTERRUPT
    PIE1.5 = 1 ; " " " DE RECEPÇÃO DA USART


    RCSTA.1 = 0 ; MANY BYTES RECEIVED WITHOUT READ
    RCSTA.2 = 0 ; Stop Bit
    RCSTA.4 = 1 ; CONTINOUS REVEICE
    RCSTA.6 = 0 ; 8 BITS' RECEIVE
    RCSTA.7 = 1 ; USART ACTIVATION


    RCIF var PIR1.5 ; RECEIVE INTERRUPT
    STATUSLED var PORTD.0 ; LED'S NOTIFICATION OF "PROCESS RUNNING"
    USERLED var PORTD.1 ; LED CONTROLLED BY USER

    DELAY var word
    DISCARD var byte ; Clean the RCREG

    FRAME VAR BYTE[10]
    FRAME = 0

    PORTD = 0
    PORTC = 0
    PORTE = 0





    ON INTERRUPT GOTO USART_INTERRUPT

    LOOP:




    toggle statusled
    for delay = 1 to 5000 ; use a loop delay to ensure
    pauseUS 5 ; getting interrupt as fast as
    next ; possible

    goto LOOP




    DISABLE




    USART_INTERRUPT:


    WHILE RCIF = 1

    RCREG = DISCARD

    WEND


    SERIN2 RX,84,[WAIT("E"),STR FRAME\10]


    IF FRAME[0] = "E" THEN


    IF FRAME[1] = "B" THEN

    IF FRAME[2] = "9" THEN


    IF FRAME[3] = "0" THEN



    SELECT CASE FRAME[4]



    CASE "S"

    IF FRAME[7] = "0" THEN


    IF FRAME[5] = "E" THEN


    IF FRAME[8] = "0" THEN


    IF FRAME[6] = "P" THEN

    WHILE FRAME[9] = "0" AND CMD = 0 AND CONT < 36

    PORTC.0 = 1
    PAUSE 2500
    CONT = CONT + 1

    WEND

    ENDIF

    ENDIF

    ENDIF

    ENDIF


    CASE "L"

    IF FRAME[5] = "V" THEN

    IF FRAME[8] = "0" THEN


    IF FRAME[6] = "A" THEN


    IF FRAME[9] = "0" THEN

    while FRAME[7] = "L" AND CMD = 0 AND CONT < 36


    PORTC.1 = 1
    PORTC.3 = 1
    PAUSE 2500
    CONT = CONT + 1

    WEND

    ENDIF

    ENDIF

    ENDIF

    ENDIF
    CASE "D"

    IF FRAME[5] = "V" THEN


    IF FRAME[8] = "0" THEN

    IF FRAME[6] = "A" THEN


    IF FRAME[9] = "0" THEN

    WHILE FRAME[7] = "L" AND CMD = 0 AND CONT < 36

    PORTC.2 = 1
    PORTC.3 = 1
    PAUSE 2500
    CONT = CONT + 1

    WEND

    ENDIF

    ENDIF

    ENDIF

    ENDIF


    END SELECT


    ENDIF

    ENDIF

    ENDIF

    ENDIF


    REVERSE CMD
    CMD = 0
    REVERSE CMD


    FRAME = 0

    PORTC.0 = 0
    PORTC.1 = 0
    PORTC.2 = 0
    PORTC.3 = 0
    CONT = 0



    WHILE RCIF = 1

    RCREG = DISCARD


    WEND

    RESUME
    ENABLE

    END
    Attached Files Attached Files
    Last edited by mregisd; - 6th February 2012 at 13:17. Reason: Editing the code

Members who have read this thread : 1

You do not have permission to view the list of names.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts