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

📄 adsample.c

📁 我做的用lpc2119实现的变电站隔刀动作电流波形采样计算数据上传程序
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               河南恩湃电力技术有限公司
**                                     测   控   部
**                                        
**-----------------------------------------------------------文件信息--------------------------------------------------------------------------------
**	文   件  	名:	ADsample.C
** 	版  		本:	
** 	日		期:	
**	描		述:	AD转换应用层函数
********************************************************************************************************/
#define	_ADFUNC_GLOBAL_
#include 	"config.h"

/****************************************************************************
* 名称:HC595_SendDat()
* 功能:向74HC595发送一字节数据
* 入口参数:dat		要发送的数据
* 出口参数:无
* 说明:发送数据时,高位先发送。
****************************************************************************/
void  HC595_SendDat(uint8 dat)
{  uint8  i;

   IO0CLR = CS;			    		// SPI_CS = 0
   for(i=0; i<8; i++)					// 发送8位数据
   {  IO0CLR = SCLK;					// SPI_CLK = 0
      /* 设置SPI_DATA输出值 */
      if( (dat&0x80)!=0 ) IO0SET = MOSI;
        else IO0CLR = MOSI;
      dat <<= 1;
      IO0SET = SCLK;					// SPI_CLK = 1
   }
   
   IO0SET = CS;			    		// SPI_CS = 1,输出显示数据
}
                        

/****************************************************************************
* 名称:
* 功能:
* 入口参数:dat		要发送的数据
* 出口参数:
* 说明:发送数据时,高位先发送。
****************************************************************************/
uint16  SPI_IO(uint16 dat)
{  uint8  i;
   uint16 retdat;

   IO0CLR = CS;			    		// SPI_CS = 0
   Delay5();
   retdat = 0;
   for(i=0; i<16; i++)					// 发送8位数据
   {  
      IO0SET = SCLK;					// SPI_CLK = 1
      Delay5();
      if( (dat&0x8000)!=0 ) IO0SET = MOSI;// 设置SPI_MOSI输出值
        else IO0CLR = MOSI;
      dat <<= 1;
      
      retdat <<= 1;
      if ((IO0PIN&MISO)!=0)
        retdat = retdat | 0x0001;
      
      IO0CLR = SCLK;					// SPI_CLK = 0
      Delay5();
   }


   
   IO0SET = CS;			    		// SPI_CS = 1
   return (retdat);
}
                        

/****************************************************************************
* 名称:MSpiIni()
* 功能:初始化SPI接口,设置为主机。
* 入口参数:无
* 出口参数:无

S0PCR 位3 = CPHA
      位4 = CPOL
****************************************************************************/
void  MSpiIni(void)
{ // S0PCCR = 0x52;			// 设置SPI时钟分频

   S0PCCR = 0x12;
   //S0PCCR = 0x10;
   //S0PCCR = 0x08;

   S0PCR = 0x30;		    // 设置SPI接口模式,MSTR=1,CPOL=1,CPHA=0,LSBF=0
}




/****************************************************************************
* 名称:MSendData()
* 功能:向SPI总线发送数据。
* 入口参数:data        待发送的数据
* 出口参数:返回值为读取的数据
****************************************************************************/
uint8  MSendData(uint8 data)
{  IO0CLR = CS;			    // 片选
   
   S0PDR = data;
   while( 0==(S0PSR&0x80) );		// 等待SPIF置位,即等待数据发送完毕
   
   IO0SET = CS;
   return(S0PDR);
}

/****************************************************************************
* 名称:SPI8()
* 功能:向SPI总线发送单字节数据。但SPI的片选需要调用程序来设置
* 入口参数:data        待发送的数据
* 出口参数:返回值为读取的数据(单字节)
****************************************************************************/
uint8  SPI8(uint8 data8)
{  
   S0PDR = data8;
   while( 0==(S0PSR&0x80) );		// 等待SPIF置位,即等待数据发送完毕
   return(S0PDR);
}


/****************************************************************************
* 名称:SPI16()
* 功能:向SPI总线发送两数据。
* 入口参数:data        待发送的数据
* 出口参数:返回值为读取的数据(两字节)
****************************************************************************/
uint16  SPI16(uint16 data16)
{  uint8 HData,LData;
   uint16 RData;
   IO0CLR = CS;			    // 片选
   HData=SPI8((data16 >> 8));
   LData=SPI8(data16);
   IO0SET = CS;
   RData=(HData<<8)+LData;
   //RData = (RData >> 2);
   return(RData);
}

/****************************************************************************
* 名称:SPI16()
* 功能:向SPI总线发送两数据。
* 入口参数:data        待发送的数据
* 出口参数:返回值为读取的数据(两字节)
****************************************************************************/
uint16  SPItest(uint16 data16)
{  uint8 HData,LData;
   uint16 RData;
   //IO0CLR = CS;			    // 片选
   HData=SPI8((data16 >> 8));
   LData=SPI8(data16);
  // IO0SET = CS;
   RData=(HData<<8)+LData;
   //RData = (RData >> 2);
   return(RData);
}




/****************************************************************************
* 名称:ISendPP()
* 功能:发送6字节的同步字,并等待发送完毕。
****************************************************************************/
void  ISendPP(void)
{    
   SendByte(0xeb); SendByte(0x90);
   SendByte(0xeb); SendByte(0x90);
   SendByte(0xeb); SendByte(0x90);
   //while( (U0LSR&0x20)==0 );         	// 等待数据发送
}               

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -