设为首页 | 成都一卡通
当前位置: 首页 > 一 卡 通 > 其他一卡通 >
其他一卡通
关于非接触式IC智能(射频)卡及其读写设备内核技术的研究与应用开
发布时间:2013-04-26 来源:未知
3. 对MCM200(SB201)“Select”(选卡片) 指令的汇编语言应用程序的设计功能:调用该汇编语言子程序,将执行MCM “Select”(选卡片) 指令操作。如果卡片读写器的天线之有效工作距离内有多张重叠的Mifare 1 非接触式IC射频卡,则该指令在程序员成功完成“AntiCollision”操作之后,将帮助程序员正式选择其中指定的一张卡片进行操作(包括密码存取,密码认证,卡片上指定扇区的读写,等等。)“Select”(选卡片) 指令操作将读取卡片的SIZE字节。程序说明:1.)在以下的汇编语言程序中,用到了一些其他的子程序(和上述的“Request std和Request all”指令操作中的相同),分别为:D500US: (与上述功能相同);H_SEND_TO_BUF01:(与上述功能相同);H_SEND_TO_BUF23:(与上述功能相同);SEND_TO_BUF01:(与上述功能相同);SEND_TO_BUF23:(与上述功能相同);DISPLAY:(与上述功能相同);H_DISPLAY:(与上述功能相同);等等。2.)在以下的汇编语言程序中,读者可能会碰到一些寄存器变量,或其他应用子程序,这些可能是用于主控程序或是调试而用。特加以说明。 程序清单如下:;====================MCM SELECT OPERATION=====================select:

;SETB PSW.3

;SETB PSW.4

MOV A,#0CH

MOV R0,#01H

MOVX @R0,A


  ;STACON() = 0CH

MOV A,#0F0H

MOV R0,#02H

MOVX @R0,A


  ;ENABLE() = F0H

MOV A,#38H

MOV R0,#03H

MOVX @R0,A


  ;BCNTS() = 38H =56 D

MOV A,#08H

MOV R0,#04H

MOVX @R0,A


  ;BCNTR() = 08H <--RECEIVE ONE BYTE:SIZEBYTE

MOV A,#93H

MOV R0,#00H

MOVX @R0,A


  ;DATA() = 93H -->SELECT INSTRACTION CODE

MOV A,#70H

MOV R0,#00H

MOVX @R0,A


  ;IMPORTANT: DATA()=70H--BITCOUNT=70Hbits;-----------------------------------------------------------------------

MOV R7,#04H


;R7 IS A COUNTER,FOR WRITING 04H BYTES TO DATA

MOV B,#00H

MOV R0,#00H

MOV R1,#40H


 ;THE FIRST ADDRESS OF SNR. 40H---43HSELECT_WRT_LOOP:

MOV A,@R1

MOVX @R0,A

XRL B,A

INC R1

DJNZ R7, SELECT_WRT_LOOP

MOV A,B

MOVX @R0,A


;SEND THE 5th CHK_SUM_VALUE

MOV A,#0AH

MOV R0,#06H

MOVX @R0,A


;TOC() = 0AHSEL_RD_STACON_AGAIN:

MOV R0,#01H

MOVX A,@R0


;READ STACON() ==> A

MOV B,A

JNB ACC.7, SEL_RD_STACON_AGAIN ;IF DV=1? IF NOT,REPEAT READ

MOV B,A;------------- NOW DV=1, DATA VALID ----------------------

MOV A,#00H

MOV R0,#06H

MOVX @R0,A


;TOC() = 00H;------------- NOW JUDGE ANY DATA ERRORS --------------------

MOV A,B

JB ACC.6, SEL_TE_ERR
;TE ERR

JB ACC.5, SEL_PE_ERR
;PE ERR

JB ACC.3, SEL_BE_ERR
;BE ERR

JB ACC.4, SEL_CE_ERR
;CE ERR;------------- NOW NO ERRORS,READING CARD SIZE -----------------

MOV R0,#00H

MOVX A, @R0


;READ SIZE: DATA() ==> A

MOV 44H,A


 ;STORE SIZE IN 44H

ACALL SEND_TO_BUF01
;SEND SIZE TO DISP_BUF_LOW

SETB P2.6


  ;OK LAMP NOW WORKING P2.3

ACALL SPK_ON


;if ok then spk on

MOV B,#00H


;SELECT OPERATION'S OK RETURN_VALUE=00H

MOV A,B



;READY FOR DISSPLAY IN DISP_BUF_HIGH(23)

LJMP SEL_OK_EXIT
  ;IF OK, EXIT SELECT OPERATION;-------------------ERRORS PROCESS-------------------------------

SEL_TE_ERR:

MOV B,#01H




 LJMP SEL_ERR_EXITSEL_PE_ERR:

MOV B,#05H




 LJMP SEL_ERR_EXITSEL_CE_ERR:

MOV B,#02H




 LJMP SEL_ERR_EXITSEL_BE_ERR:

MOV R7,#0AH

ACALL D500US

MOV B,#0BH

LJMP SEL_ERR_EXIT;----------------------EXIT------------------------SEL_ERR_EXIT:

MOV A,BSEL_OK_EXIT:

ACALL SEND_TO_BUF23
;SEND ERR_RETURN_VALE TO DISP_BUF_HIGH

RET;------------------------ End of MCM AntiCollision Operation -----------------通过以上对MCM的几个指令的软件设计,读者应该能有较大的信心,将MCM其他的一些指令也能设计成功。以供主控程序随时调用。(二). 对MCM200(SB201)组成的DEMO电路的主控应用程序设计和开发1. 硬件电路请参照所附的DEMO电路图纸2. 软件清单如下程序清单如下:;====================================================================;



 WRITTEN BY ROCKY, OCT'1999;====================================================================

ORG 0000Hstart:
  LJMP MAIN
  NOP
  NOP;--------------------------

;ORG 001BH

;LJMP 0500H;--------------------------

ORG 0080HMAIN:

MOV SP,#0E1H

NOP

CLR EA



 ;CLOSE CPU INT

CLR P2.5


  ;RESET MCM (-RST=0)

SETB P2.4


  ;RESET MCM (-CS =1)

NOP

ACALL INIT_DISP_BUF


 ACALL DISPLAY

ACALL H_DISPLAY

NOP

CLR P2.6



;CLOSE OK LAMP

 setb p2.0


  ;disenable KB function

mov p1,#11110000b
  ;init P1 port:P1.0~~P1.3-->out (line)







;


P1.4~~P1.7-->in (colum)

SETB P2.5
  ;RESET MCM (-RST=1)

CLR P2.4
  ;SELECT MCM (-CS=0)

ACALL D500MS

MOV A,#80H
 ;SOFTWARE_RESET MCM

MOV R0,#01H

MOVX @R0,A

ACALL D500MS

ACALL SPK_ON


;SPEAK ON

;MOV 21H,#01H


;THE kb_TEST_CHARKB_LOOKING:

LCALL KB_SCAN

ACALL DISPLAY

ACALL H_DISPLAY

CLR P2.6



;CLOSE OK LAMP P2.3

AJMP KB_LOOKINGKB_ALL_EXIT:

MOV R2,#00H


;SET RQT_STD
  SETB P2.5
  ;RESET: MCM ON (-RST=1) P1.4
  CLR P2.4
  ;SELECT MCM ON (-CS=0) P1.5;------------------------------------REPEAT:

SETB P2.5
  ;RESET: MCM ON (-RST=1)P1.4

CLR P2.4
  ;SELECT MCM ON (-CS=0) P1.5;==================================================

ACALL REQUEST  ;MCM REQUEST OPERATION;==================================================

ACALL DISPLAY

ACALL H_DISPLAY

ACALL D500MS

CLR P2.6

;CLEAR OKLAMP P2.3

ACALL INIT_DISP_BUF

ACALL DISPLAY

ACALL H_DISPLAY;=========================================================

ACALL ANTICOLLISION  ;MCM ANTICOLLISION OPERATION;=========================================================

ACALL DISPLAY

ACALL H_DISPLAY

ACALL D500MS

CLR P2.6

;CLEAR OKLAMP  P2.3

ACALL INIT_DISP_BUF

ACALL DISPLAY

ACALL H_DISPLAY;=========================================================

ACALL SELECT  ;MCM SELECT OPERATION;=========================================================

ACALL DISPLAY

ACALL H_DISPLAY

ACALL D500MS

CLR P2.6

;CLEAR OKLAMP  P2.3

ACALL INIT_DISP_BUF

ACALL DISPLAY

ACALL H_DISPLAY



 ;+++++++++++++++++++++ set up register/ram for load_key()++++++++++++++++++

mov 7FH,#0ABH

 

MOV 7EH, #00H

  ;(7EH) = 00H-->SELECT KEYSET0 (KS1=0;KS0=0)

MOV 7DH,#02H


;(7DH): 1)SELECT KEYA or KEYB







;
  2)SELECT sector_ADDRESS :0-15

MOV 7CH,#60H


;(7CH) = 47H-->TKey(1) FIRST ADDRESS;=========================================================

ACALL LOAD_KEY ;MCM LOAD_KEY OPERATION;=========================================================