|
网友帮忙下的。
//AD7682.c
#include "includes.h"
#define delay_AD7682_us() {_nop_();_nop_();}
void chack_L_AD(INT16U *data);
void AD7682_init(void)
{
INT16U temp[8];
AD7682_SCLK_init;
AD7682_DOUT_init;
AD7682_DIN_init;
AD7682_CS_init;
chack_L_AD(temp);
// chack_AD7682(temp);
}
//reg寄存器内容,data转换数据
INT16U AD7682_spi(INT8U chn)
{
INT8U i;
INT16U reg=0;
INT16U data=0;
AD7682_CS_0;
if(chn>=4){chn-=4;}
reg = (1<<13)|(7<<10)|(chn<<7)|(1<<6)|(1<<0);
reg <<=2; //最高位先出
delay_AD7682_us();
for(i=0;i<16;i++)
{
if(reg&0x8000){AD7682_DIN_1;}
else {AD7682_DIN_0;}
delay_AD7682_us();
AD7682_SCLK_0;
delay_AD7682_us();
reg<<=1;
AD7682_SCLK_1;
delay_AD7682_us();
data<<=1;
if(AD7682_DOUT_READ){data|=1;}
}
delay_AD7682_us();
AD7682_SCLK_0;
delay_AD7682_us();
AD7682_CS_1;
return data;
}
/*
ad0->A
ab1->B
ad2->C
ad3->D
*/
//8通道一起检测
void chack_L_AD(INT16U *data)
{
INT8U i;
for(i=0;i<4;i++)//for(i=0;i<4;i++)for(i=3;i>=0;i--)
{
*(data+i)=AD7682_spi(i+2);
}
}
//头文件
#ifndef AD7682_H
#define AD7682_H
//#define ADCHECK_EN {TIMSK2 |= (1<<TOIE2);} //开定时器2
//#define ADCHECK_DIS {TIMSK2 &= ~(1<<TOIE2);}//关定时器2
/*
//光通道对应的AD口。
typedef enum {
L_D = 0,
L_C = 1,
L_B = 2,
L_A = 3,
R_A = 4,
R_B = 5,
R_C = 6,
R_D = 7
}LIGHT_CHN;
*/
void AD7682_init(void);
INT16U AD7682_spi(INT8U reg);
void chack_AD7682(INT16U *data);
#endif |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|