Buenos Días/Tardes,
Ya que estuve en la búsqueda de el programa PBP 2.5L sin ningún éxito, espero que alguien pueda ayudarme con esté código, me da el siguiente error: [Error]RFID.pbp (12) : Syntax error
En la línea 12:
Aquí está todo el código:
Si alguien puede ayudarme con esto por favor.
Gracias por su colaboración.
Saludos.
Ya que estuve en la búsqueda de el programa PBP 2.5L sin ningún éxito, espero que alguien pueda ayudarme con esté código, me da el siguiente error: [Error]RFID.pbp (12) : Syntax error
En la línea 12:
Código:
IOCB=%00000000 'Esta es la línea 12.
Aquí está todo el código:
Código:
INCLUDE "modedefs.bas"
@ DEVICE INTRC_OSC_NOCLKOUT
@ DEVICE MCLR_OFF
DEFINE OSC 4
ADCON0 = %00000000
OPTION_REG=%00000000
WPU=%00000011
CMCON0 =%00000111
ANSEL=%00000000
IOCB=%00000000
INTCON=%00000000
'OSCCON=%0111011
symbol RELE = GPIO.5
SYMBOL JUMPER = GPIO.4
SYMBOL PUSH = GPIO.3
SYMBOL RX_PIC = GPIO.2
SYMBOL LED_R = GPIO.0
SYMBOL LED_V = GPIO.1
INPUT RX_PIC
input push
INDIRIZZO var WORD 'Indirizzo memoria su cui scrivere presente sul buffer
ADDR var WORD 'Indirizzo memoria 24LC1024
I VAR byte 'Contatore di comodo
LAMP VAR BYTE
DATO_RX VAR BYTE[10] 'Dato ricevuto dalla seriale ID-12
DATO_I2C VAR BYTE[10] 'Dato letto dalla memoria
SN VAR BYTE 'S: Posizione occupata in mem. - N: Posizione non occupata in mem.
DATO_OK VAR BYTE 'Contatore per confronto dato letto in mem e da seriale
TROVATO VAR BIT '0: Codice non trovato in mem - 1: Codice trovato in mem.
CONTATORE VAR BYTE 'Contatore di comodo per verifica pressione pulsante
FUNZIONE VAR BYTE '0:NESSUNA - 1:MEMORIZZA - 2: CANCELLA ID - 3: RESET
RICERCA_TIPO VAR BYTE '1: Ricercare dato presente in me - N: Ricercare posizione libera in mem.
TEMP VAR BYTE
OUT_FUNZ var byte
NUM_BYTE var BYTE 'MAX:5 --> NUM_BYTE*2 = Byte del codice del trasponder da memorizzare
CODICI VAR BYTE 'Numero di codici possibili in memoria
NUM_BYTE=2
CODICI= 255/NUM_BYTE
'************* I N I Z I O P R O G R A M M A **************
GOSUB AVVIO
MAIN:
contatore=0
if funzione=0 then 'Attivo funzione memorizzazione/cancellazione se il pulsante è premuto
WHILE PUSH=0
PAUSE 500
CONTATORE=CONTATORE+1
select case contatore
case is >=18 'Uscita
gosub out
case is >=12 'Cancella
HIGH led_R
LOW led_V
FUNZIONE=2
case is >=6 'Memorizza
HIGH led_v
HIGH led_r
FUNZIONE=1
end select
WEND
else 'Se si è in memorizzazione/cancellazione controllo il pulsante per uscire dal menu
WHILE PUSH=0
PAUSE 500
CONTATORE=CONTATORE+1
if contatore>=6 then
gosub out
endif
wend
endif
serin2 RX_pic,84,1000,esci,[WAIT($02), STR DATO_RX\10]
GOSUB COMPRIMI
SELECT CASE FUNZIONE
CASE 0 'FUNZIONAMENTO CHIAVE
RICERCA_TIPO="S"
GOSUB RICERCA
IF TROVATO=1 THEN 'Codice trovato
IF JUMPER=0 THEN 'Bistabile
TOGGLE RELE
TOGGLE led_v
ELSE 'Monostabile
HIGH rele
high led_v
PAUSE 1000
LOW RELE
low led_V
ENDIF
ELSE 'Codice non trovato
low led_v
high led_r
PAUSE 1000
low led_r
if RELE=1 then 'Attiva il led verde se l'uscita era attiva prima di questo codice non valido
high led_v
endif
ENDIF
CASE 1 'FUNZIONAMENTO MEMORIZZAZIONE
RICERCA_TIPO="S" 'Verifico se il codice è già in memoria
GOSUB RICERCA
if trovato=0 then 'Non è già in memoria allora lo memorizzo
RICERCA_TIPO="N"
GOSUB RICERCA
IF TROVATO=1 THEN
GOSUB SCRIVI
ENDIF
endif
CASE 2 'FUNZIONAMENTO CANCELLAZIONE
RICERCA_TIPO="S"
GOSUB RICERCA
IF TROVATO=1 THEN
GOSUB CANCELLA
ENDIF
END SELECT
GOSUB AZZERA
ESCI:
GOTO MAIN
'**************** O U T ****************
OUT:
funzione=0
GOSUB LAMPEGGIA_V
WHILE PUSH=0 'SE IL PULSANTE è ANCORA PREMUTO PER SBAGLIO NON FACCIO NULLA
WEND
if RELE=1 then
LOW LED_R
high led_v
endif
return
'**************** L A M P E G G I A ****************
LAMPEGGIA:
low led_r
low led_v
for I=0 to 11
toggle led_v
toggle led_r
PAUSE 200
next i
return
'**************** L A M P E G G I A - V ****************
LAMPEGGIA_V:
low led_v
low led_r
for I=0 to 11
toggle led_v
PAUSE 200
next i
return
'**************** S C R I V I ****************
'Scrittura nella locazione INDIRIZZO del codice letto dalla seriale
SCRIVI:
ADDR=indirizzo*NUM_BYTE
for i=5-num_byte to 4
WRITE addr,DATO_RX[i]
PAUSE 10
addr=addr+1
next i
low led_v
LOW LED_R
PAUSE 1000
high led_v
HIGH LED_R
return
'**************** C A N C E L L A ****************
'Cancellazione di una specifica locazione
CANCELLA
ADDR=indirizzo*NUM_BYTE
for i=0 to num_byte-1
WRITE addr,$FF
PAUSE 10
addr=addr+1
next i
low led_r
PAUSE 1000
high led_r
RETURN
'**************** R I C E R C A ****************
'Ricerca codice letto da seriale ID-12 con restituzione indirizzo
RICERCA:
select case ricerca_tipo
case "S" 'Ricerca tra le locazioni di memoria occupate
FOR INDIRIZZO=0 TO CODICI-1
ADDR=indirizzo*NUM_BYTE
for i=5-num_byte to 4
read addr,dato_i2c[i]
addr=addr+1
next i
GOSUB CONTROLLO
IF DATO_ok=NUM_byte THEN
TROVATO=1
GOTO ESCI_RICERCA
ENDIF
next indirizzo
case "N" 'Ricerca posizione non occupata
dato_ok=0
FOR INDIRIZZO=0 TO CODICI-1
ADDR=indirizzo*NUM_BYTE
for i=5-num_byte to 4
read addr,dato_i2c[i]
if dato_i2c[i]=$FF then
dato_ok=dato_ok+1
endif
addr=addr+1
next i
IF DATO_OK=num_byte THEN
trovato=1
goto ESCI_RICERCA
ENDIF
next indirizzo
end select
ESCI_RICERCA:
RETURN
'**************** R E S E T _ M E M ****************
'Cancellazione totale memoria
RESET_MEM:
HIGH led_r
pause 2000
FOR INDIRIZZO=0 TO 255
WRITE addr,$FF
PAUSE 10
NEXT INDIRIZZO
LOW led_r
while push=0 'Se il pulsante è ancora premuto non faccio niente
wend
RETURN
'**************** C O N T R O L L O ****************
'Confronto del dato letto in memoria e di quello letto da seriale ID-12
'se DATO_OK=10 allora i due dati sono uguali
CONTROLLO:
DATO_OK=0
for i=5-num_byte to 4
IF DATO_I2C[i]=DATO_RX[i] THEN
DATO_OK=DATO_OK+1
ENDIF
next i
RETURN
'**************** A Z Z E R A ****************
'Reset variabili
AZZERA:
trovato=0
FOR I=0 TO 9
DATO_RX[I]=0
DATO_I2C[I]=0
NEXT I
RETURN
'**************** I N I Z I A L I Z Z A ****************
'Fase di inizializzazione all'avvio
INIZIALIZZA:
TROVATO=0
CONTATORE=0
FUNZIONE=0
LOW RELE
GOSUB AZZERA
RETURN
'**************** A V V I O ****************
'Controllo all'avvio, se il tasto è premuto per reset memoria oppure no
AVVIO:
GOSUB LAMPEGGIA
IF PUSH=0 THEN 'Se tasto premuto all'avvio forzo il reset memoria
GOSUB RESET_MEM
ENDIF
GOSUB INIZIALIZZA
RETURN
'**************** C O M P R I M I ****************
'Converto il codice da ASCII (10 byte) a HEX (5 byte) per risparmiare spazio
'in memoria e quindi rendere più veloce la ricerca. In HEX impiega la metà del
'tempo perchè vi è la metà dei byte da controllare
COMPRIMI:
I=0
WHILE I<9
TEMP=DATO_RX[I]
IF TEMP>57 THEN
TEMP=TEMP - 55
ELSE
TEMP=TEMP - 48
ENDIF
TEMP=TEMP * 16
DATO_RX[I]=TEMP
TEMP=DATO_RX[I+1]
IF TEMP>57 THEN
TEMP=TEMP - 55
ELSE
TEMP=TEMP - 48
ENDIF
TEMP=TEMP + DATO_RX[I]
DATO_RX[I]=TEMP
I=I+2
WEND
TEMP=DATO_RX[0]
DATO_RX[0]=TEMP
TEMP=DATO_RX[2]
DATO_RX[1]=TEMP
TEMP=DATO_RX[4]
DATO_RX[2]=TEMP
TEMP=DATO_RX[6]
DATO_RX[3]=TEMP
TEMP=DATO_RX[8]
DATO_RX[4]=TEMP
RETURN
Si alguien puede ayudarme con esto por favor.
Gracias por su colaboración.
Saludos.