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

📄 dt_card.asm

📁 大唐电信卡读写程序,兼容4406和4436,DTTC28卡,RST CLK SDA
💻 ASM
字号:
;*********************************************************************
;读卡---4406(入口条件;位数R7,卡地址CARD_ADDR, 出口条件;读出数据DATA_ADDR,R0)
;*********************************************************************
READ_PRO4436:
           PUSH  ACC
           MOV   A, R0
           PUSH  ACC
           MOV   A, R6
           PUSH  ACC
           MOV   A, R7
           PUSH  ACC

          ;*---------------RESET1--------------*
           CLR   RST_CARD
           CLR   CLK_CARD
           NOP
           SETB  RST_CARD
           NOP
           SETB  CLK_CARD
           NOP
           CLR   CLK_CARD
           NOP
           CLR   RST_CARD
           ;*---------------RESET2--------------*
           CLR   RST_CARD
           CLR   CLK_CARD
           NOP
           SETB  RST_CARD
           NOP
           SETB  CLK_CARD
           NOP
           CLR   CLK_CARD
           NOP
           CLR   RST_CARD

           SETB  SDA_CARD
           NOP

           MOV   R0, #PHONE_RAM_ADDR
           MOV   R6,#32
READ13_DT:
           MOV   R7,#08H
           MOV   A,#00H
ONE_BYTE06_DT:
           SETB  CLK_CARD              ;上升沿有效,取数据位
           NOP
           MOV   C,SDA_CARD
           RLC   A                ; 右移一位(高底位调换)
           CLR   CLK_CARD
           NOP
           DJNZ  R7,ONE_BYTE06_DT     ;到8位否?

           MOV   @R0,A
           INC   R0
           DJNZ  R6,READ13_DT       ;读完13个字节?

           MOV   R0, #PHONE_RAM_ADDR
	   CJNE	 @R0, #91H, EXIT_READ4436

           MOV   R0, #JRM89_RAM_ADDR
	   MOV	 A, @R0
	   SWAP  A
	   MOV	@R0, A
           MOV   R1, #JRM89_RAM_ADDR + 1
	   MOV	 A, @R1
	   SWAP  A
	   XCHD	 A, @R0
	   MOV	@R1, A
           INC	R0
           INC	R1
           MOV	A, @R1
           SWAP	A
           XCHD	A, @R0
	   MOV	@R1, A
	   
           INC	R0
           INC	R1
           MOV	A, @R1
           XCHD	A, @R0
           INC	R0
           INC	R1
           MOV	A, @R1
	   MOV	@R0, A
	   MOV	@R1, #0FFH



	   MOV	  R0, #ZH89_RAM_ADDR  + 5	   
	   MOV	  R1, #ZH89_RAM_ADDR_1	
	   MOV	  R7, #ZH89_BYTES_1
MOVE_ZH_CONTI:
	   MOV    A, @R1
	   MOV	  @R1, #0FFH
	   MOV	  @R0, A
	   INC	  R0
	   INC	  R1
	   DJNZ	  R7, MOVE_ZH_CONTI
	   MOV	  R0, #0FFH
	   
	   MOV	  R1, #MM89_RAM_ADDR_1	
	   MOV	  R0, #MM89_RAM_ADDR	
	   MOV	  A, @R1
	   MOV	  @R0, A
	   INC	  R0
	   INC	  R1
	   MOV	  A, @R1
	   MOV	  @R0, A
	   INC	  R0
	   INC	  R1
	   MOV	  A, @R1
	   MOV	  @R0, A
   
EXIT_READ4436:
            MOV   R0,  #JR_DIAL_ADDR     ;手拨电话号码存储地址
	    MOV	  R7, #08H
CLEAN_JR_RAM:
	    MOV	  @R0, #0FFH
	    INC	  R0
	    DJNZ  R7, CLEAN_JR_RAM

           POP  ACC
           MOV  R7, A
           POP  ACC
           MOV  R6, A
           POP  ACC
           MOV  R0, A
           POP  ACC
           RET


;******************************************************************
;大唐卡定位
;R1:卡位置
;******************************************************************
DT_LOCATE:      ;大唐卡定位    
           CLR   CLK_CARD
           CLR   RST_CARD
           NOP
           SETB  RST_CARD
           NOP
           NOP
           NOP
           NOP
           NOP
           NOP
           NOP
           SETB  CLK_CARD
           NOP
           CLR   CLK_CARD
           NOP
           CLR   RST_CARD
           NOP        ;复位结束后,SDA应为H

           CJNE  R1, #01H, ASDFGHJ
           JMP   EEEEXXXXIII
   ASDFGHJ:        
           MOV   A, R1
           MOV   B, #8
           MUL   AB
           MOV   R1, A
   ADD_CLK_LOOP:
           NOP
           NOP
           NOP
           SETB  CLK_CARD
           NOP
           NOP
           NOP
           CLR   CLK_CARD
           DJNZ  R1, ADD_CLK_LOOP
EEEEXXXXIII:
           RET


;******************************************************************
;大唐写卡
;R0:内存位置
;R1:卡位置
;R3:写字节数
;******************************************************************
WRITE_DT_CARD:
           PUSH   ACC
           MOV   A, R0
           PUSH   ACC
           MOV   A, R1
           PUSH   ACC
           MOV   A, R3
           PUSH   ACC

           LCALL  DT_LOCATE      ;大唐卡定位    
          
WRITE_DT_ONE_LOOP:           
           LCALL WRITE_DT_BYTE
           INC   R0
           DJNZ  R3, WRITE_DT_ONE_LOOP

           POP   ACC
           MOV   R3, A
           POP   ACC
           MOV   R1, A
           POP   ACC
           MOV   R0, A
           POP   ACC

           RET



;******************************************************************
;大唐EREASE
;R0:内存位置
;R1:卡位置
;R3:写字节数
;******************************************************************
EREASE_DT_CARD:

           PUSH   ACC
           MOV   A, R0
           PUSH   ACC
           MOV   A, R1
           PUSH   ACC
           MOV   A, R3
           PUSH   ACC

           LCALL  DT_LOCATE      ;大唐卡定位    
																															
																															
EREASE_DT_ONE_LOOP:           
           LCALL EREASE_DT_BYTE
           DJNZ  R3, EREASE_DT_ONE_LOOP

           POP   ACC
           MOV   R3, A
           POP   ACC
           MOV   R1, A
           POP   ACC
           MOV   R0, A
           POP   ACC

           RET

;******************************************************************
;R0:内存地址
;******************************************************************
WRITE_DT_BYTE:

           MOV   B, #8
           MOV   A, @R0

WRITE_DT_BYTE_LOOP:           

           RLC   A
           JC    B_0_YN           
          
           LCALL     DELAY10uS
           SETB  RST_CARD
           LCALL     DELAY10uS
           CLR   RST_CARD

           LCALL     DELAY10uS        ;WRITE 0
           SETB  CLK_CARD
           LCALL     DELAY10MS
           CLR   CLK_CARD
           LCALL     DELAY10uS

   B_0_YN:
           LCALL CLK_CYCLE

           DJNZ  B,WRITE_DT_BYTE_LOOP

           RET

;******************************************************************
;R0:内存地址
;******************************************************************
EREASE_DT_BYTE:

           LCALL CLK_CYCLE

           LCALL     DELAY10uS        ;RST
           SETB  RST_CARD
           LCALL     DELAY10uS
           CLR   RST_CARD

           LCALL     DELAY10uS        ;WRITE 0
           SETB  CLK_CARD
           LCALL     DELAY10MS
           CLR   CLK_CARD

           LCALL     DELAY10uS        ;RST
           SETB  RST_CARD
           LCALL     DELAY10uS
           CLR   RST_CARD

           LCALL     DELAY10uS        ;EREASE 0
           SETB  CLK_CARD
           LCALL     DELAY10MS
           CLR   CLK_CARD
           LCALL     DELAY10uS

           MOV   B, #07H
  ADD_7_CLK:         
           LCALL CLK_CYCLE

           DJNZ  B,  ADD_7_CLK

           RET


CLK_CYCLE:
           SETB  CLK_CARD              ;上升沿有效,取数据位
           LCALL DELAY10uS
           CLR   CLK_CARD
           LCALL DELAY10uS
           RET

⌨️ 快捷键说明

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