?? glqlgdc1.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 + -