I found this code some years ago and do not know its source. There was only a text descrption of the circuit. I don't understand what the xxxx_ACTIVE subroutines are pulsing GPIO.0 for. GPIO.3 and 5 are in/out and 2 is for an LED. Any ideas?

DEVICE 12F675
'WORKING STANDARD LANC CONTROL FOR 12F675 CHECKED 10/05/2004
'THIS VERSION USE A BC107 AS OPEN COLLECTOR ON THE SIGNAL INPUT
'AS OPPOSED TO TH 2N 2907 PNP TRANSISTOR WHICH HAD A PROBLEM THAT
'THE VOLTAGE IS NOT PULLED TO GROUND BUT TO AROUND 0.8V WHEN LOW
'THE SOFTWARE NO OUTPUT AND INVERTED DATA STREAM ALSO INVERTING THE STOP BIT AND
'START BIT
'WHICH COULD NOT BE DONE BY JUST SPECIFYING DATA INVERTED WHEN USING RSOUT
SET_OSCCAL
'OSCCAL=$60 ' PROGRAM WITH PROTECTION ON WATCHDOG OFF ,INTERNAL OSC,MCLR OFF,
CMCON=7
ADCON0=0
ANSEL=0
CONFIG WDT_OFF , PWRTE_ON ,MCLRE_OFF


ALL_DIGITAL=TRUE
DECLARE XTAL 4
DECLARE RSIN_PIN GPIO.3
DECLARE RSIN_MODE TRUE
DECLARE SERIAL_BAUD 9600
DECLARE RSIN_TIMEOUT 20000
DECLARE RSOUT_PIN GPIO.5
DECLARE RSOUT_MODE TRUE
SYMBOL LED =GPIO.2
DIM GAP,FBYTE0,FBYTE1,FBYTE2,FBYTE3,FBYTE4,FBYTE5,FBYT E6,FBYTE7,COMMAND,DO_AGAIN
DIM REC_STATUS,FLIPFLOP,TRIGGER
DIM GAPCOUNT AS WORD
DIM OLD AS BYTE
DIM FAULT_COUNTER AS WORD
TRISIO=%011010

start: INPUT GPIO.5
FBYTE0=%00011000^$FF
GOTO MAIN

GAP_TIME: GAPCOUNT=0
DO: IF GPIO.3 <>1 THEN GOTO GAP_TIME
GAPCOUNT=GAPCOUNT+1
IF GAPCOUNT <150 THEN GOTO DO


COMMANDOUT: 'OUTPUT GPIO.5
WHILE GPIO.3=1 :WEND
'RSOUT FBYTE0
OUTPUT GPIO.5
SET GPIO.5 'START BIT
DELAYUS 94 '11100111
CLEAR GPIO.5 'FIRST LSB BIT
DELAYUS 104 'BIT1
DELAYUS 104 'BIT2
DELAYUS 104 'BIT3
SET GPIO.5
DELAYUS 104 'BIT4
DELAYUS 104 'BIT5
CLEAR GPIO.5
DELAYUS 104 'BIT6
DELAYUS 104 'BIT7
DELAYUS 104 'BIT8
DELAYUS 104 'STOP BIT
INPUT GPIO.5

WHILE GPIO.3=1 :WEND

'RSOUT COMMAND
OUTPUT GPIO.5
SET GPIO.5
DELAYUS 94 'STOP BIT

IF COMMAND=$3A THEN
CLEAR GPIO.5
DELAYUS 104 'BIT1 LSB
SET GPIO.5
DELAYUS 104 'BIT2
CLEAR GPIO.5
DELAYUS 104 'BIT3
SET GPIO.5
DELAYUS 104 'BIT4
DELAYUS 104 'BIT5
DELAYUS 104 'BIT6
CLEAR GPIO.5
DELAYUS 104 'BIT7
DELAYUS 104 'BIT8
DELAYUS 104 'STOP BIT


ELSE
'RSOUT COMMAND

CLEAR GPIO.5
DELAYUS 104 'BIT1 LSB
DELAYUS 104 'BIT2
DELAYUS 104 'BIT3
DELAYUS 104 'BIT4
SET GPIO.5
DELAYUS 104 'BIT5
DELAYUS 104 'BIT6
CLEAR GPIO.5
DELAYUS 104 'BIT7
DELAYUS 104 'BIT8
DELAYUS 104 'STOP BIT
INPUT GPIO.5
ENDIF





FBYTE2=RSIN
FBYTE3=RSIN
FBYTE4=RSIN
FBYTE5=RSIN
FBYTE6=RSIN

RETURN

INTERPRET: LET FBYTE4=FBYTE4^$FF
IF FBYTE4=OLD THEN GOTO DONE
LET OLD=FBYTE4
IF FBYTE4=$02 THEN GOSUB STOP_ACTIVE
IF FBYTE4=$01 THEN GOSUB FAULT_ACTIVE
IF FBYTE4=$04 THEN GOSUB RECORD_ACTIVE
IF FBYTE4=$32 THEN GOSUB FAULT_ACTIVE
IF FBYTE4=$62 THEN GOSUB FAULT_ACTIVE

DONE: RETURN

STOP_ACTIVE: REC_STATUS=0
CLEAR GPIO.2 ' RECORDING IS ACTIVE LED
SET GPIO.0 'PULSE1
DELAYMS 500
CLEAR GPIO.0
DELAYMS 500
SET GPIO.0 'PULSE2
DELAYMS 500
CLEAR GPIO.0
DELAYMS 500
SET GPIO.0 'PULSE3
DELAYMS 500
CLEAR GPIO.0
RETURN

FAULT_ACTIVE: FAULT_COUNTER=0
SET GPIO.0 'PULSE1
DELAYMS 100
CLEAR GPIO.0
DELAYMS 100
SET GPIO.0 'PULSE2
DELAYMS 100
CLEAR GPIO.0
DELAYMS 100
SET GPIO.0 'PULSE3
DELAYMS 100
CLEAR GPIO.0
DELAYMS 100
SET GPIO.0 'PULSE4
DELAYMS 100
CLEAR GPIO.0
DELAYMS 100
SET GPIO.0 'PULSE5
DELAYMS 100
CLEAR GPIO.0
RETURN

RECORD_ACTIVE: REC_STATUS=1
SET GPIO.0
SET GPIO.2 ' RECORDING IS ACTIVE LED
DELAYMS 3000
CLEAR GPIO.0
RETURN

MONITOR: WHILE GPIO.1=0
TRIGGER=0
WEND

'TRIGGER=GPIO.1
IF TRIGGER=1 THEN GOTO DONEMON
IF TRIGGER =0 THEN GOSUB INVRECSTATUS

DONEMON: RETURN


INVRECSTATUS: IF REC_STATUS =1 THEN FLIPFLOP=0
IF REC_STATUS =0 THEN FLIPFLOP=1
REC_STATUS=FLIPFLOP
RETURN

LOAD_COMMAND: IF REC_STATUS=0 THEN COMMAND=$30'^$FF 'NEW COMMAND = STOP
IF REC_STATUS=1 THEN COMMAND=$3A'^$FF 'NEW COMMAND = REC
RETURN

MAIN: GAP=0 : GAPCOUNT=0 : FBYTE1=0 : FBYTE2=0 : FBYTE3=0 : FBYTE4=0
FBYTE5=0 : FBYTE6=0 : FBYTE7=0 : DO_AGAIN=0
TRIGGER=0 : FLIPFLOP=0 : FAULT_COUNTER=0 : gpio.0=0 : gpio.2=0
COMMAND=$00^$FF
'SET GPIO.5
RERUN: DO_AGAIN=0
AGAIN3: GAPCOUNT=0
GOSUB GAP_TIME
DO_AGAIN =DO_AGAIN+1
IF DO_AGAIN<=5 THEN GOTO AGAIN3
GOSUB INTERPRET
'DELAYMS 1000 ' WAIT WHILE TRIGGER MIGHT STILL BE ACTIVATED
GOSUB MONITOR
IF TRIGGER=0 THEN GOSUB LOAD_COMMAND
'CHANGED ON 9/9/2003 'IF TRIGGER=1 THEN GOSUB LOAD_COMMAND
TRIGGER=1
GOTO RERUN

END