hi all,
this is my code for your reference....there is somewhere a mistake that cannot find.
Code:
@ DEVICE PIC16F628A
INCLUDE "modedefs.bas"
CMCON = 7
DEFINE OSC 4 'Set oscillator in MHz
DEFINE LCD_DREG PORTB 'define port to LCD
DEFINE LCD_DBIT 4 'RB4 RB5 RB6 RB7 to D4 D5 D6 D7 display
DEFINE LCD_RSREG PORTA 'RS on porta
DEFINE LCD_RSBIT 0 'RS on porta.0
DEFINE LCD_EREG PORTA 'Enable on porta
DEFINE LCD_EBIT 1 'Numero Enable porta.1
DEFINE LCD_BITS 4 '
DEFINE LCD_LINES 2 'lines 2
PAUSE 200 ' Stop 200ms
LCDOUT $FE,1 ' power lcd
Lcdout $FE,1,4
lcdout $FE, 1," Copyright 2011"
lcdout $FE, $C0,"***********"
pause 2000
lcdout $FE,1
' -----[ Variables ]-------------------------------------------------------
buf VAR byte [12]' RFID bytes buffer
tagNum VAR Byte ' from EEPROM table
idx VAR Byte ' tag byte index
char VAR Byte ' character from table
' -----[ EEPROM Data ]-----------------------------------------------------
Tag1 DATA "450052B6BC1D"
Tag2 DATA "450052F2EB0E"
' -----[ Initialization ]--------------------------------------------------
high portb.1 ' turn off RFID reader portb.1 is the reciever port
LOW portb.2 ' lock the door!
Low portb.3 ' Turn off LED
' -----[ Program Code ]----------------------------------------------------
Main:
lcdout $FE,1," Please use your"
lcdout $FE, $C0," TAG"
pause 500
high portb.3
low portb.1 ' activate the reader
pause 500
SERIN2 portb.1, 84, [WAIT($34),STR buf\12]
pause 500
high portb.1 ' deactivate reader
Check_List:
FOR tagNum = 1 to 2 ' scan through known tags
FOR idx = 0 TO 11 ' scan bytes in tag
READ (((tagNum-1)*12 ) + idx), char ' get tag data from table
IF (char <> buf(idx)) THEN Bad_Char ' compare tag to table
NEXT
GOTO Tag_Found ' all bytes match!
Bad_Char: ' try next tag
NEXT
Bad_Tag:
tagNum = 0
FREQOUT porta.3, 1000 */ $100, 115 */ $100 ' groan
lcdout $FE, 1," invalid TAG"
lcdout $FE, $C0," try again"
pause 1000
lcdout $FE,1
GOTO Main
Tag_Found:
IF tagNum = 1 then displayName1
IF tagNum = 2 then displayName2
GOTO Main
displayName1:
lcdout $FE, 1," name_1"
lcdout $FE, $C0, "ACCESS GRANDED"
pause 1000 'Pause ,5 sec then clear display
goto open_door
displayName2:
lcdout $FE, 1," name_2"
LCDout $FE, $C0," ACCESS GRANDED"
pause 1000 'Pause ,5 sec then clear display
goto open_door
open_door:
HIGH portb.2 ' remove latch
pause 500
LOW portb.2 ' restore latch
Low portb.3 ' LED OFF
GOTO Main
Bookmarks