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

📄 pos149.asm

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

	clr a
	mov beg_h,a
	mov beg_l,a
	mov end_h,a
	mov end_l,a		;首尾指针清零
	lcall w_end

	lcall chip_erase


edit:
    sjmp edit_pos_name

	;-------------------
	; 键盘坏
	;--------------------
kb_err:
    mov r_err,#err_1

err_dp:
    lcall error_code
	lcall clrbp

	mov r4,#30
	lcall d0lay

	lcall setbp

	mov r4,#60
	lcall d0lay

	lcall check_battery

	sjmp test_k




	;-----------------------
	;  编辑终端机机号
	;-----------------------
edit_pos_name:
	mov regt,#1

	mov a,end_h
	cjne a,beg_h,ed_p0

	mov a,end_l
	cjne a,beg_l,ed_p0

	dec regt

ed_p0:
	dec regt
	lcall get_pos_name

ed_p1:
    lcall key_in
	mov a,v_key
	cjne a,#kb_cl,ed_p2

	mov regt,#1

ed_p2:
    cjne a,#k_f12,ed_p8

	lcall set_pn                  ;编辑机号
	mov regt,#1

ed_p8:
    lcall check_battery

	djnz regt,ed_p1


	lcall clrsum			;清除消费累加和
	;
	mov scon,#11110000b     ;sm0 sm1 sm2 ren tb8 rb8 ti ri
	;------
	mov tmod,#11h
	mov tcon,#00000001b     ;TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
	;
	mov th1,#dt1_h
	mov tl1,#dt1_l
	setb tr1

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

	setb ea

	mov reg1,#dfcom



;=========================================
;        主程序循环
;=========================================
mmain:
    lcall setbp
    setb f_f
	lcall shift

no_shift:
	lcall write_sc          ;Write ID && Sc

	lcall upt_sl            ;Send SaleData of Offline

	mov a,state
	anl a,#3
	mov b,a
	rl a
	add a,b
	mov dptr,#m_tab
	jmp @a+dptr

m_tab:
    ljmp pos_wait           ;Pos Waitting
	ljmp pos_sale           ;Pos Sale
	ljmp pos_save           ;Pos Save
	ljmp card_server        ;Card Server



;=========================================
;=========================================
;       Pos Waitting
;=========================================
pos_wait:
	mov r_err,#7
	lcall get_code

pos_w_loop:
	lcall key_in

	mov a,v_key
	cjne a,#kb_f1,p_wl01

	lcall  key_f1              ;显示终端机号
	sjmp pos_wait


p_wl01:
    cjne a,#k_f13,p_wl03

	lcall tmdisp               ;显示日期和时间
	sjmp pos_wait


p_wl03:
    cjne a,#k_f14,p_wl04

	lcall key_zj              ;Test Keyboard && DispCode
	sjmp pos_wait


p_wl04:
    jb b_chk,p_wl08

	mov a,state
	jz pos_w_loop

	ljmp mmain


p_wl08:
    ljmp bat_err             ;Battery Error



;=========================================
;=========================================
;        消费状态
;=========================================
pos_sale:
    setb rf_chk		;rf_chk=0,读到卡
	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


	;-------------------
	;  卡处理
	;-------------------
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

	jb f_com,sale_online      ;OnLine

	lcall get_accounts         ;OffLine

	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 card_test

;;	jb rf_chk,sale_card_off

	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	;f0=1,比较正确

	ljmp deal_error            ;比较错误,根据ERR值进行报警


sale_comp_succ:			;比较正确
	mov r0,#r_buf
	inc r0
	inc r0			;标志位
	mov a,state

	;----------------
	;   计次消费
	;----------------
	cjne a,#countfunc,sale_d_3

	jnb f_com,sale_err	;

	clr f_rat

	cjne @r0,#1,sale_err	;判断标志是否正常

	ljmp sale_counter


	;------------------
	;     定额消费
	;------------------
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		;=0ff,表示脱机消费

	;----------------
	; 脱机消费
	;----------------
	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	;
	mov a,@r0		;test
	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
	 			;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
	ajmp sl_wait6

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 card_test

;;	jb rf_chk,save_rf_off       ;Card Off

	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
        ;;ljmp testt         ;;test
        ;;setb   f0            ;;test

        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	;在非0号机上进行存款时,在没有靠管理卡时,出现err 012后,该卡就不能
	cjne a,#0ch,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		;不是的话就直接返回主程序

⌨️ 快捷键说明

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