📄 glq.asm
字号:
writ50: ;----------------------
; Write Special Region 0
;----------------------
inc r0
inc r0
mov a,@r0
jz wr_qu0
setb f_tx
ret
wr_qu0: ;mov dptr,#d_374
;mov a,#00000000b
;movx @dptr,a
;mov dptr,#adr_offset
;mov dpl,#18h
mov r0,#ridat
mov a,@r0
jnz wr_q00
lcall go_off
wr_q00: mov r_err,#0
mov subsq,#0
lcall ok_ans
ret
writ51: ;----------------------
; Write Special Region 1
;----------------------
lcall quhead
inc r0
mov rec_h,@r0
inc r0
mov rec_l,@r0
mov a,rec_h
cjne a,max_h,wr_q10
mov a,rec_l
cjne a,max_l,wr_q10
wr_q10: jc wr_q11
mov subsq,#0
mov r_err,#0
lcall er_ans
ret
wr_q11: lcall get_ar
mov r2,#1
lcall n_dptr
mov r0,#ridat
mov a,@r0
movx @dptr,a
mov subsq,#0
mov r_err,#0
lcall ok_ans
ret
writ52: ;----------------------
; Write Special Region 2
;----------------------
lcall quhead
inc r0
mov rec_h,@r0
inc r0
mov rec_l,@r0
mov a,rec_h
cjne a,max_h,wr_q20
mov a,rec_l
cjne a,max_l,wr_q20
wr_q20: jc wr_q21
mov r_err,#0
mov subsq,#0
lcall er_ans
ret
wr_q21: lcall get_ar
;--------------------modify
movx a,@dptr
mov b,a
;------------
mov r0,#tidat
mov a,@r0
cjne a,b,wr_q211
sjmp wr_q23
wr_q211:movx @dptr,a
mov b,a
lcall indptr
mov r2,reclen
dec r2
dec r2
wr_q22: movx a,@dptr
add a,b
mov b,a
lcall indptr
djnz r2,wr_q22
mov a,b
movx @dptr,a
mov r_err,#0
mov subsq,#0
lcall ok_ans
ret
wr_q23: mov r_err,#0
mov subsq,#0
lcall er_ans
ret
;--------------------modify
;****************************
;****************************
; Deal Answer
;****************************
answer: inc r0
inc r0
mov a,@r0
jnz ans_7
inc r0
mov a,@r0
anl a,#0fh
mov region,a
cjne a,#3,ans_7
mov repeat,#0
sjmp ans_3
ans_7: ret
;
ans_3: lcall quhead
inc r0
mov a,@r0
cjne a,beg_h,ans30
inc r0
mov a,@r0
cjne a,beg_l,ans30
mov a,end_h
cjne a,beg_h,ans33
mov a,end_l
cjne a,beg_l,ans33
ans30: ret
ans33: mov a,beg_h
cjne a,max_h,ans34
mov a,beg_l
cjne a,max_l,ans34
ans34: jc ans35
mov beg_h,end_h
mov beg_l,end_l
lcall w_end
ret
ans35: mov rec_h,beg_h
mov rec_l,beg_l
lcall get_ar
;====================modify
movx a,@dptr
jnb acc.6,ans38 ;若为已读取过的数据,转ans38
;若为未读取过的数据
anl a,#10111111b ;屏蔽次高位的读取标志(表示已读取过)
movx @dptr,a
;====================modify
mov a,beg_l
add a,#1
mov beg_l,a
clr a
addc a,beg_h
mov beg_h,a
mov a,beg_h
cjne a,max_h,ans36
mov a,beg_l
cjne a,max_l,ans36
ans36: jc ans37
mov beg_h,#0
mov beg_l,#0
ans37: lcall w_end
ret
ans38: mov beg_l,end_l
mov beg_h,end_h
lcall w_end
ret
;****************************
; Inc DPTR
; in: r_374,dptr
; out: dptr
;****************************
indptr: inc dptr
mov a,dph
cjne a,#80h,ind0
inc r_374
mov dptr,#d_374
mov a,r_374
movx @dptr,a
mov dptr,#0
ind0: ret
;****************************
; Inc n DPTR
; in: r2 (Count),r_374,dptr
; out: dptr
;****************************
n_dptr: inc dptr
mov a,dph
cjne a,#80h,ndp0
inc r_374
mov dptr,#d_374
mov a,r_374
movx @dptr,a
mov dptr,#0
ndp0: djnz r2,n_dptr
ret
;****************************
; Get Region Head
;****************************
quhead: mov a,#00000000b
mov dptr,#d_374
movx @dptr,a
mov dptr,#area_offset
mov a,region
dec a
mov b,#hedlen
mul ab
add a,dpl
mov dpl,a
mov a,dph
addc a,b
mov dph,a
;
movx a,@dptr
mov rc374,a ;页地址
inc dptr
movx a,@dptr
mov h_adr,a ;地址(高)
inc dptr
movx a,@dptr
mov l_adr,a ;地址(低)
inc dptr
movx a,@dptr
mov max_h,a
inc dptr
movx a,@dptr
mov max_l,a ;记录总数
inc dptr
movx a,@dptr
mov beg_h,a
inc dptr
movx a,@dptr
mov beg_l,a ;头指针
inc dptr
movx a,@dptr
mov end_h,a
inc dptr
movx a,@dptr
mov end_l,a ;尾指针
inc dptr
movx a,@dptr ;记录长度
anl a,#3fh
jnz quhd0
mov a,#4
quhd0: mov reclen,a
;
mov dptr,#adr_offset
mov a,dpl
add a,l_adr
mov l_adr,a
mov a,dph
addc a,h_adr
mov h_adr,a
clr a
addc a,rc374
mov rc374,a
ret
;---------------------------------------------
;get region 7 head 增加确定7区区头地址的功能
;---------------------------------------------
quhead7: mov a,#00000000b
mov dptr,#d_374
movx @dptr,a
mov dptr,#area_offset
mov a,region
dec a
mov b,#hedlen
mul ab
add a,dpl
mov dpl,a
mov a,dph
addc a,b
mov dph,a
;
movx a,@dptr
mov rc374,a
inc dptr
movx a,@dptr
mov h_adr,a
inc dptr
movx a,@dptr
mov l_adr,a
inc dptr
movx a,@dptr
mov max_h,a
inc dptr
movx a,@dptr
mov max_l,a
inc dptr
movx a,@dptr
mov beg_h,a
inc dptr
movx a,@dptr
mov beg_l,a
inc dptr
movx a,@dptr
mov end_h,a
inc dptr
movx a,@dptr
mov end_l,a
inc dptr
movx a,@dptr
anl a,#3fh
jnz quhd00
mov a,#4
quhd00: mov reclen,a
ret
;---------------------------------
; 确定区7头信息中的尾指针
;---------------------------------
qu7: mov a,#00000000b
mov dptr,#d_374
movx @dptr,a
mov dptr,#area_offset
mov a,#areatab
dec a
mov b,#hedlen
mul ab
add a,dpl
mov dpl,a
mov a,dph
addc a,b
mov dph,a
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
movx a,@dptr
ret
;---------------------------------
;增加比较区间子过程
;---------------------------------
cmp_area:mov r0,#r_buf
inc r0
inc r0
inc r0
inc r0 ;r0指向ID号首字节
lcall qu7
add a,#1 ;尾指针加1送r7单元
mov r7,a ;R7中存放比较次数
mov dptr,#d_374
mov a,#00000000b
movx @dptr,a
mov dptr,#0500h ;dptr指向7区首地址
mov r5,dph
mov r6,dpl
clr f_bit
cmp01: lcall compare
jb f_bit,cmp02 ;bit_c=1,已找到确定区间,返回
;bit_c=0,未找到确定区间,继续判断下一区间
mov a,r6
add a,#11
mov r6,a
mov a,r5
addc a,#0
mov r5,a
mov dph,r5
mov dpl,r6
mov r0,#r_buf
inc r0
inc r0
inc r0
inc r0
djnz r7,cmp01
;全部比较完毕,未找到确定区间(bit_c=0),返回
cmp02: ret
;---------------------------------
;compare子程序:
;功能:若bit_c=1,ID号已确定在该区间内
; bit_c=0,ID号不在区间内
;---------------------------------
compare:mov r2,#5
comp_0: movx a,@dptr ;区间字节送B
mov b,a
mov a,@r0 ;ID编号送A
cjne a,b,comp_1 ;若ID号≠区间字节,转comp_1
sjmp comp_4 ;若ID号=区间字节,转comp_4
comp_1: jc comp_3 ;ID号<区间字节,转comp_3
;ID号>区间字节
jb f_bit,comp_2 ;若bit_c=1,ID号既大于首区间,又大于尾区间,清bit_c,返回判断下一区间
;若bit_c=0,
mov dph,r5
mov dpl,r6
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr ;dptr指向尾区间的首字节
mov r0,#r_buf
inc r0
inc r0
inc r0 ;R0指向ID号首字节
inc r0
mov r2,#5
setb f_bit ;ID号大于首区间,bit_c=1 继续将ID号和尾区间进行比较
sjmp comp_0 ;
comp_2: clr f_bit
comp_3: ret
comp_4: inc r0
inc dptr ;比较下一字节
djnz r2,comp_0 ;连续比较五次,均相等
setb f_bit ;bit_c=1,已确定在该区间内,返回
sjmp comp_3
;*********************************
; Locate Record Address
; in: rec_h,rec_l
; rc374,h_adr,l_adr
; out: r_374, dptr
;*********************************
get_ar: mov a,rec_h
mov b,reclen
mul ab
mov rec_h,a
mov r_374,b
mov a,rec_l
mov b,reclen
mul ab
mov rec_l,a
mov a,rec_h
add a,b
mov rec_h,a
clr a
addc a,r_374
mov r_374,a
;
mov a,rec_l
add a,l_adr
mov rec_l,a
mov a,rec_h
addc a,h_adr
mov rec_h,a
mov a,r_374
addc a,rc374
mov r_374,a
mov a,rec_h
rlc a
mov a,r_374
rlc a
mov r_374,a
;
mov dptr,#d_374
movx @dptr,a
;
anl rec_h,#7fh
;
mov dpl,rec_l
mov dph,rec_h
ret
;**************************************
; Automatic Manage Pos for PC Offline
;**************************************
go_off: mov region,#postab
lcall quhead
mov a,reclen
cjne a,#32,g_o0
g_o0: jnc g_o1
ret
g_o1: mov r_nme,end_l
inc r_nme
g_o2: mov rec_h,#0
mov rec_l,r_nme
dec rec_l
lcall get_ar
lcall indptr
movx a,@dptr
anl a,#0fh
orl a,#10h
movx @dptr,a
djnz r_nme,g_o2
ret
;**************************************
; Clear Pos Function
;**************************************
clear_pos_func:
mov a,region
cjne a,#postab,c_pff
lcall quhead
mov r_nme,#0
c_p_f: mov rec_h,#0
mov rec_l,r_nme
lcall get_ar
clr a
movx @dptr,a
djnz r_nme,c_p_f
c_pff: ret
;*********************************************
; Clear Pos In
;*********************************************
clr_pos_in:
mov a,#00000000b
mov dptr,#d_374
movx @dptr,a
mov dptr,#d_pos_in
mov dpl,r_nme
clr a
movx @dptr,a
ret
;*********************************************
; Refresh Pos Record End Point
;*********************************************
w_pos: mov a,#00000000b
mov dptr,#d_374
movx @dptr,a
mov dptr,#area_offset
mov a,#postab
dec a
mov b,#hedlen
mul ab
add a,dpl
mov dpl,a
mov a,dph
addc a,b
mov dph,a
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
mov a,end_l
movx @dptr,a
ret
;*****************************************************
;refresh area record end point 增加刷新7区尾指针的功能
;*****************************************************
w_area: mov a,#00000000b
mov dptr,#d_374
movx @dptr,a
mov dptr,#area_offset
mov a,#areatab ;a=7-1=6
dec a
mov b,#hedlen
mul ab
add a,dpl
mov dpl,a
mov a,dph
addc a,b
mov dph,a
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
mov a,end_l
movx @dptr,a ;刷新尾指针
ret
;*********************************************
; Refresh Sale/Save Record Current Point
;*********************************************
w_end: mov a,#00000000b
mov dptr,#d_374
movx @dptr,a
mov dptr,#area_offset
mov a,#recetab
dec a
mov b,#hedlen
mul ab
add a,dpl
mov dpl,a
mov a,dph
addc a,b
mov dph,a
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
mov a,beg_h
movx @dptr,a
inc dptr
mov a,beg_l
movx @dptr,a
inc dptr
mov a,end_h
movx @dptr,a
inc dptr
mov a,end_l
movx @dptr,a
ret
;*************************************************
; Refresh Accounts Record Current Tail Point
;*************************************************
w_max: mov a,#00000000b
mov dptr,#d_374
movx @dptr,a
mov dptr,#area_offset
mov a,#acctab
dec a
mov b,#hedlen
mul ab
add a,dpl
mov dpl,a
mov a,dph
addc a,b
mov dph,a
inc dptr ;Address
inc dptr
inc dptr
inc dptr ;Record Total
inc dptr
inc dptr ;Head Point
inc dptr
mov a,end_h ;End Point
movx @dptr,a
inc dptr
mov a,end_l
movx @dptr,a
ret
;*******************************
; Copy Ram from r0 to r1
;*******************************
copy_s: mov a,@r0
mov @r1,a
inc r0
inc r1
djnz r2,copy_s
ret
;****************************
; Error Answer
;****************************
er_ans: mov r0,#tihed
mov a,subsq
orl a,#40h
mov @r0,a
inc r0
mov @r0,r_err
mov a,#over
sjmp ans_w
;****************************
; Ok Answer
;****************************
ok_ans: mov r0,#tihed
mov a,subsq
orl a,#30h
mov @r0,a
inc r0
mov @r0,r_err
clr a
;
ans_w: mov r0,#tidat
mov @r0,a
inc r0
mov r2,#15
answ0: mov @r0,#0
inc r0
djnz r2,answ0
;
lcall chktis
;
mov ticon,#49
mov tir0,#tibuf
setb ti
ret
;
;***********************************
; Form CheckSum of Send Data
;***********************************
chktis: mov a,#tihed
mov r0,a
add a,#23
mov r1,a
mov tichk,#0
mov r2,#22
;
tchk0: mov a,@r0
mov @r1,a
add a,tichk
mov tichk,a
inc r0
inc r1
djnz r2,tchk0
mov @r0,a
mov @r1,a
mov r0,#tibuf
mov @r0,#0ech
inc r0
mov @r0,#0ech
inc r0
mov @r0,#0ech
ret
;******************************
; Sleep
;******************************
sleep: mov r3,#0
mov r4,#0
slep: djnz r4,$
djnz r3,slep
djnz r2,slep
ret
;****************************
; Get Identity Limit
;****************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -