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

📄 rwiccard.asm

📁 8051单片机汇编语言编写的ATMEL加密IC卡AT88SC102的读写程序。
💻 ASM
字号:
;------- This is a program for ICcard read and write Device ----
;------- 时段划分 ------------------------
led     bit     p1.0
rst	bit 	p2.0
clk	bit	p2.1
fuse    bit     p2.2
pgm     bit     p2.3
io	bit	p2.4
wdog    bit     p1.7
icc     bit     p3.3
s_code1 equ     20h             ;SC
s_code2 equ     21h             ;SC

order    equ    2ah
data1    equ    2bh
data2    equ    2ch
data3    equ    2dh
data4    equ    2eh
data5    equ    2fh
data6    equ    30h
data7    equ    31h
data8    equ    32h
data9    equ    33h
data10   equ    34h
data11   equ    35h
data12   equ    36h
data13   equ    37h
data14   equ    38h
data15   equ    39h
data16   equ    3ah
data17   equ    3bh
data18   equ    3ch
data19   equ    3dh
data20   equ    3eh
data21   equ    3fh
data22   equ    40h
data23   equ    41h
data24   equ    42h
data25   equ    43h
data26   equ    44h
data27   equ    45h
data28   equ    46h
data29   equ    47h
data30   equ    48h
data31   equ    49h
data32   equ    4ah
data33   equ    4bh
data34   equ    4ch
data35   equ    4dh
data36   equ    4eh
data37   equ    4fh
data38   equ    50h
data39   equ    51h
data40h  equ    52h
data41h  equ    53h
data42h  equ    54h

rddat1   equ    55h
rddat2   equ    56h
rddat3   equ    57h
rddat4   equ    58h
rddat5   equ    59h
rddat6   equ    5ah
rddat7   equ    5bh
counter  equ    5ch

temp0    equ    68h
temp1    equ    69h

e1_code1 equ    2ch             ;密匙
e1_code2 equ    0c1h            ;----
e1_code3 equ    06h             ;----
e1_code4 equ    7dh             ;----
e1_code5 equ    94h             ;----
e1_code6 equ    35h             ;----

inisc1   equ    1bh             ;新卡密码
inisc2   equ    6ch

spcsc1   equ    89h             ;专用卡密码
spcsc2   equ    89h
;*********************************
        org     0000h
        ljmp    init
	org     0023h
	ljmp    comm

	org     0030h
init:   mov     sp,#70h
        mov     psw,#0
        mov     tmod,#00100000b
        mov     scon,#01010000b
        mov     tcon,#00000100b
        mov     pcon,#00h
        clr     led
        clr     io
        clr     clk
        clr     rst
        clr     pgm
        clr     fuse
        mov     th1,#0fdh
        mov     tl1,#0fdh
        clr     et1
        clr     ex1
        setb    tr1
        setb    ea
;        setb    ex1
        setb    es
loop:   setb    wdog
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        clr     wdog
        jnb     icc,light
        clr     led
        ajmp    loop
light:  setb    led
        ajmp    loop

;****** 通信中断 ***********
comm:   mov     r0,#order
recv:   mov     a,sbuf
        clr     ri
        cjne    a,#'.',gorev
        ljmp    recieve
gorev:  mov     @r0,a
        inc     r0
        cjne    a,#'F',recieve
        ajmp    process
recieve:jnb     ri,$
        ajmp    recv
process:clr     io
        clr     clk
        clr     rst
        clr     pgm
        clr     fuse
        mov     dptr,#ordtab
cmpord: clr     a
        movc    a,@a+dptr
        jz      isfail
        inc     dptr
        cjne    a,order,nextord
        clr     a
        movc    a,@a+dptr
        mov     b,a
        inc     dptr
        clr     a
        movc    a,@a+dptr
        mov     dpl,a
        mov     dph,b
        clr     a
        jmp     @a+dptr
nextord:inc     dptr
        inc     dptr
        sjmp    cmpord

isfail: mov     a,#'6'                 ;IC卡操作失败
        mov     sbuf,a
        jnb     ti,$
        clr     ti
        mov     a,#'F'
        mov     sbuf,a
        jnb     ti,$
        clr     ti
        clr     fuse
        reti

sendids:setb    led
        clr     clk
        clr     io
        clr     rst
        clr     pgm
        setb    fuse
        lcall   dly_us
        lcall	rst_ic
	mov	r2,#02h
	lcall	inc_ic
	lcall	read_ic
        lcall   bcd_asc
        mov     data1,temp0
        mov     data2,temp1
        lcall	read_ic
        lcall   bcd_asc
        mov     data3,temp0
        mov     data4,temp1
        lcall	read_ic
        lcall   bcd_asc
        mov     data5,temp0
        mov     data6,temp1
        lcall	read_ic
        lcall   bcd_asc
        mov     data7,temp0
        mov     data8,temp1
        lcall   read_ic
        mov     data9,a
        cjne    a,#'A',nousec
        mov     order,#'1'
        mov     data10,#'F'
        mov     r7,#11
        mov     r0,#order
sendid: mov     a,@r0
        mov     sbuf,a
        jnb     ti,$
        clr     ti
        inc     r0
        djnz    r7,sendid
        jb      icc,$
        clr     ie1
        reti
