回答出此问题的人算高人了

已锁定

张国金

  • 帖子

    62
  • 精华

    0
  • 被关注

    1

论坛等级:游侠

注册时间:2006-10-24

普通 普通 如何晋级?

回答出此问题的人算高人了

1257

13

2008-10-06 15:58:57

请教各位高人一个编程问题,下面的这段代码是西门子标准块里面的“先进先出”功能块,他只能对单字的数据进行“先进先出”处理,我现在需要对双字的数据做“先进先出”处理,请高人看看这段程序怎么修改才能达到这个要求。
AR1 := Start address of table

L P##TABLE // ACC1 := Ptr to start of table
LAR1 // AR1 := Ptr to start of table
L W#16#0 // ACC1 := 0
L W [AR1,P#0.0] // Memory reference byte 0..1 ; ACC2 := 0
==I // if(memory reference byte 0..1 = DB#)
JZ IF01 // {
T #BLOCK_NO // ACC1 := DB#
OPN DB [#BLOCK_NO] // Open DB#
IF01: NOP 0 // }
L D [AR1,P#2.0] // ACC1 := Starting address of table
LAR1 // AR1 := Starting address of table

// Check if table is empty

L W#16#0 // ACC1 := 0
L W [AR1,P#2.0] // ACC1 := TABLE[1] // # of entries
==I // if(TABLE[1] = 0)
JZ FAIL // { FAIL }

// Remove "FIRST IN" entry from table

L W [AR1,P#4.0] // ACC1 := TABLE[3]
T #RET_VAL // FIFO := TABLE[3]

// Decrement # of entries by 1. Then, if # of entries = 0 then EXIT

L W [AR1,P#2.0] // TABLE[1] := TABLE[1] - 1
L 1 // .
-I // .
T W [AR1,P#2.0] // .
JZ EXIT // if(TABLE[1] = 0 { EXIT }

// Shift remaining entries down in the table

+AR1 P#4.0 // for(COUNT = # of entries; COUNT <> 0; COUNT -1)
L001: T #CNTR // {
L W [AR1,P#2.0] // .
T W [AR1,P#0.0] // .
+AR1 P#2.0 // AR1 := AR1 + 2 bytes
L #CNTR // .
LOOP L001 // }
EXIT: SET // RL0 := 1
JU SBR // .
FAIL: CLR // RLO := 0
SBR: SAVE // Set BR indicating function success or failure
回答出此问题的人算高人了 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。