📄 plc51x_fnc.c
字号:
}
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 + -