添上程序
#include "67k22.h"
#define CS5532_CS LATDbits.LATD3 //定义CS5532的片选位
volatile u32 CS5532_RV;
volatile u32 temp;
volatile u32 temp1;
/*----------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------
*函数名称:CS5532_init
*函数功能:CS5532进行初始化
*输入参数:无
*输出参数:无
-------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------*/
u8 SPI_SendData(u8 SendData);
void delayms(unsigned int m);
void CS5532_init(void)
{
u8 i;
u32 High1_Byte;
u32 Mid1_Byte;
u32 Low1_Byte;
u32 AddLow1_Byte;
CS5532_CS=0;
delayms(100);
for(i=0;i<15;i++)
{
CS5532_CS=0;
SPI_SendData(0XFF);//发送复位命令:15个字节0XFF,1个字节0XFE;
CS5532_CS=1;
}
CS5532_CS=0;
SPI_SendData(0XFE);
CS5532_CS=1;
delayms(500);
CS5532_CS=0;
SPI_SendData(0X03); //写复位命令,将RS置1
SPI_SendData(0X20);
SPI_SendData(0X00);
SPI_SendData(0X00);
SPI_SendData(0X00);
CS5532_CS=1;
delayms(100);
CS5532_CS=0;
SPI_SendData(0X0b); //读配置寄存器命令
CS5532_CS=1;
Nop();
Nop();
CS5532_CS=0;
High1_Byte=SPI_SendData(0X00); //读配置寄存器中的值
Mid1_Byte=SPI_SendData(0X00);
Low1_Byte=SPI_SendData(0X00);
AddLow1_Byte=SPI_SendData(0X00);
CS5532_CS=1;
CS5532_RV=High1_Byte<<24|Mid1_Byte<<16|Low1_Byte<<8|AddLow1_Byte;
while(CS5532_RV!=0X10000000);
delayms(1);
CS5532_CS=0;
SPI_SendData(0X03); //写配置位命令
SPI_SendData(0X00);
SPI_SendData(0X08);
SPI_SendData(0X00);
SPI_SendData(0X00);
CS5532_CS=1;
delayms(1);
CS5532_CS=0;
SPI_SendData(0X05); //写通道设置寄存器命令
SPI_SendData(0X02); //增益为64,采样速率为25sps
SPI_SendData(0X40); //单极性
SPI_SendData(0X02);
SPI_SendData(0X40);
CS5532_CS=1;
delayms(1);
// CS5532_CS=0;
// SPI_SendData(0X15); //写通道设置寄存器命令
// SPI_SendData(0X02); //增益为64,采样速率为25sps
// SPI_SendData(0X41); //单极性
// SPI_SendData(0X72);
// SPI_SendData(0X41);
CS5532_CS=1;
delayms(1);
CS5532_CS=0;
SPI_SendData(0XC0); //单次转换80,连续转换C0,写转换命令
CS5532_CS=1;
}
/*----------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------
*函数名称:CS5532_Sampling
*函数功能:CS5532进行采样
*输入参数:无
*输出参数:temp
-------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------*/
u32 CS5532_Sampling()
{
u8 i,k;
volatile u32 High_Byte,Mid_Byte,Low_Byte,AddLow_Byte;
volatile u32 High_Byte2,Mid_Byte2,Low_Byte2,AddLow_Byte2;
// delayms(500);
// CS5532_CS=0;
// SPI_SendData(0X80); //单次转换80,连续转换C0,写转换命令
// LATF=0x00;
// CS5532_CS=1;
//delayms(4000);
while(PORTEbits.RE2!=0); //AD转换完成后,SDO输出0
for(i=0;i<1;i++)
{
CS5532_CS=0;
SPI_SendData(0X00); //用于清SDO标志位
CS5532_CS=1;
}
CS5532_CS=0; //读AD转换的值 31-8位
High_Byte=SPI_SendData(0X00);
Mid_Byte=SPI_SendData(0X00);
Low_Byte=SPI_SendData(0X00);
AddLow_Byte=SPI_SendData(0X00);
CS5532_CS=1;
temp=High_Byte<<24|Mid_Byte<<16|Low_Byte<<8|AddLow_Byte;
return temp;
}
|