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

📄 sle4442.lst

📁 单片机用TDS-ICE仿真器的试验程序。
💻 LST
📖 第 1 页 / 共 3 页
字号:
0188 7D01       +1   188               MOV     R5,#01H             ;卡内密码首址
018A 7854       +1   189               MOV     R0,#PSWD            ;参考数据首址
018C            +1   190     ChkPswLoop:  
018C E6         +1   191               MOV     A,@R0
018D FE         +1   192               MOV     R6,A
018E 120227     +1   193               LCALL   Verda               ;开始核对密码
0191 08         +1   194               INC     R0                  
0192 0D         +1   195               INC     R5                  
0193 DAF7       +1   196               DJNZ    R2, ChkPswLoop
0195 7D00       +1   197               MOV     R5,#00H             
0197 7EFF       +1   198               MOV     R6,#0FFH
0199 12022B     +1   199               LCALL   Wrscm               ;擦除错误计数器
019C 120251     +1   200               LCALL   Rescm               ;读错误计数器以检查核对是否成功
019F E550       +1   201               MOV     A,EC
01A1 5407       +1   202               ANL     A,#07H
01A3 B40703     +1   203               CJNE    A,#07H,IS_FAIL      ;错误计数器不能擦除,核对密码失败
01A6 7400       +1   204               MOV     A,#00H              ;错误计数器正确擦除,核对密码成功
01A8            +1   205     CheckExit:
01A8 22         +1   206               RET   
                +1   207     
                +1   208                       
01A9            +1   209     IS_FAIL:                               ;核对密码失败
01A9 7402       +1   210               MOV    A,#02H
01AB 22         +1   211               RET
01AC            +1   212     IsBadCard:
01AC 7403       +1   213               MOV    A,#03H                ;卡已报废
01AE 22         +1   214               RET
01AF            +1   215     HaveOneChance:
01AF 7404       +1   216               MOV    A,#04H                ;只剩下一次校验机会
01B1 22         +1   217               RET
                +1   218     
                +1   219     
                +1   220     ;**************************************************
                +1   221     ;函数名称: SendComm
                +1   222     ;功能描述: 向卡发送命令,一个命令的长度为3个字节
                +1   223     ;入口参数:R4 --- 控制字
                +1   224     ;          R5 --- 地址字
                +1   225     ;          R6 --- 数据字
                +1   226     ;返回参数: 无
                +1   227     ;***************************************************
01B2            +1   228     SendComm:
01B2 D290       +1   229               SETB    IO                     ;产生开始状态
01B4 1202C4     +1   230               LCALL   Delay10uS            
01B7 D291       +1   231               SETB    CLK
01B9 1202C9     +1   232               LCALL   Delay5uS              
01BC C290       +1   233               CLR     IO                    
01BE 1202C9     +1   234               LCALL   Delay5uS              
01C1 C291       +1   235               CLR     CLK
                +1   236                                              
01C3 EC         +1   237               MOV      A,R4         
01C4 1201DF     +1   238               LCALL    SendByte              ;发送控制字
01C7 ED         +1   239               MOV      A,R5
01C8 1201DF     +1   240               LCALL    SendByte              ;发送地址字
01CB EE         +1   241               MOV      A,R6
01CC 1201DF     +1   242               LCALL    SendByte              ;发送数据字
                +1   243                                              
01CF C290       +1   244               CLR      IO                    ;产生停止状态                   
01D1 1202C9     +1   245               LCALL    Delay5uS
01D4 D291       +1   246               SETB     CLK
01D6 1202C9     +1   247               LCALL    Delay5uS              
01D9 D290       +1   248               SETB     IO                    
01DB 1202C9     +1   249               LCALL    Delay5uS    
01DE 22         +1   250               RET
                +1   251     
                +1   252     
A51 MACRO ASSEMBLER  SLE4442                                                              09/17/2004 11:09:32 PAGE     5

                +1   253     ;**************************************************
                +1   254     ;函数名称: SendByte
                +1   255     ;功能描述: 向卡发送一个字节
                +1   256     ;入口参数:A --- 要发送的字节
                +1   257     ;返回参数: 无
                +1   258     ;***************************************************
01DF            +1   259     SendByte:                                 ;发送一个字节数据 
01DF 7B08       +1   260               MOV       R3,#8                 ;一个字节有8 bits         
01E1            +1   261     SendLoop: 
01E1 13         +1   262               RRC       A                     
01E2 9290       +1   263               MOV       IO,C                  ;每个循环发送1 bit
01E4 1202C4     +1   264               LCALL     Delay10uS             
01E7 D291       +1   265               SETB      CLK
01E9 1202C4     +1   266               LCALL     Delay10uS             
01EC C291       +1   267               CLR       CLK
01EE DBF1       +1   268               DJNZ      R3,SendLoop
01F0 22         +1   269               RET
                +1   270     
                +1   271     
                +1   272     ;**************************************************
                +1   273     ;函数名称: Repm  和 Remm
                +1   274     ;功能描述: 从保护存储器 或 从主存储器中读数据块 
                +1   275     ;入口参数:R2 --- 要求读的字节数
                +1   276     ;          R5 ---   保护存储器的起始地址(0 - 3)
                +1   277     ;                 或  主存储器的起始地址(0 - 255)
                +1   278     ;返回数据: 从R0所指的数据缓冲区中输出 
                +1   279     ;***************************************************
01F1            +1   280     Repm:                                ;设置读保护存储器命令
01F1 7C34       +1   281               MOV      R4,#34H              
01F3 8002       +1   282               SJMP     RmStart           
01F5            +1   283     Remm:                                ;设置读主存储器命令
01F5 7C30       +1   284               MOV      R4,#30H            
01F7            +1   285     RmStart:      
01F7 1201B2     +1   286               LCALL    SendComm          ;发送命令  
01FA            +1   287     RmLoop:  
01FA E4         +1   288               CLR      A
01FB 7B08       +1   289               MOV      R3,#8                   
01FD            +1   290     RmByte:
01FD C291       +1   291               CLR      CLK
01FF 00         +1   292               NOP                        
0200 00         +1   293               NOP
0201 00         +1   294               NOP
0202 00         +1   295               NOP
0203 D290       +1   296               SETB     IO                  
0205 00         +1   297               NOP
0206 A290       +1   298               MOV      C,IO                ;接收1 bit
0208 13         +1   299               RRC      A
0209 00         +1   300               NOP
020A 00         +1   301               NOP
020B D291       +1   302               SETB     CLK
020D 1202C4     +1   303               LCALL    Delay10uS           
0210 DBEB       +1   304               DJNZ     R3, RmByte          ;判断是否接收完8 bits    
0212 F6         +1   305               MOV      @R0,A               ;接收的数据存入缓冲区中            
0213 08         +1   306               INC      R0
0214 DAE4       +1   307               DJNZ     R2, RmLoop          ;判断是否接收完指定的字节
0216 12021A     +1   308               LCALL    Break               ;中止操作
0219 22         +1   309               RET
                +1   310     
021A C291       +1   311     Break:    CLR      CLK                 ;中止操作
021C 1202C9     +1   312               LCALL    Delay5uS            
021F D292       +1   313               SETB     RST
0221 1202C9     +1   314               LCALL    Delay5uS           
0224 C292       +1   315               CLR      RST
0226 22         +1   316               RET
                +1   317     
                +1   318     ;**************************************************
A51 MACRO ASSEMBLER  SLE4442                                                              09/17/2004 11:09:32 PAGE     6

                +1   319     ;函数名称: Verda
                +1   320     ;功能描述: 输出数据模式的各种命令:
                +1   321     ;          Verda : 比较校验数据命令
                +1   322     ;          Wrscm : 修改加密存储器命令
                +1   323     ;          Wrpm:   修改保护存储器命令
                +1   324     ;          Wrmm:   修改  主存储器命令
                +1   325     ;入口参数:无
                +1   326     ;返回数据: 无
                +1   327     ;***************************************************
0227            +1   328     Verda:   
0227 7C33       +1   329               MOV        R4,#33H           ;设置比较校验数据命令
0229 800A       +1   330               SJMP       WrStart
022B            +1   331     Wrscm:  
022B 7C39       +1   332               MOV        R4,#39H           ;设置修改加密存储器命令
022D 8006       +1   333               SJMP       WrStart
022F            +1   334     Wrpm:   
022F 7C3C       +1   335               MOV        R4,#3CH           ;设置修改保护存储器命令
0231 8002       +1   336               SJMP       WrStart
0233            +1   337     Wrmm:    
0233 7C38       +1   338               MOV        R4,#38H           ;设置修改主存储器命令
0235            +1   339     WrStart:       
0235 1201B2     +1   340               LCALL      SendComm          
0238            +1   341     WrmOption:                             ;下面为一个处理过程
0238 C291       +1   342               CLR        CLK
023A 00         +1   343               NOP                      
023B 00         +1   344               NOP
023C 00         +1   345               NOP
023D 00         +1   346               NOP
023E D290       +1   347               SETB       IO                
0240 00         +1   348               NOP
0241 A290       +1   349               MOV        C,IO
0243 400B       +1   350               JC         WrmOK             ;如果 I/O 返回高状态,中止处理过程
0245 00         +1   351               NOP                     
0246 00         +1   352               NOP
0247 00         +1   353               NOP
0248 00         +1   354               NOP
0249 D291       +1   355               SETB       CLK
024B 1202C4     +1   356               LCALL      Delay10uS         
024E 80E8       +1   357               SJMP       WrmOption
0250            +1   358     WrmOK:  
0250 22         +1   359               RET
                +1   360     
                +1   361     
                +1   362     ;**************************************************
                +1   363     ;函数名称: Rescm
                +1   364     ;功能描述: 读加密存储器的四个字节
                +1   365     ;入口参数:无
                +1   366     ;返回数据: 加密存储器中的内容输出到EC所指的4字节缓冲区中
                +1   367     ;***************************************************
0251 7C31       +1   368     Rescm:    MOV     R4,#31H       ;设置读加密存储器命令
0253 1201B2     +1   369               LCALL   SendComm      ;发送读加密存储器命令
0256 7A04       +1   370               MOV     R2,#4         ;读4 个字节                     
0258 7850       +1   371               MOV     R0,#EC        ;接收缓冲区
025A            +1   372     rescm2:   
025A 7B08       +1   373               MOV     R3,#8         ;一个字节有8 bits,要接收8次                
025C C291       +1   374     rescm1:   CLR     CLK
025E 00         +1   375               NOP                         
025F 00         +1   376               NOP
0260 00         +1   377               NOP
0261 00         +1   378               NOP
0262 D290       +1   379               SETB    IO                  
0264 00         +1   380               NOP
0265 A290       +1   381               MOV     C,IO          ;接收1 bit
0267 13         +1   382               RRC     A
0268 00         +1   383               NOP
0269 00         +1   384               NOP
A51 MACRO ASSEMBLER  SLE4442                                                              09/17/2004 11:09:32 PAGE     7

026A D291       +1   385               SETB    CLK
026C 1202C4     +1   386               LCALL   Delay10uS           
026F DBEB       +1   387               DJNZ    R3,rescm1

⌨️ 快捷键说明

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