📄 p31n-v1.1.2.asm
字号:
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
lcall ifchipflash
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 pos_wait ;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:
cjne a,#k_f10,p_wl05
lcall kf10
sjmp pos_wait
p_wl05:
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
;--------------------
next88:
mov a,yida
cjne a,#01h,next88 ;g
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
mmain1:
mov reg1,#35
lcall disp
ljmp mmain
;-------------------
; 卡处理
;-------------------
sale_deal_card:
;-------------------
jb f_com,www99
jnb f_off,mmain1
www99:
;-------------------
jb f0,sale_d_0 ;
ljmp deal_error ;Read Err
;------------------
; Read Succ
;--------------
sale_d_0:
jb f_typ,sale_d_00
lcall divsub ;取模
mov r0,#rf1ram
mov r1,#rf3ram
mov r2,#8
lcall copy_s
setb f_id
sale_d_00:
mov r0,#rf1ram
mov adr_h,@r0
inc r0
mov adr_l,@r0
mov r2,#200
lop11:
jb f_com,sale_online ;OnLine
nop
nop
nop
nop
nop
nop
djnz r2,lop11
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
mov r7,#2
sale_comm_wait:
jnb f_zh,salecomp
;; lcall card_test
;; jb rf_chk,sale_card_off
lcall disp
djnz r2,sale_comm_wait
mov r2,#255
djnz r7,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,#0fh
mov r6,#0ffh
;++++++++++++++++
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
nex_cl:
setb f_0 ;if "clear" then set 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:
;--------------------------------------
; 继续读卡
;--------------------------------------
lcall card_read
; jnb rf_chk,sale_deal_card1 ;判断有无读到卡
ajmp sl_wait61
sale_deal_card1:
lcall divsub ;取模
setb f_id
mov r0,#rf1ram
inc r0
inc r0
inc r0
mov r1,#rf3ram
inc r1
inc r1
inc r1
; 比较帐号是否相等
mov r7,#5
bijiao1:
mov a,@r0
mov b,@r1
cjne a,b,nex109
inc r0
inc r1
djnz r7,bijiao1
sl_wait61:
djnz r6,nex108
mov r6,#0ffh
djnz r5,nex108
ljmp nex_cl
nex108:
;-----------------------
jbc f_err0,nex_cl
;-----------------------
ljmp sale_wait
nex109:
lcall closezh
mov r0,#rf1ram
mov r1,#rf3ram
mov r2,#8
lcall copy_s
ljmp sale_d_00
;=========================================
;=========================================
; 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
mov r0,#rf1ram
mov r1,#rf3ram
mov r2,#8
lcall copy_s
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
;--------------
mov r5,#0fh
mov r6,#0ffh
;--------------
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:
;--------------------------------------
; 继续读卡
;--------------------------------------
lcall card_read
jnb rf_chk,sale_deal_card2 ;判断有无读到卡
ajmp nex222
sale_deal_card2:
lcall divsub ;取模
setb f_id
mov r0,#rf1ram
inc r0
inc r0
inc r0
mov r1,#rf3ram
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -