📄 ad7705.c
字号:
/*************************************************************************************
* 编程人员:徐松亮 qq:5387603 email:5387603@qq.com
*************************************************************************************/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit sclk_7705=P2^3;
sbit dat_7705=P2^0;
sbit drdy=P2^2; //转换结束标志DRDY=0;
//sbit ret=P1^6;
void delay(uint i)
{
while(--i);
}
void wr_7705(uchar x) //写命令字
{
uchar i;
dat_7705=1;
sclk_7705=1;
for(i=8;i>0;i--)
{
sclk_7705=0;
dat_7705=x&0x80;
sclk_7705=1;
x<<=1;
}
dat_7705=1;
}
uchar rd_7705_b() //读8位数据
{
uchar x=0;
uchar i;
dat_7705=1;
sclk_7705=1;
for(i=8;i>0;i--)
{
x<<=1;
sclk_7705=0;
if(dat_7705)x|=0x01;
sclk_7705=1;
}
return x;
}
uint rd_7705() //读16位数据
{
uint x=0;
uchar i;
dat_7705=1;
sclk_7705=1;
for(i=16;i>0;i--)
{
x<<=1;
sclk_7705=0;
if(dat_7705)x|=0x01;
sclk_7705=1;
}
return x;
}
/*void ret_7705()
{
uchar i;
ret=0;
for(i=0;i<200;i++);
ret=1;
}*/
union
{
uint a;
uchar b[2];
}abc;
/*
void main()
{
P2=0xff;
//ret_7705();
wr_7705(0xff); //发至少32个1使芯片复位
wr_7705(0xff);
wr_7705(0xff);
wr_7705(0xff);
wr_7705(0xff);
wr_7705(0x20); //通信 选通写时钟寄存器
wr_7705(0x02); //时钟 晶振2.4576MHZ 输出更新频率100HZ
wr_7705(0x10); //通信 选通写设置寄存器
wr_7705(0x46);
// wr_7705(0x44); //设置 01 000 1 0 0
while(drdy==1); //自校准 增益1 单极性 不缓冲 不滤波同步(设定就不好使)
wr_7705(0x38);
rd_7705();
do{
while(drdy==1);
wr_7705(0x38);
abc.a=rd_7705();
//P0=abc.b[0];
P0=abc.b[1];
// P2=abc.b[1];
}while(1);
}
*/
void main()
{
P2=0xff;
//ret_7705();
wr_7705(0xff); //发至少32个1使芯片复位
wr_7705(0xff);
wr_7705(0xff);
wr_7705(0xff);
wr_7705(0xff);
wr_7705(0x00); //通讯寄存器
wr_7705(0x00); //校准寄存器对A+,A-
wr_7705(0x10); //设置寄存器 MD1 MD0 G2 G1 G0 B/U BUF FSYNC
// wr_7705(0x7e); //01 111 1 1 0 自校准 128增益 单极性 缓冲(允许处理高阻抗源) 滤波器同步
wr_7705(0x46); //01 000 1 1 0 自校准 0增益 单极性 缓冲(允许处理高阻抗源) 滤波器同步
wr_7705(0x20); //时钟寄存器 0 0 0 clkdis clkdiv clk fs1 fs0
wr_7705(0x04); //000 0 0 1 10 主时钟不禁止 时钟不分频 晶振1MHZ 输出更新频率50HZ
// wr_7705(0x02); //000 0 0 0 10 主时钟不禁止 时钟不分频 晶振2.4576MHZ 输出更新频率100HZ
// wr_7705(0x10); //通信 选通写设置寄存器
// wr_7705(0x46); //01 000 1 1 0
// wr_7705(0x44); //设置 01 000 1 0 0
while(drdy==1); //自校准 增益1 单极性 不缓冲 不滤波同步(设定就不好使)
wr_7705(0x38);
rd_7705();
do{
while(drdy==1);
wr_7705(0x38);
abc.a=rd_7705();
//P0=abc.b[0];
P0=abc.b[1];
// P2=abc.b[1];
}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -