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

📄 plc51x_fnc.c

📁 PLC源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	}
  else if  (a<0xf00)
	{ a -= 0xe00;
	  if (a < _C_num)
	    { p = (unsigned char*)rC1 + (a / 8);
		}
	}
  else 
	{ a -= 0xf00;
	  if (a < _M8xxx_num)
	    { p = (unsigned char*)rM8xxx1 + (a / 8);
		}
	}
  return(p);
}


//-----------------------------------------------------------------------------------------//
//    函数名称:   RD_int_ppp                                                               //
//    函数类型:   unsigned int RD_int_ppp(unsigned int a)                                  //
//								                                                           //
//    功能描述:  将并列的n位软元件点的内容从存储器内读入                                  //
//								                                                           //
//    入口参数:  unsigned int  a ...... 读入软元件点的起始地址                            //
//								                                                           //
//    出口参数:  并列的n位软元件点的内容                                                  //
//								                                                           //
//    全局变量:   无            			                                               //
//								                                                           //
//    调用模块:   char* ADDR_int_ppp(unsigned int a)                                       //
//    模块描述:  读入并列的n位软元件点的起始地址,返回地址绝对指针                        //
//                                                                                         //
//								                                                           //
//    作   者:   许意义		   			                                               //
//    日   期:   2009年9月26日 			                                               //
//    备    注:  								                                           //
//-----------------------------------------------------------------------------------------//
//    修 改 人:					 			                                               //
//    日   期:								                                               //
//    备    注: 								                                           //
//-----------------------------------------------------------------------------------------//

unsigned int RD_int_ppp(unsigned int a)    // (读入int点内容)
{ unsigned char *p;
  unsigned char i, n;
  unsigned int  Ia;
  p = ADDR_int_ppp(a); 
  n = 0x10;
  i = a % 8;
  Ia = (unsigned int)(*p++);
  n -= (8-i);
  for (; n>=8; )   
    { Ia = ((unsigned int)(*p++) << 8) | Ia; 
 	  n  -= 8;
	}
  if (n != 0)
	{ Ia = ((unsigned int)(*p++) << (16-n)) | (Ia >> n); 
	}
  else ; 
  return Ia;
}


//-----------------------------------------------------------------------------------------//
//    函数名称:   WR_int_ppp                                                               //
//    函数类型:   void WR_int_ppp(unsigned int a,unsigned int b,unsigned char n)           //
//								                                                           //
//    功能描述:  将并列的n位软元件点的内容写入存储器                                      //
//								                                                           //
//    入口参数:  unsigned int  a ...... 写入软元件点的起始地址                            //
//                unsigned int  b ...... 写入内容                                          //
//                unsigned char n ...... 写入宽度,n=2,4bit;  n=4,8bit;                    //
//                                                 n=6,12bit; n=8,16bit; 依次类推          //
//								                                                           //
//    出口参数:  返回写入点地址下一个地址                                                 //
//								                                                           //
//    全局变量:   无            			                                               //
//								                                                           //
//    调用模块:   char* ADDR_int_ppp(unsigned int a)                                       //
//    模块描述:  读入并列的n位软元件点的起始地址,返回地址绝对指针                        //
//                                                                                         //
//								                                                           //
//    作   者:   许意义		   			                                               //
//    日   期:   2009年9月26日 			                                               //
//    备    注:  								                                           //
//-----------------------------------------------------------------------------------------//
//    修 改 人:					 			                                               //
//    日   期:								                                               //
//    备    注: 								                                           //
//-----------------------------------------------------------------------------------------//

unsigned int WR_int_ppp(unsigned int a,unsigned int b,unsigned char n)     // (写入int点内容)
{ unsigned char *p;
  unsigned char i, j;
  unsigned char Ca;
  p = ADDR_int_ppp(a); 
  n <<= 1;
  if (n == 0)
    { if ((b&0x01) == 0)   *p &= ~(1 << (a % 8));
               else  *p |= 1 << (a % 8);
	  a++;
    }
  else 
    { i = a % 8;
	  if (n <= (8-i))
	    { Ca = BYTE_BIT_s[i];
		  for (j=1; j<n; j++)
		    { Ca |= (Ca << 1);
			}
	      *p++ = ((*p & ~Ca) | ((unsigned char)((b<<i) & 0xff) & Ca)); 
		  b >>= n;
		  a  += n;
		  n   = 0;
		}
	  else 
	    { Ca = BYTE_BIT_w[i];
	      *p++ = ((*p & ~Ca) | ((unsigned char)((b<<i) & 0xff) & Ca)); 
		  i   = 8-i;
  		  b >>= i;
		  a  += i;
		  n  -= i;
	    }
      for (; n>=8; )   
	    { *p++ = (unsigned char)(b & 0xff); 
	      b >>= 8;
		  a  += 8;
 	      n  -= 8;
	    }
	  if (n != 0)
	    { Ca = BYTE_BIT_e[n-1];
	      *p  = ((*p & ~Ca) | ((unsigned char)(b & 0xff) & Ca)); 
		  a  += n;
		}
	  else; 
	}
  return a;
}

//-----------------------------------------------------------------------------------------//
//    函数名称:   char RD_ppp                                                              //
//    函数类型:   unsigned char RD_ppp(unsigned int a)                                     //
//								                                                           //
//    功能描述:  将1点软元件的内容从存储器内读入                                          //
//								                                                           //
//    入口参数:  unsigned int  a ...... 读入软元件点的起始地址                            //
//								                                                           //
//    出口参数:  1点软元件的内容                                                          //
//								                                                           //
//    全局变量:   无            			                                               //
//								                                                           //
//    调用模块:   无            			                                               //
//    模块描述:                			                                               //
//                                                                                         //
//								                                                           //
//    作   者:   许意义		   			                                               //
//    日   期:   2009年9月26日 			                                               //
//    备    注:  								                                           //
//-----------------------------------------------------------------------------------------//
//    修 改 人:					 			                                               //
//    日   期:								                                               //
//    备    注: 								                                           //
//-----------------------------------------------------------------------------------------//

unsigned char RD_ppp(unsigned int a)    // (读入点内容)
{ unsigned char n;
  unsigned char *p;
  p = ADDR_int_ppp(a); 
  n = *p >> (a % 8);
  return(n & 0x01);
}


//-----------------------------------------------------------------------------------------//
//    函数名称:   char RD_Mp                                                               //
//    函数类型:   unsigned char RD_Mp(unsigned int a)                                      //
//								                                                           //
//    功能描述:  将1点软元件的内容从扩展 Mp 存储器内读入                                  //
//								                                                           //
//    入口参数:  unsigned int  a ...... 读入软元件点的起始地址                            //
//								                                                           //
//    出口参数:  1点软元件的内容                                                          //
//								                                                           //
//    全局变量:   无            			                                               //
//								                                                           //
//    调用模块:   无            			                                               //
//    模块描述:                			                                               //
//                                                                                         //
//								                                                           //
//    作   者:   许意义		   			                                               //
//    日   期:   2009年9月26日 			                                               //
//    备    注:  								                                           //
//-----------------------------------------------------------------------------------------//
//    修 改 人:					 			                                               //
//    日   期:								                                               //
//    备    注: 								                                           //
//-----------------------------------------------------------------------------------------//
unsigned char RD_Mp(unsigned int a)    // (读入扩展Mp存储器内的点内容)
{ unsigned char n=0;
  return(n & 0x01);
}

//-----------------------------------------------------------------------------------------//
//    子函数名:  unsigned char RD_ppp_old(unsigned int a)                                 //
//                                                                                         //
//    注    释:  将1点软元件的内容从 old 备份存储器内读入                                 //
//                                                                                         //
//    入口参数:  unsigned int  a ...... 读入软元件点的起始地址                            //
//    出口参数:  1点软元件的内容                                                          //
//-----------------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------------//

⌨️ 快捷键说明

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