nousec: cjne    a,#'C',nospec
        lcall	rst_ic
	mov	r2,#0ah
	lcall	inc_ic
        mov     s_code1,#spcsc1
        mov     s_code2,#spcsc2
	lcall   cmp_sc
	lcall	rst_ic
	mov	r2,#0ch
	lcall	inc_ic
	lcall	read_ic
        cjne    a,#0ffh,isf
        mov     a,#'3'
        ljmp    ssde
isf:    mov     a,#'2'
ssde:   mov     sbuf,a
        jnb     ti,$
        clr     ti
        mov     a,#'F'
        mov     sbuf,a
        jnb     ti,$
        clr     ti
        jb      icc,$
        clr     ie1
        reti
nospec: mov     s_code1,#0f0h
        mov     s_code2,#0f0h
        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,invic
        lcall   rst_ic
	mov	r2,#56h
	lcall	inc_ic
        mov     a,#e1_code1
        lcall   wri_ic
        mov     a,#e1_code2
        lcall   wri_ic
        mov     a,#e1_code3
        lcall   wri_ic
        mov     a,#e1_code4
        lcall   wri_ic
        mov     a,#e1_code5
        lcall   wri_ic
        mov     a,#e1_code6
        lcall   wri_ic
        clr     fuse
        lcall   rst_ic                 ;擦除应用区1
	mov	r2,#56h
	lcall	inc_ic
	lcall	era_cmp
        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,jmpinic
        ljmp    isnew
jmpinic:ljmp    invic
isnew:  mov     a,#'4'
        ajmp    sendicc
invic:  mov     a,#'2'
sendicc:mov     sbuf,a
        jnb     ti,$
        clr     ti
        mov     a,#'F'
        mov     sbuf,a
        jnb     ti,$
        clr     ti
        clr     ie1
        jb      icc,$
        reti


icid:   setb    fuse
        mov     r7,#4
        mov     r0,#data1
        lcall   asc_bcd
        lcall	rst_ic
	mov	r2,#02h
	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
        mov     a,data9
        lcall   wri_Ic
        lcall	rst_ic
	mov	r2,#02h
	lcall	inc_ic
        lcall   read_ic
        cjne    a,data1,jmpchi
        lcall   read_ic
        cjne    a,data3,jmpchi
        lcall   read_ic
        cjne    a,data5,jmpchi
        lcall   read_ic
        cjne    a,data7,jmpchi
        lcall   read_ic
        cjne    a,data9,jmpchi
        mov     a,data9
        cjne    a,#'C',jmpuser
        ljmp    inispc
jmpuser:lcall   rst_ic                  ;改变IC卡初始密码
        mov     r2,#0ah
        lcall   inc_ic
        lcall   era_ic
        lcall   rst_ic
        mov     r2,#0ah
        lcall   inc_ic
        mov     a,#inisc1
        lcall   wri_ic
        mov     a,#inisc2
        lcall   wri_ic
        lcall   rst_ic
        mov     r2,#0ah
        lcall   inc_ic
        lcall   read_ic
        cjne    a,#inisc1,jmpchi
        lcall   read_ic
        cjne    a,#inisc2,jmpchi
        ljmp    issucc
jmpchi: ljmp    isfail
inispc: lcall   rst_ic
        mov     r2,#0ah
        lcall   inc_ic
        lcall   era_ic
        lcall   rst_ic
        mov     r2,#0ah
        lcall   inc_ic
        mov     a,#spcsc1
        lcall   wri_ic
        mov     a,#spcsc2
        lcall   wri_ic
        lcall   rst_ic
        mov     r2,#0ah
        lcall   inc_ic
        lcall   read_ic
        cjne    a,#spcsc1,jmpaf
        lcall   read_ic
        cjne    a,#spcsc2,jmpaf
        ljmp    wriersc
jmpaf:  ljmp    isfail

wriersc:lcall   rst_ic
        mov     r2,#56h
        lcall   inc_ic
        lcall   era_ic
        lcall   rst_ic
        mov     r2,#58h
        lcall   inc_ic
        lcall   era_ic
        lcall   rst_ic
        mov     r2,#5ah
        lcall   inc_ic
        lcall   era_ic
        lcall   rst_ic
        mov     r2,#56h
        lcall   inc_ic
        mov     a,#e1_code1
        lcall   wri_ic
        mov     a,#e1_code2
        lcall   wri_ic
        mov     a,#e1_code3
        lcall   wri_ic
        mov     a,#e1_code4
        lcall   wri_ic
        mov     a,#e1_code5
        lcall   wri_ic
        mov     a,#e1_code6
        lcall   wri_ic
        lcall   rst_ic
        mov     r2,#56h
        lcall   inc_ic
        lcall   read_ic
        cjne    a,#e1_code1,jmpaf
        lcall   read_ic
        cjne    a,#e1_code2,jmpaf
        lcall   read_ic
        cjne    a,#e1_code3,jmpaf
        lcall   read_ic
        cjne    a,#e1_code4,jmpaf
        lcall   read_ic
        cjne    a,#e1_code5,jmpaf
        lcall   read_ic
        cjne    a,#e1_code6,jmpaf
        lcall   blow_f2
        lcall   issucc

initic: lcall	rst_ic                    ;IC有关项清0

⌨️ 快捷键说明

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