SX/B Example: RFID Reader Interface | Examples Index |
' ========================================================================= ' ' File...... RFID_SECURITY.SXB.SXB ' Purpose... Parallax RFID Reader Demo ' Author.... (c) Parallax, Inc. -- All Rights Reserved ' E-mail.... support@parallax.com ' Started... ' Updated... 05 JUL 2006 ' ' ========================================================================= ' ------------------------------------------------------------------------- ' Program Description ' ------------------------------------------------------------------------- ' ' Simple security application using the Parallax RFID reader and the ' Parallax Serial LCD. As designed, the application will support 16 ' RFID tags. ' ' Components: ' ' Parallax RFID Reader... #28140 ' Parallax Serial LCD.... #27976 or #27977 ' ------------------------------------------------------------------------- ' Device Settings ' ------------------------------------------------------------------------- DEVICE SX28, OSCXT2, TURBO, STACKX, OPTIONX FREQ 4_000_000 ID "RFID" ' ------------------------------------------------------------------------- ' IO Pins ' ------------------------------------------------------------------------- LcdTx VAR RA.0 ' LCD serial connection RfidEn VAR RA.1 ' RFID enable control RfidRx VAR RA.2 ' RFID serial input Lock VAR RA.3 ' lock control ' ------------------------------------------------------------------------- ' Constants ' ------------------------------------------------------------------------- TagMax CON 2 ' three tags, (0 - 2) LcdBaud CON "T19200" ' or T2400, or T9600 RfidBaud CON "T2400" LcdBkSpc CON $08 ' move cursor left LcdRt CON $09 ' move cursor right LcdLF CON $0A ' move cursor down 1 line LcdCls CON $0C ' clear LCD (need 5 ms delay) LcdCR CON $0D ' move pos 0 of next line LcdBLon CON $11 ' backlight on LcdBLoff CON $12 ' backlight off LcdOff CON $15 ' LCD off LcdOn1 CON $16 ' LCD on; no crsr, no blink LcdOn2 CON $17 ' LCD on; no crsr, blink on LcdOn3 CON $18 ' LCD on; crsr on, no blink LcdOn4 CON $19 ' LCD on; crsr on, blink on LcdLine1 CON $80 ' move to line 1, column 0 LcdLine2 CON $94 ' move to line 2, column 0 Active CON 0 ' for RFID reader Deactivated CON 1 Open CON 1 ' for lock Closed CON 0 ' ------------------------------------------------------------------------- ' Variables ' ------------------------------------------------------------------------- idx1 VAR Byte ' loop control idx2 VAR Byte char VAR Byte tagBuf VAR Byte(10) ' tag bytes from reader tagNum VAR Byte ' tag number offset VAR Byte tmpB1 VAR Byte ' subroutine work vars tmpB2 VAR Byte tmpB3 VAR Byte tmpW1 VAR Word ' ========================================================================= PROGRAM Start ' ========================================================================= ' ------------------------------------------------------------------------- ' Subroutine Declarations ' ------------------------------------------------------------------------- DELAY SUB 1, 2 ' delay in milliseconds LCD_OUT SUB 1, 2 ' byte or string to LCD CLEAR_LCD SUB 0 ' clear LCD, BL is on RX_RFID SUB 0 ' get char from RFID ' ------------------------------------------------------------------------- ' Program Code ' ------------------------------------------------------------------------- Start: PLP_B = %00000000 ' pull up unused pins PLP_C = %00000000 RA = %0011 ' disable reader, lock it up TRIS_A = %0100 DELAY 100 ' let LCD initialize Main: CLEAR_LCD LCD_OUT "Present ID." LCD_OUT LcdLine2 LCD_OUT LcdOn2 ' flash block cursor Get_Tag: RfidEn = Active DO char = RX_RFID ' get a character LOOP UNTIL char = $0A ' wait for header FOR idx1 = 0 TO 9 ' get RFID bytes tagBuf(idx1) = RX_RFID NEXT RfidEn = Deactivated Search_Tags: FOR tagNum = 0 TO TagMax ' loop through known tags offset = tagNum * 10 ' point to tag string FOR idx1 = 0 TO 9 ' loop through characters READ Tags + offset, char ' read tag character INC offset ' point to next IF char <> tagBuf(idx1) THEN Next_Tag ' if bad, skip rest NEXT GOTO Found_Tag ' if all valid, tag found Next_Tag: NEXT No_Tag: CLEAR_LCD LCD_OUT "Unauthorized" GOTO Loop_Pad Found_Tag: CLEAR_LCD LCD_OUT "Authorized" Show_Name: LCD_OUT LcdLine2 offset = tagNum << 4 ' point to start of name FOR idx1 = 0 TO 15 READ TagNames + offset, char ' get name character INC offset ' point to next LCD_OUT char ' send char to LCD NEXT Lock = Open Loop_Pad: DELAY 3000 ' pause 3 seconds Lock = Closed GOTO Main ' ------------------------------------------------------------------------- ' Subroutine Code ' ------------------------------------------------------------------------- ' Use: DELAY ms ' -- 'ms' is delay in milliseconds, 1 - 65535 DELAY: IF __PARAMCNT = 1 THEN tmpW1 = __PARAM1 ' save byte value ELSE tmpW1 = __WPARAM12 ' save word value ENDIF PAUSE tmpW1 RETURN ' ------------------------------------------------------------------------- ' Use: LCD_OUT [ aByte | string | label ] ' -- "aByte" is single-byte constant or variable ' -- "string" is an embedded literal string ' -- "label" is DATA statement label for stored z-String LCD_OUT: tmpB1 = __PARAM1 ' byte or string offset IF __PARAMCNT = 2 THEN ' string specified? tmpB2 = __PARAM2 ' yes, save base DO READ tmpB2 + tmpB1, tmpB3 ' read a character IF tmpB3 = 0 THEN EXIT ' if 0, string complete SEROUT LcdTx, LcdBaud, tmpB3 ' send the byte INC tmpB1 ' point to next character tmpB2 = tmpB2 + Z ' update base on overflow LOOP ELSE SEROUT LcdTx, LcdBaud, tmpB1 ' send the byte ENDIF RETURN ' ------------------------------------------------------------------------- ' Use: CLEAR_LCD ' -- clears the LCD and activates the backlight ' -- removes cursor and blinking block CLEAR_LCD: LCD_OUT LcdBLon ' backlight on LCD_OUT LcdOn1 ' no cursor or blink LCD_OUT LcdCls ' clear the LCD DELAY 5 RETURN ' ------------------------------------------------------------------------- ' Use: aByte = RX_RFID ' -- receives one serial byte from RFID reader RX_RFID: SERIN RfidRx, RfidBaud, tmpB1 RETURN tmpB1 ' ========================================================================= ' User Data ' ========================================================================= Tags: DATA "0415148AF1" ' valid tags DATA "041514A4E0" DATA "04151496D8" ' Keep tag names 16-chars in length ' -- name order must match tag order TagNames: DATA "Luke Skyjogger " DATA "Princess Leggo " DATA "Derth Wader "