?? bcda.bak
字號(hào):
mend_data_bytes data 40h ; 要修改的字節(jié)數(shù)
ten_yuan_led data 41h
yuan_led data 42h
jiao_led data 43h
money_high data 44h
money_low data 45h
crc_data1 data 46h
crc_data2 data 47h
dec_unit1 data 48h
dec_unit2 data 49h
warning1 data 4ah
warning2 data 4bh
money_high_bak data 50h
money_data_bak data 51h
;---------------
sign data 20h
lack_of_money bit 00h
no_money bit 01h
org 0100h
start: mov 30h,#01h
mov 31h,#02h
mov 32h,#03h
mov 33h,#04h
mov 34h,#05h
mov 35h,#06h
mov 36h,#07h
mov 37h,#08h
mov 38h,#09h
mov 39h,#01h
mov 3ah,#01h
mov 3bh,#01h
mov 3ch,#01h
mov 3dh,#0ah
mov r0,#30h
mov r1,#32h
mov r7,#2
mov r6,#6
add_lop: acall bcda
inc r1
inc r1
djnz r6,add_lop
sjmp $
;-------------------------------------------------
; name: mend_data
; func: 進(jìn)行扣費(fèi)及LED碼變換
; calls: bcdb(多字節(jié)BCD碼減法)
; InPara: money_high, money_high_bak, mend_data_bytes
; OutPara: ten_yuan_led, yuan_led , jiao_led
; usage register: A, r0, r1, r2, r3, r7,psw
;-------------------------------------------------
mend_data: mov r0,#money_high
mov r1,#money_high_bak
mov r2,#2
mend_data_bak1: mov a,@r0
mov @r1,a
inc r0
inc r1
djnz r2,mend_data_bak1
mov r0,#money_high_bak ;被減數(shù)的地址,
mov r1,#warning1 ;減數(shù)的地址
mov r7,mend_data_bytes
lcall bcdb ;判斷金額是否小于報(bào)警金額
jnc mend_data_dec ;
setb lack_of_money ;小于則置缺錢標(biāo)志位
mend_data_dec: mov r0,#money_high
mov r1,#money_high_bak
mov r2,#2
mend_data_bak2: mov a,@r0
mov @r1,a
inc r0
inc r1
djnz r2,mend_data_bak2
mov r0,#money_high_bak ;被減數(shù)的地址,
mov r1,#dec_unit1 ;減數(shù)的地址
mov r7,mend_data_bytes
lcall bcdb ;開始扣費(fèi)
jnc mend_data_save ;判斷金額是否小于扣費(fèi)單位
setb no_money ;小于則置無錢標(biāo)志位
sjmp mend_data_div
mend_data_save: mov r0,#money_high ;把修改后的金額保存在待寫進(jìn)IC卡的單元
mov r1,#money_high_bak
mov r2,#2
mend_data_save1:mov a,@r1
mov @r0,a
inc r0
inc r1
djnz r2,mend_data_save1
; 把金額分離成三字節(jié)BCD 碼,
mend_data_div: mov ten_yuan_led,money_high
mov a,money_low
anl a,#0f0h
swap a
mov yuan_led,a
mov a,money_low
anl a,#0fh
mov jiao_led,a
;再轉(zhuǎn)換成LED碼
mov r2,#3
mov dptr,#led_tab
mov r0,#ten_yuan_led
mend_data_led: mov a,@r0
movc a,@a+dptr
mov @r0,a
inc r0
djnz r2,mend_data_led
ret
mend_data_ret:
;--------------------------------------
; name: bcda
; func: 多字節(jié)bcd 碼加法
; usage register: r0, r1, r2, r7 ,C
; r7: 相加的字節(jié)數(shù), r0:被加數(shù)的地址, r1:加數(shù)的地址
; C: 進(jìn)位
;-------------------------------------
bcda: mov a,r7
mov r2,a
add a,r0
mov r0,a
mov a,r2
add a,r1
mov r1,a
clr c
bcd1: dec r0
dec r1
mov a,@r0
addc a,@r1
da a
mov @r0,a
djnz r2,bcd1
ret
;--------------------------------------
; name: bcdb
; func: 多字節(jié)bcd 碼減法
; usage register: A, r0, r1, r2, r3, r7,psw
; r7: 相減的字節(jié)數(shù), r0:被減數(shù)的地址, r1:減數(shù)的地址
; c:借位
;-------------------------------------
bcdb: lcall neg1
lcall bcda
cpl c
mov f0,c
lcall neg1
mov c,f0
ret
neg1: mov a,r0
xch a,r1
xch a,r0
lcall neg
mov a,r0
xch a,r1
xch a,r0
ret
;--------------------------------------
; name: neg
; func: 多字節(jié)bcd 碼取補(bǔ)
; usage register: r0, r2, r3, psw
; r7: 字節(jié)數(shù), r0:操作數(shù)的地址,
;-------------------------------------
neg: mov a,r7
dec a
mov r2,a
mov a,r0
mov r3,a
neg0: clr c
mov a,#99h
subb a,@r0
mov @r0,a
inc r0
djnz r2,neg0
mov a,#9ah
subb a,@r0
mov @r0,a
mov a,r3
mov r0,a
ret
;---------------------------------------------------
led_TAB: DB 03H,0DBH,45H,51H,99H
DB 31H,21H,5BH,01H,11H
;---------------------------------------------------
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -