📄 rc500-1.asm
字号:
MOV A,YE2
SUBB A,#42H
MOV A,YE3
SUBB A,#0FH ;对读出的数据进行校验,超过即有问题,退出
JNC CHARGE_ERR ;数据大于允许的最大值,退出,未通过验证
MOV A,YE1
JNZ CHARGE_000
MOV A,YE2
JNZ CHARGE_000
MOV A,YE3
JNZ CHARGE_000
SJMP CHARGE_ERR
CHARGE_000:
MOV A,S1XF
CJNE A,#00H,CHARGE_001
LJMP XFONE
CHARGE_001:
CJNE A,#01H,CHARGE_002
LCALL XFDZ
SJMP CHARGE_RET1
CHARGE_002:
CJNE A,#02H,CHARGE_003
LCALL XFALL
SJMP CHARGE_RET1
CHARGE_003:
CJNE A,#03H,CHARGE_004
LCALL XFFGD ;
SJMP CHARGE_RET1
CHARGE_004:
MOV S1XF,#00H ;在消费方式设置出错时,改为默认消费方式即非固定消费方式
SJMP CHARGE
CHARGE_ERR:
LCALL ERRSPEAK
CHARGE_NO:
LCALL CDISBUF
MOV DIS_BUF+5,#0
CHARGE_RET1:
JNB FCS,CHARGE_RET
MOV SFBC,#0 ;如果现在用的是测试卡呢,则清除消费累计标志
LCALL WXFJE
LCALL RXFJE
CHARGE_RET:
RET
;---------------------------------------------------
;非固定消费方式
XFFGD:
LCALL DISYE ;显示余额
MOV JSQ_SPEAK,#20
CLR SPEAK
SETB WORKLED
MOV WDT,#3FH ;喂狗
MOV JSQ_LOCAL_LOOP,#80 ;定时显示1S
CLR FLAG2
JNB FLAG2,$
MOV WDT,#3FH
MOV NUM1,#4
XFFGD_01:
MOV KQE,#1
LCALL KK
JB CERR,LCHARGE_RET
JB FZERO,LCHARGE_RET
DJNZ NUM1,XFFGD_01
MOV NUM1,#6
XFFGD_02:
MOV KQE,#1
SETB FSD
LCALL KK
JB CERR,LCHARGE_RET
JB FZERO,LCHARGE_RET
DJNZ NUM1,XFFGD_02
MOV NUM1,#4
XFFGD_03:
MOV KQE,#10
LCALL KK
JB CERR,LCHARGE_RET
JB FZERO,LCHARGE_RET
DJNZ NUM1,XFFGD_03
MOV NUM1,#6
XFFGD_04:
MOV KQE,#10
SETB FSD
LCALL KK
JB CERR,LCHARGE_RET
JB FZERO,LCHARGE_RET
DJNZ NUM1,XFFGD_04
MOV NUM1,#4
XFFGD_05:
MOV KQE,#100
LCALL KK
JB CERR,LCHARGE_RET
JB FZERO,LCHARGE_RET
DJNZ NUM1,XFFGD_05
MOV NUM1,#6
XFFGD_06:
MOV KQE,#100
SETB FSD
LCALL KK
JB CERR,LCHARGE_RET
JB FZERO,LCHARGE_RET
DJNZ NUM1,XFFGD_06
SJMP XFFGD_07
LCHARGE_RET:
SJMP XFFGD_RET
XFFGD_07:
MOV JSQ_SPEAK,#30
CLR SPEAK
SETB WORKLED
MOV WDT,#3FH
MOV JSQ_LOCAL_LOOP,#100
CLR FLAG2
JNB FLAG2,$
MOV WDT,#3FH
MOV R0,#RF_SBUF
MOV @R0,#2
INC R0
MOV @R0,#0
INC R0
MOV @R0,#0
INC R0
MOV @R0,#0
LCALL PCD_WRITE
JB CERR,XFFGD_RET
MOV A,XFE1
ADD A,YE1
MOV XFE1,A
MOV A,XFE2
ADDC A,YE2
MOV XFE2,A
MOV A,XFE3
ADDC A,YE3
MOV XFE3,A
XFFGD_RET:
MOV A,XFE1
JNZ XFFGD_XF
MOV A,XFE2
JNZ XFFGD_XF
MOV A,XFE3
JNZ XFFGD_XF
LJMP CHARGE_NO
XFFGD_XF:
LCALL DISYE
MOV LASTXF1,XFE1
MOV LASTXF2,XFE2
MOV LASTXF3,XFE3
LJMP CHARGE_RET2 ;转消费退出部分
;---------------------
;
XFDZ:
MOV KQE,#DZKKE
LCALL KK
JB CERR,XFDZ_RET
JB FZERO,XFDZ_01
LCALL DISYE
MOV JSQ_LOCAL_LOOP,#150
CLR FLAG2
MOV WDT,#3FH
JNB FLAG2,$
MOV LASTXF1,XFE1
MOV LASTXF2,XFE2
MOV LASTXF3,XFE3
LJMP CHARGE_RET2 ;转整个消费程序退出部分
XFDZ_01:
LCALL ERRSPEAK
XFDZ_RET:
LCALL CDISBUF
MOV DIS_BUF+5,#0
RET
;-----------------------------------------
;一次扣完消费方式
XFALL:
MOV NUM1,#ALLSD
XFALL_01:
MOV WDT,#3FH
LCALL CDISBUF
MOV JSQ_LOCAL_LOOP,#10
CLR FLAG2
JNB FLAG2,$
LCALL DISYE
MOV JSQ_LOCAL_LOOP,#10
CLR FLAG2
JNB FLAG2,$
DJNZ NUM1,XFALL_01
MOV WDT,#3FH
MOV R0,#RF_SBUF
MOV @R0,#2
INC R0
MOV @R0,#0
INC R0
MOV @R0,#0
INC R0
MOV @R0,#0
LCALL PCD_WRITE
JB CERR,XFALL_RET
MOV JSQ_SPEAK,#20
CLR SPEAK
SETB WORKLED
MOV XFE1,YE1
MOV XFE2,YE2
MOV XFE3,YE3
LCALL WALLXF
MOV LASTXF1,XFE1
MOV LASTXF2,XFE2
MOV LASTXF3,XFE3
CLR A
MOV XFE1,A
MOV XFE2,A
MOV XFE3,A
MOV YE1,A
MOV YE2,A
MOV YE3,A
MOV SFBC,#0
LCALL WXFJE
LCALL DISYE
MOV WDT,#3FH
MOV JSQ_LOCAL_LOOP,#100
CLR FLAG2
JNB FLAG2,$
LJMP CHARGE_RET2 ;转消费退出部分
XFALL_RET:
LCALL CDISBUF
MOV DIS_BUF+5,#0
RET
;-------------------------------------------
;立刻发送
XFONE:
MOV LASTXF1,#0
MOV LASTXF2,#0
MOV LASTXF3,#0
LCALL DISYE
MOV JSQ_LOCAL_LOOP,#100
CLR FLAG2
MOV WDT,#3FH
MOV JSQ_SPEAK,#10
SETB WORKLED
CLR SPEAK
JNB FLAG2,$ ;首先显示1S钟余额
XFONE0:
MOV A,S5XM
CJNE A,#0,XFONE1
XFONE0_01:
MOV JSQ_LOCAL_LOOP,#50
CLR FLAG2
LCALL KKONE
JB CERR,XFONE0_RET ;扣款过程出错,退出
CLR FWRITEXF
LCALL SENDONE
JNB FLAG2,$
SJMP XFONE0_01
XFONE0_RET:
LJMP XFONE_RET
XFONE1:
CJNE A,#1,XFONE2
XFONE1_01:
MOV NUM1,#9
XFONE1_02:
MOV JSQ_LOCAL_LOOP,#50
CLR FLAG2
LCALL KKONE
JB CERR,XFONE1_RET ;扣款过程出错,退出
JNB FLAG2,$
DJNZ NUM1,XFONE1_02
MOV JSQ_LOCAL_LOOP,#50
CLR FLAG2
LCALL KKONE
JB CERR,XFONE1_RET ;扣款过程出错,退出
CLR FWRITEXF
LCALL SENDONE
JNB FLAG2,$
SJMP XFONE1_01
XFONE1_RET:
LJMP XFONE_RET
XFONE2:
CJNE A,#2,XFONE3
XFONE2_01:
MOV NUM1,#99
XFONE2_02:
MOV JSQ_LOCAL_LOOP,#50
CLR FLAG2
LCALL KKONE
JB CERR,XFONE2_RET ;扣款过程出错,退出
JNB FLAG2,$
DJNZ NUM1,XFONE2_02
MOV JSQ_LOCAL_LOOP,#50
CLR FLAG2
LCALL KKONE
JB CERR,XFONE2_RET ;扣款过程出错,退出
CLR FWRITEXF
LCALL SENDONE
JNB FLAG2,$
SJMP XFONE2_01
XFONE2_RET:
LJMP XFONE_RET
XFONE3:
CJNE A,#3,XFONE4
XFONE3_01:
MOV JSQ_LOCAL_LOOP,#50
CLR FLAG2
LCALL KKONE
JB CERR,XFONE3_RET ;扣款过程出错,退出
MOV NUM1,#10
XFONE3_02:
CLR FWRITEXF
LCALL SENDONE
DJNZ NUM1,XFONE3_02
JNB FLAG2,$
SJMP XFONE3_01
XFONE3_RET:
LJMP XFONE_RET
XFONE4:
CJNE A,#4,XFONE5
XFONE4_01:
MOV JSQ_LOCAL_LOOP,#50
CLR FLAG2
LCALL KKONE
JB CERR,XFONE4_RET ;扣款过程出错,退出
MOV NUM1,#100
XFONE4_02:
CLR FWRITEXF
LCALL SENDONE
DJNZ NUM1,XFONE4_02
JNB FLAG2,$
SJMP XFONE4_01
XFONE4_RET:
LJMP XFONE_RET
XFONE5:
MOV S5XM,#0
LJMP XFONE0
XFONE_RET:
MOV XFE1,#0
MOV XFE2,#0
MOV XFE3,#0
MOV SFBC,#0
LCALL WXFJE
LCALL CDISBUF
MOV DIS_BUF+5,#0
RET
CHARGE_RET2: ;有消费退出
;-------------------------
MOV R0,#REC_DATA
MOV @R0,#50H
INC R0
MOV @R0,XFE1
INC R0
MOV @R0,XFE2
INC R0
MOV @R0,XFE3
MOV LEN,#4
LCALL GET_EDC
LCALL SEND
RET
;-------------------------------------------------------
;
KKONE:
MOV WDT,#3FH
CLR C
MOV A,YE1
SUBB A,#1
MOV YE1,A
MOV A,YE2
SUBB A,#0
MOV YE2,A
MOV A,YE3
SUBB A,#0
MOV YE3,A
JC KKONE_ERR
MOV R0,#RF_SBUF
MOV @R0,#2
INC R0
MOV @R0,YE1
INC R0
MOV @R0,YE2
INC R0
MOV @R0,YE3
LCALL PCD_WRITE
JB CERR,KKONE_ERR
JB FCS,KKONE_01 ;如果为测试卡则数据不进入累计
MOV XFE1,#1
MOV XFE2,#0
MOV XFE3,#0
LCALL WALLXF
KKONE_01:
LCALL DISYE
MOV A,LASTXF1
ADD A,#1
MOV LASTXF1,A
CLR A
ADDC A,LASTXF2
MOV LASTXF2,A
CLR A
ADDC A,LASTXF3
MOV LASTXF3,A
CLR CERR
MOV JSQ_SPEAK,#10
CLR SPEAK
SETB WORKLED
SJMP KKONE_RET
KKONE_ERR:
SETB CERR
KKONE_RET:
RET
;---------------------------------------
;
KK:
MOV WDT,#3FH
CLR FZERO
CLR C
MOV A,YE1
SUBB A,KQE
MOV R2,A
MOV A,YE2
SUBB A,#0
MOV R3,A
MOV A,YE3
SUBB A,#0
MOV R4,A
JC KK_ZERO ;现在出现不够减的情况,置相应的标志位
MOV YE1,R2
MOV YE2,R3
MOV YE3,R4
MOV R0,#RF_SBUF
MOV @R0,#2
INC R0
MOV @R0,YE1
INC R0
MOV @R0,YE2
INC R0
MOV @R0,YE3
LCALL PCD_WRITE
JB CERR,KK_RET
MOV JSQ_SPEAK,#15
SETB WORKLED
CLR SPEAK
MOV A,XFE1
ADD A,KQE
MOV XFE1,A
MOV A,XFE2
ADDC A,#0
MOV XFE2,A
MOV A,XFE3
ADDC A,#0
MOV XFE3,A
;----------------------------------------
;保存消费额,单次的
MOV SFBC,#01
LCALL WXFJE ;写消费金额
LCALL RXFJE ;读取消费金额
;----------------------------------------
JB FSD,KK_02 ;转闪动显示部分
KK_01:
LCALL DISYE
MOV JSQ_LOCAL_LOOP,#100
CLR FLAG2
JNB FLAG2,$
SJMP KK_RET
KK_02:
MOV A,NUM1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -