STL 程序
刘玉蓉
发布于2014-10-13 17:38
3
0
标签:
1、在程序中 L 4 和 L L#4 有什么区别
2、 A #iSlowFast
JC M001
L #in11
JU M002
M001: L #in12
M002: L 5 // norm a speed value
*I
T #_PO2_Speed
A #iBackwards // set direction
JCN M003
L -1
*I
T #_PO2_Speed
M003: NOP 0
中程序是怎么执行的 ? 运行完 M001 后怎么执行呢 或执行完M002后呢 ?
3、L DW#16#8 它怎么会是指针呢 ?
T MD 2
L DBW [MD 2] 怎么会是执行 L DBW1 了呢
A DBX [MD 2] 怎么会是 A DBX1.0 了呢
4、LAR1 P##_PO1 其中 #P01 是input ,外部调用时管脚 输入是IW100
L LW [AR1,P#0.0]
T #oPO_1
我感觉还是有点迷糊 ,理解不透彻!
佳答案
要理解 指令的L 4 和 L L#4之间的区别,有必要了解存储器的间接寻址的概念,其中L 4是将数字2#0000_0000_0000_0100装入累加器1(即16位整数常数);而后者涉及到存储器间接寻址的问题,L L#4 是将32位的整数常数4装入累加器1(为32位整数常数)。所以上述指令的含义是不同的。
由于UC是无条件调整指令,所以运行完 M001后继续执行M002后的指令,即如果有快慢信号,跳转到M001处执行,如果无快慢信号,则将暂态变量in11的数据装载到累加器1中。如果有快慢信号,将整数常数5与暂态变量in12的数据相乘,并保存到暂态变量_PO2_Speed中(位置2的速度)。如果有向后的信号指令,将整数常数-1与(整数常数5与暂态变量in12的数据)相乘(16位)的结果相乘,并保存到暂态变量_PO2_Speed中(位置2的速度值)
L DW#16#8 //将32位的十六进制常数8装入累加器1中,即2#0000 0000 0000 1000
T MD 2 //将32位的常数传送到MD2中
L DBW [MD 2] 中的MD2称为地址指针(参考存储器间接寻址内容),其里边的数值代表地址,即DBW2(数据块字),即将数据字DBW2装入累加器1中,按照存储器间接寻址,MD2=2#0000 0000 0000 1000,其中位0到2为被寻址中位的编号,即字节位的编号为2#000=0,位3-18位为被寻址字节的字节编号2#0000 0000 0000 1=1,即字节为1
A DBX [MD 2] //DBX为数据位,按照上述分析,DBX[DM2]=DBX1.0
4、LAR1 P##_PO1 其中 #P01 是input ,外部调用时管脚 输入是IW100,其中为指针寻址(输入过程映像寄存器字,区域标识符为IW),这里为100,将地址100写入AR1
L LW [AR1,P#0.0]//AR1=100=2#0000 0000 0110 0100,P#0.0为偏移量=2#0000 0000 0000 0 000(后3位为位号),AR1加偏移量为100.0,所以L LW [AR1,P#0.0]为L LW100.0