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

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

用PICC如何实现16位二进制数转化为BCD码?

[复制链接]
跳转到指定楼层
1#
发表于 2009-3-28 14:18:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是说要求代码少,速度快。
我发现用一般的除以10000,1000,100,10这样运算占用的空间太大了。
2#
 楼主| 发表于 2009-3-28 14:18:52 | 只看该作者
定义Count1,Count2一下就可直接调用  
  
  ;----------------------------------------
;-------BIN CONVERT BCD CODE PROGRAM-----
;---IN:Count1(个位)     OUT:Count2(十位)
;----------------------------------------

BIN_BCD:
          movwf   Count1
          CLRF    Count2
LOOP10:
          MOVLW   .10
          SUBWF   Count1,W
          BTFSS   STATUS,C
          GOTO    BIN_BCD90       ;Count1<10

          INCF    Count2,F           ;Count1>=10
          MOVLW   .10
          SUBWF   Count1,F
          GOTO    LOOP10
BIN_BCD90:
          swapf   Count2,W
          andlw   0F0h
          iorwf   Count1,W      
          return
回复 支持 反对

使用道具 举报

3#
 楼主| 发表于 2009-3-28 14:19:33 | 只看该作者
8K的ROM还是不够用。
可以用减法的
while(var>=10000){
   var=var-10000;
   i=i+1;
}
   bcd[0]=i;
   i=0;
while(var>=1000){
   var=var-1000;
   i=i+1;
}
   bcd[1]=i;
   i=0;
while(var>=100){
   var=var-100;
   i++;
}
   bcd[2]=i;
   i=0;
while(var>=10){
   var=var-10;
   i++;
}
   bcd[3]=i;
   bcd[4]=var;
}
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-12-26 08:29 , Processed in 0.055628 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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