📄 pos149.asm
字号:
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 + -