📄 dio.#2
字号:
/****************************************************************************
**
** 文件名: DIO.c
** 功能: C8051Fxxx在LZK中的DI、DO应用;
** 创建时间:2005.08.05
** 作者: 李立学
** 版权申明:可以拷贝,可以修改,但必须保留修改时间和作者信息
** 修改说明:2006.09.30 沈卢斌
修改了
** 修改说明:2006.09.30 薛佳元
修改了
**
****************************************************************************/
#include "LZK.H"
/****************************************************************************
** 函数名称: DIO_CS()
** 功能描述: DIO地址片选
** 入口参数: 无
** 出口参数: 无
** 全局变量: 无
** 调用模块: 无
** 说明:
****************************************************************************/
void DIO_CS(void)
{
uint8 data ucTMP;
/*******************************
*** Switch to ExSRAM ***
*******************************/
SFRPAGE = 0x00;
EMI0CF = 0x25; // 0010_0101, ALE: 2SYSCLK. SRAM Split Mode.
EMI0TC = 0x49; // 01_0010_01: AST:1,nWR/nRd:3SYSCLK,AHT:1.
SFRPAGE = 0x0f;
ucTMP = ucP4DATA & 0xC0 | 16; // ExSRAM Page 16;
P4 = ucTMP; // ExSRAM Page Setting.
SFRPAGE = 0x00;
}
/****************************************************************************
** 函数名称: RelayOutPut_Init()
** 功能描述: 继电器输出初始化.
** 入口参数: 无
** 出口参数: 无
** 全局变量: 无
** 调用模块: 无
** 说明:
****************************************************************************/
void RelayOutPut_Init(void)
{
DIO_CS(); // ExSRAM Page 16.
RelayOutDATA = 0xff; // Relay Reset to 0x00.
RelayOutOE = 0xff; // Relay Output Enabled.
ExInSRAM_Select(0); //
}
/****************************************************************************
** 函数名称: RelayOutPut()
** 功能描述: 继电器控制输出
** 入口参数: RelayOutCMD,RelayOutCMD^n = 1对应位的继电器动作,否则为默认值;
** 出口参数: 无
** 全局变量: RelayOUT
** 调用模块: 无
** 说明:
****************************************************************************/
void RelayOutPut(uint8 ucDATA)
{
DIO_CS(); // ExSRAM Page 16.
RelayOutDATA = ucDATA; //
ExInSRAM_Select(0); //
}
/****************************************************************************
** 函数名称: RelayInPut()
** 功能描述: 外部开关量I/O输入,遥信
** 入口参数: 无;
** 出口参数: RelayIN,外部开关量
** 全局变量: RelayIN
** 调用模块: 无
** 说明:
****************************************************************************/
uint8 RelayInPut(void)
{
uint8 data ucTMP;
SFRPAGE = 0x00;
EMI0CF = 0x25; // 0010_0101, ALE: 2SYSCLK. SRAM Split Mode.
EMI0TC = 0x49; // 01_0010_01: AST:1,nWR/nRd:3SYSCLK,AHT:1.
SFRPAGE = 0x0f; // P4,P7 SFR PAGE.
P4 = 0xd0; // 1___1___0___10000;
// nWR_nRD_ALE_A[20..A16].
ucTMP = RelayInDATA; // RelayInDATA Valid.
// A[4..0] be Saved.
P7MDOUT = 0x00; // P7口设置为输入方式.
P4 = 0xd0 & 0xbf; // nRD ='0';
P4 = 0xd0 & 0xbf; // nRD ='0';
P4 = 0xd0 & 0xbf; // nRD ='0';
P4 = 0xd0 & 0xbf; // nRD ='0';
ucTMP = P7;
P4 = 0xd0; // nRD ='1';
P7MDOUT = 0xff; // P7口设置为推挽方式.
ExInSRAM_Select(0); //
return ucTMP;
}
/****************************************************************************
** 函数名称: PulseOutPut()
** 功能描述: 可控硅触发变压器输出
** 入口参数: PulseOutCMD,PulseOutCMD^n = 1对应位的脉冲触发变压器输出;
** 出口参数: 无
** 全局变量: PulseOUT
** 调用模块: 无
** 说明:
****************************************************************************/
void PulseOutPut(uint8 ucDATA)
{
SFRPAGE = 0x0f; // P5 SFR PAGE.
ucP5DATA = ucDATA & 0x7f;
P5 = ucP5DATA;
SFRPAGE = 0x00;
}
/****************************************************************************
** 函数名称: RelayOut_SelfTest()
** 功能描述: 继电器输出自检测试
** 入口参数: 无
** 出口参数: 无
** 全局变量: 无
** 调用模块: 无
** 说明:
****************************************************************************/
void RelayOut_SelfTest(void)
{
uint8 idata i, ucTMP;
for(i=0; i<8; i++)
{
ucTMP = 0x01 << i; // 0000 0001.
ucTMP = ~ucTMP; // 1111 1110.
RelayOutPut(ucTMP);
D1S(1);
}
RelayOutPut(0xff); // Disabled all Relays.
}
/****************************************************************************
** 函数名称: PulseOut_SelfTest()
** 功能描述: 继电器输出自检测试
** 入口参数: 无
** 出口参数: 无
** 全局变量: 无
** 调用模块: 无
** 说明:
****************************************************************************/
void PulseOut_SelfTest(void)
{
uint8 xdata i, ucTMP;
for(i=0; i<7; i++)
{
ucTMP = 0x01 << i; // 0000 0001.
ucTMP = ~ucTMP; // 1111 1110.
ucTMP = ucTMP & 0x7f; // 0111 1110.
PulseOutPut(ucTMP);
DmS(3);
}
PulseOutPut(0xff); // Disabled all PulseOUT.
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -