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

📄 glq.asm

📁 一卡通源码程序是我公司的一卡通源码程序,绝对难得
💻 ASM
📖 第 1 页 / 共 5 页
字号:

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 + -