请帮忙解答(STEP7 V5.2编程)

已锁定

伊默

西门子1847工业学习平台

  • 帖子

    4262
  • 精华

    118
  • 被关注

    220

论坛等级:至圣

注册时间:2003-10-24

白金 白金 如何晋级?

请帮忙解答(STEP7 V5.2编程)

570

3

2004-11-22 18:04:23

我用网上的**软件打开了标准库里的FC95(功能为把十六进制数转换为相应的ASCII),可是前面一些地方实在不明白,请高手指教,程序如下:
TAR2 #TEMP_AR2 // Save Address register 2 contents
// If length to be converted is 0, return immediately
L #N
L 0
==I
JC DONE

// Open DB of ptr to hex input digits
L P##IN
LAR1 // Addr.Reg1 = Ptr to Src. Table
L W [AR1,P#0.0] // load Block No. into accum 1
T #BLKNO // scrblk = Block No.
OPN DB [#BLKNO] // opens 1st Block, DB
L D [AR1,P#2.0] // load Block Area Reference
LAR1 // load Block Addr.(area ref.)into Addr.Reg1
//---------------------------------------------------------------------------
// Open ptr to output Ascii Locations as a DI
L P##OUT
LAR2 // Addr.Reg2 = Ptr to Output
L W [AR2,P#0.0] // load Block No. into accum 1
L 0 // CORRECTION ADDED BY STEVE LOVELL 5/98
==I
JZ BEGN
L W [AR2,P#0.0] // CORRECTION ADDED BY STEVE LOVELL 5/98
T #BLKNO // scrblk = Block No.
OPN DI [#BLKNO] // opens DI Block

//
// START OF CORRECTION ADDED BY STEVE LOVELL 5/98
//
L DW#16#5000000 // OR mask for DIX memory area in ptr
L D [AR2,P#2.0] // load Block Area Reference; start addr.
OD // Force memory area to DIX
LAR2 // Save into AR2
JU BEG2 // Jump to label BEG2
//
// END OF CORRECTION
//

BEGN: L D [AR2,P#2.0] // start addr.
LAR2 // load Block Addr.(area ref.)into Addr.Reg1
BEG2: NOP 0 // CORRECTION ADDED BY STEVE LOVELL 5/98
//---------------------------------------------------------------------------
L #N // Load length of HEX table
BYTS: T #N
L B [AR1,P#0.0] // Load byte from table
T #TMP1 // and write it into TMP1 word
T #SAVTMP1 // save a copy of the table's org. value

L 2 // number of hex input digits extracted
DIGT: T #INDX_D // 1 byte (2 hex digits); 1 byte=2 nibbles
//-------------
L #SAVTMP1 // save a copy of the table's org. value
T #TMP1

L 2
L #INDX_D
<>I
JC MASK
L #TMP1
SRW 4
T #TMP1
//-------------
MASK: L #TMP1 // Accum 2
L W#16#F // Accum 1
AW // TMP1 AW 0x000F (mask off all but lower nibble)

T #ABYTE // convert from WORD to BYTE
L B#16#A // Load 0x0A
JC A030 // Jump to Add 0x30
JU A037 // Jump to Add 0x37

// Add 0x30
A030: L B#16#30
L #ABYTE
+I // 0x30 + ABYTE
T #ABYTE
JU CONT // Jump to continue

// Add 0x37
A037: L B#16#37
L #ABYTE
+I // 0x37 + ABYTE
T #ABYTE

//---------------------------------------------------------------------------
// Continue
CONT: L #ABYTE
T B [AR2,P#0.0] // Write BYTE to ouput
+AR2 P#1.0 // Increment pointer to output (by 1 byte)
//---------------------------------------------------------------------------
L #SAVTMP1 // Copy original table's BYTE value into TMP1
T #TMP1
L #INDX_D
LOOP DIGT // }while (INDX_D <= 2)
//---------------------------------------------------------------------------

+AR1 P#1.0
L 0 // Clear out TMP1 WORD
T #TMP1 // before reading next byte from table

L #N
LOOP BYTS // }while (N > 0)
JU DONE
//---------------------------------------------------------------------------
DONE: SET

SAVE
LAR2 #TEMP_AR2 // Restore Address Register 2 Contents

这是一个FC,怎么程序的开头还要用到OPN DB [#BLKNO] 和 OPN DI [#BLKNO] ?而且这两个数据块号是怎么来的?要是我的调用程序里没有这两个数据块呢?
请帮忙解答(STEP7 V5.2编程) 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54619条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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