📄 iccard at88sc1604.asm
字号:
FWZCX:
CLR ICPGM ;复位子程序
NOP
SETB ICREST
NOP
SETB ICSDA
NOP
CLR ICCLK ;时钟端清0
NOP
CLR ICREST ;复位端清0
NOP
RET
(2)读出操作: 读IC数据子程序(R2:需读IC卡字节数,R0:数据区存放低位首地址)
RICDAZ:
MOV A,#KXXDZ ;卡信息地址送A
LCALL SADR ;寻卡地址
RICDA:
MOV R3,#08
RICDA1:
SETB ICSDA
NOP
MOV C,ICSDA ;位读到A
RLC A
SETB ICCLK
NOP
CLR ICCLK
NOP
DJNZ R3,RICDA1
MOV @R0,A ;8位数据送数据区
DEC R0
DJNZ R2,RICDA
RET
; 寻IC卡位地址子程序(调用前16进制地址送ACC)
SADR:
LCALL FWZCX ;复位子程序
MOV B,#08
MUL AB ;计算位地址: 16进制地址*8
MOV R4,A ;低位位地址送R4
MOV R5,B ;高位位地址送R5
JNZ SADR1 ;低位地址不为0转
MOV A,R5
JZ SADR3
DEC R5
SADR1:
SETB ICREST ;复位端置1
SETB ICSDA
CLR ICPGM
CLR ICCLK
CLR ICREST
SADR2:
SETB ICCLK
SETB ICCLK
CLR ICCLK
CLR ICCLK
DJNZ R4,SADR2
MOV A,R5
JZ SADR3
DEC R5
SJMP SADR2
SADR3:
RET
比较用户密码子程序(地址0AH,0BH)
CPSC:
MOV R0,#CMM+2
MOV R1,#06
MOV R2,#02
LCALL MVITI
MOV A,#0AH
LCALL SADR ;寻址
MOV R0,#06
LCALL BJMM ;比较密码程序
RET
;比较密码程序
BJMM:
CLR ICREST
CLR ICPGM
MOV R2,#02
BJMM1:
MOV A,@R0
MOV R3,#08
BJMM2:
RLC A
MOV ICSDA,C
NOP
SETB ICCLK
NOP
CLR ICCLK
NOP
DJNZ R3,BJMM2
INC R0
DJNZ R2,BJMM1
MOV R2,#08 ;查8位
BJMM4:
SETB ICSDA
NOP
MOV C,ICSDA
JC BJMM5 ;是1转
SETB ICCLK ;指向下一位
NOP
CLR ICCLK
NOP
DJNZ R2,BJMM4
LJMP BJMM8 ;计数器为00,卡锁死转
BJMM5:
SETB ICPGM
NOP
CLR ICSDA ;写0
NOP
SETB ICCLK
NOP
CLR ICPGM
NOP
LCALL DELY5 ;5毫秒延时
CLR ICCLK
NOP
SETB ICSDA
NOP
MOV C,ICSDA
JNC BJMM6
LJMP BJMM7 ;未写入0,转出错
BJMM6:
SETB ICPGM
NOP
SETB ICSDA ;写1(擦除)
NOP
SETB ICCLK
NOP
CLR ICPGM
NOP
LCALL DELY5 ;5毫秒延时
CLR ICCLK
NOP
SETB ICSDA
NOP
MOV C,ICSDA
NOP
SETB ICCLK
JNC BJMM7 ;擦除不成功(密码错)转
SETB FGICG1 ;置已校对密码标志
RET
BJMM7:
CLR FGICG1 ;建密码错标记
RET
BJMM8:
SETB FGICG2 ;置卡锁死标志
RET
(4)写入操作:
WICD:
MOV A,#KDWDZ ;送擦除卡低位首地址
LCALL SADR ;寻位地址
MOV R2,#30 ;擦除30字节
LCALL CPESC3 ;擦除
MOV R0,#RAMDZ ;CPU的RAM中待写入数据地址
MOV R2,#30 ;写入30字节
WICDA:
MOV A,@R0
LCALL WICDAA ;向IC卡写入子程序
INC R0
DJNZ R2,WICDA
RET
;向IC卡写入子程序
WICDAA:
MOV R3,#08
WICDAB:
RLC A
JC WICDAC ;该位为1,转
SETB ICPGM ;打开编程位
SETB ICPGM
MOV ICSDA,C
MOV ICSDA,C
SETB ICCLK
SETB ICCLK
CLR ICPGM ;关闭编程位
CLR ICPGM ;关闭编程位
LCALL DELY5 ;延时5MS
CLR ICCLK
CLR ICCLK
WICDAC:
SETB ICCLK
SETB ICCLK
CLR ICCLK
DJNZ R3,WICDAB
RET
; 擦除应用区1
CPESC3:
SETB ICPGM ;打开编程位,擦除灰名 单入口
SETB ICPGM
SETB ICSDA
SETB ICSDA
SETB ICCLK
SETB ICCLK
CLR ICPGM ;关闭编程位
LCALL DELY5 ;延时5MS
CLR ICCLK
CLR ICCLK
SETB ICCLK
SETB ICCLK
CLR ICCLK
MOV R3,#07
CPESC4:
SETB ICCLK
SETB ICCLK
CLR ICCLK
CLR ICCLK
DJNZ R3,CPESC4
DJNZ R2,CPESC3
RET
; 延时(R7)
DELY5:
MOV R7,#0AH ;5毫秒延时
DELY:
PUSH 07
DLY1:
PUSH 07
DLY2:
PUSH 07
DLY3:
DJNZ R7,DLY3
POP 07
DJNZ R7,DLY2
POP 07
DJNZ R7,DLY1
POP 07
DJNZ R7,DELY
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -