|
前不久,遇见多为网友同行发帖询问DB块内部指针寻址的原理和编程问题。抽空翻出十几年前的项目,找到合适的案例,特分享如下。案例有3方面的示范内容。
1,指针的计算和寻址编程;
2,循环指令的编程;
3,BCC的计算算法;
分享案例是用于通讯校验和BCC的计算,实际项目案例,经过运行验证。程序借用注意事项:
4,如果寻址的单元不同于案例,无论byte、word、dword,模仿案例的计算思路,修改即可。
5,求和注意循环次数对应的求和单元的长度。
6,案例代码如下:
FUNCTION "BCC Calculation" : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
DB_no : BLOCK_DB ;
StartDBBno : INT ;
Byte_Len : INT ;
END_VAR
VAR_OUTPUT
BCC : BYTE ;
END_VAR
VAR_TEMP
Loopcounter : BYTE ;
XorWordSumLoByte : BYTE ;
XorWordSum : WORD ;
END_VAR
BEGIN
NETWORK
TITLE =
OPN #DB_no;
L P#0.0;
TAR1 ;
L #StartDBBno;
DEC 1; //因为DBB(x)是DBW(x-1)的低字节
L P#1.0;
*I ;
+AR1 ;
L 0;
T #XorWordSum;
L #Byte_Len;
next: T #LoopCounter;
L #XorWordSum;
L DBW [AR1,P#0.0];
XOW ;
T #XorWordSum;
+AR1 P#1.0;
L #LoopCounter;
LOOP next;
L #XorWordSum;
T #XorWordSumLoByte;
L #XorWordSumLoByte;
T #BCC;
END_FUNCTION
|
|