想吃火锅鸡
级别: 正式会员
精华主题: 0
发帖数量: 14 个
工控威望: 83 点
下载积分: 526 分
在线时间: 14(小时)
注册时间: 2021-08-21
最后登录: 2024-08-20
查看想吃火锅鸡的 主题 / 回贴
楼主  发表于: 2021-09-01 17:28
图片:
图片:
初学定位控制,在书中出现3U新增位元件的介绍。
n为寄存器D编号,0-8511
b为寄存器中二进制位的编号,0-F
把H8421送入D0,其最高位为1。
则位元件D0.F常开点闭合,驱动D0.3
同时,当D0.3被驱动后,D0中的b3位由0变1,此时D0中的数发生变化
由H8421变为H8429
H8421换算为二进制 1000  0100  0010  0001
H8429换算为二进制 1000  0100  0010  1001
可以看出b3位由0变1,所以H8421变为H8429,到这里可以理解。
但是从监视模式中读取D0数值可以发现,把H8421送入D0中时,D0为-31711,D0变为H8429时,D0为-31703
-31711转二进制   1 111  1011  1101  1111
-31703转二进制   1 111  1011  1101  0111
最左边1表示正负,其余15位表示数值,也是b3位变化,
但是-31711的二进制化为十六进制是FBDF
-31703的二进制化为十六进制FBD7,并不是上面的8421和8429。
请高手赐教上面的进制换算问题出在哪里?
想吃火锅鸡
级别: 正式会员
精华主题: 0
发帖数量: 14 个
工控威望: 83 点
下载积分: 526 分
在线时间: 14(小时)
注册时间: 2021-08-21
最后登录: 2024-08-20
查看想吃火锅鸡的 主题 / 回贴
1楼  发表于: 2021-09-01 20:19
感谢解答,初学考虑不周,疏忽了最基础的问题非常感谢



引用
引用第1楼菜鸟入行于2021-09-01 17:32发表的  :
H8421太大了。 相当于K33825.  已经超过了单字节D可以存储的上限,所以变成负数了。

在32767以内,你的算法是对的。

超过32767,要用DMOV ,会占用D0和D1,这样才能按你的算法来。