📄 sle4442.lst
字号:
A51 MACRO ASSEMBLER SLE4442 09/16/2003 19:50:59 PAGE 1
MACRO ASSEMBLER A51 V7.01
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 TEST program for SLE4442 IC_Card.
2
3 ;***************变量定义*****************
0055 4 ErrCnt DATA 55H ;错误计数器
0056 5 STATUS DATA 56H ;状态寄存器,56H.1=1学习
0057 6 DeadLock DATA 57H ;死锁标志寄存器,57H.1=1死锁
7
8 ;***************口线定义*************************
0080 9 Dead BIT P0.0 ;死锁状态指示灯
0082 10 Invalid BIT P0.2 ;非法卡指示灯
0083 11 Lock BIT P0.3 ;锁指示灯
0084 12 Study BIT P0.4 ;学习状态指示灯
13 ;****************************************
4000 14 ORG 4000H
4000 2100 15 AJMP MAIN
16
4100 17 ORG 4100H
4100 18 MAIN:
4100 758160 19 MOV SP,#60H ;设置栈底
4103 20 Read_Insert_Card:
4103 750100 21 MOV SubAdr,#00H ;卡号首址 (读20H-2f单元的值)
4106 12410B 22 LCALL ReadCard ;调用读卡子程序;卡号存放在ReadBuf(30H~3FH)中
4109 2103 23 ajmp Read_Insert_Card
24 ;$include (SLE4442.INC) ;包含SLE4442驱动程序
+1 25 ;*****************************************************************************
+1 26 ; SLE4442驱动程序说明 *
+1 27 ;ReadCard 读出从SubAdr开始的ByteCnt字节,结果存放于(RcvDat)中,读出正确,ACC中返*
+1 28 ;回#0,返回#01表示无效卡或者卡损坏,(注读函数已经对数据进行了校验) *
+1 29 ;*****************************************************************************
+1 30
+1 31 ;*************IC卡位定义*************************
0094 +1 32 ICin BIT P1.4 ;IC卡插入连锁端口
00A0 +1 33 VCC1 BIT P2.0 ;IC卡电源控制端口
0091 +1 34 RST BIT P1.1 ;IC卡复位端
0092 +1 35 SD BIT P1.2 ;IC卡数据线
0090 +1 36 CLK BIT P1.0 ;IC卡时钟线
0087 +1 37 ICN BIT P0.7 ;IC卡短路检测端口
+1 38
+1 39 ;*******************变量定义**********99999*********
0030 +1 40 ReadBuf EQU 30H ;读IC卡缓冲区首址
0040 +1 41 WriteBuf EQU 40H ;写IC卡缓冲区首址
0001 +1 42 SubAdr Data 01H ;被控器单元地址
0002 +1 43 BitCnt Data 02H ;I2C数据位计数器
0003 +1 44 ByteCnt Data 03H ;I2C数据字节计数器
+1 45
+1 46 ;*************IC卡常数***************************
00A2 +1 47 Idetify1 EQU 0A2H ;此处为IC卡保护区00~03单元的值,用于识别卡
0013 +1 48 Idetify2 EQU 13H
0010 +1 49 Idetify3 EQU 10H
0091 +1 50 Idetify4 EQU 91H
+1 51 ;************************************************
+1 52
410B +1 53 ReadCard:
410B C005 +1 54 PUSH 05H
410D C002 +1 55 PUSH 02H
410F C000 +1 56 PUSH 00H
4111 31A9 +1 57 ACALL ANRST ;
4113 7014 +1 58 JNZ ReadExit ;
A51 MACRO ASSEMBLER SLE4442 09/16/2003 19:50:59 PAGE 2
4115 AD01 +1 59 MOV R5,SubAdr ;被控器件地址单元
4117 7830 +1 60 MOV R0,#ReadBuf ;读缓冲区
4119 7A10 +1 61 MOV R2,#16 ;16个字节
411B 316C +1 62 ACALL Remm ;读主存储器
411D 7830 +1 63 MOV R0,#ReadBuf ;
411F 7A0E +1 64 mov R2,#14 ;
4121 E6 +1 65 MOV A,@R0 ;
4122 +1 66 checksum: ;和校验
4122 08 +1 67 INC R0
4123 66 +1 68 XRL A,@R0 ;
4124 DAFC +1 69 DJNZ R2,checksum ;
4126 08 +1 70 INC R0 ;
4127 C3 +1 71 CLR C ;
4128 96 +1 72 SUBB A,@R0 ;校验后返回值在ACC中
4129 +1 73 ReadExit:
4129 D000 +1 74 POP 00H
412B D002 +1 75 POP 02H
412D D005 +1 76 POP 05H
412F 22 +1 77 RET
+1 78
+1 79 ;***************************************
+1 80 ;发送命令子程序
+1 81 ;参数R4,R5,R6分别是命令、地址、数据字节
+1 82 ;***************************************
4130 +1 83 SendComm:
4130 C0E0 +1 84 PUSH ACC
4132 D292 +1 85 SETB SD ;产生开始条件
4134 5103 +1 86 ACALL Delay10uS
4136 D290 +1 87 SETB CLK
4138 5103 +1 88 ACALL Delay10uS
413A C292 +1 89 CLR SD
413C 5103 +1 90 ACALL Delay10uS
413E C290 +1 91 CLR CLK
4140 EC +1 92 MOV A,R4 ;命令字节
4141 3158 +1 93 ACALL SendByte1 ;发送
4143 ED +1 94 MOV A,R5 ;地址字节
4144 3158 +1 95 ACALL SendByte1 ;发送
4146 EE +1 96 MOV A,R6 ;数据字节
4147 3158 +1 97 ACALL SendByte1 ;发送
4149 C292 +1 98 CLR SD ;
414B 5103 +1 99 ACALL Delay10uS ;
414D D290 +1 100 SETB CLK ;
414F 5103 +1 101 ACALL Delay10uS
4151 D292 +1 102 SETB sd ;产生停止条件
4153 5103 +1 103 ACALL Delay10uS ;
4155 D0E0 +1 104 POP ACC
4157 22 +1 105 RET
+1 106
+1 107 ;**************发送字节子程序********************
4158 +1 108 SendByte1:
4158 C003 +1 109 PUSH 03H
415A 7B08 +1 110 MOV R3,#8 ;位计数器
415C +1 111 SendLoop:
415C 13 +1 112 RRC A
415D 9292 +1 113 MOV SD,C ;送1位到数据线上
415F 5103 +1 114 ACALL Delay10uS ;
4161 D290 +1 115 SETB CLK
4163 5103 +1 116 ACALL Delay10uS ;
4165 C290 +1 117 CLR CLK
4167 DBF3 +1 118 DJNZ R3,SendLoop ;送完了吗?
4169 D003 +1 119 POP 03H
416B 22 +1 120 RET
+1 121
+1 122 ;**************************************************
+1 123 ;R2--字节数, R5--起始地址,@R0--返回数据
+1 124 ;**************************************************
A51 MACRO ASSEMBLER SLE4442 09/16/2003 19:50:59 PAGE 3
416C +1 125 Remm:
416C C004 +1 126 PUSH 04H ;读主存储器
416E 7C30 +1 127 mov R4,#30h
+1 128
4170 C003 +1 129 PUSH 03H
4172 C002 +1 130 PUSH 02H
4174 C000 +1 131 PUSH 00H
4176 3130 +1 132 Acall SendComm ;调用发送命令子程序
4178 +1 133 Remm2:
4178 E4 +1 134 CLR A
4179 7B08 +1 135 MOV R3,#8 ;8个bit
417B +1 136 Remm1:
417B C290 +1 137 CLR CLK
417D 00 +1 138 NOP ;延时4ms
417E 00 +1 139 NOP
417F 00 +1 140 NOP
4180 00 +1 141 NOP
4181 D292 +1 142 SETB SD ;取出这1位
4183 00 +1 143 NOP
4184 A292 +1 144 MOV C,SD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -