英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 3195|回复: 0
打印 上一主题 下一主题

PIC单片机无符号BCD减法子程序

[复制链接]
跳转到指定楼层
1#
发表于 2009-5-6 09:58:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
<!--StartFragment-->;*******************无符号 BCD 减法***************
;
;       This routine performs a 2 Digit Unsigned BCD Subtraction.
; It is assumed that the two BCD numbers to be subtracted are in
; locations Num_1 & Num_2. The result is the difference of Num_1 & Num_2
; ( Num_2 - Num_1) and is stored in location Num_2 and the overflow carry
; is returned in location Num_1.
;
;   Performance :
;               Program Memory  :       31
;               Clock Cycles    :       21  ( worst case )
;
;*******************************************************************
;
Num_1   equ     8       ; Overflow flow carry overwrites Num_1
result  equ     8
;
Num_2   equ     9       ; Num_2 - Num_1 overwrites Num_2
O_flow  equ     9
;
;其它寄存器自己定义
;
BCDSub
movf    Num_1,w
subwf   Num_2
clrf    Num_1
rlf     Num_1
btfss   STATUS,DC
goto    adjst1
btfss   Num_2,3         ; Adjust LSD of Result
goto    Over_1
btfsc   Num_2,2
goto    adjst1          ; Adjust LSD of Result
btfss   Num_2,1
goto    Over_1          ; No : Go for MSD
adjst1
movlw   6
subwf   Num_2
Over_1
btfss   Num_1,0         ; CY = 0 ?
goto    adjst2          ; Yes, adjust MSD of result
clrf    Num_1
btfss   Num_2,7         ; No, test for MSD >9
RETLW   0
btfsc   Num_2,6
goto    adjst2
btfss   Num_2,5
RETLW   0
adjst2
movlw   60              ; add 6 to MSD
subwf   Num_2
clrf    Num_1
btfss   STATUS,CARRY    ; test if underflow
RETLW   0
movlw   1
movwf   Num_1
Over
RETLW   0
;
;********************************************************************
;      测试程序(注意用法,Num_2-Num_1=Num_2)
;*********************************************************************
main
movlw   23
movwf   Num_1      ; Set Num_1 = 23
movlw   99
movwf   Num_2      ; Set Num_2 = 99
call    BCDSub     ; After subtraction, Num_2 = 76 ( 99-23 )
;                          ;  and Num_1 = 0 ( indicates positive result )
;
self    goto    self   ; 如不是测试程序,本句无用
;
org     1FF
goto    main
;
END
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-4-26 22:23 , Processed in 0.051991 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表