简述如何使用JC 和JNC 指令实现跳转 点击:16491 | 回复:5



酷客

    
  • [版主]
  • 精华:10帖
  • 求助:62帖
  • 帖子:1694帖 | 7857回
  • 年度积分:192
  • 历史总积分:54737
  • 注册:2004年7月13日
发表于:2012-09-18 17:44:43
楼主

   

 

       简述如何使用JC 和JNC 指令实现跳转?

 

 

跟帖写出程序例句或梯形图截图 ,也可以给出其能够说明的形式!



楼主最近还看过



王者之师——梁真

  • 精华:2帖
  • 求助:3帖
  • 帖子:10帖 | 589回
  • 年度积分:0
  • 历史总积分:2576
  • 注册:2012年7月06日
发表于:2012-09-18 19:16:15
1楼
请楼主说明是什么牌子的PLC  

阿水--王者之师

  • 精华:44帖
  • 求助:508帖
  • 帖子:3327帖 | 22104回
  • 年度积分:2171
  • 历史总积分:92644
  • 注册:2007年3月22日
发表于:2012-09-18 21:51:15
2楼

JC    当RLO = 1时跳转

格式

JC <跳转标签>

地址 描述
<跳转标签> 跳转目标的符号名。
描述

当逻辑运算的结果为1时,JC <跳转标签>就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768
或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。

当逻辑运算的结果为0时,不执行跳转。将RLO设置为1,继续对下一个语句执行程序扫描。

状态字

BR CC 1 CC 0 OV OS OR STA RLO /FC
写: - - - - - 0 1 1 0
实例

STL 注解
A I 1.0 
A I 1.2 
JC JOVR //当RLO=1时,跳转到跳转标签JOVR。
L IW8 //当不执行跳转时,在此继续执行程序扫描。
T MW22 
JOVR: A I 2.1 //跳转到跳转标签JOVR后,在此继续执行程序扫描。

 

CN    当RLO = 0时跳转

格式

JCN <跳转标签>

地址 描述
<跳转标签> 跳转目标的符号名。
描述

当逻辑运算的结果为0时,JCN <跳转标签> 就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的
-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。

当逻辑运算的结果为1时,不执行跳转。继续对下一个语句执行程序扫描。

状态字

BR CC 1 CC 0 OV OS OR STA RLO /FC
写: - - - - - 0 1 1 0
实例

STL 注解
A I 1.0 
A I 1.2 
JCN JOVR //当RLO = 0时跳转到跳转标签JOVR。
L IW8 //当不执行跳转时,在此继续执行程序扫描。
T  MW22 
JOVR: A I 2.1 //跳转到跳转标签JOVR后,在此继续执行程序扫描。

  程序例子如下图:

 

阿水--王者之师

  • 精华:44帖
  • 求助:508帖
  • 帖子:3327帖 | 22104回
  • 年度积分:2171
  • 历史总积分:92644
  • 注册:2007年3月22日
发表于:2012-09-18 21:52:46
3楼

  AN    #VzuF                       //Even if nothing
      AN    #FzuV                       //?will do
      JC    m999                        //?nothing made !
      L     #MaxBLK                     //block number
      L     #VarBLK                     //?not over
      <I                                //?maximum
      JC    m999                        //yes, break
      L     0                           //block number
      <I                                //?under zero
      JC    m999                        //yes, break
      L     #SimBLK                     //The number from jumped over
      L     #BYausBLK                   //... and is to copying bytes
      +I                                //... added
      L     #BYimBLK                    //... more largely than the total number
      >I                                //... is a programmer too stupidly
      JC    m999                        //... and with abort is punished!

      L     #VarBLK                     //absolut targetblock
      L     #BLKimDB                    // ... Blocks pro DB
      /I                                // ... calculte
      L     #Var1DB                     // ... 1.DB load
      +I                                // ... calculte
      T     #R_VarDB                    //result data block

      L     #VarBLK                     //absolut targetblock
      L     #BLKimDB                    // ... Blocks pro DB
      /I                                // ... calculte
      SRD   16                          // ... Rest ist reeler Block
      L     #BYimBLK                    //?load block
      *I                                //?charged is byte address
      L     #SimBLK                     //?first byte in the block
      +I                                //?add
      SLD   3                           //?to pointer format
      LAR1                              // ->  addressregister load
      T     #R_VarAdr

      L     #FixAdr                     // Absoluter Zielblock
      L     #SimBLK                     //?first byte in the block
      +I                                //?add
      SLD   3                           //?to pointer format
      LAR2                              // ->  addressregister load

      L     #BYausBLK                   //byte at start
      T     #Bytes1                     // -> actually byte copy
      SRD   2                           // ... in doubleword
      T     #Schleife                   // -> result loop counter

      A     #FzuV                       //fix to clamped !
      JC    m010                        //yes, jump !

      L     0                           // Vvariable to fix !
      >I   
      JCN   m002
m001: OPN   DB 【#R_VarDB】               // all datas as doubleword copy
      L     DBD 【AR1,P#0.0】             //... so far possible
      OPN   #FixDB
      T     DBD 【AR2,P#0.0】
      +AR1  P#4.0
      +AR2  P#4.0
      L     #Schleife
      L     1
      -I   
      T     #Schleife
      L     0
      >I   
      JC    m001

m002: AN    L      1.1                  //1 word copy (if still available)
      JC    m003
      OPN   DB 【#R_VarDB】
      L     DBW 【AR1,P#0.0】
      OPN   #FixDB
      T     DBW 【AR2,P#0.0】
      +AR1  P#2.0
      +AR2  P#2.0

m003: AN    L      1.0                  //1 byte copy (if still available)
      JC    m999
      OPN   DB 【#R_VarDB】
      L     DBB 【AR1,P#0.0】
      OPN   #FixDB
      T     DBB 【AR2,P#0.0】
      JU    m999

m010: L     0                           //fix variable
      >I   
      JCN   m012
m011: OPN   #FixDB                      // all datas as doubleword copy
      L     DBD 【AR2,P#0.0】             //... so far possible
      OPN   DB 【#R_VarDB】
      T     DBD 【AR1,P#0.0】
      +AR1  P#4.0
      +AR2  P#4.0
      L     #Schleife
      L     1
      -I   
      T     #Schleife
      L     0
      >I   
      JC    m011

m012: AN    L      1.1                  //1 word copy (if still available)
      JC    m003
      OPN   #FixDB
      L     DBW 【AR2,P#0.0】
      OPN   DB 【#R_VarDB】
      T     DBW 【AR1,P#0.0】
      +AR1  P#2.0
      +AR2  P#2.0

      AN    L      1.0                  //1 byte copy (if still available)
      JC    m999
      OPN   #FixDB
      L     DBB 【AR2,P#0.0】
      OPN   DB 【#R_VarDB】
      T     DBB 【AR1,P#0.0】

m999: A     #VzuF                       //read or
      O     #FzuV                       //?writen
      SAVE                              // ->  further sequence circut
      CLR                               // Und Tsch !!!

酷客

  • [版主]
  • 精华:10帖
  • 求助:62帖
  • 帖子:1694帖 | 7856回
  • 年度积分:250
  • 历史总积分:54795
  • 注册:2004年7月13日
发表于:2012-09-19 14:41:05
4楼
引用 阿水--王者之师 的回复内容:  AN    #VzuF                       //Even if nothing      AN    #FzuV                       //?will do      JC    m999                        //?nothing made !      L     #MaxBLK                     //block number      L     #VarBLK                     //?not over      I                                //... is a programmer too stupidly      JC    m999                        //... and with abort is punished!      L     #VarBLK                     //absolut targetblock      L     #BLKimDB                    // ... Blocks pro DB      /I                                // ... calculte      L     #Var1DB                     // ... 1.DB load      +I                                // ... calculte      T     #R_VarDB                    //result data block      L     #VarBLK                     //absolut targetblock      L     #BLKimDB                    // ... Blocks pro DB      /I                                // ... calculte      SRD   16                          // ... Rest ist reeler Block      L     #BYimBLK                    //?load block      *I                                //?charged is byte address      L     #SimBLK                     //?first byte in the block      +I                                //?add       SLD   3                           //?to pointer format      LAR1                              // ->  addressregister load      T     #R_VarAdr      L     #FixAdr                     // Absoluter Zielblock      L     #SimBLK                     //?first byte in the block      +I                                //?add       SLD   3                           //?to pointer format      LAR2                              // ->  addressregister load      L     #BYausBLK                   //byte at start      T     #Bytes1                     // -> actually byte copy      SRD   2                           // ... in doubleword      T     #Schleife                   // -> result loop counter      A     #FzuV                       //fix to clamped !      JC    m010                        //yes, jump !      L     0                           // Vvariable to fix !      >I          JCN   m002m001: OPN   DB 【#R_VarDB】               // all datas as doubleword copy       L     DBD 【AR1,P#0.0】             //... so far possible      OPN   #FixDB      T     DBD 【AR2,P#0.0】      +AR1  P#4.0      +AR2  P#4.0      L     #Schleife      L     1      -I          T     #Schleife      L     0      >I          JC    m001m002: AN    L      1.1                  //1 word copy (if still available)      JC    m003      OPN   DB 【#R_VarDB】      L     DBW 【AR1,P#0.0】      OPN   #FixDB      T     DBW 【AR2,P#0.0】      +AR1  P#2.0      +AR2  P#2.0m003: AN    L      1.0                  //1 byte copy (if still available)      JC    m999      OPN   DB 【#R_VarDB】      L     DBB 【AR1,P#0.0】      OPN   #FixDB      T     DBB 【AR2,P#0.0】      JU    m999m010: L     0                           //fix variable      >I          JCN   m012m011: OPN   #FixDB                      // all datas as doubleword copy       L     DBD 【AR2,P#0.0】             //... so far possible      OPN   DB 【#R_VarDB】      T     DBD 【AR1,P#0.0】      +AR1  P#4.0      +AR2  P#4.0      L     #Schleife      L     1      -I          T     #Schleife      L     0      >I          JC    m011m012: AN    L      1.1                  //1 word copy (if still available)      JC    m003      OPN   #FixDB      L     DBW 【AR2,P#0.0】      OPN   DB 【#R_VarDB】      T     DBW 【AR1,P#0.0】      +AR1  P#2.0      +AR2  P#2.0      AN    L      1.0                  //1 byte copy (if still available)      JC    m999      OPN   #FixDB      L     DBB 【AR2,P#0.0】      OPN   DB 【#R_VarDB】      T     DBB 【AR1,P#0.0】m999: A     #VzuF                       //read or      O     #FzuV                       //?writen      SAVE                              // ->  further sequence circut      CLR                               // Und Tsch !!!


高手  不错 就是这样  

大器晚成

  • 精华:0帖
  • 求助:5帖
  • 帖子:92帖 | 432回
  • 年度积分:0
  • 历史总积分:1522
  • 注册:2002年9月19日
发表于:2012-09-19 16:44:51
5楼
深入浅出,高手,高,实在是高!

相关主题

官方公众号

智造工程师