📄 at88sc102代码.txt
字号:
//51 AT88SC102代码
//
// -------------
// VCC----|RST 1.0|----------LED-----------
// | 2.0|----------RST-----------
// | 2.1|----------CLK----------
// | 2.2|----------FUSE--------
// | 2.3|----------PGM---------
// | 2.4|----------IO-------------
// -------------
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?
mov r2,#3fh
lcall inc_ic
mov counter,#6
initwri:mov a,#00h
lcall wri_ic
djnz counter,initwri
lcall rst_ic
mov r2,#3fh
lcall inc_ic
mov counter,#6
initrd: lcall read_ic
cjne a,#0,jmpfail
djnz counter,initrd
lcall rst_ic
mov r2,#53h
lcall inc_ic
mov counter,#3
initwr: mov a,#00h
lcall wri_ic
djnz counter,initwr
lcall rst_ic
mov r2,#53h
lcall inc_ic
mov counter,#3
initd: lcall read_ic
cjne a,#0,jmpfail
djnz counter,initd
ljmp issucc
jmpfail:ljmp isfail
dataic: lcall rst_ic ;读出IC有关项
mov r2,#3fh
lcall inc_ic
mov counter,#12
mov r0,#data1
datrd0: lcall read_ic
lcall bcd_asc
mov a,temp0
mov @r0,a
inc r0
mov a,temp1
mov @r0,a
inc r0
djnz counter,datrd0
lcall rst_ic
mov r2,#53h
lcall inc_ic
mov counter,#3
mov r0,#data25
datrd1: lcall read_ic
lcall bcd_asc
mov a,temp0
mov @r0,a
inc r0
mov a,temp1
mov @r0,a
inc r0
djnz counter,datrd1
lcall rst_ic
mov r2,#3dh
lcall inc_ic
mov r0,#data31
mov counter,#2
rdsc: lcall read_ic
lcall csc_asc
djnz counter,rdsc
mov data35,#'F'
mov order,#'8'
mov r7,#36
mov r0,#order
datsend:mov a,@r0
mov sbuf,a
jnb ti,$
clr ti
inc r0
djnz r7,datsend
reti
priceic:lcall rst_ic ;写入购电款、时段价格
mov r7,#20
mov r0,#data1
lcall asc_bcd
mov r2,#17h
lcall inc_ic
mov counter,#20
mov r0,#data1
priwri: mov a,@r0
lcall wri_ic
inc r0
inc r0
djnz counter,priwri
lcall rst_ic
mov r2,#17h
lcall inc_ic
mov counter,#20
mov r0,#data1
pricmp: lcall read_ic
mov b,a
mov a,@r0
cjne a,b,jmpprif
inc r0
inc r0
djnz counter,pricmp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -