📄 ad7705.c
字号:
#include<STC12C5410AD.H>
#include<MATH.H>
#define byte unsigned char
//函数声明
void initspi(void);
void send(byte s);
void reset7705(void);
long zero(void);
unsigned int get(unsigned char chanNo); //读取AD7705的采样值
void delay();
void adInit(void); //AD转换初始化
void selectChan0(void); //选择通道0
void selectChan1(void); //选择通道1
//管脚定义
sbit cs=P1^4; //AD7705片选
sbit dr=P3^3; //AD7705转换标志
//AD转换初始化
void adInit(void)
{
initspi();
reset7705();//连续40个串行周期写入1,复位7705的数据接口
send(0x20);
send(0x0C);
send(0x21);
send(0x0C);
send(0x10);
send(0x44);
send(0x11);
send(0x44);
}
//选择通道0
void selectChan0(void)
{
send(0x20);
send(0x0C);
send(0x10);
send(0x44);
}
//选择通道1
void selectChan1(void)
{
send(0x21);
send(0x0C);
send(0x11);
send(0x44);
}
void initspi(void)
{
SPCTL=0xDE;//主机,先传MSB,允许工作 ,时钟频率(1/64)CPUclock)
SPSTAT=0xC0;//清零
P1M0=P1M0&(0xEF); //CS(P1.4)设置为输出
P1M1=P1M1|(0x10);
P3M0=P3M0|(0x08); //DRDY(P3.3)设置为输入
P3M1=P3M1&(0xF7);
}
void send(byte s)
{
cs=0;
SPDAT=s;
while(!(SPSTAT&0x80))
{;}
SPSTAT=0xC0;
cs=1;
}
unsigned int get(unsigned char chanNo)
{
byte a1,b1;
while(!dr)
{;}
while(dr)
{;}
switch(chanNo)
{
case 0: send(0x38);break;
case 1: send(0x39);break;
}
cs=0;
SPDAT=0;
while(!(SPSTAT&0x80))
{;}
a1=SPDAT;
SPSTAT=0xC0;
SPDAT=0;
while(!(SPSTAT&0x80))
{;}
b1=SPDAT;
SPSTAT=0xC0;
cs=1;
return(a1*256+b1);
}
void reset7705(void)
{
cs=0;
SPDAT=0xFF;
while(!(SPSTAT&0x80))
{;}
SPSTAT=0xC0;
SPDAT=0xFF;
while(!(SPSTAT&0x80))
{;}
SPSTAT=0xC0;
SPDAT=0xFF;
while(!(SPSTAT&0x80))
{;}
SPSTAT=0xC0;
SPDAT=0xFF;
while(!(SPSTAT&0x80))
{;}
SPSTAT=0xC0;
SPDAT=0xFF;
while(!(SPSTAT&0x80))
{;}
SPSTAT=0xC0;
cs=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -