打印

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

[复制链接]
4225|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 | 只看该作者
书看了一些,但是没有想到什么办法,主要是死路的问题

使用特权

评论回复
5
dancer314|  楼主 | 2011-3-25 17:41 | 只看该作者
PCB板都打好了!最后一个问题,望解决

使用特权

评论回复
6
流行音乐| | 2011-3-25 17:43 | 只看该作者
看二进制转十进制的书。

使用特权

评论回复
7
wangyy608| | 2011-3-25 17:47 | 只看该作者
除10的余数

使用特权

评论回复
8
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
9
bnyuli| | 2011-3-26 13:42 | 只看该作者
楼上的对吗  求高手解答

使用特权

评论回复
10
XIANSir| | 2011-3-26 14:46 | 只看该作者
int a=195;
int b =17;
int c = a*b;

乘法运算!

使用特权

评论回复
11
justrong| | 2011-3-30 16:37 | 只看该作者
有相关乘法算法(BCD)的。我曾用过但很长时间喽给忘了。源程序装在电脑里做大巴时又被贼给偷走了。其思想就像小学学乘法时摆式子的那种。乘数是放在R0,R1间址的数组里,最后输出结果就是您要的那种。

使用特权

评论回复
12
chunyang| | 2011-3-30 23:48 | 只看该作者
讲究精度的乘法运算需要计算方法,不能直接进行,有关算法去看MCU教材中的软件部份。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

10

帖子

1

粉丝