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

📄 终端机程序.asm

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

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

	setb ea
	mov reg1,#dfcom



;=========================================
;       Main Loop
;=========================================
mmain:  setb f_f
	lcall shift

no_shift:
	lcall write_sc              ;Write ID && Sc

	lcall upt_sl            ;Send SaleData of Offline


;=========================================
;=========================================
;       Pos Saling
;=========================================
pos_sale:
        setb rf_chk
	setb f_a_s
	clr f_cny

	mov regt,#dslep

pos_sl_loop:
	lcall key_in

	lcall deal_func_kb      

	;--------------------
	;   Read  Card
	;--------------------
	lcall card_read

	jnb rf_chk,sale_deal_card


	djnz regt,pos_sl_loop


	jb b_chk,sale_bat_err

	jnb f_com,sale_no_comm

	mov reg1,#dfcom
	inc reg0
	clr f_off
	ljmp mmain


sale_no_comm:
	setb f_pow

	jnb f_off,sale_plus_disp

	mov reg1,#nfcom
	inc reg0

	setb f_f		;news

	ljmp mmain


sale_plus_disp:

	mov r_err,#4		;"+"
	lcall get_code

	clr f_f			;news

	ljmp no_shift


sale_bat_err:
	ljmp bat_err


	;-------------------
	;  Deal Card
	;-------------------
sale_deal_card:

	jb f0,sale_d_0

	ljmp deal_error          ;Read Err

	;--------------
	;  Read Succ
	;--------------

sale_d_0:
        jb f_typ,sale_d_00
        lcall divsub

        setb f_id

sale_d_00:
        mov r0,#rf1ram
	mov adr_h,@r0
	inc r0
	mov adr_l,@r0
        ;****************
        lcall search_idcode         
                                     
                                   
        JNB    F0,JIESHU            

KAISHI:; 

        LJMP   SALE_ONLINE

JIESHU:; 
        LCALL  CLEAR_IDCODE

        LCALL  GET_ACCOUNTS              
                                         
        JNB     F0,GET_SUC
        MOV    R_ERR,#10
        LJMP   DEAL_ERROR               ;
GET_SUC:
        MOV     R0,#R_BUF+6
        MOV     R1,#D_EXP0

        MOV     R2,#3
R_YE:
        MOV     A,@R0
        MOV     @R1,A
        INC     R0
        INC     R1
        DJNZ    R2,R_YE                  

        MOV     R0,#R_BUF+9
        MOV     A,@R0
        MOV     B,#60
        MUL     AB
        INC     R0
        ADD     A,@R0
        MOV     R3,A                   

        MOV     A,B
        ADDC    A,#0
        MOV     R2,A                    
        ;;
        MOV     R0,#HOUR
        MOV     A,@R0
        MOV     B,#60
        MUL     AB
        INC     R0
        ADD     A,@R0
        MOV     R5,A

        MOV     A,B
        ADDC    A,#0
        MOV     R4,A                    

        MOV     A,R5
        CLR     C
        SUBB    A,R3
        MOV     R5,A
        MOV     A,R4
        SUBB    A,R2
        MOV     R4,A                     

        MOV     A,RAT_2
        ;*******************
        MOV     R3,A
        MOV     B,R5
        MUL     AB
        MOV     R7,A
        PUSH    B

        MOV     A,R3
        MOV     B,R4
        MUL     AB
        POP     B
        ADD     A,B
        MOV     R6,A                    

        LCALL   HB2                      

        MOV     A,R5
        LCALL   BCDH
        MOV     R5,A                    

        MOV     A,R3
        MOV     R2,A
        MOV     A,R4
        MOV     R3,A
        LCALL   BH2                     
        MOV     A,R3
        MOV     R4,A
        MOV     A,R2
        MOV     R3,A                    

        MOV     R3,#0
        MOV     A,R4
        CLR     C
        SUBB    A,#30
        JC      PPP
        MOV     R4,#3                    
PPP:        ;代码:
        ;**********************
        MOV     R0,#D_EXP2
        MOV     R1,#SUR_RM5
        LCALL   BIN2DEC
        MOV     C,BIT_C
        MOV     F_M_P,C
        MOV     F_P_M,C

        LCALL   CLR_BIT
        LCALL   CLR_EXPENSE

        MOV     R0,#05H
        MOV     R1,#EXP_RM5
        LCALL   BIN2DEC
        LCALL   OK_KEY

        LJMP    MMAIN


        ;********************
        ;******************
        ;********************
	jb f_com,sale_online      ;联机

	lcall get_accounts         ;脱机

	sjmp salecomp  ;; old:sjmp sale_comp

	;--------------
	;  Receie Zh
	;--------------
sale_online:

	mov sata,#0         ;
	setb f_zh
	clr f_pow

	mov r2,#255		;old 130

sale_comm_wait:
	jnb f_zh,salecomp

	lcall disp

	djnz r2,sale_comm_wait

        clr f_id
	clr f_zh
	mov r_err,#err_13     ;Comm Err
	setb f_pow

	ljmp deal_error


	;------------
sale_card_off:
	setb f_pow
	clr  f_zh
        clr f_id
	ljmp card_pullout

	;---------------------
	;  Comp ZH for Read && Receive
	;---------------------
salecomp: jb f_typ,sale_comp

        mov r0,#r_buf	; date_format:addr(2)+flag+身份+card code(5)+surplus(3)
;			+limit(3)+surplus counter+credit(2)+last addr(2) CHKSUM
        mov r1,#rf1ram

        mov adr_h,@r0
        mov @r1,adr_h
        inc r0
        inc r1

        mov adr_l,@r0
        mov @r1,adr_l

sale_comp:
	setb f_pow
	lcall comp_accounts

	jb f0,sale_comp_succ

	ljmp deal_error            ;comp zh Err


sale_comp_succ:
	mov r0,#r_buf
	inc r0
	inc r0
	mov a,state
        ;*************************
        ;计时消费
SALE_JISHI:
        MOV   R0,#R_BUF+9
        MOV   A,@R0
        ANL   A,#10000000B
        JZ    SALE_1

        MOV R_ERR,#9

        LJMP DEAL_ERROR         
SALE_1:
        LCALL WRITE_IDCODE
        JB    F0,S_ERR           
        MOV   ADR_H,#0
        MOV   ADR_L,R2
        LCALL WRITE_XIAOFEI      

        LCALL CLRBP
        MOV   R4,#50
        LCALL D0LAY
        LCALL SETBP              

        LJMP MMAIN
S_ERR:
        MOV R_ERR,#5

        LJMP DEAL_ERROR         ;ERR 005   无空地址
        ;代码:

        ;*************************
	;----------------
	;Sale Count
	;----------------
	cjne a,#countfunc,sale_d_3

	jnb f_com,sale_err

	clr f_rat

	cjne @r0,#1,sale_err

	ljmp sale_counter


	;------------------
	;Ration Expense
	;------------------
sale_d_3:
        cjne a,#ratfunc,sale_d_5

	setb f_rat

	sjmp sale_normal


	;-------------------
	;  Alrm  Err 015
	;-------------------
sale_err: mov r_err,#err_3
	ljmp deal_error


	;----------------
	; Menu Sale
	;----------------
sale_d_5: cjne a,#menufunc,sale_d_6

	jb f_rat,sale_normal

	jnb f_com,sale_normal

	cjne @r0,#1,sale_err

	ljmp sale_menu


	;---------------
	;  Normal Sale
	;---------------
sale_d_6: cjne a,#norsale,sale_err

sale_normal:
	cjne @r0,#0ffh,sale_d_7

	;----------------
	; Offline Sale
	;----------------
	setb f_tj
	clr f_m_p
	clr f_p_m
	lcall tj_t_x

	sjmp sale_d_8

	;----
	;----
sale_d_7:
        cjne @r0,#1,sale_err

	clr f_tj

	mov r0,#d_exp2
	mov r1,#sur_rm5

	lcall bin2dec

	mov c,bit_c
	mov f_m_p,c
	mov f_p_m,c

	mov r0,#d_sur2
	mov r1,#lim_rm5

	lcall bin2dec

	MOV R0,#ICARD_SC1	; credit
	MOV R1,#ICARD_adr	;
				;
	LCALL BNDEC2		;


sale_d_8: jnb f_rat,sale_d_9

	lcall clr_bit
	lcall clr_expense

	mov r0,#rat_2          ;Ration
	mov r1,#exp_rm5

	lcall bin2dec

	lcall ok_key

	ljmp mmain


sale_d_9: lcall clear_input

	;----------------
	;++++++++++++++++
	;mov r5,#0bh
	;mov r6,#0b8h
        ;++++++++++++++++
sale_wait:

        ;lcall  card_id
        ;jnb    f0,sl_wait8
        ljmp sl_wait8
        ljmp   sale_d_0

sl_wait8:
	lcall key_in

	mov a,v_key

        jb   f_n,sl_wait7
        cjne a,#kb_cl,sl_wait7
	;ljmp mmain
				;if "clear" then set f_0
	setb f_0		;
	ljmp keyok7		;


sl_wait7:
	cjne a,#kb_en,sl_wait0

	lcall key_ok

        jnb f0,sale_wait

	ljmp mmain


sl_wait0:
        jnc sl_wait5

	lcall kb_deal


sl_wait5:jnb  f_typ,sl_wait6
	lcall card_test

	jnb rf_chk,sale_wait         ;Card On

	ljmp card_pullout
sl_wait6:

	ljmp   sale_wait



;=========================================
;=========================================
;       Pos Save
;=========================================
pos_save:
	clr f_a_s
	mov regt,#dslep

pos_sv_loop:
	lcall key_in

	lcall deal_func_kb

	;--------------------
	;   Read  Card
	;--------------------
	lcall card_read

	jnb rf_chk,save_deal_card

	;
	djnz regt,pos_sv_loop


	jb b_chk,save_bat_err

	jnb f_com,save_no_comm

	mov reg1,#dfcom
	inc reg0
	clr f_off
	ljmp mmain


save_no_comm:
	setb f_pow

	jnb f_off,save_plus_disp

	mov reg1,#nfcom
	inc reg0
	ljmp mmain


save_plus_disp:
;;;;;;;;clr mifs_rst

	mov r_err,#4
	lcall get_code

	ljmp no_shift


save_bat_err:
	ljmp bat_err


	;-------------------
	;  Deal Card
	;-------------------
save_deal_card:

	jb f0,save_d_0

	ljmp deal_error          ;Read Err

	;--------------
	;  Read Succ
	;--------------
save_d_0:
        jb  f_typ,save_d_00
        lcall divsub
        setb f_id

save_d_00:

	mov r0,#rf1ram
	mov adr_h,@r0
	inc r0
	mov adr_l,@r0

	jb f_com,save_online       ;OnLine

	;lcall get_accounts         ;OffLine

	;sjmp save_comp

	ljmp save_err

	;--------------
	;  Receie Zh
	;--------------
save_online:
	mov sata,#0         ;
	setb f_zh
	clr f_pow

	mov r2,#255		;old 130

save_comm_wait:
	jnb f_zh,savecomp

	lcall disp

	djnz r2,save_comm_wait

        clr f_id
	clr f_zh
	mov r_err,#err_13             ;Comm Err
	setb f_pow

	ljmp deal_error

        ;------------
save_rf_off:
	setb f_pow
	clr  f_zh
        clr  f_id
	ljmp card_pullout

	;---------------------
	;  Comp ZH for Read && Receive
	;---------------------
savecomp: jb f_typ,save_comp

        mov r0,#r_buf
        mov r1,#rf1ram

        mov adr_h,@r0
        mov @r1,adr_h
        inc r0
        inc r1

        mov adr_l,@r0
        mov @r1,adr_l


save_comp:
	setb f_pow
	lcall comp_accounts

        jb f0,save_comp_succ

	ljmp deal_error            ;comp zh Err


save_comp_succ:
	mov r0,#r_buf
	inc r0
	inc r0
	mov a,state
	;----------------
	;Save Normal
	;----------------
	cjne a,#norsave,save_err

	jb f_cny,save_normal

	cjne @r0,#3,save_12_err

	ljmp saver_card

	;-------------------
	;  Alrm  Err 012
	;-------------------
save_12_err:
	mov r_err,#err_12
	ljmp deal_error


	;-------------------
	;  Alrm  Err 015
	;-------------------
save_err: mov r_err,#err_15
	ljmp deal_error


save_normal:
	cjne @r0,#1,save_err

	clr f_tj

	clr f_rat

	mov r0,#d_exp2
	mov r1,#sur_rm5

	lcall bin2dec

	mov c,bit_c
	mov f_m_p,c
	mov f_p_m,c

	mov r0,#d_sur2
	mov r1,#lim_rm5

	lcall bin2dec

	lcall clear_input

	;----------------
save_wait:

	lcall key_in

	mov a,v_key

        jb  f_n,sv_wait7
        cjne a,#kb_cl,sv_wait7  ;
        LJMP LLL
        ;ljmp mmain

sv_wait7:
	cjne a,#kb_en,sv_wait0

LLL:	lcall key_ok

	jnb f0,save_wait

	ljmp mmain


sv_wait0: jnc sv_wait5

	lcall kb_deal


sv_wait5:
        jnb  f_typ,sv_wait6
	lcall card_test

	jnb rf_chk,save_wait         ;Card On

	ljmp card_pullout

sv_wait6:ljmp   save_wait


;-------------------------------
;       Saver Card Deal
;-------------------------------
testt:  ;;
saver_card:
	mov r0,#madr_h
	mov @r0,adr_h
	inc r0
	mov @r0,adr_l
	;
	mov r_err,#2
	lcall get_code

	mov r0,#ddsp05
	mov r1,#ddsp15

	lcall call_pos_name

saver_loop:
	mov r7,#2
saver_lp4:
        mov r2,#100
saver_lp0:
        lcall  key_in
        mov    a,v0_key
        cjne   a,#kb_cl,saver_lp3
        ljmp   saver_ret

saver_lp3:
        djnz r2,saver_lp0
        djnz r7,saver_lp3

        lcall  clrbp
	mov r4,#0
saver_lp5:
	mov r3,#0
        djnz r3,$
        djnz r4,saver_lp5
        lcall  setbp

saver_ret:
	setb f_cny
	clr f_a_s

	lcall key_in
	lcall key_in

	ljmp mmain


;-------------------------------
;      Error  Alrm
;-------------------------------
deal_error:
	lcall error_code
        mov   r7,#3

dl_er0: lcall clrbp

	mov r4,#15
	lcall d0lay

	lcall setbp

        mov r2,#8

dl_er2: lcall disp

	djnz r2,dl_er2

	mov r4,#0
	mov r3,#0


dl_er4: djnz r3,dl_er4

	djnz r4,dl_er4

        djnz r7,dl_er0


dl_er5: ;;lcall key_in
	;;lcall key_in
	mov a,r_err	;
	cjne a,#0ch,qiu1	; 判断是不是ERR 012 报警,是的话就自动回传数据
	ljmp fuwei	; 关闭管理器中的帐户,以便下一次可以正确的靠卡
qiu1:   cjne a,#9,qiu
        ljmp fuwei

qiu:	mov a,r_err
	cjne a,#16,rett	;判断刚才的告警是不是016告警

	mov r7,#100
lp:	lcall key_in		;是的话就调用判键子程序
	mov a,v_key
	cjne a,#kb_en,pl
	ljmp fuwei		;是按下的ENTER键就跳

pl:	djnz r7,lp
rett:	ljmp mmain		;不是的话就直接返回主程序


fuwei:	mov r0,#dflag		;write flag
	mov a,state
	mov c,f_com
	mov acc.7,c
	MOV A,#3		;
	mov @r0,a

⌨️ 快捷键说明

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