在一个形参快FC中,有一段:
L#IN5//mb1
L#IN6//1
/I
SRD16
L0
<>I
O#IN3//图控的手自动选择
=#OUT8
这个FC主要是控制PID手自动、手动设定值的,上面参数中注释就是调用FC时给的一组参数。mb1是一个在OB35中每秒循环加1的变量,不会主动清零,监控程序时发现mb1加到最大值后自动变成负最大值后继续。
疑惑的是:mb1一个字节最大也就255,被右移16位那肯定是0啊,为何要与0比较呢?
这点看不懂,希望大家帮忙看看,谢谢!
ASs='html_titleimg_p' STyle='text-align:CEnter;'>
最佳答案
不必疑惑,了解整数除法后累加器1中是怎样的结果后就不疑惑了。
1、mb1一个字节最大也就255,被右移16位那肯定是0啊?
不一定为0,因为mb1还要与#IN6作整数除法。mb1与#IN6作整数除法,余数保存在累加器1的高字,商保存在累加器1的低字中。
2、SRD16:累加器1的32位右移16位,即只保存上述除法的余数。换言之,是在取余数。
提问者对于答案的评价:
感谢两位的回答,我忽略了整数相除后会得到32位的结果,我这里实参mb1还是除以了1,所以余数是0,右移还是0。不清楚编程者在这里的用途。