⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plc51x_fnc.c

📁 PLC源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
//								                                                           //
//    出口参数:  无                                                                       //
//								                                                           //
//    全局变量:   无            			                                               //
//								                                                           //
//    调用模块:   无            			                                               //
//    模块描述:                			                                               //
//                                                                                         //
//								                                                           //
//    作   者:   许意义		   			                                               //
//    日   期:   2009年9月26日 			                                               //
//    备    注:  								                                           //
//-----------------------------------------------------------------------------------------//
//    修 改 人:					 			                                               //
//    日   期:								                                               //
//    备    注: 								                                           //
//-----------------------------------------------------------------------------------------//

void WR_Mp(unsigned int a,unsigned char i)    // (写入Mp点内容)
{ ;
}


//-----------------------------------------------------------------------------------------//
//    函数名称:   WR_TK                                                                    //
//    函数类型:   void WR_TK(unsigned int a)                                               //
//								                                                           //
//    功能描述:  将 K 值写入定时器 T                                                      //
//								                                                           //
//    入口参数:  unsigned int  a ...... 写入软元件 T 的起始地址,                         //
//                                       *CODE_p 指针指向 K 值                             //
//								                                                           //
//    出口参数:  无                                                                       //
//								                                                           //
//    全局变量:   无            			                                               //
//								                                                           //
//    调用模块:   无            			                                               //
//    模块描述:                			                                               //
//                                                                                         //
//								                                                           //
//    作   者:   许意义		   			                                               //
//    日   期:   2009年9月26日 			                                               //
//    备    注:  								                                           //
//-----------------------------------------------------------------------------------------//
//    修 改 人:					 			                                               //
//    日   期:								                                               //
//    备    注: 								                                           //
//-----------------------------------------------------------------------------------------//

void WR_TK(unsigned int a)       // ,(K值写入T)
{ unsigned char i;
  unsigned char *p;
  unsigned int  *Ip;
  addr0L = *CODE_p;
  CODE_p++;
  addr0T = (*CODE_p << 4) & 0xe0;
  CODE_p++;
  addr0H = *CODE_p;
  CODE_p++;
  addr0T |= (*CODE_p & 0x1f);
  CODE_p++;
  if (a < _T_num)
    { i = 1 <<(a % 8);
	  p = (unsigned char*)rTF + (a / 8);
	  Ip = _T + a;
      if ((ACC_BIT & 0x01) != 0)    // _Tx, _Tx_F, _TKx, K
        { if ((*p & i) == 0) 
	        { *p |= i;              // rTF相应位置1
			  *Ip++ = 0; 
			  *Ip = RD_ADDR(addr0, addr0T); 
			} 
        }
	  else 
        { *p &= ~i;             // rTF相应位清0
		  *Ip = 0;
		}      
    }
}


//-----------------------------------------------------------------------------------------//
//    函数名称:   WR_CK                                                                    //
//    函数类型:   void WR_CK(unsigned int a)                                               //
//								                                                           //
//    功能描述:  将 K 值写入定时器 C                                                      //
//								                                                           //
//    入口参数:  unsigned int  a ...... 写入软元件 C 的起始地址,                         //
//                                       *CODE_p 指针指向 K 值                             //
//								                                                           //
//    出口参数:  无                                                                       //
//								                                                           //
//    全局变量:   无            			                                               //
//								                                                           //
//    调用模块:   无            			                                               //
//    模块描述:                			                                               //
//                                                                                         //
//								                                                           //
//    作   者:   许意义		   			                                               //
//    日   期:   2009年9月26日 			                                               //
//    备    注:  								                                           //
//-----------------------------------------------------------------------------------------//
//    修 改 人:					 			                                               //
//    日   期:								                                               //
//    备    注: 								                                           //
//-----------------------------------------------------------------------------------------//

void WR_CK(unsigned int a)       // ,(K值写入C)
{ unsigned char i;
  unsigned int  Ia;
  unsigned char *p;
  unsigned int  *Ip;
  addr0L = *CODE_p;
  CODE_p++;
  addr0T = (*CODE_p << 4) & 0xe0;
  CODE_p++;
  addr0H = *CODE_p;
  CODE_p++;
  addr0T |= (*CODE_p & 0x1f);
  CODE_p++;
  if (a < _C_num)
    { i = 1 <<(a % 8);
	  p = (unsigned char*)rCF + (a / 8);
	  Ip = _C + a;
	  if ((ACC_BIT & 0x01) != 0)       // _Tx, _Tx_F, _TKx, K
        { if ((*p & i) == 0)
			{ Ia = RD_ADDR(addr0, addr0T); 
			  if (*Ip < Ia)
				{ (*Ip)++;  
                }
			  *p |= i;                 // rCF相应位置1
	          p = (unsigned char*)rC + (a / 8);
			  if (*Ip >= Ia)
				{ *p |= i;         // rC相应位置1
				} 
			  else
                { *p &= ~i;        // rC相应位清0
				}
            } 
		  else	;
        }
      else 
        { *p &= ~i;            // rCF相应位清0   
        }
    }
}


/**********************************************  纯单字指令  ******************************************/ 

void END  (void)      // (END指令, 000F )  
{ CODE_p = (unsigned char code *)CODE_START; 
  Pi = 0x01;
}

void ANB  (void)      // (ANB指令, FFF8 )  
{ unsigned char a;
  a = ACC_BIT & 0x01;
  ACC_BIT >>= 1;
  ACC_BIT  &= (a | 0xfe);
}

void ORB  (void)      // (ORB指令, FFF9 )  
{ unsigned char a;
  a = ACC_BIT & 0x01;
  ACC_BIT >>= 1;
  ACC_BIT  |= a;
}

void MPS  (void)      // (MPS指令, FFFA )  
{ MPS_BIT = (MPS_BIT << 1) | (ACC_BIT & 0x01);
}

void MRD  (void)      // (MRD指令, FFFB )  
{ ACC_BIT = (ACC_BIT & 0xfe) | (MPS_BIT & 0x01);
}

void MPP  (void)      // (MPP指令, FFFC ) 
{ ACC_BIT = (ACC_BIT & 0xfe) | (MPS_BIT & 0x01);
  MPS_BIT >>= 1;
}

void INV  (void)      // (INV指令, FFFD )  
{ ACC_BIT = (ACC_BIT & 0xfe) | (~ACC_BIT & 0x01);
}

void NOP  (void)      // (NOP指令, FFFF ) 
{ ; 
}


/*********************************************  扩展的基本指令  ***************************************/ 

void OUTM8xxx  (void)    // (OUT指令, 0002 8000+ppp ;仅对M8xxx有效) 
{ WR_M8xxx(ppp,ACC_BIT); 
}

void OUTMp  (void)    // (OUT指令, 0002 A000+ppp ;仅对Mp有效)  
{ WR_Mp(ppp,ACC_BIT);
}

void SETM8xxx  (void)    // (SET指令, 0003 8000+ppp ;仅对M8xxx有效) 
{ if ((ACC_BIT & 0x01) != 0)  WR_M8xxx(ppp,1); 
}

void SETMp  (void)    // (SET指令, 0003 A000+ppp ;仅对Mp有效)  
{ if ((ACC_BIT & 0x01) != 0)  WR_Mp(ppp,1); 
}

void RSTM8xxx  (void)    // (RST指令, 0004 8000+ppp 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -