⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfid.a51

📁 一个使用8051单片机开发的rfid 系统
💻 A51
📖 第 1 页 / 共 2 页
字号:
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 + -