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

📄 sle4442.lst

📁 单片机用TDS-ICE仿真器的试验程序。
💻 LST
📖 第 1 页 / 共 3 页
字号:
A51 MACRO ASSEMBLER  SLE4442                                                              09/17/2004 11:09:32 PAGE     1


MACRO ASSEMBLER A51 V7.09
OBJECT MODULE PLACED IN SLE4442.OBJ
ASSEMBLER INVOKED BY: C:\KEIL\C51\BIN\A51.EXE SLE4442.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ;This is the program for SLE4442 IC_Card.
                       2     
                       3     ;注意:单片机的晶振频率选用11.0592MHZ
                       4     ;各变量的定义请见SLE4442.INC文件,并注意读缓冲区与写缓冲区的大小.
                       5     
0000                   6             ORG     0000H
0000 2100              7             AJMP    MAIN
                       8             
0100                   9             ORG     0100H
0100                  10     MAIN:
0100 758160           11             MOV     SP,#60H                 ;设置栈底
                      12     
0103                  13     Read_Insert_Card:
                      14     
0103 755708           15             MOV ByteNum,#08H                
0106 755800           16             MOV StartAdr,#00H               ;从主存储区的0地址读8个字节
                      17     
0109 12010E           18             LCALL   ReadCard
                      19     
010C 80F5             20             JMP Read_Insert_Card            ;请在此设置断点,观察读缓冲区内容
                      21     
                      22     ;$include (SLE4442.INC) ;包含SLE4442驱动程序 
                +1    23     ;******************************************************************************************
                             **
                +1    24     ;                    SLE4442 通用读写模块使用说明                            
                +1    25     ;    ReadCard 读出从StartAdr开始的ByteNum字节,结果存放于ReadBuf中,读出正确,ACC中返回#0,
                +1    26     ;返回#01表示无效卡或者卡损坏。
                +1    27     ;    WriteCard从StartAdr开始写入ByteNum字节,待写入数据存放于WriteBuf中,写入正确ACC中返回#0,
                +1    28     ;返回#01表示无效卡或者卡损坏。
                +1    29     ;    ReadCard和WriteCard的ByteNum的最大值为16, 见下面的变量定义
                +1    30     ;    写卡之前一定要调用CheckPassword核对密码,密码存放于PSWD开始的三个单元,ACC中返回#0表示核
                             对正确,
                +1    31     ;#01表示无效卡或者卡损坏,#02表示密码错,#03H表示卡已被锁闭,#04H表示该卡还有一次试验机会。
                +1    32     ;    核对密码完成后,EC开始的4个单元返回错误计数值及密码。
                +1    33     ;    若要对保护存储区进行写保护,请调用WriteProtect子程序,参数及返回值与WriteCard相同。
                +1    34     ;读保护存储器调用ReadProtect,参数及返回值同ReadCard。                                     
                                  
                +1    35     ;******************************************************************************************
                             **
                +1    36     
                +1    37      
                +1    38     ;*************IC卡引脚位定义*************************
  0092          +1    39     RST       BIT    P1.2       ;复位
  0090          +1    40     IO        BIT    P1.0       ;数据
  0091          +1    41     CLK       BIT    P1.1       ;脉冲
                +1    42     
                +1    43     ;*******************变量定义*********************
                +1    44     ;Variabal
  0030          +1    45     ReadBuf   EQU    30H        ;读缓冲区,16个字节  
  0040          +1    46     WriteBuf  EQU    40H        ;写缓冲区,16个字节
  0050          +1    47     EC        EQU    50H        ;4字节临时单元
  0054          +1    48     PSWD      EQU    54H        ;3字节密码单元
  0057          +1    49     ByteNum   EQU    57H        ;读写的字节数
  0058          +1    50     StartAdr  EQU    58H        ;读写时的起始地址
                +1    51     
                +1    52     ;*************IC卡常数***************************
  00A2          +1    53     Idetify1        EQU     0A2H     ;此处为IC卡保护区00~03单元的值,用于识别卡
  0013          +1    54     Idetify2        EQU     13H
A51 MACRO ASSEMBLER  SLE4442                                                              09/17/2004 11:09:32 PAGE     2

  0010          +1    55     Idetify3        EQU     10H
  0091          +1    56     Idetify4        EQU     91H     
                +1    57     ;************************************************
                +1    58     
                +1    59     ;****************************************
                +1    60     ;函数名称: ReadCard
                +1    61     ;功能描述: 从主存储器中读出数据块
                +1    62     ;入口参数:RecBuf   --- 接收缓冲区地址
                +1    63     ;          ByteNum  --- 要求读的字节数
                +1    64     ;          StartAdr --- 主存储器的起始地址
                +1    65     ;返回参数: A --- 为0读成功
                +1    66     ;          A --- 表示无效卡或者卡损坏
                +1    67     ;*****************************************
010E 12027B     +1    68     ReadCard: LCALL Anrst
0111 700B       +1    69               JNZ   ReadExit        ;复位不成功,退出                
0113 7830       +1    70               MOV   R0,#ReadBuf     ;接收缓冲区地址
0115 AA57       +1    71               MOV   R2,ByteNum      
0117 AD58       +1    72               MOV   R5,StartAdr     
0119 1201F5     +1    73               LCALL  Remm           ;调用读主存储器子程序
011C 7400       +1    74               MOV   A,#00H 
011E 22         +1    75     ReadExit: RET
                +1    76     
                +1    77     ;*********************************************
                +1    78     ;函数名称: WriteCard
                +1    79     ;功能描述: 向主存储器中写入数据块
                +1    80     ;入口参数:WriteBuf --- 发送缓冲区地址
                +1    81     ;          ByteNum  --- 要写入的字节数
                +1    82     ;          StartAdr --- 写主存储器的起始地址
                +1    83     ;返回参数: A --- 为0写成功
                +1    84     ;          A --- 表示无效卡或者卡损坏
                +1    85     ;*********************************************
011F            +1    86     WriteCard: 
011F 12027B     +1    87                LCALL  Anrst
0122 7011       +1    88                JNZ    WriteExit 
0124 7840       +1    89                MOV    R0,#WriteBuf
0126 AA57       +1    90                MOV    R2,ByteNum
0128 AD58       +1    91                MOV    R5,StartAdr   ;给出各个入口参数
012A            +1    92     WriteLoop:      
012A E6         +1    93                MOV    A,@R0
012B FE         +1    94                MOV    R6,A
012C 120233     +1    95                LCALL  Wrmm          ;写入一个字节
012F 08         +1    96                INC    R0
0130 0D         +1    97                INC    R5
0131 DAF7       +1    98                DJNZ   R2,WriteLoop  ;判断是否写入了指定的字节数
0133 7400       +1    99                MOV    A,#00H        ;读成功,返回0
0135            +1   100     WriteExit:
0135 22         +1   101                RET
                +1   102     
                +1   103     ;*******************************************************
                +1   104     ;函数名称: ReadProtect
                +1   105     ;功能描述: 从保护存储器中读出数据块
                +1   106     ;入口参数:RecBuf   --- 接收缓冲区地址
                +1   107     ;          ByteNum  --- 要求读的字节数(取值1 - 4)
                +1   108     ;          StartAdr --- 保护存储器的起始地址(取值0 - 3)
                +1   109     ;返回参数: A --- 为0读成功
                +1   110     ;          A --- 表示无效卡或者卡损坏
                +1   111     ;*******************************************************
0136            +1   112     ReadProtect:
0136 12027B     +1   113                 LCALL Anrst
0139 700B       +1   114                 JNZ   RpExit       
                +1   115                  
013B 7830       +1   116                 MOV   R0,#ReadBuf
013D AA57       +1   117                 MOV   R2,ByteNum
013F AD58       +1   118                 MOV   R5,StartAdr   ;给出各个入口参数
0141 1201F1     +1   119                 LCALL Repm          ;读保护存储器
0144 7400       +1   120                 MOV   A,#00H        ;读成功,返回0
A51 MACRO ASSEMBLER  SLE4442                                                              09/17/2004 11:09:32 PAGE     3

0146            +1   121     RpExit: 
0146 22         +1   122                 RET
                +1   123     
                +1   124     ;**********************************************
                +1   125     ;函数名称: WriteProtect
                +1   126     ;功能描述: 保护保护数据区(32字节)中的数据块,
                +1   127     ;          写入的数据必须与原数据相等
                +1   128     ;入口参数:WriteBuf --- 发送缓冲区地址
                +1   129     ;          ByteNum  --- 要写入的字节数
                +1   130     ;          StartAdr --- 写主存储器的起始地址
                +1   131     ;返回参数: A --- 为0写成功
                +1   132     ;          A --- 表示无效卡或者卡损坏
                +1   133     ;***********************************************
0147            +1   134     WriteProtect: 
0147 12027B     +1   135                  LCALL  Anrst
014A 7011       +1   136                  JNZ    WpExit 
014C 7840       +1   137                  MOV    R0,#WriteBuf
014E AA57       +1   138                  MOV    R2,ByteNum
0150 AD58       +1   139                  MOV    R5,StartAdr   ;给出各个入口参数
0152            +1   140     WpLoop:
0152 E6         +1   141            MOV    A,@R0
0153 FE         +1   142            MOV    R6,A
0154 12022F     +1   143            LCALL  Wrpm          ;写入一个字节
0157 08         +1   144            INC    R0            ;缓冲区地址加1
0158 0D         +1   145            INC    R5            ;写入地址加1
0159 DAF7       +1   146            DJNZ   R2,WpLoop
015B 7400       +1   147            MOV    A,#00H        ;写成功,返回0
015D            +1   148     WpExit:
015D 22         +1   149            RET
                +1   150     
                +1   151     
                +1   152     ;**************************************************
                +1   153     ;函数名称: CheckPassword
                +1   154     ;功能描述: 校验密钥
                +1   155     ;入口参数:PSWD  --- 密钥值,3个字节
                +1   156     ;返回参数: A --- 0: 核对密码成功
                +1   157     ;          A --- 1: 表示无效卡或者卡损坏
                +1   158     ;          A --- 2: 核对密码失败
                +1   159     ;          A --- 3: 卡已报废
                +1   160     ;          A --- 4: 只剩一定校验机会
                +1   161     ;注    意: 该程序只允许两次重试,以避免卡损坏   
                +1   162     ;***************************************************
015E            +1   163     CheckPassword:
015E 12027B     +1   164               LCALL   Anrst
0161 7045       +1   165               JNZ     CheckExit
                +1   166     
0163 120251     +1   167               LCALL   Rescm               ;读加密存储器,获取错误计数器值
0166 E550       +1   168               MOV     A,EC
0168 5407       +1   169               ANL     A,#07h
016A 6040       +1   170               JZ      IsBadCard           ;EC=0,卡已报废
016C 13         +1   171               RRC     A
016D 5008       +1   172               JNC     ChkPsw1
016F E550       +1   173               MOV     A,EC
0171 5406       +1   174               ANL     A,#06h              ;将EC的一位写"0"
0173 603A       +1   175               JZ      HaveOneChance       ;该卡还有一次试验机会
0175 8009       +1   176               SJMP    ChkPsw2
0177            +1   177     ChkPsw1:    
0177 13         +1   178               RRC     A
0178 5035       +1   179               JNC     HaveOneChance       ;该卡还有一次试验机会
017A E550       +1   180               MOV     A,EC
017C 5405       +1   181               ANL     A,#05H
017E 602F       +1   182               JZ      HaveOneChance       ;该卡还有一次试验机会 
0180            +1   183     ChkPsw2:  
0180 7D00       +1   184               MOV     R5,#00H
0182 FE         +1   185               MOV     R6,A                
0183 12022B     +1   186               LCALL   Wrscm               ;将EC写回卡
A51 MACRO ASSEMBLER  SLE4442                                                              09/17/2004 11:09:32 PAGE     4

0186 7A03       +1   187               MOV     R2,#3                

⌨️ 快捷键说明

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