Weight_Bed/CS1237.c

853 lines
16 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}