📄 adsample.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 + -