关于51单片机乘法运算到显示的问题

[复制链接]
5157|11
 楼主| dancer314 发表于 2011-3-25 17:10 | 显示全部楼层 |阅读模式
我有个疑惑啊。。。
最近在做一个实验
超声波测距仪

其他的问题应该都好解决了
但是碰到了个计算上的问题
我用定时器得到了一个时间值
和声速相乘可以得到距离值,然后到显示
但是我不知道这样的程序应该怎么去做
例如,195*17=3315
如 (R0)=195  (R1)=17
那么相乘怎么做?并且还要可以方便显示 也就是把3315分别放到4个字节当中
 楼主| dancer314 发表于 2011-3-25 17:14 | 显示全部楼层
自己顶一个
ayb_ice 发表于 2011-3-25 17:28 | 显示全部楼层
建议先别做实验了,先去看书吧
 楼主| dancer314 发表于 2011-3-25 17:38 | 显示全部楼层
书看了一些,但是没有想到什么办法,主要是死路的问题
 楼主| dancer314 发表于 2011-3-25 17:41 | 显示全部楼层
PCB板都打好了!最后一个问题,望解决
流行音乐 发表于 2011-3-25 17:43 | 显示全部楼层
看二进制转十进制的书。
wangyy608 发表于 2011-3-25 17:47 | 显示全部楼层
除10的余数
sjy1979 发表于 2011-3-26 11:48 | 显示全部楼层
给你一个参考程序,希望对你有帮助
;===============================================================================
; 伪随机数函数的线性叠加
; 计算种子 = 种子 * 69069 + 1
;-------------------------------------------------------------------------------
; 输入:
;   R_Seed0 <--- 种子0
;   R_Seed1 <--- 种子1
;   R_Seed2 <--- 种子2
;   R_Seed3 <--- 种子3
; 回返:
;   种子0 ---> R_Seed0
;   种子1 ---> R_Seed1
;   种子2 ---> R_Seed2
;   种子3 ---> R_Seed3
; 重写
;   R_Temp,R_Temp+1,R_Temp+2,R_Temp+3
;--------------------------------------------------------------------------------
;   空间: 173个字节
;   速度: F_RandomSeed 326个周期
;================================================================================
F_RandomSeed:
         LDA    R_Seed0         ; R_Temp= 种子 *2
         ASL
         STA    R_Temp
         LDA    R_Seed1
         ROL
         STA    R_Temp+1
         LDA    R_Seed2
         ROL
         STA    R_Temp+2
         LDA    R_Seed3
         ROL
         STA    R_Temp+3
         CLC                    ; R_Temp= R_Temp+ 种子 (= 种子 *3)
         LDA    R_Seed0
         ADC    R_Temp
         STA    R_Temp
         LDA    R_Seed1
         ADC    R_Temp+1
         STA    R_Temp+1
         LDA    R_Seed2
         ADC    R_Temp+2
         STA    R_Temp+2
         LDA    R_Seed3
         ADC    R_Temp+3
         STA    R_Temp+3
         CLC                    ; 种子 = 种子 +$10000* 种子
         LDA    R_Seed2
         ADC    R_Seed0
         TAX                    ; 把字节2保存在X中(利于提高速度)
         LDA    R_Seed3
         ADC    R_Seed1
         TAY                    ; 把字节3保存在Y中
         CLC                    ; 种子 = 种子 +$100* 种子
         LDA    R_Seed1
         ADC    R_Seed0
         PHA                    ; 压入堆栈字节1
         TXA
         ADC    R_Seed1
         TAX
         TYA
         ADC    R_Seed2
         TAY
         LDA    R_Temp          ; R_Temp= R_Temp*4(= 旧种子 *$0C)
         ASL
         ROL    R_Temp+1
         ROL    R_Temp+2
         ROL    R_Temp+3
         ASL
         ROL    R_Temp+1
         ROL    R_Temp+2
         ROL    R_Temp+3
         STA    R_Temp
         CLC                    ; 种子 = 种子 +R_Temp
         ADC    R_Seed0
         STA    R_Seed0
         PLA                    ; 弹出堆栈的字节1
         ADC    R_Temp+1
         STA    R_Seed1
         TXA
         ADC    R_Temp+2
         TAX
         TYA
         ADC    R_Temp+3
         TAY
         CLC
         LDA    R_Temp          ; 种子 = 种子 + R_Temp*$100
         ADC    R_Seed1
        STA    R_Seed1

评分

参与人数 1威望 +1 收起 理由
dancer314 + 1

查看全部评分

bnyuli 发表于 2011-3-26 13:42 | 显示全部楼层
楼上的对吗  求高手解答
XIANSir 发表于 2011-3-26 14:46 | 显示全部楼层
int a=195;
int b =17;
int c = a*b;

乘法运算!
justrong 发表于 2011-3-30 16:37 | 显示全部楼层
有相关乘法算法(BCD)的。我曾用过但很长时间喽给忘了。源程序装在电脑里做大巴时又被贼给偷走了。其思想就像小学学乘法时摆式子的那种。乘数是放在R0,R1间址的数组里,最后输出结果就是您要的那种。
chunyang 发表于 2011-3-30 23:48 | 显示全部楼层
讲究精度的乘法运算需要计算方法,不能直接进行,有关算法去看MCU教材中的软件部份。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

10

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部