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

📄 glq.asm

📁 一卡通源码程序是我公司的一卡通源码程序,绝对难得
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;================================
;      GLQ-ID Server For 89C52
;      FIRST  UPDATE 2002.11.29(use 89c55)
;      SECOND UPDATE 2003.01.03(use 89c55)
;      THIRD  UPDATE 2003.01.06(use 89c55)
; (1)添加加密功能
; (2)添加靠卡后若尚未消费,不能在其他POS上二次靠卡,否则显示出错"ERR 000"
; (3)添加每到0时0分0秒,将持卡人信息区的预留字节标志清0,防止意外情况发生。
; (4)存款机有出错信息,由POS改程序送消费流过来修正
; (5)调用w_sale子过程中处理预留字节
; (6)管理器发送正确或错误应答时分开处理
; (7)管理器收到标志为03的消费流时不保存直接返回
; (8)增添读,写8区信用额度区,将信用额度发送至POS处理-(2003.11.29)
; (9)POS脱机下载个人信息时管理器发送信用额度和尾指针字节
; (10)脱机数据和联机数据均以管理器时间为准--------(2003.01.03)
; (11)上传数据时接收流类型最高位为0:联机数据/为1:脱机数据
; (12)上传数据时以接收流类型字节的第6位作为是否已读取的标志
; (13)增添POS下载数据前请求校时,管理器发送时间---(2003.01.06)
;*******ID售饭系统江阴利港电厂V8.0版本*********

;================================
	org 0000h
;************************************
;       Adress   Define
;************************************
	d_374   equ     8000h

	w_2051  equ     0a000h          ;Write 2051 Control
	r_2051  equ     0a000h          ;Read 2051 Control

	rsec    equ 	0c000h          ;DS12887 Second Address
	rmin    equ     0c002h          ;DS12887 Second Address
	rhor    equ     0c004h          ;DS12887 Second Address
	rwek    equ     0c006h          ;DS12887 Second Address
	rday    equ     0c007h          ;DS12887 Second Address
	rmon    equ     0c008h          ;DS12887 Second Address
	ryer    equ     0c009h          ;DS12887 Second Address

	r18a    equ     0c00ah          ;DS12887 Control A Address
	r18b    equ     0c00bh          ;DS12887 Control B Address
	r18c    equ     0c00ch          ;DS12887 Control C Adress
	r18d    equ     0c00dh          ;DS12887 Control D Address

	;-------------------
	d_run_yer   equ     0c070h      ;Run Year Address
	d_run_mon   equ     0c071h      ;Run Month Address
	d_run_day   equ     0c072h      ;Run Day Address

	d_idsc      equ     0c010h      ;UserID && CradSC Copy
	;
	d_record    equ     1000h       ;the Last Sale/Save Record Bakup Address
	d_comm      equ     2700h       ;Pos Test Comm S/F Store Address
	d_pos_in    equ     0100h       ;Pos In Port Address
	d_pos_menu  equ     0400h       ;Pos Current Menu Send Address
					;1Byte/Pos:MenuNumber

	;
	adr_offset  equ     3000h       ;Address Offset
	;
	area_offset equ     3020h       ;Area Address Offset

;************************************
;       Bit     Define
;************************************
	;-------------------
	;r887    equ     0b2h           ;DS12887 /IRQ

	bp      equ     0b3h
	led     equ     0b4h
	b_chk   equ     0b5h            ;Battery Error
	;-------------------
	f_rx    equ     00h             ;Receive End
	f_tx    equ     01h             ;Transmit End
	f_ri    equ     02h             ;Receive Interrupt

	f_day   equ     03h             ;New Date

	f_s00   equ     04h             ;No.0 Function Transmit
	f_s16   equ     05h             ;No.0 Function 16

	f_ecs   equ     06h             ;Error CheckSum
	f_upt   equ     07h             ;Second Update

	f_wck   equ     08h             ;PC Requst Special Pos Clock
	f_win   equ     09h             ;PC Requst Special Pos UserID&&CardSC

	bit_c   equ     0ah

	f_ini   equ     0bh             ;Initi Succ
	f_new   equ     0ch             ;New Day

	f_bat   equ     0dh             ;Battery Bad Flag

        f_none  equ     0eh
;----------------------------------
        f_bit	equ	0fh		;加密功能中用到该标志位
        f_sme	equ     10h		;若为管理卡或挂失卡,该标志置位


;----------------------------------

;*************************************
;       Regist  Define
;*************************************
	dyer    equ     08h
	dmon    equ     09h
	dday    equ     0ah
	dwek    equ     0bh
	dhor    equ     0ch
	dmin    equ     0dh
	dsec    equ     0eh

	dcoun   equ     0fh
	;
	r_mod   equ     10h
	ricon   equ     11h             ;Receive Count
	rir0    equ     12h             ;Receive Data Address
	;richk   equ     13h             ;Receive CheckSum
	;
	ticon   equ     11h             ;Transmit Count
	tir0    equ     12h             ;Transmit Data Address
	tichk   equ     13h             ;Transmit CheckSum
	;
	region  equ     14h             ;Area
	repeat  equ     15h
	rtchk   equ     16h             ;CheckSum
	shn     equ     17h             ;Port
	;
	r_nme   equ     18h
	subsq   equ     19h             ;Sub-squence
	r_win   equ     1ah             ;PosName Regist
	r_s00   equ     1bh             ;No.0 Function

	id_limit equ    1ch             ;Identity Limit

	close   equ     1dh             ;Pos Power Off
	idsc    equ     1eh             ;UserID && CardSC
	uptim   equ     1fh             ;UpdateTime

	;
	rc374   equ     23h             ;Record Offset
		  ;----------------------------------------
		  ; D7  D6  D5  D4   D3   D2   D1   D0
		  ; **  **  **  **  A18  A17  A16  A15
		  ;-----------------------------------------
	h_adr   equ     24h             ;High-Adress
	l_adr   equ     25h             ;Low-Adress

	max_h   equ     26h             ;Record Total
	max_l   equ     27h

	beg_h   equ     28h             ;Begin Point
	beg_l   equ     29h

	end_h   equ     2ah             ;End Point
	end_l   equ     2bh

	reclen  equ     2ch             ;Record Length

	;
	r_374   equ     2dh
		  ;----------------------------------------
		  ; D7  D6  D5  D4   D3   D2   D1   D0
		  ; **  **  **  **  A18  A17  A16  A15
		  ;-----------------------------------------
	rec_h   equ     2eh             ;Record Number
	rec_l   equ     2fh

	rcdpl   equ     30h             ;dpl copy
	rcdph   equ     31h             ;dph copy

	menu    equ     32h             ;Pos Menu

	r_err   equ     33h             ;Error

	r_ecs   equ     34h             ;CheckSum Err

	credit	equ	35h		;信用等级字节

	f16cnt  equ     36h
	;----------------------------------------modify
	dat_h	equ	37h		;整数高位字节
	dat_l	equ	38h		;整数低位字节

	sdph	equ	39H		;dptr复制字节
	sdpl	equ	3aH

	rr_374	equ	3bH		;r_374复制字节
	;----------------------------------------modify
	r_sp    equ     3ch

	b_buf   equ     58h             ;Backup Buffer
	;
	r_buf   equ     88h             ;Receive Buffer (2051)
	t_buf   equ     88h             ;Send Buffer (2051)

	t_dat   equ     89h             ;=r_buf+1: 31Byte=89h--0a7h
	t_dt1   equ     0a8h            ;32Byte=0a8h--0c7h


	tibuf   equ     0c8h            ;TI Buffer
	tihed   equ     0cbh            ;TI Head
	tidat   equ     0d1h            ;TI Data

	ribuf   equ     0cbh            ;RI buffer
	ridat   equ     0d1h            ;RI Data

;********************************
;      special regist
;********************************

	th2	equ	0cdh
	tl2	equ	0cch
	rcap2h	equ	0cbh
	rcap2l	equ	0cah
	t2con	equ	0c8h


;********************************
;       Const   Define
;********************************
	postab  equ     1               ;Pos Table
	acctab  equ     2               ;Accounts Table
	recetab equ     3               ;Receive Table
	limitab equ     4               ;Identity Limit Table
	statutab equ    5               ;Status Table
	menutab equ     6               ;Menu Table
;---------------------------------------------------------
	areatab	equ	7		;area table
	credtab	equ	8
;---------------------------------------------------------
	hedlen  equ     11              ;RegionHead Record Length

	ratfunc equ     17

	dti_h   equ     80h             ;34.4ms
	dti_l   equ     0

	dt1_h   equ     0               ;65ms
	dt1_l   equ     0

	over    equ     16              ;Address Over
	cserr   equ     17              ;CheckError

;****************************
	ljmp    main


	org     0003h             ;int0
	ljmp    timer


	org     000bh             ;t0
	mov r_mod,#0
	clr f_ri
	clr tr0
	reti


	org     0013h             ;int1
	ljmp    main


	org     001bh             ;t1
	ljmp    m_t1


	org     0023h
	;-------------------------------------------------------------
	; Frame=Head+Command+Repeat+ChipS+Region+Record(2)+Data(16)+CheckS
	;           +Command+Repeat+ChipS+Region+Record(2)+Data(16)+CheckS
	;       Head=ECh+ECh+ECh
	;       Command=ComNum*16+SubFrameSquence
	;               ComNum=0: format
	;                      1: Read Record
	;                      2: Write Record
	;                      3: OK Answer
	;                      4: Error Answer
	;       Repeat=ErrType*16+RepCount
	;-------------------------------------------------------
	push acc        ;2
	push psw        ;2
	push 00h
	push 01h
	push 02h
	push 03h
	push 04h
	push 05h
	push 06h
	push 07h
	      ;2

	jbc ri,r_recv   ;2  =8

	jbc ti,r_send

	ljmp d_reti


	;--------------
	;  Transmit
	;--------------

r_send: mov a,ticon
	jnz r_se00

	clr tr0
	setb f_tx

	ljmp d_reti


r_se00: mov r0,tir0
	mov a,@r0
	mov sbuf,a
	inc tir0
	dec ticon
	ljmp d_reti


	;------------------
	; Receive
	;------------------

r_recv: mov r0,sbuf        ;2
	clr tr0            ;2
	jb f_tx,r_re0      ;2

	jbc ti,r_send

	ljmp d_reti

	;
r_re0:  push dph          ;2
	push dpl          ;2

	mov a,r_mod       ;1
	rl a              ;1

	mov dptr,#ritab   ;2
	jmp @a+dptr       ;2

ritab:  sjmp r_md00       ;2   =18
	sjmp r_md00
	sjmp r_md00
	sjmp r_md30


	;-----------------
	; Asys Head
	;-----------------

r_md00: mov a,r0               ;1
	cjne a,#0ech,r_md01    ;2

	setb f_ri

	mov rir0,#ribuf
	mov ricon,#46
	inc r_mod

	sjmp r_md20


r_md01: mov r_mod,#0
	clr f_ri

	sjmp d_iret

	;--------------
	;  Data
	;--------------

r_md30: mov a,r0            ;1
	mov r0,rir0         ;2
	mov @r0,a           ;1
	inc rir0            ;1
	djnz ricon,r_md20   ;2  =7


	clr f_ri            ;2
	setb f_rx           ;2
	clr f_tx            ;2
	mov r_mod,#0        ;2
	sjmp d_iret         ;2  =10


r_md20: mov th0,#dti_h      ;2
	mov tl0,#dti_l      ;2
	setb tr0            ;2  =6

d_iret: pop dpl             ;2
	pop dph             ;2  =4

d_reti: pop 07h
	pop 06h
	pop 05h
	pop 04h
	pop 03h
	pop 02h
	pop 01h
	pop 00h        ;2
	pop psw        ;2
	pop acc
	       ;2
	reti           ;2  =8


;****************************
;****************************
;****************************
main:   mov sp,#r_sp

	mov th2,#0ffh           ;115200 57600 38400 28800 19200 9600=BPS
	mov tl2,#0eeh           ;ff:fd  ff:fa ff:f7 ff:f4 ff:ee ff:dc

	mov rcap2h,#0ffh
	mov rcap2l,#0eeh

	mov t2con,#00110100b    ;tf2 exf2 rclk tclk exen2 tr2 c/t2 cp/rl2
	mov scon,#01010000b     ;sm0 sm1 sm2 ren tb8 rb8 ti ri

	;------

	mov tmod,#11h
	mov tcon,#00000001b     ;TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0


	mov ip,#00010000b       ; *   *  pt2  ps pt1 px1 pt0 px0
	mov ie,#00011011b       ; ea  *  et2  es et1 ex1 et0 ex0


	lcall ini_t1

	setb ea                ;eanbl interrupt

	mov r_mod,#0
	clr f_rx
	clr f_tx
	clr f_ri

	clr f_day

	clr f_ecs
	clr f_bit

	clr f_s00
	clr f_s16

	clr f_wck
	clr f_win

	clr f_ini
	clr f_sme

	clr bit_c
	;
	mov dsec,#60
	;
	mov dptr,#w_2051        ;Init 2051
	mov a,#0ffh
	movx @dptr,a


	;--------------------
	; Test   Ram
	;--------------------
	lcall verfity_ram
	jnb bit_c,t_clk

	mov repeat,#2
	ljmp error


 t_clk: ;---------------------
	; Reset D12887 && Test
	;---------------------
	mov dptr,#r18a
	mov a,#00100000b             ;UIP DV2 DV1 DV0 RS3 RS2 RS1 RS0
	movx @dptr,a

	mov dptr,#r18b
	mov a,#00010110b             ;SET PIE AIE UIE SQWE DM 24/12 DSE
	movx @dptr,a

	mov dptr,#r18d
	movx a,@dptr

	mov dptr,#r18c
	movx a,@dptr

	mov b,dsec

	mov r2,#10
	lcall sleep

	mov a,dsec
	cjne a,b,mmain

	mov repeat,#3
	ljmp error



 mmain: clr bp
	clr led

	mov r2,#4
	lcall sleep

	setb bp

	mov r2,#8
	lcall sleep


	lcall inial


	mov repeat,#0
	mov region,#0fh

	mov uptim,#0
	mov close,#0
	mov idsc,#0

	mov f16cnt,#0

	lcall go_off

	lcall comp_date

	setb f_tx

	setb f_upt
	clr f_bat


 loop:  jb f_ecs,er_chk

	lcall rd2051             ;Read 2051

	jb f_rx,rece_d

 m_887: jb f_ini,loop

	jnb f_day,lop2		;每到00时,f_day置位

	clr f_day

	lcall clr_count		;在这里添加清预留字节功能


 lop2:  jnb f_bat,lop3

	mov a,dsec
	anl a,#0fh
	jnz lop3                  ;16S

	clr bp

	mov r2,#2
	lcall sleep

	setb bp


 lop3:  jnb f_upt,loop

	clr f_upt

	lcall update
	sjmp loop


	;----------------
	;----------------
er_chk: clr f_tx

	clr ea

	mov dptr,#w_2051
	mov a,#0ffh
	movx @dptr,a
	;
	ljmp errcs



;===================================
;       Dispose Receive Data
;===================================
rece_d: clr f_rx

	mov a,#23
	add a,#ribuf
	mov r1,a

	mov r0,#ribuf
	mov r2,#23
	mov r3,#0

re_d1:  mov a,@r0
	mov b,@r1
	cjne a,b,re_d3

	add a,r3
	mov r3,a

	inc r0
	inc r1
	djnz r2,re_d1

	dec r0
	mov a,@r0
	add a,@r0
	mov b,r3
	cjne a,b,re_d3

	sjmp receok


re_d3:  setb f_tx
	ljmp m_887


receok: mov r0,#ribuf

	mov a,@r0
	anl a,#0fh

	mov subsq,a

	jz d_deal

	mov a,@r0

	swap a
	anl a,#0fh

	cjne a,#2,d_deal

	mov a,subsq

	dec a
	anl a,#3

	swap a

	add a,#b_buf
	mov r1,a

	mov r0,#ridat

	mov r2,#16
	lcall copy_s

	mov r_err,#0
	lcall ok_ans

	ljmp m_887



d_deal: ;------------------
	; Receive Data Deal
	;------------------
	mov a,@r0
	swap a
	anl a,#0fh
	cjne a,#0,dl_01		;(A)≠0,转dl_01
				;(A)=0,格式化管理器命令


dl_00:  inc r0

	cjne @r0,#0,dl_08		;repeat
	inc r0


	cjne @r0,#0,dl_08		;chips
	inc r0

	cjne @r0,#0,dl_08		;region
	inc r0

	cjne @r0,#0,dl_08		;record(h)
	inc r0

	cjne @r0,#0,dl_08		;record(l)

					;5字节均等于0

	lcall format

	mov subsq,#0
	mov r_err,#0
	lcall ok_ans
	ljmp m_887


dl_01:  cjne a,#1,dl_03

	lcall read
	ljmp m_887


dl_03:  cjne a,#2,dl_06

	lcall write
	ljmp m_887


dl_06:  cjne a,#3,dl_08

	lcall answer
	setb f_tx
	ljmp m_887


dl_08:  setb f_tx
	ljmp m_887


;****************************
;       Error Alrm
;****************************
error:  mov r5,repeat

 err00: clr bp
	clr led
	;
	mov r2,#1
	lcall sleep
	;
	setb bp
	setb led

	mov r2,#1
	lcall sleep

	djnz r5,err00
	;
	mov r2,#30
	lcall sleep

	sjmp error


;*************************************
;       Record CheckSum Error Alrm
;*************************************
errcs:  mov r5,r_ecs

 ercs0: clr bp
	clr led
	;
	mov r2,#1
	lcall sleep
	;
	setb bp
	setb led

	mov r2,#1
	lcall sleep

	djnz r5,ercs0
	;
	mov r2,#4
	lcall sleep
	;
	clr bp
	clr led

	mov r2,#3
	lcall sleep

	setb bp
	setb led
	;

	mov r2,#30
	lcall sleep

	sjmp errcs



;****************************
;****************************
;       Read Record
;****************************
read:   inc r0
	inc r0

	mov a,@r0

	anl a,#7
	mov b,a

	rl a
	add a,b

	mov dptr,#rd_tab
	jmp @a+dptr

rd_tab: ljmp r_chipin
	ljmp r_date_time
	ljmp r_pos_date
	ljmp r_pos_idsc
	ljmp card_server
	ljmp special_read
	ljmp second_read

read_end:
	setb f_tx
	ret



second_read:
	;------------------------------
	; Special Read Second Region
	;-------------------------------
	inc r0
	mov a,@r0
	anl a,#0fh
	cjne a,#2,read_end

	mov region,a
	lcall quhead
	;
	inc r0
	mov rec_h,@r0
	inc r0
	mov rec_l,@r0

	mov a,rec_h
	cjne a,max_h,s_read1

	mov a,rec_l
	cjne a,max_l,s_read1

s_read1: jc s_read5

	mov r0,#tihed

	mov @r0,#20h
	inc r0

	mov @r0,#0
	;
	mov r0,#tidat

	dec r0
	dec r0

	mov @r0,#0ffh
	inc r0

	mov @r0,#0ffh
	inc r0

	mov @r0,#over
	inc r0

	lcall chktis

	mov ticon,#49
	mov tir0,#tibuf
	setb ti
	ret



s_read5: lcall get_ar
	;
	mov r2,#7
	lcall n_dptr

	mov r2,#12

	mov r0,#tidat

s_read7: movx a,@dptr
	mov @r0,a

	lcall indptr
	inc r0

	djnz r2,s_read7
	;
	mov r1,#tihed
	mov @r1,#20h
	inc r1
	mov @r1,#0
	;
	lcall chktis

	mov ticon,#49
	mov tir0,#tibuf
	setb ti
	ret




	;-------------------
	;  ChipIn Read
	;-------------------
r_chipin:
	inc r0
	mov a,@r0
	;
	anl a,#0fh
	mov region,a

	rl a
	add a,region

	mov dptr,#rcitb
	jmp @a+dptr

rcitb:  ljmp r_area0
	ljmp r_area1
	ljmp r_area1         	 ;=r_area2
	ljmp r_area3
	ljmp r_area4
	ljmp r_area5
	ljmp r_area4          	;=r_area6
	ljmp r_area7		;read 7 qu(new)
	ljmp r_area8		;read 8 qu(new)

r_area9: setb f_tx
	ret


r_area0: ;-------------------
	;  Read Region 0
	;-------------------
	mov a,#00000000b
	mov dptr,#d_374
	movx @dptr,a
	mov r_374,a

	inc r0
	inc r0
	mov a,@r0
	jnz rarea03

	mov dptr,#adr_offset
	mov r0,#b_buf

	mov r2,#32
	mov reclen,#33

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -