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

📄 at88sc102代码.txt

📁 AT88SC102卡的读写程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
        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 + -