?? 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 + -