📄 ad7705.c
字号:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
uchar datah,datal;
sbit cs_7705=P1^0; //AD7705片选
sbit din_7705=P1^1; //数据输入口
sbit dout_7705=P1^2; //数据输出口
sbit clk_7705=P1^3; //同步时钟
sbit drdy_7705=P1^4; //转换结束标志位
void delay_7705(uchar count_7705)
{
uchar i;
for(;count_7705>0;count_7705--)
for(i=0;i<200;i++) //1ms
{
_nop_();_nop_();_nop_();_nop_();_nop_();
}
}
void write_7705(uchar dat) //写入一个字节
{
uchar i;
clk_7705=1;
cs_7705=0;
for(i=0;i<8;i++)
{
dat=dat<<1;
din_7705=CY;
clk_7705=0;
clk_7705=1;
}
clk_7705=1;
din_7705=1;
cs_7705=1;
}
void init_7705() //初始化
{
uchar i;
clk_7705=1; //
din_7705=1; //
for(i=0;i<40;i++) // 防止接口迷失 (011数据)
{ // STBY写1进入等待 (010时钟)
clk_7705=0; // (001设置)
clk_7705=1; // (000通信) (0:正常)
} // (0)(先寄存器)(0写) (1:等待) (通道选择)
write_7705(0x20); //通道1,下一个写时钟 DRDY RS2 RS1 RS0 R/W STBY CH1 CH0
write_7705(0x06); //设置时钟
write_7705(0x10); //通道1,下一个写设置
write_7705(0x44); //写设置
delay_7705(50); //延时50ms
}
uchar read_byte()
{
uchar i,temp;
temp=0;
for(i=0;i<8;i++)
{
temp=temp<<1;
clk_7705=0;
if(dout_7705)temp=temp|0x01;
clk_7705=1;
}
return temp;
}
void read_7705(uchar channel)
{
write_7705(0x38|channel);
while(drdy_7705==1);
clk_7705=1;
cs_7705=0;
datal=read_byte();
datah=read_byte();
clk_7705=1;
din_7705=1;
cs_7705=1;
}
void main()
{
init_7705();
read_7705(0); //0:通道1 1:通道2 读通道1的16位数据到datah,datal
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -