📄 sle4442.lst
字号:
0271 F6 +1 388 MOV @R0,a ;把接收到的一个字节保存起来
0272 08 +1 389 INC R0 ;接收缓冲区地址加1
0273 DAE5 +1 390 DJNZ R2,rescm2
0275 C291 +1 391 CLR CLK
0277 1202C9 +1 392 LCALL Delay5uS
027A 22 +1 393 RET
+1 394
+1 395
+1 396 ;**************************************************
+1 397 ;函数名称: Anrst
+1 398 ;功能描述: 读加密存储器的四个字节
+1 399 ;入口参数:无
+1 400 ;返回数据: A --- 0 复位成功
+1 401 ; A --- 1 复位失败
+1 402 ; 复位信号的内容输出到EC所指的4字节缓冲区中
+1 403 ;***************************************************
027B +1 404 Anrst:
027B 7850 +1 405 MOV R0,#EC
027D D292 +1 406 SETB RST ;产生复位响应时序
027F 1202C9 +1 407 LCALL Delay5uS
0282 D291 +1 408 SETB CLK
0284 1202C4 +1 409 LCALL Delay10uS
0287 C291 +1 410 CLR CLK
0289 1202C9 +1 411 LCALL Delay5uS
028C C292 +1 412 CLR RST
+1 413 ;接受复位响应值
028E 7A04 +1 414 MOV R2,#4
0290 7B08 +1 415 anrst1: MOV R3,#8
0292 1202C4 +1 416 anrst2: LCALL Delay10uS
0295 D291 +1 417 SETB CLK
0297 D290 +1 418 SETB IO
0299 00 +1 419 NOP
029A 00 +1 420 NOP
029B A290 +1 421 MOV C,IO
029D 13 +1 422 RRC A
029E 1202C9 +1 423 LCALL Delay5uS
02A1 C291 +1 424 CLR CLK
02A3 DBED +1 425 DJNZ R3,anrst2 ;判断是否接收了一个字节
02A5 F6 +1 426 MOV @R0,A
02A6 08 +1 427 INC R0
02A7 DAE7 +1 428 DJNZ R2,anrst1 ;判断是否接收了4个字节
+1 429
+1 430 ;**************************************************
+1 431 ;以下代码根据复位响应返回值判断卡的合法性及有效性
+1 432 ;**************************************************
02A9 7850 +1 433 MOV R0,#EC
02AB E6 +1 434 MOV A,@R0
02AC B4A212 +1 435 CJNE A,#Idetify1,CardErr
02AF 08 +1 436 INC R0
02B0 E6 +1 437 MOV A,@R0
02B1 B4130D +1 438 CJNE A,#Idetify2,CardErr
02B4 08 +1 439 INC R0
02B5 E6 +1 440 MOV A,@R0
02B6 B41008 +1 441 CJNE A,#Idetify3,CardErr
02B9 08 +1 442 INC R0
02BA E6 +1 443 MOV A,@R0
02BB B49103 +1 444 CJNE A,#Idetify4,CardErr
02BE 7400 +1 445 MOV A,#00H ;复位成功
02C0 22 +1 446 RET
02C1 7401 +1 447 CardErr: MOV A,#01H ;复位失败,为坏卡
02C3 22 +1 448 RET
+1 449
+1 450 ;**************************************************
A51 MACRO ASSEMBLER SLE4442 09/17/2004 11:09:32 PAGE 8
+1 451 ;函数名称: Delay10uS
+1 452 ;功能描述: 延时10Us子程序
+1 453 ;入口参数:无
+1 454 ;返回数据: 无
+1 455 ;***************************************************
02C4 +1 456 Delay10uS: ;延时10Us
02C4 7F06 +1 457 MOV R7,#06H
02C6 DFFE +1 458 DJNZ R7,$
02C8 22 +1 459 RET
+1 460
+1 461 ;**************************************************
+1 462 ;函数名称: Delay5uS
+1 463 ;功能描述: 延时5Us子程序
+1 464 ;入口参数:无
+1 465 ;返回数据: 无
+1 466 ;***************************************************
02C9 +1 467 Delay5uS: ;延时5Us
02C9 7F02 +1 468 MOV R7,#02H
02CB DFFE +1 469 DJNZ R7,$
02CD 22 +1 470 RET
+1 471
472
473 END
;下面为校验密钥、写卡、读卡程序
;Write_Read_Card:
; MOV R0,#PSWD ;密码缓冲区首址
; MOV @R0,#0x11
; INC R0
; MOV @R0,#0x22
; INC R0
; MOV @R0,#0x33 ;输入密码:填充密码缓冲区
;
; LCALL CheckPassword ;校验密码
; JNZ WRExit ;如果校验不成功,退出
; MOV R0,#WriteBuf ;写缓冲区首址
; MOV @R0,#0x55
; INC R0;
; MOV @R0,#0x66 ;填充写缓冲区
; MOV ByteNum,#0x02 ;写二个字节
; MOV StartAdr,#0x20 ;写起始地址为0x20
; LCALL WriteCard ;写卡
; JNZ WRExit ;如果写不成功,退出
; MOV ByteNum,#0x02 ;读二个字节
; MOV StartAdr,#0x20 ;读起始地址0x20
; LCALL ReadCard ;读卡
; JZ Write_Read_Card ;请在此设置断点,观察读缓冲区内容.
;如果读成功,才可以执行这个循环.
;WRExit:
; MOV A,#00 ;请在此设置断点
;$INCLUDE(SLE4442.INC) ;包含SLE4442驱动程序
;END
A51 MACRO ASSEMBLER SLE4442 09/17/2004 11:09:32 PAGE 9
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ANRST. . . . . . . C ADDR 027BH A
ANRST1 . . . . . . C ADDR 0290H A
ANRST2 . . . . . . C ADDR 0292H A
BREAK. . . . . . . C ADDR 021AH A
BYTENUM. . . . . . N NUMB 0057H A
CARDERR. . . . . . C ADDR 02C1H A
CHECKEXIT. . . . . C ADDR 01A8H A
CHECKPASSWORD. . . C ADDR 015EH A
CHKPSW1. . . . . . C ADDR 0177H A
CHKPSW2. . . . . . C ADDR 0180H A
CHKPSWLOOP . . . . C ADDR 018CH A
CLK. . . . . . . . B ADDR 0090H.1 A
DELAY10US. . . . . C ADDR 02C4H A
DELAY5US . . . . . C ADDR 02C9H A
EC . . . . . . . . N NUMB 0050H A
HAVEONECHANCE. . . C ADDR 01AFH A
IDETIFY1 . . . . . N NUMB 00A2H A
IDETIFY2 . . . . . N NUMB 0013H A
IDETIFY3 . . . . . N NUMB 0010H A
IDETIFY4 . . . . . N NUMB 0091H A
IO . . . . . . . . B ADDR 0090H.0 A
ISBADCARD. . . . . C ADDR 01ACH A
IS_FAIL. . . . . . C ADDR 01A9H A
MAIN . . . . . . . C ADDR 0100H A
P1 . . . . . . . . D ADDR 0090H A
PSWD . . . . . . . N NUMB 0054H A
READBUF. . . . . . N NUMB 0030H A
READCARD . . . . . C ADDR 010EH A
READEXIT . . . . . C ADDR 011EH A
READPROTECT. . . . C ADDR 0136H A
READ_INSERT_CARD . C ADDR 0103H A
REMM . . . . . . . C ADDR 01F5H A
REPM . . . . . . . C ADDR 01F1H A
RESCM. . . . . . . C ADDR 0251H A
RESCM1 . . . . . . C ADDR 025CH A
RESCM2 . . . . . . C ADDR 025AH A
RMBYTE . . . . . . C ADDR 01FDH A
RMLOOP . . . . . . C ADDR 01FAH A
RMSTART. . . . . . C ADDR 01F7H A
RPEXIT . . . . . . C ADDR 0146H A
RST. . . . . . . . B ADDR 0090H.2 A
SENDBYTE . . . . . C ADDR 01DFH A
SENDCOMM . . . . . C ADDR 01B2H A
SENDLOOP . . . . . C ADDR 01E1H A
SP . . . . . . . . D ADDR 0081H A
STARTADR . . . . . N NUMB 0058H A
VERDA. . . . . . . C ADDR 0227H A
WPEXIT . . . . . . C ADDR 015DH A
WPLOOP . . . . . . C ADDR 0152H A
WRITEBUF . . . . . N NUMB 0040H A
WRITECARD. . . . . C ADDR 011FH A
WRITEEXIT. . . . . C ADDR 0135H A
WRITELOOP. . . . . C ADDR 012AH A
WRITEPROTECT . . . C ADDR 0147H A
WRMM . . . . . . . C ADDR 0233H A
WRMOK. . . . . . . C ADDR 0250H A
WRMOPTION. . . . . C ADDR 0238H A
WRPM . . . . . . . C ADDR 022FH A
WRSCM. . . . . . . C ADDR 022BH A
WRSTART. . . . . . C ADDR 0235H A
A51 MACRO ASSEMBLER SLE4442 09/17/2004 11:09:32 PAGE 10
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -