853 lines
16 KiB
C
853 lines
16 KiB
C
#include "H/Function_Init.H"
|
||
//ADC引脚命名
|
||
#define ADC_DT0 P44
|
||
#define ADC_CLK0 P43
|
||
#define ADC_DT1 P05
|
||
#define ADC_CLK1 P04
|
||
#define ADC_DT2 P26
|
||
#define ADC_CLK2 P25
|
||
#define ADC_DT3 P02
|
||
#define ADC_CLK3 P01
|
||
|
||
//DOUT方向设置
|
||
#define ADC_DT0_IN() {P4CON &= 0xEF;P4PH|=0x10;}
|
||
#define ADC_DT0_OUT() {P4CON |= 0X10;}
|
||
#define ADC_DT1_IN() { P0CON &= 0xDF;P0PH|=0x20;}
|
||
#define ADC_DT1_OUT() { P0CON |= 0x20;}
|
||
#define ADC_DT2_IN() { P2CON &= 0xBF;P2PH|=0x40;}
|
||
#define ADC_DT2_OUT() { P2CON |= 0x40;}
|
||
#define ADC_DT3_IN() {P0CON &= 0xFB;P0PH|=0x04;}
|
||
#define ADC_DT3_OUT() {P0CON |= 0x04;}
|
||
|
||
|
||
void CS1237_Init_all(void)
|
||
{
|
||
CS1237_Init();//CS1237初始化
|
||
CS1237_Init_1();
|
||
CS1237_Init_2();
|
||
CS1237_Init_3();
|
||
}
|
||
|
||
void CS1237_Config_all(void)
|
||
{
|
||
CS1237_Config();
|
||
CS1237_Config_1();
|
||
CS1237_Config_2();
|
||
CS1237_Config_3();
|
||
}
|
||
|
||
long Read_CS1237_all(uchar num)
|
||
{
|
||
long ret;
|
||
switch(num)
|
||
{
|
||
case 0:ret = Read_CS1237();break;
|
||
case 1:ret = Read_CS1237_1();break;
|
||
case 2:ret = Read_CS1237_2();break;
|
||
case 3:ret = Read_CS1237_3();break;
|
||
default:ret = 0;break;
|
||
}
|
||
return ret;
|
||
}
|
||
|
||
/**************************************************************
|
||
ADC芯片说明:
|
||
1、PAG放大倍数选择需要根据输入的模拟型号的最大电压值来确定,灵敏度乘以激励电压就是最大输出;
|
||
2、非线性,滞后性,重复性归结为综合误差,一般用%F*S来表示,就是占最大输出电压的百分比;
|
||
3、设置输出速率之前,超时时间等长一点,不然可能会超时;
|
||
***************************************************************/
|
||
//////////////初始化CS1237芯片,先拉高clk进入PowerDown状态
|
||
void CS1237_Init(void)
|
||
{
|
||
ADC_DT0_OUT();
|
||
ADC_DT0 = 1;
|
||
ADC_CLK0 = 1;
|
||
}
|
||
//////////////配置CS1237芯片
|
||
uchar CS1237_Config(void)
|
||
{
|
||
uchar i ;
|
||
uchar dat ;
|
||
uint count_i = 0;
|
||
|
||
dat =0x0c;//芯片地配置 内部REF 输出40HZ PGA=128 通道A 0X1C
|
||
// ADC_DT0_OUT();
|
||
// ADC_DT0 = 1;
|
||
ADC_DT0_IN();
|
||
ADC_CLK0 = 0;
|
||
// UART_SendByte(0x22);
|
||
while(ADC_DT0 ==1)
|
||
{
|
||
Delay1ms();
|
||
count_i++;
|
||
if(count_i>350)
|
||
{
|
||
ADC_DT0_OUT();
|
||
ADC_CLK0 = 1;
|
||
ADC_DT0 = 1;
|
||
return 0; //超时,退出程序
|
||
}
|
||
}
|
||
for(i=0;i<29;i++)//1-29
|
||
{
|
||
ADC_CLK0=1;
|
||
Delay(1);
|
||
ADC_CLK0=0;
|
||
Delay(1);
|
||
}
|
||
ADC_DT0_OUT();
|
||
/////////////////30-36写配置寄存器命令7bit 0X65
|
||
ADC_CLK0 = 1;Delay(1);ADC_DT0=1;ADC_CLK0=0;Delay(1);
|
||
ADC_CLK0 = 1;Delay(1);ADC_DT0=1;ADC_CLK0=0;Delay(1);
|
||
ADC_CLK0 = 1;Delay(1);ADC_DT0=0;ADC_CLK0=0;Delay(1);
|
||
ADC_CLK0 = 1;Delay(1);ADC_DT0=0;ADC_CLK0=0;Delay(1);
|
||
ADC_CLK0 = 1;Delay(1);ADC_DT0=1;ADC_CLK0=0;Delay(1);
|
||
ADC_CLK0 = 1;Delay(1);ADC_DT0=0;ADC_CLK0=0;Delay(1);
|
||
ADC_CLK0 = 1;Delay(1);ADC_DT0=1;ADC_CLK0=0;Delay(1);
|
||
/////////////////37切换方向
|
||
ADC_CLK0 = 1;
|
||
Delay(1);
|
||
ADC_CLK0 = 0;
|
||
Delay(1);
|
||
/////////////////38-45 写8位数据,配置参数
|
||
for(i=0;i<8;i++)
|
||
{
|
||
ADC_CLK0 = 1;
|
||
Delay(1);
|
||
if(dat&0x80)
|
||
ADC_DT0=1;
|
||
else
|
||
ADC_DT0=0;
|
||
dat<<=1;
|
||
ADC_CLK0 = 0;
|
||
Delay(1);
|
||
}
|
||
ADC_CLK0 = 1;//46
|
||
ADC_DT0 = 1 ;
|
||
Delay(1);
|
||
ADC_CLK0 = 0;
|
||
Delay(1);
|
||
return 1;
|
||
}
|
||
|
||
//////////////读芯片输出数据
|
||
long Read_CS1237(void)
|
||
{
|
||
uchar i;
|
||
unsigned long dat = 0;//读到的数据
|
||
uint count_i = 0;//溢出计时器
|
||
long temp;
|
||
|
||
// ADC_DT0_OUT();
|
||
// ADC_DT0 = 1;
|
||
ADC_DT0_IN();
|
||
ADC_CLK0 = 0;
|
||
while(ADC_DT0==1)
|
||
{
|
||
Delay1ms();
|
||
count_i++;
|
||
if(count_i>350)
|
||
{
|
||
ADC_DT0_OUT();
|
||
ADC_CLK0 = 1;
|
||
ADC_DT0 = 1;
|
||
return 0;
|
||
}
|
||
}
|
||
dat = 0;
|
||
for(i=0;i<24;i++)
|
||
{
|
||
ADC_CLK0 = 1;
|
||
Delay(1);
|
||
dat<<=1;
|
||
if(ADC_DT0==1)
|
||
dat++;
|
||
ADC_CLK0 = 0;
|
||
Delay(1);
|
||
}
|
||
for(i=0;i<3;i++)//接着前面24个时钟后等3个时钟,DOUT会主动拉高1次
|
||
{
|
||
ADC_CLK0=1;
|
||
Delay(1);
|
||
ADC_CLK0=0;
|
||
Delay(1);
|
||
}
|
||
ADC_DT0_OUT();
|
||
ADC_DT0=1;
|
||
Delay(1);
|
||
ADC_DT0_IN();
|
||
|
||
if(dat &0x00800000)//24位补码转32位,负数需要按位取反(除符号位),再+1转源码后,填充符号位
|
||
{
|
||
temp = -(((~dat)&0x007FFFFF)+1);
|
||
}
|
||
else
|
||
temp = dat;
|
||
|
||
|
||
return temp;
|
||
|
||
|
||
|
||
}
|
||
//////////////读芯片配置数据
|
||
uchar Read_Config(void)
|
||
{
|
||
uchar i;
|
||
uchar dat = 0;//读到的数据
|
||
uint count_i = 0;//超时溢出计时器
|
||
|
||
// ADC_DT0_OUT();
|
||
// ADC_DT0 = 1;
|
||
ADC_DT0_IN();
|
||
ADC_CLK0 = 0;
|
||
// UART_SendByte(0x22);
|
||
while(ADC_DT0 ==1)
|
||
{
|
||
Delay1ms();
|
||
count_i++;
|
||
if(count_i>350)
|
||
{
|
||
ADC_DT0_OUT();
|
||
ADC_CLK0 = 1;
|
||
ADC_DT0 = 1;
|
||
return 0; //超时,退出程序
|
||
}
|
||
}
|
||
|
||
for(i=0;i<29;i++)//1-29
|
||
{
|
||
ADC_CLK0=1;
|
||
Delay(1);
|
||
ADC_CLK0=0;
|
||
Delay(1);
|
||
}
|
||
ADC_DT0_OUT();
|
||
/////////////////30-36读配置寄存器命令7bit 0X56
|
||
ADC_CLK0 = 1;Delay(1);ADC_DT0=1;ADC_CLK0=0;Delay(1);
|
||
ADC_CLK0 = 1;Delay(1);ADC_DT0=0;ADC_CLK0=0;Delay(1);
|
||
ADC_CLK0 = 1;Delay(1);ADC_DT0=1;ADC_CLK0=0;Delay(1);
|
||
ADC_CLK0 = 1;Delay(1);ADC_DT0=0;ADC_CLK0=0;Delay(1);
|
||
ADC_CLK0 = 1;Delay(1);ADC_DT0=1;ADC_CLK0=0;Delay(1);
|
||
ADC_CLK0 = 1;Delay(1);ADC_DT0=1;ADC_CLK0=0;Delay(1);
|
||
ADC_CLK0 = 1;Delay(1);ADC_DT0=0;ADC_CLK0=0;Delay(1);
|
||
/////////////////37切换方向
|
||
ADC_CLK0 = 1;
|
||
Delay(1);
|
||
ADC_DT0_IN();
|
||
ADC_CLK0 = 0;
|
||
Delay(1);
|
||
|
||
dat = 0;
|
||
for(i=0;i<8;i++)/////////38-45,读寄存器配置
|
||
{
|
||
ADC_CLK0 = 1;
|
||
Delay(1);
|
||
ADC_CLK0 = 0;
|
||
Delay(1);
|
||
dat<<=1;
|
||
if(ADC_DT0==1)
|
||
dat++;
|
||
}
|
||
ADC_CLK0 = 1;//46
|
||
Delay(1);
|
||
ADC_DT0_OUT();
|
||
ADC_DT0=1;
|
||
ADC_CLK0 = 0;
|
||
Delay(1);
|
||
return dat;
|
||
}
|
||
|
||
|
||
//////////////初始化CS1237芯片,先拉高clk进入PowerDown状态
|
||
void CS1237_Init_1(void)
|
||
{
|
||
ADC_DT1_OUT();
|
||
ADC_DT1 = 1;
|
||
ADC_CLK1 = 1;
|
||
}
|
||
//////////////配置CS1237芯片
|
||
uchar CS1237_Config_1(void)
|
||
{
|
||
uchar i ;
|
||
uchar dat ;
|
||
uint count_i = 0;
|
||
|
||
dat =0x0c;//芯片地配置 内部REF 输出40HZ PGA=128 通道A 0X1C
|
||
ADC_DT1_OUT();
|
||
ADC_DT1 = 1;
|
||
ADC_DT1_IN();
|
||
ADC_CLK1 = 0;
|
||
// UART_SendByte(0x22);
|
||
while(ADC_DT1 ==1)
|
||
{
|
||
Delay1ms();
|
||
count_i++;
|
||
if(count_i>350)
|
||
{
|
||
ADC_DT1_OUT();
|
||
ADC_CLK1 = 1;
|
||
ADC_DT1 = 1;
|
||
return 0; //超时,退出程序
|
||
}
|
||
}
|
||
for(i=0;i<29;i++)//1-29
|
||
{
|
||
ADC_CLK1=1;
|
||
Delay(1);
|
||
ADC_CLK1=0;
|
||
Delay(1);
|
||
}
|
||
ADC_DT1_OUT();
|
||
/////////////////30-36写配置寄存器命令7bit 0X65
|
||
ADC_CLK1 = 1;Delay(1);ADC_DT1=1;ADC_CLK1=0;Delay(1);
|
||
ADC_CLK1 = 1;Delay(1);ADC_DT1=1;ADC_CLK1=0;Delay(1);
|
||
ADC_CLK1 = 1;Delay(1);ADC_DT1=0;ADC_CLK1=0;Delay(1);
|
||
ADC_CLK1 = 1;Delay(1);ADC_DT1=0;ADC_CLK1=0;Delay(1);
|
||
ADC_CLK1 = 1;Delay(1);ADC_DT1=1;ADC_CLK1=0;Delay(1);
|
||
ADC_CLK1 = 1;Delay(1);ADC_DT1=0;ADC_CLK1=0;Delay(1);
|
||
ADC_CLK1 = 1;Delay(1);ADC_DT1=1;ADC_CLK1=0;Delay(1);
|
||
/////////////////37切换方向
|
||
ADC_CLK1 = 1;
|
||
Delay(1);
|
||
ADC_CLK1 = 0;
|
||
Delay(1);
|
||
/////////////////38-45 写8位数据,配置参数
|
||
for(i=0;i<8;i++)
|
||
{
|
||
ADC_CLK1 = 1;
|
||
Delay(1);
|
||
if(dat&0x80)
|
||
ADC_DT1=1;
|
||
else
|
||
ADC_DT1=0;
|
||
dat<<=1;
|
||
ADC_CLK1 = 0;
|
||
Delay(1);
|
||
}
|
||
ADC_CLK1 = 1;//46
|
||
ADC_DT1 = 1 ;
|
||
Delay(1);
|
||
ADC_CLK1 = 0;
|
||
Delay(1);
|
||
return 1;
|
||
}
|
||
|
||
//////////////读芯片输出数据
|
||
long Read_CS1237_1(void)
|
||
{
|
||
uchar i;
|
||
unsigned long dat = 0;//读到的数据
|
||
uint count_i = 0;//溢出计时器
|
||
long temp;
|
||
|
||
// ADC_DT1_OUT();
|
||
// ADC_DT1 = 1;
|
||
ADC_DT1_IN();
|
||
ADC_CLK1 = 0;
|
||
while(ADC_DT1==1)
|
||
{
|
||
Delay1ms();
|
||
count_i++;
|
||
if(count_i>350)
|
||
{
|
||
ADC_DT1_OUT();
|
||
ADC_CLK1 = 1;
|
||
ADC_DT1 = 1;
|
||
return 0;
|
||
}
|
||
}
|
||
dat = 0;
|
||
for(i=0;i<24;i++)
|
||
{
|
||
ADC_CLK1 = 1;
|
||
Delay(1);
|
||
dat<<=1;
|
||
if(ADC_DT1==1)
|
||
dat++;
|
||
ADC_CLK1 = 0;
|
||
Delay(1);
|
||
}
|
||
for(i=0;i<3;i++)//接着前面24个时钟后等3个时钟,DOUT会主动拉高1次
|
||
{
|
||
ADC_CLK1=1;
|
||
Delay(1);
|
||
ADC_CLK1=0;
|
||
Delay(1);
|
||
}
|
||
ADC_DT1_OUT();
|
||
ADC_DT1=1;
|
||
Delay(1);
|
||
ADC_DT1_IN();
|
||
|
||
if(dat &0x00800000)//24位补码转32位,负数需要按位取反(除符号位),再+1转源码后,填充符号位
|
||
{
|
||
temp = -(((~dat)&0x007FFFFF)+1);
|
||
}
|
||
else
|
||
temp = dat;
|
||
return temp;
|
||
}
|
||
//////////////读芯片配置数据
|
||
uchar Read_Config_1(void)
|
||
{
|
||
uchar i;
|
||
uchar dat = 0;//读到的数据
|
||
uint count_i = 0;//超时溢出计时器
|
||
|
||
ADC_DT1_OUT();
|
||
ADC_DT1 = 1;
|
||
ADC_DT1_IN();
|
||
ADC_CLK1 = 0;
|
||
// UART_SendByte(0x22);
|
||
while(ADC_DT1 ==1)
|
||
{
|
||
Delay1ms();
|
||
count_i++;
|
||
if(count_i>350)
|
||
{
|
||
ADC_DT1_OUT();
|
||
ADC_CLK1 = 1;
|
||
ADC_DT1 = 1;
|
||
return 0; //超时,退出程序
|
||
}
|
||
}
|
||
|
||
for(i=0;i<29;i++)//1-29
|
||
{
|
||
ADC_CLK1=1;
|
||
Delay(1);
|
||
ADC_CLK1=0;
|
||
Delay(1);
|
||
}
|
||
ADC_DT1_OUT();
|
||
/////////////////30-36读配置寄存器命令7bit 0X56
|
||
ADC_CLK1 = 1;Delay(1);ADC_DT1=1;ADC_CLK1=0;Delay(1);
|
||
ADC_CLK1 = 1;Delay(1);ADC_DT1=0;ADC_CLK1=0;Delay(1);
|
||
ADC_CLK1 = 1;Delay(1);ADC_DT1=1;ADC_CLK1=0;Delay(1);
|
||
ADC_CLK1 = 1;Delay(1);ADC_DT1=0;ADC_CLK1=0;Delay(1);
|
||
ADC_CLK1 = 1;Delay(1);ADC_DT1=1;ADC_CLK1=0;Delay(1);
|
||
ADC_CLK1 = 1;Delay(1);ADC_DT1=1;ADC_CLK1=0;Delay(1);
|
||
ADC_CLK1 = 1;Delay(1);ADC_DT1=0;ADC_CLK1=0;Delay(1);
|
||
/////////////////37切换方向
|
||
ADC_CLK1 = 1;
|
||
Delay(1);
|
||
ADC_DT1_IN();
|
||
ADC_CLK1 = 0;
|
||
Delay(1);
|
||
|
||
dat = 0;
|
||
for(i=0;i<8;i++)/////////38-45,读寄存器配置
|
||
{
|
||
ADC_CLK1 = 1;
|
||
Delay(1);
|
||
ADC_CLK1 = 0;
|
||
Delay(1);
|
||
dat<<=1;
|
||
if(ADC_DT1==1)
|
||
dat++;
|
||
}
|
||
ADC_CLK1 = 1;//46
|
||
Delay(1);
|
||
ADC_DT1_OUT();
|
||
ADC_DT1=1;
|
||
ADC_CLK1 = 0;
|
||
Delay(1);
|
||
return dat;
|
||
}
|
||
|
||
|
||
//////////////初始化CS1237芯片,先拉高clk进入PowerDown状态
|
||
void CS1237_Init_2(void)
|
||
{
|
||
ADC_DT2_OUT();
|
||
ADC_DT2 = 1;
|
||
ADC_CLK2 = 1;
|
||
}
|
||
//////////////配置CS1237芯片
|
||
uchar CS1237_Config_2(void)
|
||
{
|
||
uchar i ;
|
||
uchar dat ;
|
||
uint count_i = 0;
|
||
|
||
dat =0x0c;//芯片地配置 内部REF 输出40HZ PGA=128 通道A 0X1C
|
||
// ADC_DT2_OUT();
|
||
// ADC_DT2 = 1;
|
||
ADC_DT2_IN();
|
||
ADC_CLK2 = 0;
|
||
// UART_SendByte(0x22);
|
||
while(ADC_DT2 ==1)
|
||
{
|
||
Delay1ms();
|
||
count_i++;
|
||
if(count_i>350)
|
||
{
|
||
ADC_DT2_OUT();
|
||
ADC_CLK2 = 1;
|
||
ADC_DT2 = 1;
|
||
return 0; //超时,退出程序
|
||
}
|
||
}
|
||
for(i=0;i<29;i++)//1-29
|
||
{
|
||
ADC_CLK2=1;
|
||
Delay(1);
|
||
ADC_CLK2=0;
|
||
Delay(1);
|
||
}
|
||
ADC_DT2_OUT();
|
||
/////////////////30-36写配置寄存器命令7bit 0X65
|
||
ADC_CLK2 = 1;Delay(1);ADC_DT2=1;ADC_CLK2=0;Delay(1);
|
||
ADC_CLK2 = 1;Delay(1);ADC_DT2=1;ADC_CLK2=0;Delay(1);
|
||
ADC_CLK2 = 1;Delay(1);ADC_DT2=0;ADC_CLK2=0;Delay(1);
|
||
ADC_CLK2 = 1;Delay(1);ADC_DT2=0;ADC_CLK2=0;Delay(1);
|
||
ADC_CLK2 = 1;Delay(1);ADC_DT2=1;ADC_CLK2=0;Delay(1);
|
||
ADC_CLK2 = 1;Delay(1);ADC_DT2=0;ADC_CLK2=0;Delay(1);
|
||
ADC_CLK2 = 1;Delay(1);ADC_DT2=1;ADC_CLK2=0;Delay(1);
|
||
/////////////////37切换方向
|
||
ADC_CLK2 = 1;
|
||
Delay(1);
|
||
ADC_CLK2 = 0;
|
||
Delay(1);
|
||
/////////////////38-45 写8位数据,配置参数
|
||
for(i=0;i<8;i++)
|
||
{
|
||
ADC_CLK2 = 1;
|
||
Delay(1);
|
||
if(dat&0x80)
|
||
ADC_DT2=1;
|
||
else
|
||
ADC_DT2=0;
|
||
dat<<=1;
|
||
ADC_CLK2 = 0;
|
||
Delay(1);
|
||
}
|
||
ADC_CLK2 = 1;//46
|
||
ADC_DT2 = 1 ;
|
||
Delay(1);
|
||
ADC_CLK2 = 0;
|
||
Delay(1);
|
||
return 1;
|
||
}
|
||
|
||
//////////////读芯片输出数据
|
||
long Read_CS1237_2(void)
|
||
{
|
||
uchar i;
|
||
unsigned long dat = 0;//读到的数据
|
||
uint count_i = 0;//溢出计时器
|
||
long temp;
|
||
|
||
// ADC_DT2_OUT();
|
||
// ADC_DT2 = 1;
|
||
ADC_DT2_IN();
|
||
ADC_CLK2 = 0;
|
||
while(ADC_DT2==1)
|
||
{
|
||
Delay1ms();
|
||
count_i++;
|
||
if(count_i>350)
|
||
{
|
||
ADC_DT2_OUT();
|
||
ADC_CLK2 = 1;
|
||
ADC_DT2 = 1;
|
||
return 0;
|
||
}
|
||
}
|
||
dat = 0;
|
||
for(i=0;i<24;i++)
|
||
{
|
||
ADC_CLK2 = 1;
|
||
Delay(1);
|
||
dat<<=1;
|
||
if(ADC_DT2==1)
|
||
dat++;
|
||
ADC_CLK2 = 0;
|
||
Delay(1);
|
||
}
|
||
for(i=0;i<3;i++)//接着前面24个时钟后等3个时钟,DOUT会主动拉高1次
|
||
{
|
||
ADC_CLK2=1;
|
||
Delay(1);
|
||
ADC_CLK2=0;
|
||
Delay(1);
|
||
}
|
||
ADC_DT2_OUT();
|
||
ADC_DT2=1;
|
||
Delay(1);
|
||
ADC_DT2_IN();
|
||
|
||
if(dat &0x00800000)//24位补码转32位,负数需要按位取反(除符号位),再+1转源码后,填充符号位
|
||
{
|
||
temp = -(((~dat)&0x007FFFFF)+1);
|
||
}
|
||
else
|
||
temp = dat;
|
||
return temp;
|
||
}
|
||
//////////////读芯片配置数据
|
||
uchar Read_Config_2(void)
|
||
{
|
||
uchar i;
|
||
uchar dat = 0;//读到的数据
|
||
uint count_i = 0;//超时溢出计时器
|
||
|
||
ADC_DT2_OUT();
|
||
ADC_DT2 = 1;
|
||
ADC_DT2_IN();
|
||
ADC_CLK2 = 0;
|
||
// UART_SendByte(0x22);
|
||
while(ADC_DT2 ==1)
|
||
{
|
||
Delay1ms();
|
||
count_i++;
|
||
if(count_i>350)
|
||
{
|
||
ADC_DT2_OUT();
|
||
ADC_CLK2 = 1;
|
||
ADC_DT2 = 1;
|
||
return 0; //超时,退出程序
|
||
}
|
||
}
|
||
|
||
for(i=0;i<29;i++)//1-29
|
||
{
|
||
ADC_CLK2=1;
|
||
Delay(1);
|
||
ADC_CLK2=0;
|
||
Delay(1);
|
||
}
|
||
ADC_DT2_OUT();
|
||
/////////////////30-36读配置寄存器命令7bit 0X56
|
||
ADC_CLK2 = 1;Delay(1);ADC_DT2=1;ADC_CLK2=0;Delay(1);
|
||
ADC_CLK2 = 1;Delay(1);ADC_DT2=0;ADC_CLK2=0;Delay(1);
|
||
ADC_CLK2 = 1;Delay(1);ADC_DT2=1;ADC_CLK2=0;Delay(1);
|
||
ADC_CLK2 = 1;Delay(1);ADC_DT2=0;ADC_CLK2=0;Delay(1);
|
||
ADC_CLK2 = 1;Delay(1);ADC_DT2=1;ADC_CLK2=0;Delay(1);
|
||
ADC_CLK2 = 1;Delay(1);ADC_DT2=1;ADC_CLK2=0;Delay(1);
|
||
ADC_CLK2 = 1;Delay(1);ADC_DT2=0;ADC_CLK2=0;Delay(1);
|
||
/////////////////37切换方向
|
||
ADC_CLK2 = 1;
|
||
Delay(1);
|
||
ADC_DT2_IN();
|
||
ADC_CLK2 = 0;
|
||
Delay(1);
|
||
|
||
dat = 0;
|
||
for(i=0;i<8;i++)/////////38-45,读寄存器配置
|
||
{
|
||
ADC_CLK2 = 1;
|
||
Delay(1);
|
||
ADC_CLK2 = 0;
|
||
Delay(1);
|
||
dat<<=1;
|
||
if(ADC_DT2==1)
|
||
dat++;
|
||
}
|
||
ADC_CLK2 = 1;//46
|
||
Delay(1);
|
||
ADC_DT2_OUT();
|
||
ADC_DT2=1;
|
||
ADC_CLK2 = 0;
|
||
Delay(1);
|
||
return dat;
|
||
}
|
||
|
||
|
||
//////////////初始化CS1237芯片,先拉高clk进入PowerDown状态
|
||
void CS1237_Init_3(void)
|
||
{
|
||
ADC_DT3_OUT();
|
||
ADC_DT3 = 1;
|
||
ADC_CLK3 = 1;
|
||
}
|
||
//////////////配置CS1237芯片
|
||
uchar CS1237_Config_3(void)
|
||
{
|
||
uchar i ;
|
||
uchar dat ;
|
||
uint count_i = 0;
|
||
|
||
dat =0x0c;//芯片地配置 内部REF 输出40HZ PGA=128 通道A 0X1C
|
||
ADC_DT3_OUT();
|
||
ADC_DT3 = 1;
|
||
ADC_DT3_IN();
|
||
ADC_CLK3 = 0;
|
||
// UART_SendByte(0x22);
|
||
while(ADC_DT3 ==1)
|
||
{
|
||
Delay1ms();
|
||
count_i++;
|
||
if(count_i>350)
|
||
{
|
||
ADC_DT3_OUT();
|
||
ADC_CLK3 = 1;
|
||
ADC_DT3 = 1;
|
||
return 0; //超时,退出程序
|
||
}
|
||
}
|
||
for(i=0;i<29;i++)//1-29
|
||
{
|
||
ADC_CLK3=1;
|
||
Delay(1);
|
||
ADC_CLK3=0;
|
||
Delay(1);
|
||
}
|
||
ADC_DT3_OUT();
|
||
/////////////////30-36写配置寄存器命令7bit 0X65
|
||
ADC_CLK3 = 1;Delay(1);ADC_DT3=1;ADC_CLK3=0;Delay(1);
|
||
ADC_CLK3 = 1;Delay(1);ADC_DT3=1;ADC_CLK3=0;Delay(1);
|
||
ADC_CLK3 = 1;Delay(1);ADC_DT3=0;ADC_CLK3=0;Delay(1);
|
||
ADC_CLK3 = 1;Delay(1);ADC_DT3=0;ADC_CLK3=0;Delay(1);
|
||
ADC_CLK3 = 1;Delay(1);ADC_DT3=1;ADC_CLK3=0;Delay(1);
|
||
ADC_CLK3 = 1;Delay(1);ADC_DT3=0;ADC_CLK3=0;Delay(1);
|
||
ADC_CLK3 = 1;Delay(1);ADC_DT3=1;ADC_CLK3=0;Delay(1);
|
||
/////////////////37切换方向
|
||
ADC_CLK3 = 1;
|
||
Delay(1);
|
||
ADC_CLK3 = 0;
|
||
Delay(1);
|
||
/////////////////38-45 写8位数据,配置参数
|
||
for(i=0;i<8;i++)
|
||
{
|
||
ADC_CLK3 = 1;
|
||
Delay(1);
|
||
if(dat&0x80)
|
||
ADC_DT3=1;
|
||
else
|
||
ADC_DT3=0;
|
||
dat<<=1;
|
||
ADC_CLK3 = 0;
|
||
Delay(1);
|
||
}
|
||
ADC_CLK3 = 1;//46
|
||
ADC_DT3 = 1 ;
|
||
Delay(1);
|
||
ADC_CLK3 = 0;
|
||
Delay(1);
|
||
return 1;
|
||
}
|
||
|
||
//////////////读芯片输出数据
|
||
long Read_CS1237_3(void)
|
||
{
|
||
uchar i;
|
||
unsigned long dat = 0;//读到的数据
|
||
uint count_i = 0;//溢出计时器
|
||
long temp;
|
||
|
||
ADC_DT3_OUT();
|
||
ADC_DT3 = 1;
|
||
ADC_DT3_IN();
|
||
ADC_CLK3 = 0;
|
||
while(ADC_DT3==1)
|
||
{
|
||
Delay1ms();
|
||
count_i++;
|
||
if(count_i>350)
|
||
{
|
||
ADC_DT3_OUT();
|
||
ADC_CLK3 = 1;
|
||
ADC_DT3 = 1;
|
||
return 0;
|
||
}
|
||
}
|
||
dat = 0;
|
||
for(i=0;i<24;i++)
|
||
{
|
||
ADC_CLK3 = 1;
|
||
Delay(1);
|
||
dat<<=1;
|
||
if(ADC_DT3==1)
|
||
dat++;
|
||
ADC_CLK3 = 0;
|
||
Delay(1);
|
||
}
|
||
for(i=0;i<3;i++)//接着前面24个时钟后等3个时钟,DOUT会主动拉高1次
|
||
{
|
||
ADC_CLK3=1;
|
||
Delay(1);
|
||
ADC_CLK3=0;
|
||
Delay(1);
|
||
}
|
||
ADC_DT3_OUT();
|
||
ADC_DT3=1;
|
||
Delay(1);
|
||
ADC_DT3_IN();
|
||
|
||
if(dat &0x00800000)//24位补码转32位,负数需要按位取反(除符号位),再+1转源码后,填充符号位
|
||
{
|
||
temp = -(((~dat)&0x007FFFFF)+1);
|
||
}
|
||
else
|
||
temp = dat;
|
||
return temp;
|
||
}
|
||
//////////////读芯片配置数据
|
||
uchar Read_Config_3(void)
|
||
{
|
||
uchar i;
|
||
uchar dat = 0;//读到的数据
|
||
uint count_i = 0;//超时溢出计时器
|
||
|
||
// ADC_DT3_OUT();
|
||
// ADC_DT3 = 1;
|
||
ADC_DT3_IN();
|
||
ADC_CLK3 = 0;
|
||
// UART_SendByte(0x22);
|
||
while(ADC_DT3 ==1)
|
||
{
|
||
Delay1ms();
|
||
count_i++;
|
||
if(count_i>350)
|
||
{
|
||
ADC_DT3_OUT();
|
||
ADC_CLK3 = 1;
|
||
ADC_DT3 = 1;
|
||
return 0; //超时,退出程序
|
||
}
|
||
}
|
||
|
||
for(i=0;i<29;i++)//1-29
|
||
{
|
||
ADC_CLK3=1;
|
||
Delay(1);
|
||
ADC_CLK3=0;
|
||
Delay(1);
|
||
}
|
||
ADC_DT3_OUT();
|
||
/////////////////30-36读配置寄存器命令7bit 0X56
|
||
ADC_CLK3 = 1;Delay(1);ADC_DT3=1;ADC_CLK3=0;Delay(1);
|
||
ADC_CLK3 = 1;Delay(1);ADC_DT3=0;ADC_CLK3=0;Delay(1);
|
||
ADC_CLK3 = 1;Delay(1);ADC_DT3=1;ADC_CLK3=0;Delay(1);
|
||
ADC_CLK3 = 1;Delay(1);ADC_DT3=0;ADC_CLK3=0;Delay(1);
|
||
ADC_CLK3 = 1;Delay(1);ADC_DT3=1;ADC_CLK3=0;Delay(1);
|
||
ADC_CLK3 = 1;Delay(1);ADC_DT3=1;ADC_CLK3=0;Delay(1);
|
||
ADC_CLK3 = 1;Delay(1);ADC_DT3=0;ADC_CLK3=0;Delay(1);
|
||
/////////////////37切换方向
|
||
ADC_CLK3 = 1;
|
||
Delay(1);
|
||
ADC_DT3_IN();
|
||
ADC_CLK3 = 0;
|
||
Delay(1);
|
||
|
||
dat = 0;
|
||
for(i=0;i<8;i++)/////////38-45,读寄存器配置
|
||
{
|
||
ADC_CLK3 = 1;
|
||
Delay(1);
|
||
ADC_CLK3 = 0;
|
||
Delay(1);
|
||
dat<<=1;
|
||
if(ADC_DT3==1)
|
||
dat++;
|
||
}
|
||
ADC_CLK3 = 1;//46
|
||
Delay(1);
|
||
ADC_DT3_OUT();
|
||
ADC_DT3=1;
|
||
ADC_CLK3 = 0;
|
||
Delay(1);
|
||
return dat;
|
||
} |