📄 smd4all.asm
字号:
name smd4all
;**********bei4 fen4 pan2***********ok****
;-----------------------------------
pcon data 87h
;-----------------------------------
T0_ADDR EQU 000BH
COMM_ADDR EQU 0023H
;-----------------------------------
;------communication----------------
cmmd_type data 10h;0-1-2
h_fcs data 11h
l_fcs data 12h
;-----------------------------------
rl_frame data 13h
rh_frame data 14h
bias1 data 15h;shift address in a page
dist data 16h
bias2 data 17h;sum of data
;-----------------------------------
data_sum data 18h
answer data 19h
temp00 data 1ah
fpage_h data 1bh
fpage_l data 1ch
;-----------------------------------
work_temp data 1dh
;-----------------------------------
;;;;;sys_flag data 20h
buf_flag bit 00h
;-----------------------------------
; bit p1.0
; bit p1.1
cs bit p1.2
sck bit p1.3
si bit p1.4
so bit p1.5
rdy_busy bit p1.6
; bit p1.7
;-----------------------------------
ORG 0000
aJMP START
; ORG T0_ADDR
; AJMP t0serve
ORG COMM_ADDR
aJMP COMSERVE
;-----------------------------------
cseg
ORG 0026H
;---------------
START: clr ea
mov sp,#60h;
;---------------
;clr si
setb sck
setb cs
;---------------
mov IP, #10H; x|x|x|PS|T1|X1|T0|X0
mov scon,#50h; SM0|SM1|SM2|REN|TB8|RB8|TI|RI
mov tcon,#40h; TF1|TR1|TF0|TR0|IE1|IT1IE0|IT0
mov IE, #10h; ea|x|x|es|eT1|eX1|eT0|eX0
;MOV P1,#06H ; p1.0,p1.1,p1.2,p1.3,p1.4,p1.5
mov TMOD,#20H; T1-> GATE|C/not(T)|M1|M0|GATE|C/not(T)|M1|M0<-T0
;----------------------
mov pcon,#80h; 19200 baud need pcon=80h
mov th1,#0fah;
mov tl1,#0fah; 19200 baud mod=1 #0fah when 22.18Mhz
;----------------------
;mov pcon,#80h; smod=1
;mov tl1,#0f3h; 9600 baud smod=1 #0f3h when 24Mhz
;mov th1,#0f3h;
;--------------------------
mov h_fcs,#0ffh
mov l_fcs,#0ffh
mov dist,#00h
mov answer,#00h
mov cmmd_type,#00h
;acall rdy_0busy
;--------------------------
clr buf_flag;;;;;;;;;;;;;;;;key
setb ea
;--------------------------
;******MAIN control module begin******
main: nop
mend: sjmp main
;*************************************
comserve: ;push acc
;push b
push psw
mov psw,#08h
jnb ri,qt01;;;quit12
;-------1---------
mov a,sbuf
clr ri
cjne a,#7eh,qt01;;;quit12 ;7e
;-------2----------
mov r3,#00h
mov r2,#00h
bf01: jb ri,bf02
djnz r3,bf01
djnz r2,bf01
ajmp quit12
;-------------------
bf02: mov a,sbuf
clr ri
cjne a,#0aah,qt01 ;aa
mov work_temp,a
acall crc_chk
;-------3-----------
mov r3,#00h
mov r2,#00h
bf03: jb ri,bf04
djnz r3,bf03
djnz r2,bf03
qt01: ajmp quit12
;-----------
bf04: mov a,sbuf
clr ri
mov cmmd_type,a ;dist--command type
mov work_temp,a
acall crc_chk
;-------4-----------
mov r3,#00h
mov r2,#00h
bf05: jb ri,bf06
djnz r3,bf05
djnz r2,bf05
ajmp quit12
;-------------------
bf06: mov a,sbuf
clr ri
mov work_temp,a
acall in_chg_code
acall crc_chk
mov a,work_temp
mov bias1,a ;bias<1>
;-------4+start------
mov r3,#00h
mov r2,#00h
bf_05: jb ri,bf_06
djnz r3,bf_05
djnz r2,bf_05
ajmp quit12
;------4+end----
bf_06: mov a,sbuf
clr ri
mov work_temp,a
acall in_chg_code
acall crc_chk
mov a,work_temp
mov bias2,a ;bias<2>
;-------5-----------*****
mov r3,#00h
mov r2,#00h
bf07: jb ri,bf08
djnz r3,bf07
djnz r2,bf07
ajmp quit12
;-------------------*****
bf08: mov a,sbuf
clr ri
mov work_temp,a
acall in_chg_code
acall crc_chk
mov a,work_temp
mov rh_frame,a ;frameseq.(1) ;rh_frame----page num in cmmd
mov fpage_h,a ;fpage_h-------page num in flash
;-------6-----------------------------------
mov r3,#00h
mov r2,#00h
bf09: jb ri,bf0a
djnz r3,bf09
djnz r2,bf09
ajmp quit12
;-----------
bf0a: mov a,sbuf
clr ri
mov work_temp,a
acall in_chg_code
acall crc_chk
mov a,work_temp
mov rl_frame,a ;frameseq.(2)
;mov fpage_l,a
clr c
rlc a
mov fpage_l,a
mov a,fpage_h
rlc a
mov fpage_h,a
;-------------from flash to buffer--------------
clr cs ;;;;;;key
clr cs
nop
nop
clr sck
clr sck
nop
jb buf_flag,bffr0
mov work_temp,#53h;53--buf1;55h--buf2
;data transfer from flash page to buffer1
sjmp next2_0
bffr0:mov work_temp,#55h;;;;;;;;;;;;;;;;;;;;;;;;key
next2_0:acall to_ic_byte
mov work_temp,fpage_h
acall to_ic_byte
mov work_temp,fpage_l
acall to_ic_byte
mov work_temp,bias1
acall to_ic_byte
setb sck
setb sck
nop
nop
setb cs
setb cs
nop
nop
mov r3,#80h
loop1:djnz r3,loop1
;================command type===========
bf_0a:mov a,cmmd_type
clr_page:cjne a,#04h,go_write
mov dist,#09h
mov data_sum,#02h
;-----------------------
bf1d:mov r3,#00h ;--------------\
mov r2,#00h ;| l_chk_sum
bf1e:jb ri,bf1f ;| h_chk_sum
djnz r3,bf1e ;|
djnz r2,bf1e ;|
ajmp quit12 ;|
;--------------- ;|
bf1f:mov a,sbuf; ;|
clr ri ;|
mov work_temp,a ;|
acall in_chg_code ;|
acall crc_chk ;|
djnz data_sum,bf1d;-----------;/
;---------------
mov r3,#00h
mov r2,#00h
bf1g:jb ri,bf1h
djnz r3,bf1g
djnz r2,bf1g
ajmp quit12
;---------------
;************************************
go_write:ajmp write01
quit12:ajmp exit_and_ini
go_err:ajmp asw_err
;************************************
;---------------
bf1h:mov a,sbuf;
clr ri
cjne a,#7eh,go_err
;---------------
mov a,l_fcs
cjne a,#0b8h,go_err
mov a,h_fcs
cjne a,#0f0h,go_err
;------write command head---------
clr cs ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;key
clr cs
nop
nop
clr sck
clr sck
;---------------
jb buf_flag,bffr3_2
mov work_temp,#84h;84--buf1;87h--buf2
;buffer write: data will be written into buffer
sjmp next32
bffr3_2:mov work_temp,#87h
next32:acall to_ic_byte
mov work_temp,fpage_h ;rrrr,PA.10---PA.07
acall to_ic_byte
mov work_temp,fpage_l ;PA.06---PA.00,BF08
acall to_ic_byte
mov work_temp,bias1 ;BF.07---BF.00
acall to_ic_byte
;------8+----------------------
mov a,bias2
mov data_sum,a
clr_buf:mov work_temp,#0ffh
acall to_ic_byte
;---------------
djnz data_sum,clr_buf
setb sck
setb sck
nop
nop
setb cs
setb cs
;---------------
nop;1 key
nop;2 key
nop;3 key
nop;4 key
;---------------- from buffer to flash--
clr cs
clr cs
nop
nop
clr sck
clr sck
jb buf_flag,bffr4_2
mov work_temp,#83h;83h--buf1;86h--buf2
;buffer to main memory page program
sjmp next42
bffr4_2:mov work_temp,#86h
next42:acall to_ic_byte
mov work_temp,fpage_h ;rrrr,PA.10---PA.07
acall to_ic_byte
mov work_temp,fpage_l ;PA.06---PA.00,BF08
acall to_ic_byte
mov work_temp,bias1 ;BF.07---BF.00
acall to_ic_byte ;
;------------------------------
setb sck
setb sck
nop
nop
setb cs
setb cs
ajmp asw_true;;;;;;;;;;;key
;-------------------------------------
write01:cjne a,#05h,go_read;05h========write
mov dist,#0ah
;------write command head---------
clr cs ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;key
clr cs
nop
nop
clr sck
clr sck
;-------------
jb buf_flag,bffr2_2
mov work_temp,#84h;84--buf1;87h--buf2
;buffer write: data will be written into buffer
sjmp next22
bffr2_2:mov work_temp,#87h
next22:acall to_ic_byte
mov work_temp,fpage_h ;rrrr,PA.10---PA.07
acall to_ic_byte
mov work_temp,fpage_l ;PA.06---PA.00,BF08
acall to_ic_byte
mov work_temp,bias1 ;BF.07---BF.00
acall to_ic_byte
;------8----------------------
;---------------
mov a,bias2
mov data_sum,a
rec_data:mov r3,#00h
mov r2,#00h
bf0b:jb ri,bf0c
djnz r3,bf0b
djnz r2,bf0b
ajmp quit12
;-----------
bf0c:mov a,sbuf
clr ri
mov work_temp,a
acall in_chg_code
acall crc_chk
acall to_ic_byte
;---------------
djnz data_sum,rec_data
setb sck
setb sck
nop
nop
setb cs
setb cs
;--------------
mov data_sum,#02h
bf0d:mov r3,#00h ;--------------\
mov r2,#00h ;| l_chk_sum
bf0e:jb ri,bf0f ;| h_chk_sum
djnz r3,bf0e ;|
djnz r2,bf0e ;|
ajmp quit12 ;|
;--------------- ;|
bf0f:mov a,sbuf; ;|
clr ri ;|
mov work_temp,a ;|
acall in_chg_code ;|
acall crc_chk ;|
djnz data_sum,bf0d;-----------;/
;---------------
mov r3,#00h
mov r2,#00h
bf0g:jb ri,bf0h
djnz r3,bf0g
djnz r2,bf0g
ajmp quit12
;---------------
;*********************************
go_read:ajmp read01
;*********************************
bf0h:mov a,sbuf;
clr ri
cjne a,#7eh,asw_err
;---------------
mov a,l_fcs
cjne a,#0b8h,asw_err
mov a,h_fcs
cjne a,#0f0h,asw_err
;---------------- from buffer to flash--
clr cs
clr cs
nop
nop
clr sck
clr sck
jb buf_flag,bffr2_3
mov work_temp,#83h;83h--buf1;86h--buf2
;buffer to main memory page program
sjmp next23
bffr2_3:mov work_temp,#86h
next23:acall to_ic_byte
mov work_temp,fpage_h ;rrrr,PA.10---PA.07
acall to_ic_byte
mov work_temp,fpage_l ;PA.06---PA.00,BF08
acall to_ic_byte
mov work_temp,bias1 ;BF.07---BF.00
acall to_ic_byte ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -