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

📄 bcda.bak

📁 bcd 码转hex码
💻 BAK
字号:
mend_data_bytes data    40h     ; 要修改的字节数
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:   进行扣费及LED码变换
;  calls:  bcdb(多字节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          ;被减数的地址,
                mov r1,#warning1                ;减数的地址
                mov r7,mend_data_bytes
                lcall bcdb                      ;判断金额是否小于报警金额
                jnc mend_data_dec               ;
                setb lack_of_money              ;小于则置缺钱标志位
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          ;被减数的地址,
                mov r1,#dec_unit1               ;减数的地址
                mov r7,mend_data_bytes
                lcall bcdb                      ;开始扣费
                jnc mend_data_save              ;判断金额是否小于扣费单位
                setb no_money                   ;小于则置无钱标志位
                sjmp mend_data_div
mend_data_save: mov r0,#money_high              ;把修改后的金额保存在待写进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
; 把金额分离成三字节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
 ;再转换成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:    多字节bcd 码加法
;   usage register:     r0, r1, r2, r7 ,C
;   r7: 相加的字节数, r0:被加数的地址, r1:加数的地址
;   C: 进位
;-------------------------------------
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:    多字节bcd 码减法
;   usage register:     A, r0, r1, r2, r3, r7,psw
;   r7: 相减的字节数, r0:被减数的地址, r1:减数的地址
;   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:    多字节bcd 码取补
;   usage register:     r0,  r2, r3, psw
;   r7: 字节数, r0:操作数的地址,
;-------------------------------------
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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -