讀取絕對(duì)值編碼器程序
劉玉蓉
發(fā)布于2014-10-22 17:53
11
0
標(biāo)簽:
這是讀取編碼器數(shù)值程序的一部分,各位幫忙看一下
程序段1:
L #ADDR
L 8
*I
LAR1
L PID[AR1,P#0.0]
T #DI_OUT
程序段2:
L DW#16#FFFFFF
AD
DTR
T #OUT
有幾個(gè)問(wèn)題請(qǐng)教大家:
1:#ADDR在程序中為DP從站,即編碼器的起始地址,為什么要乘8呢?
2:假設(shè)#ADDR為100,那么L PID[AR1,P#0.0]這句指令操作的地址是不是外設(shè)輸入雙字800呢?如果不是,那應(yīng)該是多少?
3:程序段2中為什么要使用AD指令呢?
佳答案
有幾個(gè)問(wèn)題請(qǐng)教大家:
1:#ADDR在程序中為DP從站,即編碼器的起始地址,為什么要乘8呢?
這是由32位指針的格式?jīng)Q定的,因?yàn)橹羔樀暮?位存放的是位地址,例如指針指向DB1.DBX1.2,那么后3位就是010,在你的應(yīng)用中,你的指針指向的是你在硬件組態(tài)中為編碼器指定的地址,例如100,那么你的指針實(shí)際是指向100.0,后3位為000,因此必須將你的#ADDR(100)左移3位(也就是*8).
2:假設(shè)#ADDR為100,那么L PID[AR1,P#0.0]這句指令操作的地址是不是外設(shè)輸入雙字800呢?如果不是,那應(yīng)該是多少?
如上面所述,L PID[AR1,P#0.0]實(shí)際上是L PID 100
3:程序段2中為什么要使用AD指令呢?
AD FFFFFF指令的目的是將32位寄存器ACCU1的前8位屏蔽掉(變?yōu)?),保留后面的24位狀態(tài)