以下是引用rubyzd在2012/5/3 8:19:14的发言:
这是FX2N 2AD手册上的程序,有点看不明白 ,第三行取的8位数据,第四行用的16位,这样的话,实际有效位应该就只有8位。那是如何实现12位,,0到4000的数值的啊?
首先,您的理解存在误差。
让我们来看看FROM指令的含义:
其中最后的参数K代表要读取的BFM的点数,而最后第二个保存参数则是保存的软元件地址。
因此,通过您的FROM指令,实际:
BFM#0读入到了K2M100中,虽然BFM#0是16位,但其保存在8位的存储中,其高8位自然丢弃。
BFM#1读取到了K2M108中,仍然高8位被丢弃。
再看看特殊功能手册对于2AD的BFM的定义:
可以看到,在BFM#0的低8位,存储的是当前值的低8位数据,而在BFM#1中的低4位,存储的是当前值的高4位值。
那么BFM#0的低8位,已经存储在K2M100中,而BFM#1的低8位,已经存储在K2M108中,那么K2M100与K2M108合并,不就是写成K4M100中么,由于M108其地址本身就是比M100高,那么K2M108的低4位与K2M100合并后不就是自然形成了高4位,也就是9~11位的数值了么。
因此,MOV K4M100就是读取了当前值。
您产生理解上的误差源自于对于FROM的指令的理解不透,您错误的理解了保存位置,也就是K2M100的意义。
Good Luck~