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 = %10000000 TRISD = %00000100 TRISE = %110 INTCON = %11000000 ; 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