📄 plc51x_fnc.c
字号:
volatile bit CODE_ERROR;
volatile unsigned int data PS_BIT; // P 指令16级暂存
volatile unsigned int data PS1_BIT; // P 指令16级暂存备份
volatile unsigned int data Pi; // P 指令16级暂存位置指针
/******************************************** 程序开始 **********************************************/
//-----------------------------------------------------------------------------------------//
// 数组名称: BYTE_BIT //
// 数组类型: unsigned char code BYTE_BIT[8] //
// //
// 功能描述: BYTE 字节型 BIT 位表 //
// //
// 入口参数: BIT 位编号 //
// //
// 出口参数: 返回 BYTE 字节中 BIT 屏蔽位 //
// //
// //
// 作 者: 许意义 //
// 日 期: 2009年10月2日 //
// 备 注: //
//-----------------------------------------------------------------------------------------//
// 修 改 人: //
// 日 期: //
// 备 注: //
//-----------------------------------------------------------------------------------------//
unsigned char code BYTE_BIT_s[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char code BYTE_BIT_w[8]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80};
unsigned char code BYTE_BIT_e[8]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
//-----------------------------------------------------------------------------------------//
// 数组名称: FNC_CMD_LNE //
// 数组类型: unsigned char code FNC_CMD_LNE[256] //
// //
// 功能描述: 返回单条 FNC指令后面跟随的命令/数据字长度 //
// //
// 入口参数: FNC指令代码编号 //
// //
// 出口参数: 返回本条 FNC指令后面跟随的命令/数据字长度 //
// //
// //
// 作 者: 许意义 //
// 日 期: 2009年9月26日 //
// 备 注: //
//-----------------------------------------------------------------------------------------//
// 修 改 人: //
// 日 期: //
// 备 注: //
//-----------------------------------------------------------------------------------------//
unsigned char code FNC_CMD_LNE[256]={
1,1,0,0,0,0,0,0,1,0,
3,4,2,5,2,3,3,2,2,2,
3,3,3,3,1,1,3,3,3,1,
2,2,2,2,4,4,4,4,3,3,
2,3,3,2,3,3,3,0,2,2,
2,1,4,3,3,4,3,3,3,4,
3,4,4,4,2,3,1,4,4,5,
3,4,4,2,3,4,2,2,4,4,
4,2,3,3,3,2,2,0,4,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
3,4,0,0,0,0,0,0,2,2,
3,3,3,3,0,0,0,2,0,2,
2,2,2,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,0,0,
0,0,0,0,0,3,4,3,4,4,
5,4,3,3,0,0,1,1,0,3,
2,2,0,0,0,0,3,3,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,2,2,2,0,2,2,
2,0,2,2,2,0,2,2,2,0,
2,2,2,0,2,2,2,0,0,0,
0,0,0,0,0,0 };
//-----------------------------------------------------------------------------------------//
// 函数名称: ADDR_int_ppp //
// 函数类型: char* ADDR_int_ppp(unsigned int a) //
// //
// 功能描述: 读入并列的n位软元件点的起始地址,返回地址绝对指针 //
// //
// 入口参数: unsigned int a ...... 读入软元件点的起始地址 //
// //
// 出口参数: 返回地址绝对指针 //
// //
// 全局变量: 无 //
// //
// 调用模块: 无 //
// 模块描述: //
// //
// //
// 作 者: 许意义 //
// 日 期: 2009年9月26日 //
// 备 注: //
//-----------------------------------------------------------------------------------------//
// 修 改 人: //
// 日 期: //
// 备 注: //
//-----------------------------------------------------------------------------------------//
char* ADDR_int_ppp(unsigned int a) // (读入int点内容,返回地址绝对指针)
{ unsigned char *p;
a &= 0xfff;
if (a<0x400)
{ if (a < _S_num)
{ p = (unsigned char*)rS + (a / 8);
}
}
else if (a<0x500)
{ a -= 0x400;
if (a < _X_num)
{ p = (unsigned char*)rX + (a / 8);
}
}
else if (a<0x600)
{ a -= 0x500;
if (a < _Y_num)
{ p = (unsigned char*)rY + (a / 8);
}
}
else if (a<0x800)
{ a -= 0x600;
if (a < _T_num)
{ p = (unsigned char*)rT + (a / 8);
}
}
else if (a<0xe00)
{ a -= 0x800;
if (a < _M_num)
{ p = (unsigned char*)rM + (a / 8);
}
}
else if (a<0xf00)
{ a -= 0xe00;
if (a < _C_num)
{ p = (unsigned char*)rC + (a / 8);
}
}
else
{ a -= 0xf00;
if (a < _M8xxx_num)
{ p = (unsigned char*)rM8xxx + (a / 8);
}
}
return(p);
}
//-----------------------------------------------------------------------------------------//
// 函数名称: ADDR_int_ppp_old //
// 函数类型: char* ADDR_int_ppp_old(unsigned int a) //
// //
// 功能描述: 从 old 备份存储器内读入并列的n位软元件点的起始地址,返回地址绝对指针 //
// //
// 入口参数: unsigned int a ...... 读入软元件点的起始地址 //
// //
// 出口参数: 返回地址绝对指针 //
// //
// 全局变量: 无 //
// //
// 调用模块: 无 //
// 模块描述: //
// //
// //
// 作 者: 许意义 //
// 日 期: 2009年9月26日 //
// 备 注: //
//-----------------------------------------------------------------------------------------//
// 修 改 人: //
// 日 期: //
// 备 注: //
//-----------------------------------------------------------------------------------------//
char* ADDR_int_ppp_old(unsigned int a) // (从 old 备份存储器内读入int点内容,返回地址绝对指针)
{ unsigned char *p;
a &= 0xfff;
if (a<0x400)
{ if (a < _S_num)
{ p = (unsigned char*)rS1 + (a / 8);
}
}
else if (a<0x500)
{ a -= 0x400;
if (a < _X_num)
{ p = (unsigned char*)rX1 + (a / 8);
}
}
else if (a<0x600)
{ a -= 0x500;
if (a < _Y_num)
{ p = (unsigned char*)rY1 + (a / 8);
}
}
else if (a<0x800)
{ a -= 0x600;
if (a < _T_num)
{ p = (unsigned char*)rT1 + (a / 8);
}
}
else if (a<0xe00)
{ a -= 0x800;
if (a < _M_num)
{ p = (unsigned char*)rM1 + (a / 8);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -