文档库 最新最全的文档下载
当前位置:文档库 › 模拟SPI通信ad7705单片机源代码

模拟SPI通信ad7705单片机源代码

ad7705 数据采集处理源代码

void Press_Init(void) //ad7705初始化测压channel 00
{
SpiCS_0;//使能AD7705,低有效
Delay(50);
rset_0;
Delay(150);
rset_1;

MSP430_WriteSPI0(0x20); // 写0x21通信寄存器,测温channel 01 ,下一个写设置寄存器
MSP430_WriteSPI0(0x04); // 写0xc0时钟寄存器内部频率50HZ
MSP430_WriteSPI0(0x10); // 写0x11通信寄存器,测温channel 01 ,下一个写时钟寄存器
MSP430_WriteSPI0(0x40); // 写0x46设置寄存器,设置成单极性、无缓冲、增益为1、滤波器工作、自校准
}

void MSP430_WriteSPI0(char a) //向AD7705写入一个字节的函数
{
char j,temp=0x80;

for (j=0; j<8; j++)
{
SpiCL_0;
if (temp & a)
{
SpiDo_1;
}
else
{
SpiDo_0;
}

SpiCL_1;
temp = temp>>1;
}
}

int Read7705(void)
{
unsigned char i;
unsigned char TempBit = 0;
int TempData = 0;

SpiCL_0;
spiDIR_IN;
for (i=0; i<16; i++)
{
SpiCL_1;
if (SpiDA_IN == 0x01 )
{
TempBit = 1;
}
else
{
TempBit = 0;
}
SpiCL_0;
TempData = (TempData << 1) | TempBit;
}
spiDIR_OUT;
SpiDi_1;

return TempData;
}

int get_ad7705(char channel) //读温度channel=0x01或差压数据 channel=0x00
{
if(channel==0x00)
{
MSP430_WriteSPI0(0x38);//写通信寄存器设置读当前通道数据 0x38|channel=0x00
}
else
{
MSP430_WriteSPI0(0x39);//0x38|channel=0x01//8785413
}

while (DRDY==1);//DRDY为高不能进行读操作
kb[30] = Read7705();//RXBUF0
if(kb[30]<0)
kb[30]=kb[30]+32768;
else
kb[30]=kb[30]-32767;
return(kb[30]); //接收到的数据为AD16bit
}

int adave(char n,char channel) //求n次A/D转换的平均值
{
volatile char i,pit;

for(ue=0;ue{
ADC_temp[ue]=get_ad7705(channel); //读走温度数据
}

ADC_tem=0;
for(pit=4;pit{
ADC_tem+=ADC_temp[pit]; //求和
}

max=ADC_temp[4];
min=ADC_temp[4];
for(i=4;i{
if(ADC_temp[i]>max)
max=ADC_temp[i];
if(ADC_temp[i]min=ADC_temp[i];
}
ADC_tem=(ADC_tem-max-min)/(n-6);//去掉最大最小值然后求平均值
return ADC_tem;
}

相关文档