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

📄 shanghai.asm

📁 非接触式IC卡设计编程的样例
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*******************************************************************
; The program is sample for your main system connect with CE06V01
;     in LD-FORM , read the ML10 card 
;*******************************************************************
; BIT ADDRESS
CNTT EQU  70H
;********  常量定义  *******************************************************
ByteWait5us	    EQU    50	     ; 串行口读写重试次数
Cpu1RsqNum	    EQU    30	    ; CPU1发命令的重试次数
Cpu1WaitNum	    EQU    100	     ; CPU1接收应答的重试次数
FrCPU1Cmd	    EQU    23h	     ; CPU1的命令帧头
FrCPU2Ack	    EQU    45H	     ; CPU2的响应帧头

FrCpu2Asw	    EQU    67H	     ; CPU2的应答帧头
FrCPU1Ack	    EQU    89H	     ; CPU1的响应帧头
ByteWait2	    EQU    240
CommandOK	    EQU    00H	     ; 命令执行成功
;********  I/O port define **************************************************
SPBIT               EQU    P1.0      ; LD FORM data
SPCLK               EQU    P1.1      ; LD FORM clock
REDLED              EQU    P1.3      ;
;******** Register define  *******************************************************
;BYTE DEFINITE
REGTEMP 	    EQU        09H
REGTEMP2	    EQU        78H
CNTREG1 	    EQU    10H
CNTREG2 	    EQU    11H
ICCMD		    EQU    26H	    ; 命令代码寄存器
RETCODE 	    EQU    27H
Cpu1CmdLen	    EQU    28H	    ; CPU1命令帧长度寄存器
Cpu2AswLen	    EQU    29H	    ; CPU2应答帧长度寄存器
Cpu2AswBuf	    EQU    2AH	    ; CPU2应答帧存放缓冲区(40H--4FH)
Cpu1CmdBuf	    EQU    2AH	    ; 数据块A寄存器
SNR0                EQU        20H          ; card serial no. buffer
 ;
OK		    EQU    00H
FAILED		    EQU    01H
;******** 位地址   *******************************************************
;BIT DEFINITE
HIGHRATE	    BIT     00H

	ORG	0000H
	LJMP	MAIN
        NOP                     ;
        NOP                     ;
        NOP                     ;
        NOP                     ;
        NOP                     ;
        NOP                     ;
        NOP                     ;
        NOP                     ;
        ORG     000BH
        LJMP    INT_T0       ; LED REFRESH INT PROGRAM !
;
	ORG	0030H
MAIN:
	SETB	SPBIT
	SETB	SPCLK
        CLR     REDLED          ;Clear the red LED

	MOV	IE,#00H 	 ; 清中断允许寄存器
	MOV	SP,#0E0H	  ; 设置堆栈指针
	CLR	EA

        LCALL   T0_SET          ;

        SETB    EA              ;
        SETB    ET0             ;
;
YLOOP0:
        MOV ICCMD,#0H
        MOV Cpu1CmdLen,#0
        LCALL Cpu1NsendCommand          ;Connect with CE06V01
        MOV     A,RETCODE                                       ;
        CJNE     A,#00H,AAA1                                    ;
;
        SJMP     AAA 
AAA1:   LJMP    ER1             ;If retcode<>0,error
AAA:    MOV ICCMD,#0A1H                 ;
        MOV     CPU1CMDLEN,#00          ;
        LCALL   CPU1NSENDCOMMAND        ;Read the module no.
        MOV     A,RETCODE               ;
        CJNE     A,#00H,AAA1
;
        MOV     ICCMD,#0A9H             ;
        MOV     CPU1CMDLEN,#01H         ;
        MOV     R0,#CPU1CMDBUF          ;
        MOV     A,#00H                  ;
        MOV     @R0,A                   ;
        LCALL   CPU1NSENDCOMMAND        ;Set the password mode 
        MOV     A,RETCODE               ;
        CJNE A,#00H,AAA1                ;
;
        MOV     ICCMD,#0A4H             ;Download the password #FFFFFFFFFFFF
        MOV     CPU1CMDLEN,#07H         ;
        MOV     R0,#CPU1CMDBUF          ;
        MOV     A,#00H                  ;
        MOV     @R0,A                   ;
        INC     R0                      ;
        MOV     A,#033H                 ;
        MOV     @R0,A                   ;
        INC     R0                      ;
        MOV     @R0,A                   ;
        INC     R0                      ;
        MOV     @R0,A                   ;
        INC     R0                      ;
        MOV     @R0,A                   ;
        INC     R0                      ;
        MOV     @R0,A                   ;
        INC     R0                      ;
        MOV     @R0,A                   ; 
        LCALL   CPU1NSENDCOMMAND        ; Download the password 
        MOV     A,RETCODE               ;
        CJNE    A,#00H,AAA1              ;
;
;       SETB    EA                      ;
;       SETB    ET0                     ;OPEN THE INT.

YLOOP3:
;       SETB    EA                      ;
;       SETB    ET0                     ;

        MOV     ICCMD,#0AAH             ;
        MOV     CPU1CMDLEN,#00H                 ;
        LCALL   CPU1NSENDCOMMAND                ;       Read the card type
        MOV     A,RETCODE				;
        CJNE    A,#00H,ER1                              ;
;
        CLR     EA                      ;
        CLR     ET0                     ;Close the int t0

        MOV ICCMD,#0ABH
        MOV Cpu1CmdLen,#0
        LCALL Cpu1NsendCommand          ;Read serial no.
        MOV     A,RETCODE                       ;
        CJNE    A,#00H,ER1                      ;
;
;       LJMP    ER0                     ;

        MOV      R0,#SNR0                               ;
        MOV      R1,#CPU2ASWBUF                 ;
        MOV      R2,#04H                                        ;
YLOOP1:
        MOV     A,@R1                                   ;SAVE THE SERIAL NO.
        MOV     @R0,A                                   ;
        INC     R1                                              ;
        INC     R0                                              ;
        DJNZ    R2,YLOOP1                               ;
;
        MOV     ICCMD,#0ACH                             ;
        MOV     CPU1CMDLEN,#05H                 ;
        MOV     A,#02H                                  ;
        MOV     CPU1CMDBUF,A                            ;
        MOV     R0,#SNR0                                        ;
        MOV     R1,#CPU1CMDBUF+1                        ;
        MOV     R2,#04H                                 ;
YLOOP2:	MOV	A,@R0					;
        MOV     @R1,A                                   ;
        INC     R0                                              ;
        INC     R1                                              ;
        DJNZ     R2,YLOOP2                              ;
        LCALL Cpu1NsendCommand          ;Read the data block 2 
        MOV     A,RETCODE                       ;
        CJNE    A,#00H,ER1                      ;
;
ER0:
       SETB    REDLED  ;
       LJMP    YLOOP3
ER1:
      CLR      REDLED   ;Clear the RED LED
      LJMP     YLOOP3                                 ;
;***************************************************************************
;Your system transmit the command to CE06V01 and wait for return data 
;****************************************************************************
Cpu1NSendCommand:
        CLR     EA                      ;
LCALL	InitSP			;Init. LD form line
CPU1NSD1Z:
	MOV	R7, #Cpu1RsqNum 	    ; 第一次握手
Cpu1NSD1:
	MOV	R5, #FrCpu1Cmd		    ; 发送Cpu1的命令帧头
	LCALL	SendCharSP
	JC	Cpu1NSD3
	LCALL	ReceCharSP		    ; 接收CPU2的响应帧头
	JC	Cpu1NSD3
	CJNE	R5, #FrCpu2Ack, Cpu1NSD3    ;	       "........ L
	SJMP	Cpu1NSD4		     ; 握手成功
Cpu1NSD3:
	DJNZ	R7, Cpu1NSD1		     ; 重复握手过程
CPU1NSD32:
	SJMP	Cpu1NSD_Err		     ; 握手失败
Cpu1NSD4:

        MOV     R7,#30H         ;;;;;;
