📄 pos.asm
字号:
;-----------------------
; Edit PosName
;-----------------------
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
;;;;;;;mov beg_h,#0
;;;;;;;mov beg_l,#0
;;;;;;;mov end_h,#0
;;;;;;;mov end_l,#0
dec regt
ed_p0:
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 ;Edit PostName
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
;=========================================
; Main Loop
;=========================================
mmain: setb f_f
lcall shift
no_shift:
lcall write_sc ;Write ID && Sc
lcall upt_sl ;Send SaleData of Offline
; jb f_pow,on_power
;
; lcall clrsum ;Clear Sum
;
;on_power:
;;ljmp pos_save ;;test pos save
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 ;Disp PosName
sjmp pos_wait
p_wl01: cjne a,#k_f13,p_wl03
lcall tmdisp ;Disp Date && Time
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 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:
;;;;;;;;clr mifs_rst
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
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 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
ljmp deal_error ;comp zh Err
sale_comp_succ:
mov r0,#r_buf
inc r0
inc r0
mov a,state
;----------------
;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 A,ICARD_SC1
;CLR C
;ADD A,#1
;MOV ICARD_SC1,A
;MOV A,ICARD_SC0
;ADDC A,#0
;MOV ICARD_SC0,A
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:
;|+|+|+|+|+|+|+|+|+|+|+|+|+||+|+|+|+|+|+
; mov r3,#78h
;sl: mov r4,#7h
; djnz r4,$
; djnz r3,sl ;10ms
;
; djnz r6,dd
; mov r6,#0ffh
; djnz r5,dd ;记次3000次
;ljmp mmain
;+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+
;dd: nop
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 ;
cjne a,#0ch,qiu ; 判断是不是ERR 012 报警,是的话就自动回传数据
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
lcall put_date ;write name,date,time
mov r0,#dadr_h ;write address
mov @r0,adr_h
inc r0
mov @r0,adr_l
mov r0,#d_exp0 ;write #0ff to expens addr and surplus addr
mov r3,#6
llp: mov @r0,#0ffh
inc r0
djnz r3,llp
lcall w_sale ;
lcall key_in
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -