📄 plc51x_fnc.c
字号:
// //
// 出口参数: 无 //
// //
// 全局变量: 无 //
// //
// 调用模块: 无 //
// 模块描述: //
// //
// //
// 作 者: 许意义 //
// 日 期: 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 + -