?? 程序.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 + -