4986|5

14

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

BCD码件减一的问题 [复制链接]

在程序中,我们会遇到BCD码加或减一并用数码管显示的情况,加一容易理解,用INC指令,然后DA A就可以得到正确的计算,
在减一的时候,你用DEC指令,再DA A,会出问题。问题是这样的,一个字节表示两位BCD码,DEC 指令只减一低位,减到0时,
不是返回9,而是5,并且不向高四位借位,所以高位数不变化。为什么?
  如果把减法变成加法来写程序,减一就变成了加负一的补数,如果-1H的补数是99H的话,计算结果正确。那么,-1H的补数是
99H吗,为什么不是FFH?
  如果每一次减2,那-2的补数是98H吗?
  我是菜鸟一个,请高手帮我分析一下,不胜感谢!
此帖出自51单片机论坛

最新回复

如果你用INC在BCD码的9上面再加1会正确吗?  详情 回复 发表于 2013-6-15 09:03
点赞 关注
 

回复
举报

28

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
一般不建议对BCD码直接进行加减运算
正常情况下直接对十六进制数进行加减,显示之前转换成相应BCD码即可

附十六进制转BCD代码,该代码是我工作过程中一直在用的,希望能帮到你:

;******************************************************
;change: HEX to  BCD  code
; input:  TempRam11,TempRam12,TempRam13
;output:  TempRam1, TempRam2, TempRam3, TempRam4, TempRam5, TempRam6
;Temp  :  Buffer0, Buffer1 ,Buffer2,Buffer3 ,Buffer4
;******************************************************
_Ftob:      
          clrf           TempRam1
          clrf           TempRam11
Sub10k:
          clrf           TempRam2
Sub10kLoop:
          movlw      10h
          subwf       TempRam13,0
          movwf      Buffer2
          movlw      27h
          subwfc     TempRam12,0
          movwf      Buffer1
          movlw      0
          subwfc     TempRam11,0
          btfss        STATUS,C
          goto        Sub1k
          movwf      TempRam11
          movff      Buffer1,TempRam12
          movff      Buffer2,TempRam13
          incf         TempRam2,1
          goto       Sub10kLoop
Sub1k:
          clrf         TempRam3
Sub1kLoop:
          movlw       0e8h
          subwf       TempRam13,0
          movwf      Buffer2
          movlw      03h
          subwfc     TempRam12,0
          btfss         STATUS,C
          goto         Sub100
          movwf      TempRam12
          movff      Buffer2,TempRam13
          incf       TempRam3,1
          goto        Sub1kLoop
Sub100:
          clrf       TempRam4
Sub100Loop:
          movlw      64h
          subwf      TempRam13,0
          movwf      Buffer2
          movlw      0
          subwfc     TempRam12,0
          btfss      STATUS,C
          goto       Sub10
          movwf      TempRam12
          movff      Buffer2,TempRam13
          incf       TempRam4,1
          goto        Sub100Loop
Sub10:
          clrf       TempRam5
Sub10Loop:
          movlw      10
          subwf      TempRam13,0
          btfss      STATUS,C
          goto       Sub1
          movwf      TempRam13
          incf       TempRam5,1
          goto        Sub10Loop
Sub1:
          movff      TempRam13,TempRam6
          return
此帖出自51单片机论坛

点评

感谢大家的帮助,你的程序很好用!谢谢你!  详情 回复 发表于 2013-6-17 17:24
 
 
 

回复

4008

帖子

0

TA的资源

版主

板凳
 
这是因为计算机用二进制,人类熟悉十进制,bcd码是二进制模拟十进制实际上什么进制都不是
此帖出自51单片机论坛
 
 
 

回复

173

帖子

0

TA的资源

纯净的硅(初级)

4
 
如果你用INC在BCD码的9上面再加1会正确吗?
此帖出自51单片机论坛

点评

会正确,有进位。谢谢你的回复!  详情 回复 发表于 2013-6-17 17:30
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 沙发 goalpeak 的帖子

感谢大家的帮助,你的程序很好用!谢谢你!
此帖出自51单片机论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 4楼 ahshmj 的帖子

会正确,有进位。谢谢你的回复!
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表