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

📄 untitled document.htm

📁 内附IC读卡器设计方案,该设计使用89C52和MCM200,里面有详细的设计过程及程序代码,相信有一定IC卡经验
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0065)http://www.flyring.com.cn/chinese/UploadFiles/200442161059449.htm -->
<HTML><HEAD><TITLE>Untitled Document</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META content="MSHTML 5.00.2920.0" name=GENERATOR></HEAD>
<BODY background="" bgColor=#ffffff text=#000000>
<DIV align=center>
<P><BR><FONT color=#0000ff><B>关于非接触式IC智能(射频)卡及其读写设备内核技术的研究与应用开发(连载9) <BR><BR>作者: 
上海华东磁记录电子公司 张敏 <BR></B><BR><B><BR></B></FONT></P>
<TABLE border=1 borderColor=#ff9900 width="80%">
  <TBODY>
  <TR>
    <TD align=left height=3601 vAlign=top>
      <P><BR><BR></P>
      <P>3. 对MCM200(SB201)“Select”(选卡片) 指令的汇编语言应用程序的设计<BR>功能:调用该汇编语言子程序,将执行MCM 
      “Select”(选卡片) 指令操作。如果卡片读写器的天线之有效工作距离内有多张重叠的Mifare 1 
      非接触式IC射频卡,则该指令在程序员成功完成“AntiCollision”操作之后,将帮助程序员正式选择其中指定的一张卡片进行操作(包括密码存取,密码认证,卡片上指定扇区的读写,等等。)“Select”(选卡片) 
      指令操作将读取卡片的SIZE字节。<BR>程序说明:<BR>1.)在以下的汇编语言程序中,用到了一些其他的子程序(和上述的“Request 
      std和Request all”指令操作中的相同),分别为:<BR>D500US: 
      (与上述功能相同);<BR>H_SEND_TO_BUF01:(与上述功能相同);<BR>H_SEND_TO_BUF23:(与上述功能相同);<BR>SEND_TO_BUF01:(与上述功能相同);<BR>SEND_TO_BUF23:(与上述功能相同);<BR>DISPLAY:(与上述功能相同);<BR>H_DISPLAY:(与上述功能相同);<BR>等等。<BR>2.)在以下的汇编语言程序中,读者可能会碰到一些寄存器变量,或其他应用子程序,这些可能是用于主控程序或是调试而用。特加以说明。 
      </P>
      <P>程序清单如下:<BR>;====================MCM SELECT 
      OPERATION=====================<BR>select:<BR>    ;SETB PSW.3<BR>    ;SETB 
      PSW.4<BR>    MOV A,#0CH<BR>    MOV R0,#01H<BR>    MOVX @R0,A        
      ;STACON() = 0CH<BR>    MOV A,#0F0H<BR>    MOV R0,#02H<BR>    MOVX 
      @R0,A        ;ENABLE() = F0H<BR>    MOV A,#38H<BR>    MOV 
      R0,#03H<BR>    MOVX @R0,A        ;BCNTS() = 38H =56 D<BR>    MOV 
      A,#08H<BR>    MOV R0,#04H<BR>    MOVX @R0,A        ;BCNTR() = 08H 
      &lt;--RECEIVE ONE BYTE:SIZEBYTE<BR>    MOV A,#93H<BR>    MOV 
      R0,#00H<BR>    MOVX @R0,A        ;DATA() = 93H --&gt;SELECT INSTRACTION 
      CODE<BR>    MOV A,#70H<BR>    MOV R0,#00H<BR>    MOVX @R0,A        
      ;IMPORTANT: 
      DATA()=70H--BITCOUNT=70Hbits<BR>;-----------------------------------------------------------------------<BR>    MOV 
      R7,#04H       ;R7 IS A COUNTER,FOR WRITING 04H BYTES TO DATA<BR>    MOV 
      B,#00H<BR>    MOV R0,#00H<BR>    MOV R1,#40H       ;THE FIRST ADDRESS OF 
      SNR. 40H---43H<BR>SELECT_WRT_LOOP:<BR>    MOV A,@R1<BR>    MOVX 
      @R0,A<BR>    XRL B,A<BR>    INC R1<BR>    DJNZ R7, 
      SELECT_WRT_LOOP<BR>    MOV A,B<BR>    MOVX @R0,A       ;SEND THE 5th 
      CHK_SUM_VALUE<BR>    MOV A,#0AH<BR>    MOV R0,#06H<BR>    MOVX @R0,A       
      ;TOC() = 0AH<BR>SEL_RD_STACON_AGAIN:<BR>    MOV R0,#01H<BR>    MOVX 
      A,@R0       ;READ STACON() ==&gt; A<BR>    MOV B,A<BR>    JNB ACC.7, 
      SEL_RD_STACON_AGAIN ;IF DV=1? IF NOT,REPEAT READ <BR>    MOV 
      B,A<BR>;------------- NOW DV=1, DATA VALID 
      ----------------------<BR>    MOV A,#00H<BR>    MOV R0,#06H<BR>    MOVX 
      @R0,A       ;TOC() = 00H<BR>;------------- NOW JUDGE ANY DATA ERRORS 
      --------------------<BR>    MOV A,B<BR>    JB ACC.6, SEL_TE_ERR  ;TE 
      ERR<BR>    JB ACC.5, SEL_PE_ERR  ;PE ERR<BR>    JB ACC.3, SEL_BE_ERR  ;BE 
      ERR<BR>    JB ACC.4, SEL_CE_ERR  ;CE ERR<BR>;------------- NOW NO 
      ERRORS,READING CARD SIZE -----------------<BR>    MOV R0,#00H<BR>    MOVX 
      A, @R0      ;READ SIZE: DATA() ==&gt; A<BR>    MOV 44H,A       ;STORE SIZE 
      IN 44H<BR>    ACALL SEND_TO_BUF01  ;SEND SIZE TO DISP_BUF_LOW<BR>    SETB 
      P2.6        ;OK LAMP NOW WORKING P2.3<BR>    ACALL SPK_ON      ;if ok then 
      spk on</P>
      <P>    MOV B,#00H       ;SELECT OPERATION'S OK RETURN_VALUE=00H<BR>    MOV 
      A,B        ;READY FOR DISSPLAY IN DISP_BUF_HIGH(23)<BR>    LJMP 
      SEL_OK_EXIT    ;IF OK, EXIT SELECT OPERATION<BR>;-------------------ERRORS 
      PROCESS-------------------------------    <BR>SEL_TE_ERR:<BR>    MOV 
      B,#01H       <BR>    LJMP SEL_ERR_EXIT<BR>SEL_PE_ERR:<BR>    MOV 
      B,#05H       <BR>    LJMP SEL_ERR_EXIT<BR>SEL_CE_ERR:<BR>    MOV 
      B,#02H       <BR>    LJMP SEL_ERR_EXIT<BR>SEL_BE_ERR:<BR>    MOV 
      R7,#0AH<BR>    ACALL D500US<BR>    MOV B,#0BH<BR>    LJMP 
      SEL_ERR_EXIT<BR>;----------------------EXIT------------------------<BR>SEL_ERR_EXIT:<BR>    MOV 
      A,B<BR>SEL_OK_EXIT:<BR>    ACALL SEND_TO_BUF23  ;SEND ERR_RETURN_VALE TO 
      DISP_BUF_HIGH<BR>    RET<BR>;------------------------ End of MCM 
      AntiCollision Operation -----------------</P>
      <P><BR>通过以上对MCM的几个指令的软件设计,读者应该能有较大的信心,将MCM其他的一些指令也能设计成功。以供主控程序随时调用。</P>
      <P>(二). 对MCM200(SB201)组成的DEMO电路的主控应用程序设计和开发</P>
      <P>1. 硬件电路请参照所附的DEMO电路图纸</P>
      <P>2. 软件清单如下</P>
      <P>程序清单如下:<BR>;====================================================================<BR>;         WRITTEN 
      BY ROCKY, 
      OCT'1999<BR>;====================================================================<BR>    ORG 
      0000H<BR>start:<BR>    LJMP MAIN<BR>    NOP<BR>    
      NOP<BR>;--------------------------<BR>    ;ORG 001BH<BR>    ;LJMP 
      0500H<BR>;--------------------------<BR>    ORG 0080H<BR>MAIN:<BR>    MOV 
      SP,#0E1H<BR>    NOP<BR>    CLR EA         ;CLOSE CPU 
      INT<BR>    CLR P2.5        ;RESET MCM (-RST=0)<BR>    SETB P2.4        
      ;RESET MCM (-CS =1)<BR>    NOP<BR>    ACALL INIT_DISP_BUF   <BR>    ACALL 
      DISPLAY<BR>    ACALL H_DISPLAY<BR>    NOP<BR>    CLR P2.6        ;CLOSE OK 
      LAMP <BR>    setb p2.0        ;disenable KB function<BR>    mov 
      p1,#11110000b    ;init P1 port:P1.0~~P1.3--&gt;out 
      (line)<BR>                ;       P1.4~~P1.7--&gt;in (colum)<BR>    SETB 
      P2.5    ;RESET MCM (-RST=1)<BR>    CLR P2.4    ;SELECT MCM 
      (-CS=0)<BR>    ACALL D500MS<BR>    MOV A,#80H   ;SOFTWARE_RESET 
      MCM<BR>    MOV R0,#01H<BR>    MOVX @R0,A<BR>    ACALL D500MS<BR>    ACALL 
      SPK_ON      ;SPEAK ON<BR>    ;MOV 21H,#01H       ;THE 
      kb_TEST_CHAR<BR>KB_LOOKING:<BR>    LCALL KB_SCAN<BR>    ACALL 
      DISPLAY<BR>    ACALL H_DISPLAY<BR>    CLR P2.6        ;CLOSE OK 
      LAMP P2.3<BR>    AJMP KB_LOOKING<BR>KB_ALL_EXIT:<BR>    MOV R2,#00H       
      ;SET RQT_STD<BR>    SETB P2.5    ;RESET: MCM ON (-RST=1) P1.4<BR>    
      CLR P2.4    ;SELECT MCM ON 
      (-CS=0) P1.5<BR>;------------------------------------<BR>REPEAT:<BR>    SETB 
      P2.5    ;RESET: MCM ON (-RST=1)P1.4<BR>    CLR P2.4    ;SELECT MCM ON 
      (-CS=0) 
      P1.5<BR>;==================================================<BR>    ACALL 
      REQUEST  ;MCM REQUEST 
      OPERATION<BR>;==================================================<BR>    ACALL 
      DISPLAY<BR>    ACALL H_DISPLAY<BR>    ACALL D500MS<BR>    CLR 
      P2.6    ;CLEAR OKLAMP P2.3<BR>    ACALL INIT_DISP_BUF<BR>    ACALL 
      DISPLAY<BR>    ACALL 
      H_DISPLAY<BR>;=========================================================<BR>    ACALL 
      ANTICOLLISION  ;MCM ANTICOLLISION 
      OPERATION<BR>;=========================================================<BR>    ACALL 
      DISPLAY<BR>    ACALL H_DISPLAY<BR>    ACALL D500MS<BR>    CLR 
      P2.6    ;CLEAR OKLAMP  P2.3<BR>    ACALL INIT_DISP_BUF<BR>    ACALL 
      DISPLAY<BR>    ACALL 
      H_DISPLAY<BR>;=========================================================<BR>    ACALL 
      SELECT  ;MCM SELECT 
      OPERATION<BR>;=========================================================<BR>    ACALL 
      DISPLAY<BR>    ACALL H_DISPLAY<BR>    ACALL D500MS<BR>    CLR 
      P2.6    ;CLEAR OKLAMP  P2.3<BR>    ACALL INIT_DISP_BUF<BR>    ACALL 
      DISPLAY<BR>    ACALL H_DISPLAY<BR>         <BR>;+++++++++++++++++++++ set 
      up register/ram for load_key()++++++++++++++++++<BR>    mov 7FH,#0ABH      
      <BR>    MOV 7EH, #00H      ;(7EH) = 00H--&gt;SELECT 
      KEYSET0 (KS1=0;KS0=0)<BR>    MOV 7DH,#02H      ;(7DH): 1)SELECT KEYA or 
      KEYB<BR>                ;    2)SELECT sector_ADDRESS :0-15<BR>    MOV 
      7CH,#60H      ;(7CH) = 47H--&gt;TKey(1) FIRST 
      ADDRESS<BR>;=========================================================<BR>    ACALL 
      LOAD_KEY ;MCM LOAD_KEY 
      OPERATION<BR>;=========================================================<BR>(待续)<BR><BR><BR>来源: 
      《金卡工程》2000.10 <BR><BR></P>
      <P></P>
      <P>  <BR></P>
      <P align=right></P>
      <P align=right></P>
      <P align=right></P>
      <P align=right><A href="file:///E|/index/index.htm">返回首页</A> 
  </P></TD></TR></TBODY></TABLE><B></B></DIV></BODY></HTML>

⌨️ 快捷键说明

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