YLOOPA: DJNZ    R7,YLOOPA       ;;;;;Insert the user program

	MOV	A,ICCMD
	MOV	R5,A
	LCALL	SendCharSP
	MOV	R5, CPU1CMDLEN		    ; 取CPU1命令帧长度
	XCH	A,R5
	MOV	R7,A
	XCH	A,R5
	XRL	A,R5
	LCALL	SendCharSP		      ; 发送CPU1的命令
	XCH	A,R7
	JZ	CPU1NSD6
	XCH	A,R7
	MOV	R0,#Cpu1CmdBuf
Cpu1NSD5:
	XCH	A,@R0
	MOV	R5,A
	XCH	A,@R0
	XRL	A,R5
	INC	R0
	LCALL SendCharSP		    ; 发送CPU1的命令帧
	JC Cpu1NSD_Err
	DJNZ R7,Cpu1NSD5
	LJMP	CPU1NSD7
CPU1NSD6:
	XCH	A,R7
CPU1NSD7:
	MOV	R5,A		;SEND CHECKSUM
	LCALL SendCharSP
	JC Cpu1NSD_Err
;-----------------------------------------------------------------------
;	Wait Some Moment !  ( CPU1 PROCESS PROCEDURE)
        MOV     R7,#30H         ;;;;;;
YLOOPB: DJNZ    R7,YLOOPB       ;;;;;Insert the user program

;-----------------------------------------------------------------------
	MOV	R7, #Cpu1WaitNum
Cpu1NSD10:
	MOV	R1, #20
Cpu1NSD11:
	LCALL	ReceCharSP		    ; 第二次握手
	JC	Cpu1NSD12
	CJNE	R5, #FrCPU2Asw, Cpu1NSD12     ; 判是否收到CPU2的应答帧头
	MOV	R5, #FrCPU1Ack
	LCALL	SendCharSP		    ; 发送CPU1的响应帧头
	JC	Cpu1NSD_Err
	SJMP	Cpu1NSD13
Cpu1NSD12:
	DJNZ	R1, Cpu1NSD11
	DJNZ	R7, Cpu1NSD10
	SJMP	Cpu1NSD_Err
Cpu1NSD13:

	LCALL	ReceCharSP		      ; 接收CPU2应答帧长度
	JC	Cpu1NSD_Err
	MOV	A,R5
	MOV	RETCODE,A
	LCALL	ReceCharSP		      ; 接收CPU2应答帧长度
	MOV	CPU2ASWLEN,R5
	MOV	R7,CPU2ASWLEN
	XRL	A,R5
	XCH	A,R7
	JZ	CPU1NSD15
	XCH	A,R7
	MOV	R0, #Cpu2AswBuf 	       ; CPU2应答帧首地址
Cpu1NSD14:
	LCALL	ReceCharSP		      ; 接收命令帧
	JC	Cpu1NSD_Err
	XCH	A,R5
	MOV	@R0,A
	XCH	A,R5
	XRL	A,R5
	INC	R0
	DJNZ	R7,Cpu1NSD14
	LJMP	CPU1NSD16
CPU1NSD15:
	XCH	A,R7
CPU1NSD16:
	LCALL	ReceCharSP		      ; 收校验和
	JC	Cpu1NSD_Err
	XRL	A, R5
	JNZ	Cpu1NSD_Err			 ; 校验和不对
Cpu1NSD_OK:				     ; 成功
	CLR	C
	SJMP	Cpu1NSD_Exit
Cpu1NSD_Err:				     ; 失败
	SETB	C
Cpu1NSD_Exit:				     ; 退出

        SETB    EA                      ;
	RET
;***************************************************************************
; 初始化软件串行口
;***************************************************************************
InitSP:
	 SETB SPCLK
	 SETB SPBIT
	 RET
;***************************************************************************
; LD FORM 发送子程序
; 入口: R5: 待发字符
; 出口: C=0: 成功, C=1: 失败	    (A,R6)
;***************************************************************************
SendCharSP:
	PUSH	ACC
        MOV     A,R6                    ;
        PUSH    ACC                     ;
	SETB	SPCLK			; Send 1 start bits
	lcall	delay

⌨️ 快捷键说明

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