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

📄 dio.#2

📁 基于MST-G240128点阵液晶的 状态机机制 人机界面四级滚屏菜单 源代码 ,带时间片机制模拟操作系统
💻 #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 + -