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

📄 程序.asm

📁 AT88RF256的射频识别卡与基站的程序
💻 ASM
字号:
;//////////////////////////////////////////////////////////////////////////////////
;/              This is a sample code for use "U2270B and E5550"                  /
;/              The clock must at "11.0592MHz"                                    /
;/                                                                                /
;//////////////////////////////////////////////////////////////////////////////////
CFE	       EQU P1.2      ;Carrier Frequency Enable
Input_Data_Bit EQU P1.3      ;Input Data from U2270B
Red_Lamp       EQU P1.2      ;Read Data Error/Ready to Read Data
Green_Lamp     EQU P1.3      ;Read Data Right from U2270B
Lock_Flag      BIT 00	     ;Lock_Flag is Bit 00
B00  bit  00
B01  bit  01
B02  bit  02
B03  bit  03
B04  bit  04
B05  bit  05
RR0	EQU	0
RR1	EQU	1
RR2	EQU	2
RR3	EQU	3
RR4	EQU	4
RR5	EQU	5
RR6	EQU	6
RR7	EQU	7

;public	B00
;public	B01
;public	B02
;public	B03
;public	B04
;public	B05
;public	RR0
;public	RR1
;public	RR2
;public	RR3
;public	RR4
;public	RR5
;public	RR6
;public	RR7
;public	Write_Block0
;public	Standard_Write_Mode
;public	READ
	org  0000h

   ;----------------------------------------------------------;
   ;	      Write  Block0 (No Password)		      ;
   ;   10 | L | Data Bits(4 Bytes) | Address=00 	      ;
   ;   IN:  Parameters					      ;
   ;   R0=RAM's First Data address pointer to write TK5550    ;
   ;   R3=00H						      ;
   ;   Work Register: R4,R5,R6				      ;
   ;   bit 00=1  Lock(L=1)  bit 00=0 Unlock(L=0)	      ;
   ;__________________________________________________________;
Write_Block0:
	LCALL	SENDC10
	LCALL	SEND_LOCK
	LCALL	SEND_DATA
	LCALL	SEND_ADDRESS
	RET

   ;--------------------------------------------------------;
   ;		 Standard Write Mode			    ;
   ;   10 | L | Data Bits(4 Bytes) | Address(01--07)	    ;
   ;   IN:  Parameters					    ;
   ;   R0=RAM's First Data address pointer to write TK5550  ;
   ;   R3=TK5550 EEPROM's Block Address(01--07)             ;
   ;   Work Register: R4,R5,R6				    ;
   ;   bit 00=1  Lock(L=1)  bit 00=0 Unlock(L=0)	    ;
   ;________________________________________________________;
Standard_Write_Mode:
	MOV A,R3
	ANL A,#0FFH
	JZ Standard_back
	SWAP  A
	RL A
	MOV R3,A
	LCALL	SENDC10
	LCALL	SEND_LOCK
	LCALL	SEND_DATA
	LCALL	SEND_ADDRESS
Standard_Back:	RET

   ;----------------------------;
   ;   Send_Data Function	;
   ;----------------------------;
SEND_DATA:  CLR     C
	    MOV	    R4,#00H
	    MOV	    R5,#00H
NEXT_DBYTE: MOV     A,@R0
NEXT_DBIT:  RLC     A
	    JC	    SEND_D1
SEND_D0:    LCALL   WRITE_0	  ;for write '0'
	    SJMP    SEND_DGAP
SEND_D1:  LCALL   WRITE_1	   ;for write '1'
SEND_DGAP:LCALL   WRITE_GAPS
	INC	R4
	CJNE	R4,#08H,NEXT_DBIT
	MOV	R4,#00H
	INC	R5
	INC	R0
	CJNE	R5,#04H,NEXT_DBYTE
	RET

   ;----------------------------;
   ;   Send_Addrss Function	;
   ;----------------------------;
SEND_ADDRESS:  MOV     R4,#00H
	MOV	A,R3
LOOPA:	RLC	A
	JC	SEND_A1
	LCALL	WRITE_0
	SJMP   SEND_ADDRESSN
SEND_A1:LCALL	WRITE_1
SEND_ADDRESSN: LCALL   WRITE_GAPS
	INC	R4
	CJNE	R4,#03H,LOOPA
	LCALL	WRITE_END
	RET

   ;----------------------------;
   ;   Send_Code Function	;
   ;----------------------------;
SENDC11:LCALL	WRITE_GAP
	LCALL	WRITE_1
	LCALL	WRITE_GAPS
	LCALL	WRITE_1
	LCALL	WRITE_GAPS
	RET
SENDC10:LCALL	WRITE_GAP
	LCALL	WRITE_1
	LCALL	WRITE_GAPS
	LCALL	WRITE_0
	LCALL	WRITE_GAPS
	RET

    ;----------------------------;
    ;	Send_Lock Bit Function	 ;
    ;----------------------------;
SEND_LOCK:  JB	 LOCK_FLAG,SEND_L1
SEND_L0:LCALL	WRITE_0
	SJMP   SEND_LEND
SEND_L1: LCALL	 WRITE_1
SEND_LEND: LCALL   WRITE_GAPS
	RET

    ;----------------------------;
    ;	Write_Gap Function	 ;
    ;----------------------------;
WRITE_GAP: CLR CFE
	MOV	R6,#128      ;Delay  for Start Gap
LOOPG:	DJNZ	R6,LOOPG     ;2T=2*12/11.059=2.17us
	RET

    ;----------------------------;
    ;	Write '1' Function       ;
    ;----------------------------;
WRITE_1:SETB CFE	   ;Delay  for Write "1"
	  MOV R6,#190
LOOPONE:  DJNZ	  R6,LOOPONE
	RET

    ;----------------------------;
    ;	Write '0' Function       ;
    ;----------------------------;
WRITE_0:SETB CFE	   ;Delay 100us for Write "0"
	MOV R6, #46
LOOPZ:	DJNZ	R6,LOOPZ
	RET

    ;----------------------------;
    ;	Write Gaps Function	 ;
    ;----------------------------;
WRITE_GAPS: CLR CFE	   ;Delay 250us for Gaps
	MOV	R6,#130
LOOPGS: DJNZ	R6,LOOPGS
	RET

    ;----------------------------;
    ;	Write End Function	 ;
    ;----------------------------;
WRITE_END: SETB CFE
	MOV R4,#30H  ;write delay time++30h,50h
WRITE_END1:   MOV R5,#0FFH
WRITE_END2:  DJNZ R5,WRITE_END2
	DJNZ R4,WRITE_END1
	RET

   ;---------------------------------------------------------------------;
   ;			    Read Function				 ;
   ;  IN: Paramters							 ;
   ;  R0=First Address Pointer for storing the Read_Data  from IC Card	 ;
   ;  R6=Block Numbers Read from IC Card (One Block Has 4 bytes)	 ;
   ;  BIT 00H=01H=02H=03H=0						 ;
   ;  Work Register: B,R1,R2,R3,R4,R5,R7				 ;
   ;  T0----Timer							 ;
   ;  Output: Paramter							 ;
   ;  Bit 03=0 Right Reading Return					 ;
   ;  Bit 03=1 Error Reading Return					 ;
   ;_____________________________________________________________________;

READ:	ORL TMOD,#01H
	ANL TMOD,#0F1H
	SETB CFE
	MOV A,#00H
READD:	CLR 00H
	MOV R5,#00H
	MOV B,R6
	MOV A,#20H
	MUL AB
	MOV R2,A
	MOV R3,#00H
MAIN:	CLR TR0
	MOV TH0,#00H
	MOV TL0,#00H			 ;		   ____
WAIT_LOW:  JB Input_Data_Bit,WAIT_LOW	 ;Start Low level      |____
	JB Input_Data_Bit,WAIT_LOW
	MOV R1,#34
DLOW:	DJNZ R1,DLOW
	MOV R1,#00H
MAIN0:	MOV A,#00H	 ; 7T
	MOV C,Input_Data_Bit	  ;
	RLC A		 ;
	MOV R7,A	 ;
	XRL A,R1	 ;
	JNZ MAINM	 ;
	SJMP MAIN0
MAINM:	MOV B,R7	; 8T
	MOV R1,B	;
	MOV TH0,#00H	;
	MOV TL0,#07H	 ;MOV TL0,#07H	 15T-8T=7T
	SETB TR0	; START T0
MAIN1:	MOV A,#00H	;7T
	MOV C,Input_Data_Bit	 ;
	RLC A		;
	MOV R7,A	;
	XRL A,R1	;
	JNZ MAIN2	;
	SJMP MAIN1
MAIN2:	CLR TR0        ;1T
	MOV B,R7       ;2T   START FLAG HIGHT LEVEL>=330US
	MOV R1,B       ;2T
	MOV A,TH0      ;1T
	ANL A,#01H     ;1T
	JZ MAIN        ;2T
	CLR C	       ;1T
	MOV A,#2CH     ; T
	SUBB A,TL0     ; T
	JC RIGHT       ;2T
	CPL 00H
	JB 00H,MAIN
	AJMP ERROR
RIGHT:	MOV TH0,#00H   ;2T
	MOV TL0,#18   ;2T      25T-7T=18T
	SETB TR0
MAIN5:	MOV A,#00H     ;7T
	MOV C,Input_Data_Bit
	RLC A
	MOV R7,A
	XRL A,R1
	JNZ MAIN6
	SJMP MAIN5
MAIN6:	CLR TR0    ; 14T
	MOV B,R7   ;
	MOV R1,B
	CLR C
	MOV A,#175   ;	   190*11.059/12=175
	SUBB A,TL0
	JNC RIGHT2
	CPL 01H
	JB 01H,MAIN
	AJMP ERROR
RIGHT2: MOV TH0,#00H
	MOV TL0,#14	;21T-7T=14T
	SETB TR0
MAIN7:	MOV A,#00H   ;7T
	MOV C,Input_Data_Bit
	RLC A
	MOV R7,A
	XRL A,R1
	JNZ MAIN8
	SJMP MAIN7
MAIN8:	CLR TR0       ; 16T Before Start T0
	MOV R5,TL0
	MOV B,R7
	MOV R1,B
	CLR C
	MOV A,#190
	SUBB A,TL0
	JC MAIN9
	CPL 02H
	JNB 02H,ERROR
	AJMP MAIN
MAIN9:	MOV TH0,#00H
	MOV TL0,#16	;16T+7T-7T=16T
	SETB TR0
	MOV A,TH0	;>300us GOTO READ2
	ANL A,#01H
	JZ READ1
	CLR C
	MOV A,#44
	SUBB A,R5
	JC READ2
READ1:	MOV A,#00H
	MOV C,Input_Data_Bit
	RLC A
	MOV R7,A
	XRL A,R1
	JNZ READ11
	SJMP READ1
READ11: CLR TR0
	MOV B,R7
	MOV R1,B
	CLR TR0
	CLR C
	MOV A,#175
	SUBB A,TL0
	JNC READ2
	SJMP ERROR
READ2:	MOV A,@R0
	CJNE R1,#01H,READ5
	CLR C
	LJMP READ6
READ5:	SETB C
READ6:	RLC A
	MOV @R0,A
	INC R3
	CJNE R3,#08H,READ7
	MOV R3,#00H
	INC R0
READ7:	DJNZ R2,READ8
	ANL 20H,#0F0H
	RET
ERROR:	SETB 03H
	ANL 20H,#0F8H
	RET
READ8:	MOV TH0,#00H
	MOV TL0,#10H
	SETB TR0
READ3:	MOV A,#00H
	MOV C,Input_Data_Bit
	RLC A
	MOV R7,A
	XRL A,R1
	JNZ READ4
	SJMP READ3
READ4:	CLR TR0
	MOV B,R7
	MOV R1,B
	CLR C
	MOV A,#175
	SUBB A,TL0
	JC READ2
	MOV TH0,#00H
	MOV TL0,#07H
	SETB TR0
	SJMP READ1
	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -