?? ad7705.bak
字號:
#include "mylib.h"
/*
編寫:bobo
AD7705寄存器
1:通信寄存器
DRDY RS2 RS1 RS0 R/W STBY CH1 CH0
DRDY:寫操作時(shí)此位為0。
RS2、RS1、RS0:選擇寄存器。000:通信寄存器; 001:設(shè)置寄存器; 010:時(shí)鐘寄存器。
R/W:0寫操作; 1讀操作.
STBY:等待模式。0正常工作模式.
CH1 CH0:通道選擇。
2:設(shè)置寄存器
MD1 MD0 G2 G1 G0 B/U BUF FSYNC
MD1 MD0:校準(zhǔn)模式選擇。00正常模式; 01自校準(zhǔn)模式; 10 零刻度校準(zhǔn)模式; 11全刻度校準(zhǔn)模式.
G2 G1 G0:增益選擇位。
B/U:單極性與雙極性選擇。0雙極,1單極。
BUF:緩沖。1緩沖,0無緩沖。
FSYNC:同步過濾器。
3:時(shí)鐘寄存器
ZER0 ZER0 ZER0 CLKDIS CLKDIV CLK FS1 FS0
ZER0:0必須寫進(jìn)該位,才能保證7705的運(yùn)轉(zhuǎn)正確。
CLKDIS:主時(shí)鐘禁止位。"1"禁止MCLKOUT腳輸出。
CLKDIV:時(shí)鐘分頻位。"1"主時(shí)鐘二頻; "0"不分頻。
CLK:時(shí)鐘位。2.4576M/4.9152M時(shí)對應(yīng)CLK=1;1M/2M時(shí)對應(yīng)CLK=0.
FS0 FS1:數(shù)據(jù)刷新選擇位。應(yīng)與CLK結(jié)合來決定數(shù)據(jù)刷新速度。
*/
/*
STC看門狗介紹WDT_CONTR:
-- -- EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0
EN_WDT:看門狗允許位,設(shè)置為1時(shí)看門狗啟動(dòng)。
CLR_WDT:看門狗清0位,設(shè)置為1時(shí)看門狗重新計(jì)數(shù),硬件將自動(dòng)清0此位
IDLE_WDT:當(dāng)設(shè)置為1時(shí)看門狗定時(shí)器在空閑模式下計(jì)數(shù);
當(dāng)設(shè)置為0時(shí)看門狗定時(shí)器在空閑模式下不計(jì)數(shù).
PS2 PS1 PS0:看門狗定時(shí)器分頻值。
*/
/* AD7705軟件延時(shí) */
void Wait7705(unsigned int t)
{
for( ;t>0 ;t-- );
}
void writeword(unsigned int byteword)
{
unsigned int AD16bit,Token;
unsigned char i ;
AD_CLK=1;
AD_CS=0;//開始
delay();
Token=0x80;
AD16bit=byteword;
for(i=0;i<8;i++)
{
AD_CLK=0;
delay();
if(AD16bit&Token)
AD_IN=1;//輸入數(shù)據(jù)位
else AD_IN=0;
AD_CLK=1;
delay();
Token=Token>>1;
}
AD_CLK=1;
AD_IN=1;//結(jié)束
AD_CS=1;
}
void CH1_init()
{
writeword(0x20);//發(fā)送寫命令序列 clock register
//writeword(0x0d);//設(shè)置更新頻率
// writeword(0x05);
writeword(0x05);
writeword(0x10);//set up register
writeword(0x42);
}
void CH2_init()
{
writeword(0x21);//發(fā)送寫命令序列 clock register
writeword(0x05);//設(shè)置更新頻率
writeword(0x11);//set up register
//if(polarity==1)
writeword(0x42);
}
void AD7705_reset(void)
{
//AD_RST=1;
//delay();
delay();
AD_RST=0;
delay();
delay();
AD_RST=1;
delay();
delay();
AD_CS=0;
}
unsigned int ReadDataCh1_Ch2(bit mode)
{
uint AD16bit;
uchar i,DataH,DataL; //AD值的高位與低位
DataH=0;
DataL=0;
if(mode==1)
{
writeword(0x38); //第1通道
delay();
}
else
{
writeword(0x39); //第2通道
delay();
}
//Led=0;
while(AD_REDY==1); //等待數(shù)據(jù)準(zhǔn)備好
//Led=0;
delay();
AD_CLK=1;
AD_CS=0;
delay();
AD16bit=0;
AD_OUT=1;
for(i=0;i<8;i++)
{
AD_CLK=0;
delay();
DataH<<=1;
if(AD_OUT==1)
DataH|=0x01;
AD_CLK=1;
delay();
}
DataH=DataH&0xff;
for(i=0;i<8;i++)
{
AD_CLK=0;
delay();
DataL<<=1;
if(AD_OUT==1)
DataL|=0x01;
AD_CLK=1;
delay();
}
delay();
while(AD_REDY==0);
AD_CS=1;
AD_CLK=1;
AD16bit=DataH*256+DataL; //2個(gè)8位字節(jié)組合成1個(gè)16位字節(jié)
return(AD16bit);
}
void delay()
{
unsigned int j;
for(j=0;j<8;j++);
}
void INI7705(void)
{
writeword(0xff);
writeword(0xff);
writeword(0xff);
writeword(0xff);
writeword(0xff);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -