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

📄 p31n-v1.1.2.asm

📁 一卡通源码程序是我公司的一卡通源码程序,绝对难得
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	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 + -