📄 at88sc102代码.txt
字号:
ljmp issucc
jmpprif:ljmp isfail
writdiv:lcall rst_ic ;写入时段划分
mov r7,#16
mov r0,#data1
lcall asc_bcd
mov r2,#2bh
lcall inc_ic
mov counter,#16
mov r0,#data1
wridiv0:mov a,@r0
lcall wri_ic
inc r0
inc r0
djnz counter,wridiv0
lcall rst_ic
mov r2,#2bh
lcall inc_ic
mov counter,#16
mov r0,#data1
wridiv1:lcall read_ic
mov b,a
mov a,@r0
cjne a,b,jmpprif
inc r0
inc r0
djnz counter,wridiv1
ljmp issucc
writmk: lcall rst_ic ;写入时段标志
mov r2,#4bh
lcall inc_ic
mov r0,#data1
mov counter,#8
writm: mov a,@r0
clr c
subb a,#41h
mov dptr,#tmktab
movc a,@a+dptr
mov @r0,a
lcall wri_ic
inc r0
djnz counter,writm
lcall rst_ic
mov r2,#4bh
lcall inc_ic
mov counter,#8
mov r0,#data1
wricmp: lcall read_ic
mov b,a
mov a,@r0
cjne a,b,jmpprif
inc r0
djnz counter,wricmp
ljmp issucc
tmktab: db 0bh,0ch,0dh,0eh
scic: mov r7,#4 ;比较IC卡SC
mov r0,#data1
lcall chgsc
mov a,data1
swap a
mov data1,a
mov a,data2
add a,data1
mov data1,a
mov a,data3
swap a
mov data3,a
mov a,data4
add a,data3
mov data3,a
mov s_code1,data1
mov s_code2,data3
lcall rst_ic
mov r2,#0ah
lcall inc_ic
lcall cmp_sc
lcall rst_ic
mov r2,#0ch
lcall inc_ic
lcall read_ic
cjne a,#0ffh,jmpscfl
ljmp scok
jmpscfl:ljmp isfail
scok: ljmp issucc
cmperc: clr fuse
lcall rst_ic ;擦除应用区1
mov r2,#56h
lcall inc_ic
lcall era_cmp
lcall rst_ic
mov r2,#17h
lcall inc_ic
lcall read_ic
cjne a,#0ffh,jmpscfl
lcall rst_ic
mov r2,#16h
lcall inc_ic
mov a,#0bfh
lcall wri_ic
lcall rst_ic
mov r2,#16h
lcall inc_ic
lcall read_ic
cjne a,#0bfh,jmpcmpf
ljmp issucc
jmpcmpf:ljmp isfail
chscic: mov r7,#8 ;比较IC卡SC
mov r0,#data1
lcall chgsc
mov a,data1
swap a
mov data1,a
mov a,data2
add a,data1
mov data1,a
mov a,data3
swap a
mov data3,a
mov a,data4
add a,data3
mov data3,a
mov a,data5
swap a
mov data5,a
mov a,data6
add a,data5
mov data5,a
mov a,data7
swap a
mov data7,a
mov a,data8
add a,data7
mov data7,a
lcall rst_ic ;传输IC卡密码
mov r2,#3bh
lcall inc_ic
mov a,data1
lcall wri_ic
mov a,data3
lcall wri_ic
mov a,data5
lcall wri_ic
mov a,data7
lcall wri_ic
lcall rst_ic
mov r2,#3bh
lcall inc_ic
mov r0,#data1
mov counter,#4
chrd: lcall read_ic
mov b,a
mov a,@r0
cjne a,b,jmpcmpf
inc r0
inc r0
djnz counter,chrd
ljmp issucc
fuseic: lcall blow_f2 ;TO BLOW ISSUE FUSE
issucc: mov a,#'5' ;IC卡操作成功
mov sbuf,a
jnb ti,$
clr ti
mov a,#'F'
mov sbuf,a
jnb ti,$
clr ti
reti
ordtab: db '1'
dw icid
db '7'
dw initic
db '8'
dw dataic
db '9'
dw priceic
db 'a'
dw scic
db 'b'
dw chscic
db 'c'
dw fuseic
db 'd'
dw cmperc
db 'e'
dw writdiv
db 'f'
dw writmk
db 'g'
dw sendids
db 00h
;****** IC卡复位 ***********
rst_ic: clr clk
setb rst
lcall dly_ms
clr rst
ret
;***** IC卡寻址 ***********
inc_ic: mov r4 ,#08
inc_ic1:clr clk
nop
nop
nop
setb clk
nop
nop
nop
djnz r4,inc_ic1
djnz r2,inc_ic
ret
;****** 读IC卡字节 *********
read_ic:setb io ;io口置高
mov r6,#8
r_ic: clr clk
nop
nop
nop
mov c,io
rlc a
setb clk
nop
nop
nop
djnz r6,r_ic ;R6-IF R6 != 0; JUMP R_IC
ret
;****** 写IC卡字节 *********
wri_ic: mov r4,#8
wri_ic1:clr clk
nop
nop
nop
rlc a
jc no_wri
mov io,c
setb pgm
nop
nop
nop
setb clk
nop
nop
nop
clr pgm
lcall dly_ms
clr clk
nop
nop
nop
no_wri: setb clk
nop
nop
nop
djnz r4,wri_ic1
ret
;***** 擦除IC卡字节 **********
era_ic: clr clk
setb io
setb pgm
nop
nop
nop
setb clk
nop
nop
nop
clr pgm
lcall dly_ms
clr clk
nop
nop
nop
setb clk
ret
;****** 送1字节密码 ***********
da_cmp: mov r5,#8
da_cmp1:rlc a
mov io,c
setb clk
nop
nop
nop
clr clk
nop
nop
nop
djnz r5,da_cmp1
ret
;****** 比较密码 *************
cmp_sc: clr clk
mov a,s_code1
lcall da_cmp
mov a,s_code2
lcall da_cmp
mov c,io
jc cmp_sc1
mov r5,#3
setb io
cmp_sc2:setb clk
nop
nop
nop
clr clk
nop
nop
nop
mov c,io
jc cmp_sc1
djnz r5,cmp_sc2
ajmp cmp_sc3
cmp_sc1:clr io
setb pgm
nop
nop
nop
setb clk
nop
nop
nop
clr pgm
lcall dly_ms
clr clk
nop
nop
nop
setb io
setb pgm
nop
nop
nop
setb clk
nop
nop
nop
clr pgm
nop
nop
nop
setb clk
lcall dly_ms
cmp_sc3:ret
;------ Comparing EC ------------------------
era_cmp:
clr clk
mov a,#e1_code1
lcall da_cmp
mov a,#e1_code2
lcall da_cmp
mov a,#e1_code3
lcall da_cmp
mov a,#e1_code4
lcall da_cmp
mov a,#e1_code5
lcall da_cmp
mov a,#e1_code6
lcall da_cmp
setb io
setb pgm
lcall df
setb clk
lcall df
clr pgm
lcall dly_ms
clr clk
lcall df
setb clk
ret
;****** 熔断FUSE2 *******
blow_f2:clr clk
clr io
clr rst
clr pgm
; lcall rst_ic
; mov r2,#0ah
; lcall inc_ic
; lcall cmp_sc
lcall rst_ic
mov r2,#194
lcall inc_ic
clr clk
nop
nop
nop
setb clk
nop
nop
nop
lcall bl_f2
ret
bl_f2: clr clk
clr io
setb pgm
nop
nop
nop
setb rst
nop
nop
nop
setb clk
nop
nop
nop
clr pgm
lcall dly_ms
clr rst
clr clk
ret
;**************ms延时*******************
dly_ms: mov r6,#9
clr wdog
nop
nop
nop
setb wdog
nop
nop
nop
clr wdog
dl: mov r7,#120
djnz r7,$
djnz r6,dl
ret
;----------us延时--------------------
dly_us: mov r2,#4
delay2: mov r3,#10
djnz r3,$
djnz r2,delay2
ret
;------ Nop for ICcard ----------------------
df: nop
nop
nop
ret
;------ ASCII码转换成压缩BCD码 --------------
asc_bcd:mov a,@r0
clr c
subb a,#30h
swap a
mov @r0,a
inc r0
mov a,@r0
subb a,#30h
dec r0
add a,@r0
mov @r0,a
inc r0
inc r0
djnz r7,asc_bcd
ret
;------ 压缩BCD码转换成ASCII码 --------------
bcd_asc:mov temp1,a
swap a
anl a,#00001111b
add a,#30h
mov temp0,a
mov a,temp1
anl a,#00001111b
add a,#30h
mov temp1,a
ret
;-------------------------------------------
chgsc: mov a,@r0
clr c
subb a,#61h
jnc ascsc1
mov a,@r0
clr c
subb a,#41h
jnc ascsc1
clr c
mov a,@r0
subb a,#30h
ascsc0: mov dptr,#asctab0
ljmp getdb
ascsc1: mov dptr,#asctab1
getdb: movc a,@a+dptr
mov @r0,a
inc r0
djnz r7,chgsc
ret
asctab0:db 00h,01h,02h,03h,04h
db 05h,06h,07h,08h,09h
asctab1:db 0ah,0bh,0ch,0dh,0eh,0fh
;---------------------------------------------
csc_asc:mov temp0,a
swap a
anl a,#00001111b
mov dptr,#asctab
movc a,@a+dptr
mov @r0,a
inc r0
mov a,temp0
anl a,#00001111b
mov dptr,#asctab
movc a,@a+dptr
mov @r0,a
inc r0
ret
asctab: db 30h,31h,32h,33h,34h
db 35h,36h,37h,38h,39h
db 'a','b','c','d','e','f'
;------------------------------------------
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -