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

📄 untitled document.htm

📁 内附IC读卡器设计方案,该设计使用89C52和MCM200,里面有详细的设计过程及程序代码,相信有一定IC卡经验
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0064)http://www.flyring.com.cn/chinese/UploadFiles/20044216953538.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><FONT color=#0000ff><B>关于非接触式IC智能(射频)卡及其读写设备内核技术的研究与应用开发(连载8) <BR><BR>作者: 
上海华东磁记录电子公司 张敏 <BR></B></FONT></P>
<TABLE border=1 borderColor=#ff9900 width="80%">
  <TBODY>
  <TR>
    <TD align=left height=5176 vAlign=top>
      <P><BR><BR>(一). 
      对MCM200(SB201)操作指令的程序设计和开发<BR>  对MCM指令的说明:<BR>  MCU对MCM的控制是以MCU发出MCM的指令来达到的。MCU对MCM的控制事实上也就是对 
      Mifare 1 非接触式IC射频卡的控制。<BR>  MCM的指令主要有这样一些:Request std, Request all,  
      Anticollision, Select, Load_key, Authentication(Auth_1a,Auth_1b), Read, 
      Write, Increment, Decrement, Restore, Transfer, Halt 
      等等。其中比较重要的是前8条指令,以及Halt 停机指令等。因为它们可以完成MCU对Mifare 1 非接触式IC射频卡的很多应用场合的控制。例如 
      门禁控制系统(Door Access 
      System),高速公路不停车收费系统,停车场收费管理系统,公交/地铁非接触式IC智能射频卡的“刷卡”读写器(收费管理系统),机关/企业内部考勤管理系统,医疗保险管理系统,出租车收费管理系统,银行服务“一卡通”等等。<BR>  MCU对MCM的某一指令操作不是简单的一条指令所能完成的,必须有一个程序的序列来完成,其中有对MCM硬件内核寄存器的设置以及汇编语言软件上的判断和设置。例如对卡片进行读(READ)操作,则程序员必须对MCM内部的BCNTR寄存器,BCNTS寄存器,TOC寄存器,STACON寄存器等进行设置,同时还必须对地址进行设置,对每一个状态进行判别等等,对最终读得的数据还必须进行校验等等。就连一条最简单的停机(Halt)指令也必须首先对MCM内部的诸多寄存器进行设置,等等。不同的指令将设置不同的MCM内部寄存器以及应有不同的汇编语言程序序列。<BR>  1.对MCM200(SB201)“Request 
      std”和“ Request all”指令的汇编语言应用程序的设计<BR>  功能:调用该汇编语言子程序,将执行MCM “Request 
      std”或“ Request all”指令操作,读取Mifare 1 
      非接触式IC射频卡的TAGTYPE字节,建立与卡片的第一步必不可少的通信联系。</P>
      <P align=left>程序说明:<BR>  1.在以下的汇编语言程序中,如果要调用该MCM指令操作,则应首先设置MCU的R2的值: 
      R2=”00H”  执行Request std操作;<BR>R2=”01H”  执行Request 
      all操作;<BR>  在该指令程序中用到了一些其他的子程序分别为:<BR>D500US: 
      为500us的延时子程序;<BR>H_SEND_TO_BUF01:<BR>  DEMO电路中,将A寄存器中的数据送显示电路中的高四位中的第0,1位,以准备显示,地址为34H,35H;<BR>H_SEND_TO_BUF23:<BR>  DEMO电路中,将A寄存器中的数据送显示电路中的高四位中的第2,3位,以准备显示,地址为32H,33H;<BR>SEND_TO_BUF01:<BR>  DEMO电路中,将A寄存器中的数据送显示电路中的低四位中的第0,1位,以准备显示,地址为39H,3AH;<BR>SEND_TO_BUF23:<BR>  DEMO电路中,将A寄存器中的数据送显示电路中的低四位中的第2,3位,以准备显示,地址为37H,38H;<BR>DISPLAY:<BR>  DEMO电路中,显示8位数据中的低4位数据值。即将存储在37H至3AH显示内存中的低四位数据显示在LED上。<BR>H_DISPLAY:<BR>  DEMO电路中,显示8位数据中的高4位数据值。即将存储在31H至34H显示内存中的高四位数据显示在LED上。</P>
      <P 
      align=left>2.在以下的汇编语言程序中,读者可能会碰到一些寄存器变量,或其他应用子程序,这些可能是用于主控程序或是调试而用。特加以说明。</P>
      <P align=left>  程序清单如下:<BR>;======================== MCM REQUEST OPERATION 
      ===================<BR>request:<BR>REPEAT_RQT:<BR>_1_STACON:           ;设置MCM中的STACON寄存器为 
      : 0CH<BR>    MOV A,#0CH       ;设置A寄存器 = 0CH<BR>    MOV R0,#01H       
      ;STACON 寄存器地址为01H<BR>    MOVX 
      @R0,A       ;将A寄存器内容送入STACON寄存器中<BR>_2_BAUDRATE: 
      ;设置MCM中的BAUDRATE寄存器为:0EH<BR>    MOV A,#0EH<BR>    MOV R0,#05H<BR>    MOVX 
      @R0,A<BR>_3_ENABLE:            ;设置MCM中的ENABLE寄存器为:0C0H<BR>    MOV 
      A,#0C0H<BR>    MOV R0,#02H<BR>    MOVX @R0,A<BR>_4_MODE:  
      ;设置MCM中的MODE寄存器为:0C6H<BR>    MOV A,#0D6H 
      ;(如果采用SB201,则MODE寄存器应为:0D6H)<BR>    MOV R0,#07H<BR>    MOVX 
      @R0,A<BR>_5_STACON_AGAIN:<BR>    MOV A,#0CH<BR>    MOV R0,#01H<BR>    MOVX 
      @R0,A<BR>_6_RCODE:<BR>    MOV A,#02H<BR>    MOV R0,#0EH<BR>    MOVX 
      @R0,A<BR>_7_BCNTS:<BR>    MOV A,#07H<BR>    MOV R0,#03H<BR>    MOVX 
      @R0,A<BR>_8_BCNTR:<BR>    MOV A,#10H<BR>    MOV R0,#04H<BR>    MOVX 
      @R0,A<BR>;----------------------------------------------------------------    <BR>JUDG_RQT_STD_OR_ALL:     ;根据R2值, 
      判断是执行Request std操作<BR>    MOV A,R2         ;还是Request all操作<BR>    XRL 
      A,#01H<BR>    JNZ 
      RQT_STD<BR>;----------------------------------------------------------------    <BR>RQT_ALL:<BR>    MOV 
      A,#52H<BR>    AJMP _11_RQT_MCM<BR>RQT_STD:<BR>    MOV 
      A,#26H<BR>_11_RQT_MCM:<BR>    MOV R0,#00H<BR>    MOVX 
      @R0,A<BR>_12_TOC:<BR>    MOV A, #0AH<BR>    MOV R0,#06H<BR>    MOVX 
      @R0,A       ;TOC = 
      0AH<BR>;----------------------------------------------------------------    <BR>RD_STACON: <BR>    MOV 
      R0,#01H<BR>    MOVX 
      A,@R0       ;READ STACON()<BR>;================================================================<BR>JUDG_DV_BIT:<BR>    JNB 
      ACC.7,RD_STACON   
      ; RD_STACON<BR>;================================================================<BR>    mov 
      r7,a        ;protect A = 
      stacon()<BR>;================================================================<BR>    MOV 
      A, #00H<BR>    MOV R0,#06H<BR>    MOVX 
      @R0,A       ;TOC=00H<BR>;================================================================<BR>    mov 
      a,r7        ;return stacon() value to A<BR>;=================       ;for 
      BE and TE error-flag<BR>    ACALL H_SEND_TO_BUF23  ;DISPLAY R7XX ---&gt; 
      R7 = 
      STACON()<BR>;================================================================<BR>_13_JUDG_ERR:<BR>    JB 
      ACC.6,TE_ERR     ; TE_ERR<BR>    JB ACC.3,BE_ERR     ; 
      BE_ERR<BR>;================================================================<BR>    MOV 
      R0,#00H       ;READ_TAGTYPE_0<BR>    MOVX A,@R0</P>
      <P align=left>    MOV 45H,A<BR>    ACALL SEND_TO_BUF01   ;SEND TAGTYPE 0 
      TO 
      DISP_BUF_LOW<BR>;----------------------------------------------------------------    <BR>    mov 
      r0,#00h<BR>    MOVX A,@R0       ;READ_TAGTYPE_1</P>
      <P align=left>    MOV 46H,A<BR>    ACALL SEND_TO_BUF23   ;SEND TAGETYPE 1 
      TO 
      DISP_BUF_HIGH<BR>;----------------------------------------------------------------    <BR>    MOV 
      B,#00H       ;00H is OK 
      flag<BR>;================================================================<BR>    mov 
      a,b<BR>    ACALL 
      H_SEND_TO_BUF01  ;XXBB<BR>;================================================================<BR>    SETB 
      P2.6        ;OK LAMP NOW WORKING <BR>    mov a,#00h<BR>    ACALL 
      SPK_ON      ;if ok then spk on<BR>    LJMP request_exit    ;exit and 
      RET<BR>;----------------------------------------------------------------    <BR>TE_ERR: 
      MOV B,#01        ;TE error flag is 01H<BR>    MOV R6,B            </P>

⌨️ 快捷键说明

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