📄 rfid.a51
字号:
INCLUDE REG_52.PDF
RB0 EQU 00H ; Select Register Bank 0
RB1 EQU 08H ; Select Register Bank 1 ...poke to PSW to use
RB2 EQU 10H ; Select Register Bank 1 ...poke to PSW to use
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; PORT DECLERATION
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SDA EQU P1.2 ;SDA=PIN5
SCL EQU P1.1 ;SCL=PIN6
;CLK EQU P3.2
DS1307W EQU 0D0H ; SLAVE ADDRESS 1101 000 + 0 TO WRITE
DS1307R EQU 0D1H ; SLAVE ADDRESS 1101 000 + 1 TO READ
KB_LSHIFT EQU 12H
KB_RSHIFT EQU 59H
KB_CTRL EQU 14H
KB_ALT EQU 11H
KB_CAPS EQU 58H
KB_SCROLL EQU 7EH
KB_NUML EQU 77H
KB_TAB EQU 0DH
KB_REL EQU 0F0H
KB_EXT EQU 0E0H
KB_PAUSE EQU 0E1H
CAPS EQU 01H
NUML EQU 02H
SCROLL EQU 04H
SHIFT EQU 08H
ACK EQU 10H
CTRL EQU 20H
ALT EQU 40H
RELEASE EQU 80H
PAUSED EQU 40H
EXTENDED EQU 80H
SDA1 EQU P2.3 ;SDA=PIN5
SCL1 EQU P2.2 ;SCL=PIN6
WTCMD EQU 10100000B ;WRITE DATA COMMAND Note 3
RDCMD EQU 10100001B ;READ DATA COMMAND Note 3
UP EQU P1.4
DOWN EQU P1.6
ENTER EQU P1.7
CANCEL EQU P1.5
; ***LCD CONTROL***
LCD_RS EQU P0.0 ;LCD REGISTER SELECT LINE
LCD_E EQU P0.1 ;LCD ENABLE LINE
LCD_DB4 EQU P0.2 ;PORT 1 IS USED FOR DATA
LCD_DB5 EQU P0.3 ;USED FOR DATA
LCD_DB6 EQU P0.4 ;FOR DATA
LCD_DB7 EQU P0.5 ;FOR DATA
; ***CURSOR CONTROL INSTRUCTIONS***
OFFCUR EQU 0CH
BLINKCUR EQU 0DH
; ***DISPLAY CONTROL INSTRUCTIONS***
CLRDSP EQU 01H
ONDSP EQU 0CH
; ***SYSTEM INSTRUCTIONS***
CONFIG EQU 28H ; 4-BIT DATA,2 LINES,5X7 MATRIX LCD
ENTRYMODE EQU 6 ; INCREMENT CURSOR DON'T SHIFT DISPLAY
KEYB_CLOCK EQU P0.7
KEYB_DATA EQU P0.6
DSEG ; This is internal data memory
ORG 20H ; Bit adressable memory
FLAGS1: DS 1
RECEIVED BIT FLAGS1.0
AM BIT FLAGS1.1
MAS BIT FLAGS1.2
KEYBRD BIT FLAGS1.3
AMS BIT FLAGS1.4
COUNTER: DS 1
FLAGS: DS 1
LASTREAD BIT FLAGS.0
SQW BIT FLAGS.4
ACKS BIT FLAGS.5
BUS_FLT BIT FLAGS.6
_2W_BUSY BIT FLAGS.7
CANCEL BIT FLAGS.1
CANCEL1 BIT FLAGS.2
ALARM BIT FLAGS.3
CAPPS_ON: DS 1
CAAPS BIT CAPPS_ON
BITCNT: DS 1
BYTECNT: DS 1
BYTE: DS 10
BYTES: DS 10
SECS: DS 1 ; ' SECONDS STORAGE RAM
MINS: DS 1 ; ' MINUTES ' '
HRS: DS 1 ; ' HOURS ' '
DAY: DS 1 ; ' DAY ' '
DATE1: DS 1 ; ' DATE ' '
MONTH: DS 1 ; ' MONTH ' '
YEAR: DS 1 ; ' YEAR ' '
TOTAL: DS 1 ;TOTAL COUNT
TEMP: DS 1
TEMPS: DS 1
KB_OK: DS 1
KB_DATA: DS 1
KB_STATS: DS 1
KB_SCAN: DS 1
KB_TEMP: DS 1 ; For the da*n pause key
KB_COUNT: DS 1
NAMES: DS 16
STACK: DS 1
; ***MACRO'S***
SCL_HIGH MACRO
SETB SCL ; SET SCL HIGH
JNB SCL,$ ; LOOP UNTIL STRONG 1 ON SCL
ENDM
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
CSEG ; Code begins here
; ---------==========----------==========---------=========---------
; Main routine. Program execution starts here.
; ---------==========----------==========---------=========---------
ORG 00H ; Reset
AJMP MAIN
ORG 23H
JMP SERIAL
; ---------==========----------==========---------=========---------
MAIN:
MOV PSW,#RB0 ; Select register bank 0
MOV SP,#STACK
; **********************************************************
; INITILIZE RTC
; **********************************************************
SETB SDA ; ENSURE SDA HIGH
SCL_HIGH ; ENSURE SCL HIGH
CLR ACKS ; CLEAR STATUS FLAGS
CLR BUS_FLT
CLR _2W_BUSY
CLR SQW
CALL OSC_CONTROL ;Initilize the RTC
; **********************************************************
MOV TMOD,#20H
MOV TH1,#0FDH
MOV SCON,#50H
SETB ES
SETB EA
SETB TR1
MOV COUNTER,#01H
CLR RECEIVED
CLR KEYBRD
CALL RESETLCD4
CALL INITLCD4
CALL TITLES
; MOV TOTAL,#00H
; CALL WRITE_TOTAL
; **********************************************************
; CHECK FOR ENTER THE TIME
; **********************************************************
LCALL SEND_START ; SEND 2WIRE START CONDITION
MOV A,#DS1307W ; SEND DS1307 WRITE COMMAND
LCALL SEND_BYTE
MOV A,#08H ; SET POINTER TO REG 08H ON DS1307
LCALL SEND_BYTE
LCALL SEND_STOP ; SEND STOP CONDITION
LCALL SEND_START ; SEND START CONDITION
MOV A,#DS1307R ; SEND DS1307 READ COMMAND
LCALL SEND_BYTE
LCALL READ_BYTE ; READ A BYTE OF DATA
MOV R1,A
LCALL SEND_STOP ; SEND 2WIRE STOP CONDITION
CJNE A,#0AAH,SET_RTC
AJMP TOP
;**********************************************************
; STORE RTC TIME
;**********************************************************
KBNotOKS:
CALL DISP1
JB ENTER,$
NOP
JNB ENTER,$
AJMP FXC4
;************************************************************************
SET_RTC:
MOV TEMP,#00H
JB KEYBRD,LAOPS
FXC4: CALL InitKeyb ;Inizialize Keyboard
MOV a, KB_OK
JZ KBNotOKS
SETB KEYBRD
LAOPS: LCALL LOAPA
;************************************************************************
;************************************************************************
MOV R1,#BYTE
MOV R4,#10H ;MASTER ADDRESS
CALL STORE_EEPROM
; MOV TOTAL,#00H
; CALL WRITE_TOTAL
;************************************************************************
TOP: CALL RTCLOCK
MOV R0,#04H
RX3: MOV R1,#0FFH
RX1: MOV R2,#0FFH
RX2: JB RECEIVED,TOPS
DJNZ R2,RX2
DJNZ R1,RX1
DJNZ R0,RX3
AJMP TOP
;************************************************************************
TOPS: MOV COUNTER,#01H
CLR RECEIVED
CLR ES
MOV R1,#BYTES ;CHECK FOR MASTER CARD
MOV R4,#10H ;MASTER ADDRESS
MOV R6,#10 ;NUMBER OF BYTES
CALL READ_EEPROM
CLR MAS
CALL COMPARE
JNB MAS,OTHER1
CALL DISPLAY
CALL DELAYS
CALL DELAYS
REP1: MOV TEMP,#01H
CALL DISPLAY1 ;Press enter to add tag
SETB UP
SETB DOWN
SETB ENTER
SETB CANCEL
UJI1: JNB CANCEL, VBN1
JNB UP,VBN2
JNB DOWN,VBN3
JNB ENTER,VBN4
AJMP UJI1
OTHER1: AJMP OTHER
VBN1: JNB CANCEL,$
SETB ES
CLR RECEIVED
AJMP TOP
VBN2: JNB UP,$
CALL DISPLAY1
MOV TEMP,#01H
AJMP UJI1
VBN3: JNB DOWN,$
CALL DISPLAY2
MOV TEMP,#02H
AJMP UJI1
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
GHO1: CJNE R5,#02H,GHO2 ;Delete Tag
JNB ENTER,$
JMP DELETE_PGM
GHO2: JNB ENTER,$
AJMP UJI1
KBNotOK:
CALL DISP1
JB ENTER,$
NOP
JNB ENTER,$
AJMP FDC4
REAP1: CALL DELAY
JNB CANCEL,$
AJMP REP1
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
VBN4: MOV R5,TEMP
CJNE R5,#01H,GHO1 ;Add Tag
VBC1: CLR RECEIVED
CALL DISPLAY3 ;Show TAG
SETB ES
FVG1: JNB CANCEL,REAP1
JNB RECEIVED,FVG1
CLR ES
JB KEYBRD,LOOP1
FDC4: CALL InitKeyb ;Inizialize Keyboard
MOV a, KB_OK
JZ KBNotOK
SETB KEYBRD
LOOP1: CALL DISPLAY4 ;plz enter name
MOV TEMP,#00H
CALL CLEAR_RAM
EDC: CALL LOOP
INC TEMP
MOV R2,TEMP
CJNE R2,#01H,EDC1
MOV R1,#NAMES
MOV @R1,KB_DATA
EDC1: CJNE R2,#02H,EDC2
MOV R1,#NAMES+1
MOV @R1,KB_DATA
EDC2: CJNE R2,#03H,EDC3
MOV R1,#NAMES+2
MOV @R1,KB_DATA
EDC3: CJNE R2,#04H,EDC4
MOV R1,#NAMES+3
MOV @R1,KB_DATA
EDC4: CJNE R2,#05H,EDC5
MOV R1,#NAMES+4
MOV @R1,KB_DATA
EDC5: CJNE R2,#06H,EDC6
MOV R1,#NAMES+5
MOV @R1,KB_DATA
EDC6: CJNE R2,#07H,EDC7
MOV R1,#NAMES+6
MOV @R1,KB_DATA
EDC7: CJNE R2,#08H,EDC8
MOV R1,#NAMES+7
MOV @R1,KB_DATA
EDC8: CJNE R2,#09H,EDC9
MOV R1,#NAMES+8
MOV @R1,KB_DATA
EDC9: CJNE R2,#10,EDC10
MOV R1,#NAMES+9
MOV @R1,KB_DATA
EDC10: CJNE R2,#11,EDC11
MOV R1,#NAMES+10
MOV @R1,KB_DATA
EDC11: CJNE R2,#12,EDC12
MOV R1,#NAMES+11
MOV @R1,KB_DATA
EDC12: CJNE R2,#13,EDC13
MOV R1,#NAMES+12
MOV @R1,KB_DATA
EDC13: CJNE R2,#14,EDC14
MOV R1,#NAMES+13
MOV @R1,KB_DATA
EDC14: CJNE R2,#15,EDC15
MOV R1,#NAMES+14
MOV @R1,KB_DATA
EDC15: CJNE R2,#16,EDC16
MOV R1,#NAMES+15
MOV @R1,KB_DATA
EDC16: CJNE R2,#17,EDC
CALL DELAYS
CALL PRESS_ENTER
SETB ENTER
SETB CANCEL
HHJ: JNB CANCEL,LOOP1S
JB ENTER,HHJ
CALL READ_TOTAL
INC TOTAL
MOV A,TOTAL
CJNE A,#01H,JNM1
MOV R1,#BYTE ;store tag ID
MOV R4,#20H ;Starting Address
MOV R6,#10 ;STORE 10 BYTES
CALL STORE_EEPROM
CALL MDELAY
MOV R1,#NAMES ;store Name
MOV R4,#30H ;Starting Address
MOV R6,#16 ;STORE 16 BYTES
CALL STORE_EEPROM
AJMP JNM
LOOP1S: AJMP LOOP1
JNM1: CJNE A,#02H,JNM2
MOV R1,#BYTE ;store tag ID
MOV R4,#40H ;Starting Address
MOV R6,#10 ;STORE 10 BYTES
CALL STORE_EEPROM
CALL MDELAY
MOV R1,#NAMES ;store Name
MOV R4,#50H ;Starting Address
MOV R6,#16 ;STORE 16 BYTES
CALL STORE_EEPROM
AJMP JNM
JNM2: CJNE A,#03H,JNM3
MOV R1,#BYTE ;store tag ID
MOV R4,#60H ;Starting Address
MOV R6,#10 ;STORE 10 BYTES
CALL STORE_EEPROM
CALL MDELAY
MOV R1,#NAMES ;store Name
MOV R4,#70H ;Starting Address
MOV R6,#16 ;STORE 16 BYTES
CALL STORE_EEPROM
AJMP JNM
JNM3: CJNE A,#04H,JNM4
MOV R1,#BYTE ;store tag ID
MOV R4,#80H ;Starting Address
MOV R6,#10 ;STORE 10 BYTES
CALL STORE_EEPROM
CALL MDELAY
MOV R1,#NAMES ;store Name
MOV R4,#90H ;Starting Address
MOV R6,#16 ;STORE 16 BYTES
CALL STORE_EEPROM
AJMP JNM
JNM4: CJNE A,#05H,JNM5
MOV R1,#BYTE ;store tag ID
MOV R4,#0A0H ;Starting Address
MOV R6,#10 ;STORE 10 BYTES
CALL STORE_EEPROM
CALL MDELAY
MOV R1,#NAMES ;store Name
MOV R4,#0B0H ;Starting Address
MOV R6,#16 ;STORE 16 BYTES
CALL STORE_EEPROM
AJMP JNM
JNM5: CJNE A,#06H,JNM6
MOV R1,#BYTE ;store tag ID
MOV R4,#0C0H ;Starting Address
MOV R6,#10 ;STORE 10 BYTES
CALL STORE_EEPROM
CALL MDELAY
MOV R1,#NAMES ;store Name
MOV R4,#0D0H ;Starting Address
MOV R6,#16 ;STORE 16 BYTES
CALL STORE_EEPROM
AJMP JNM
JNM6: CJNE A,#07H,JNM
MOV R1,#BYTE ;store tag ID
MOV R4,#0E0H ;Starting Address
MOV R6,#10 ;STORE 10 BYTES
CALL STORE_EEPROM
CALL MDELAY
MOV R1,#NAMES ;store Name
MOV R4,#0F0H ;Starting Address
MOV R6,#16 ;STORE 16 BYTES
CALL STORE_EEPROM
AJMP JNM
JNM: CALL ID_SAVED ;Tag stored sucessfully
CALL WRITE_TOTAL ;WRITE TOTAL ID IN MEMORY
CALL DELAYS
JNB ENTER,$
AJMP REP1
Loop: CALL Check_Keyb
JNB ENTER,GHBH
JNB CANCEL,DCFV1
JNC Loop
MOV R4,KB_DATA
CALL WRLCDDATA
RET
GHBH: JNB ENTER,$
MOV TEMP,#16
RET
DCFV1: JNB CANCEL,$
AJMP LOOP1
;********************************************
OTHER:
CALL READ_TOTAL
MOV R2,TOTAL
CALL CLEAR_RAM
;check first card
MOV R1,#BYTES ;GET DATA IN BYTES(RAM)
MOV R4,#20H ;MASTER ADDRESS
MOV R6,#10 ;NUMBER OF BYTES
CALL READ_EEPROM
CLR MAS
CALL COMPARE
JNB MAS,GAN1
MOV R1,#NAMES ;GET DATA IN BYTES(RAM)
MOV R4,#30H ;MASTER ADDRESS
MOV R6,#16 ;NUMBER OF BYTES
CALL READ_EEPROM
CALL NAME1
CALL DISP_NAME
AJMP GAN2
GAN1:
;check 2 card
MOV R1,#BYTES ;GET DATA IN BYTES(RAM)
MOV R4,#40H ;MASTER ADDRESS
MOV R6,#10 ;NUMBER OF BYTES
CALL READ_EEPROM
CLR MAS
CALL COMPARE
JNB MAS,GAN3
MOV R1,#NAMES ;GET DATA IN BYTES(RAM)
MOV R4,#50H ;MASTER ADDRESS
MOV R6,#16 ;NUMBER OF BYTES
CALL READ_EEPROM
CALL NAME1
CALL DISP_NAME
AJMP GAN2
GAN3:
;check 3 card
MOV R1,#BYTES ;GET DATA IN BYTES(RAM)
MOV R4,#60H ;MASTER ADDRESS
MOV R6,#10 ;NUMBER OF BYTES
CALL READ_EEPROM
CLR MAS
CALL COMPARE
JNB MAS,GAN4
MOV R1,#NAMES ;GET DATA IN BYTES(RAM)
MOV R4,#70H ;MASTER ADDRESS
MOV R6,#16 ;NUMBER OF BYTES
CALL READ_EEPROM
CALL NAME1
CALL DISP_NAME
AJMP GAN2
GAN4:
;check 2 card
MOV R1,#BYTES ;GET DATA IN BYTES(RAM)
MOV R4,#80H ;MASTER ADDRESS
MOV R6,#10 ;NUMBER OF BYTES
CALL READ_EEPROM
CLR MAS
CALL COMPARE
JNB MAS,GAN5
MOV R1,#NAMES ;GET DATA IN BYTES(RAM)
MOV R4,#90H ;MASTER ADDRESS
MOV R6,#16 ;NUMBER OF BYTES
CALL READ_EEPROM
CALL NAME1
CALL DISP_NAME
AJMP GAN2
GAN5:
;check 2 card
MOV R1,#BYTES ;GET DATA IN BYTES(RAM)
MOV R4,#0A0H ;MASTER ADDRESS
MOV R6,#10 ;NUMBER OF BYTES
CALL READ_EEPROM
CLR MAS
CALL COMPARE
JNB MAS,GAN6
MOV R1,#NAMES ;GET DATA IN BYTES(RAM)
MOV R4,#0B0H ;MASTER ADDRESS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -