找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2608|回复: 15
收起左侧

PIC33单片机乘法器小数模式的如何计算的疑问?

[复制链接]
ID:959891 发表于 2021-10-19 15:20 | 显示全部楼层 |阅读模式
本帖最后由 yermsir 于 2021-10-19 15:37 编辑

PIC33单片机乘法器小数模式,是小数转换为Q15的形式,然后进行计算。转换成Q15的形式是单片机自己转换的,还是程序员转换完成然后赋值给寄存器的。
比如,将W4平方并将结果加到ACCB中的指令语句:MAC W4*W4,B。 比如我要算0.5的平方,然后加到累加器B中,W4中直接赋值0.5这种小数,还是要赋值32768。
芯片说明资料有两个例子,请帮忙看看累加器中B的结果是如何计算出来的?希望能够给出详细点的计算过程。
捕获.JPG
回复

使用道具 举报

ID:401564 发表于 2021-10-20 15:54 | 显示全部楼层
这个是硬件乘法器,计算过程是硬件执行的,不是软件计算的
你只要知道,你要进行什么运算,通过控制寄存器来选择运算选项就可以了
再看一下用不用读取输出,有的编译器是直接就是浮点型结果,有的是则是保存在某个寄存器,需要读取的
这个专业性很强的,没有真正用过的人也只能是给个指导性知识而已,真正的,还是要你自己去看的
回复

使用道具 举报

ID:883242 发表于 2021-10-20 17:07 | 显示全部楼层
Y_G_G 发表于 2021-10-20 15:54
这个是硬件乘法器,计算过程是硬件执行的,不是软件计算的
你只要知道,你要进行什么运算,通过控制寄存器来选 ...

Q15是定点(fixed point)数,你只见过float point,鉴定完毕。
回复

使用道具 举报

ID:401564 发表于 2021-10-20 18:15 | 显示全部楼层
Hephaestus 发表于 2021-10-20 17:07
Q15是定点(fixed point)数,你只见过float point,鉴定完毕。

我见过什么数跟楼主的"PIC33单片机乘法器小数模式"主题有什么关系吗?
回复

使用道具 举报

ID:959891 发表于 2021-10-20 18:37 | 显示全部楼层
Y_G_G 发表于 2021-10-20 15:54
这个是硬件乘法器,计算过程是硬件执行的,不是软件计算的
你只要知道,你要进行什么运算,通过控制寄存器来选 ...

我还是想要知道附图中,例子计算的结果是怎么来的,这样我心里会对小数的计算才有把握。
回复

使用道具 举报

ID:401564 发表于 2021-10-20 20:08 | 显示全部楼层
yermsir 发表于 2021-10-20 18:37
我还是想要知道附图中,例子计算的结果是怎么来的,这样我心里会对小数的计算才有把握。

没有用过16位单片机,不知道
我只用过8位的,一般都是编译器处理的,不需要去了解汇编方面的运算,在C语言中有乘除运算,就会对应的生成乘除法汇编指令,单片机内部自动用乘法器运算
至于这个数怎么来的,不知道
我以前只用过PIC的8位机,而且是汇编,汇编没有小数正负数的说法
回复

使用道具 举报

ID:883242 发表于 2021-10-20 20:50 | 显示全部楼层
好吧,我把数给你算出来了,不要听那个啥都不懂的呱噪。
76AE * 76AE * 2 + FE98344500 = FF063E0188

这里面最关键的是莫名其妙出现的这个2,你的原数是16位Q15格式,如果直接按整数平方,得到一个32位的整数结果,如果把它看成是Q定点格式,那么将是Q30格式——平方之前小数点在第15位前,平方后小数点在第30位前,而是Q30格式定点数是没啥用的,要转成更通用的Q31格式才好用,毕竟把Q51的低16位扔掉就回到了Q15格式,太方便了。

从表达的数字上讲可以这么分析
76AE(Q15)= 0.927185
76AE(Q15)^2 = 3704DE44(Q31) = 0.429836     ——这个结果显然是错的,差了2倍。
76AE(Q15)^2 *2 = 6E09BC88(Q31) = 0.859672

6E09BC88 + FE98344500 = FF063E0188

完美的解释了你的例2!!!
回复

使用道具 举报

ID:401564 发表于 2021-10-20 22:23 | 显示全部楼层
Hephaestus 发表于 2021-10-20 20:50
好吧,我把数给你算出来了,不要听那个啥都不懂的呱噪。
76AE * 76AE * 2 + FE98344500 = FF063E0188

我是不懂这个运算,因为我之前一直是用汇编的,没有定点数这个概念,所以我不会这个
你既然知道,又是在这个论坛逛的,就没有必要数落我,我一没得罪你,二我也说了并不会这个
很显然,我来这的目的和你是不一样的
我一个是打发时间,二个是相互学习
而你,我不知道,当然,也不想知道
回复

使用道具 举报

ID:883242 发表于 2021-10-20 22:40 | 显示全部楼层
Y_G_G 发表于 2021-10-20 22:23
我是不懂这个运算,因为我之前一直是用汇编的,没有定点数这个概念,所以我不会这个
你既然知道,又是在这个 ...

我负责的第一个电子项目是一个压力计,核心算法用最小二乘法拟合标定数据,中间就是用Q31定点数运算,写了3000行8051汇编。

定点数跟汇编没有你死我活的关系,相反有很多位操作,用汇编实现更方便,关键是你要理解定点数。如果你什么都不懂,就闭嘴,随便置喙只能被人笑掉大牙。
回复

使用道具 举报

ID:401564 发表于 2021-10-21 09:05 | 显示全部楼层
Hephaestus 发表于 2021-10-20 22:40
我负责的第一个电子项目是一个压力计,核心算法用最小二乘法拟合标定数据,中间就是用Q31定点数运算,写 ...

好的,我知道了
回复

使用道具 举报

ID:959891 发表于 2021-10-21 10:54 | 显示全部楼层
Hephaestus 发表于 2021-10-20 22:40
我负责的第一个电子项目是一个压力计,核心算法用最小二乘法拟合标定数据,中间就是用Q31定点数运算,写 ...

谢谢您的回复,让我了解了Q15小数的运算规则。我用您的方法来计算例1,却发现结果和例子对不上。
计算过程如下:
A022(Q15)=-0.7489624
A022(Q15)^2  = 642A8484
A022(Q15)^2 *2 = C8550908(Q31) =1.56509507
而真正的结果为:(-0.7489624)*(-0.7489624)=-0.56094467
可见我的计算是错误的,例1和例2的区别就是负数和正数,网上查了一些资料,但是都是间接的说明,自己还是悟不透,您能不能进一步解释一下例1是怎么计算出来的?
回复

使用道具 举报

ID:883242 发表于 2021-10-21 12:25 | 显示全部楼层
yermsir 发表于 2021-10-21 10:54
谢谢您的回复,让我了解了Q15小数的运算规则。我用您的方法来计算例1,却发现结果和例子对不上。
计算过 ...

A022是负数啊!对应的绝对值相同的正数是5FDE,他的平方就是47CD0908,不就是你例1里面你用蓝笔勾出来的20000000+47CD0908=67CD0908吗?
回复

使用道具 举报

ID:959891 发表于 2021-10-21 14:37 | 显示全部楼层
Hephaestus 发表于 2021-10-21 12:25
A022是负数啊!对应的绝对值相同的正数是5FDE,他的平方就是47CD0908,不就是你例1里面你用蓝笔勾出来的2 ...

https://blog.csdn.net/yanxiaopan/article/details/76853040
我在这个网站上看到Q15格式的数,直接把两个负数相乘,右移15位就可以得到结果。比如网址中举例:-0.5*-0.5。
‘’对于Q15,例如计算-0.5×-0.5,0.5表示为二进制为0100000000000000,取反加1后为1100000000000000,则-0.5×-0.5的二进制相乘结果为10010000000000000000000000000000,右移15位,得到10010000000000000‘’

难道Q15的负数,并不是两个负数直接相乘?而是先转化为正数,然后再相乘?
回复

使用道具 举报

ID:883242 发表于 2021-10-21 15:04 | 显示全部楼层
yermsir 发表于 2021-10-21 14:37
https://blog.csdn.net/yanxiaopan/article/details/76853040
我在这个网站上看到Q15格式的数,直接把两 ...

瞎扯淡,那个网页举得栗子就是特殊情况,-0.5和+0.5只差一个符号位所以可以得到正确答案,你算个-0.25试试?去掉符号位-0.25不就变成0.75了???

说了半天你还是没弄懂Q15是什么,以16位Q15为例:
0~7fff表示0~0.99999
ffff~8000表示-0.00001~-1.0
回复

使用道具 举报

ID:959891 发表于 2021-10-21 15:19 | 显示全部楼层
Hephaestus 发表于 2021-10-21 15:04
瞎扯淡,那个网页举得栗子就是特殊情况,-0.5和+0.5只差一个符号位所以可以得到正确答案,你算个-0.25试 ...

您批评的是,网页的确是举例的特殊情况,我被误导了,谢谢您的指教,我明白了。
回复

使用道具 举报

ID:959891 发表于 2021-10-21 15:31 | 显示全部楼层
本帖问题已经解决,感谢论坛大神的帮助。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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