MSP430一段程序读不懂求助!!
答案:3 悬赏:20 手机版
解决时间 2021-03-13 07:45
- 提问者网友:兔牙战士
- 2021-03-12 08:19
MSP430一段程序读不懂求助!!
最佳答案
- 五星知识达人网友:孤独入客枕
- 2021-03-12 09:09
这是用左移来实现乘法的例子,因为在单片机里,没有乘法器的话,实现乘法需要很多的时钟周期,作为一种替代,用移位的方法能够轻松实现×2、×4、×8......,因为单片机要实现移位很容易。
例如,caltmp << 5 ,就是caltmap 二进制左移 5位,假设caltsrc=0b011=3,左移五位就成了 0x01100000=96,实现了×32。
这样第二条式子就很好理解了, caltmp = (caltmp << 5) + Hex_Val; 实际上就是
caltmp=caltmp×32+caltmp=caltmp×33 了,下面也一样。
最后一条,左移相当于相乘,那右移自然就相当于除法了。caltmp>>12=caltmp÷2^12追问谢谢
那他为什么要把16进制的数先乘以33 然后在乘以10 最后除以2的12次方,这是怎么转换的?
那我要写一个数乘以55的话 按照这种写法是不是这么写:
caltmp = (caltmp << 5)+(caltmp << 4)+(caltmp << 2)+(caltmp << 1)+Hex_Val;?
除了这个,还有别比较好的表示方法么?
例如,caltmp << 5 ,就是caltmap 二进制左移 5位,假设caltsrc=0b011=3,左移五位就成了 0x01100000=96,实现了×32。
这样第二条式子就很好理解了, caltmp = (caltmp << 5) + Hex_Val; 实际上就是
caltmp=caltmp×32+caltmp=caltmp×33 了,下面也一样。
最后一条,左移相当于相乘,那右移自然就相当于除法了。caltmp>>12=caltmp÷2^12追问谢谢
那他为什么要把16进制的数先乘以33 然后在乘以10 最后除以2的12次方,这是怎么转换的?
那我要写一个数乘以55的话 按照这种写法是不是这么写:
caltmp = (caltmp << 5)+(caltmp << 4)+(caltmp << 2)+(caltmp << 1)+Hex_Val;?
除了这个,还有别比较好的表示方法么?
全部回答
- 1楼网友:不想翻身的咸鱼
- 2021-03-12 10:55
恩,这个为何这么转换我也不懂,只想说写这个的人是不是太刁了,放着简单的不写追问除了这个,还有别比较好的表示方法么?追答直接称啊
- 2楼网友:举杯邀酒敬孤独
- 2021-03-12 09:45
代码的意思,生命联络员已经跟你解释清楚了,我给你解释一下为什么这么算。
MSP430的ADC参考电压是3.3V,ADC的位数是12位。所以
采样的电压值 = 转换出来的值 * 330 / (2的12次方)。
这里把电压值放大了100倍,为什么呢?为了计算更快捷,无论什么处理器,整型运算肯定会快于浮点运算的,而且快的不只是一点点,你自己回忆一下浮点变量是几位的,而整型变量又是几位的;还为了更方便的把电压值显示到LCD上面,例如显示330,只要人为的加一个小数点就可以了。而3.30,如果不做处理直接显示的话,只能显示为3V,小数点部分没有了,因为液晶只能显示字符型变量。
你试想一下,如果采样电压大于等于3.30V参考电压,转换出来的是什么值,没错,就是0FFFH,也就是2^12,这是它的最大量程。
MSP430的ADC参考电压是3.3V,ADC的位数是12位。所以
采样的电压值 = 转换出来的值 * 330 / (2的12次方)。
这里把电压值放大了100倍,为什么呢?为了计算更快捷,无论什么处理器,整型运算肯定会快于浮点运算的,而且快的不只是一点点,你自己回忆一下浮点变量是几位的,而整型变量又是几位的;还为了更方便的把电压值显示到LCD上面,例如显示330,只要人为的加一个小数点就可以了。而3.30,如果不做处理直接显示的话,只能显示为3V,小数点部分没有了,因为液晶只能显示字符型变量。
你试想一下,如果采样电压大于等于3.30V参考电压,转换出来的是什么值,没错,就是0FFFH,也就是2^12,这是它的最大量程。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