📄 ad7703_2.c
字号:
/*
* ad7703_2.c
*
* AD7703
*
*
*
* 陈真勇(SA01010010)
* w3wind@sina.com or
* zychen@ustc.edu.cn
* 中国科学技术大学自动化系
* 2002/7/20
*/
/*
*
*
* 修改:王占成
* zcwang@mail.ustc.edu.cn
* 2003.4.26
*
*
*/
#include "Xdata.h"
#include "delay.h"
#include "link.h"
#include "watchdog.h"
void selfcal()
{
/*第一个AD7703*/
P2 = 0xF8; /*?????????????自校正的时候CS为什么要高*/
ADCAL1=1;
delay10us(); /*保持CAL高至少4个7703时钟周期,大约2微秒,为了准确延时10微秒*/
ADCAL1=0;
/*第二个AD7703*/
P2 = 0xF8;
ADCAL2=1;
delay10us();
ADCAL2=0;
}
UINT read_ad_1()
{
BYTE i=20; /* 20 bits to be read */
UINT mask=0x8000;
UINT result=0;
do{;}while( ADDRDY1 );
EA = 0;
P2 = 0xF8;
P2 = 0xA8; /*CS下降沿*/
/*read first 16 bits of total 20 bits*/
do{
ADSCLK1=1;/* data valid on rising edge */
if(i>4 && ADSDATA1){ /* max delay 75 ns before data valid. first check i>4*/
result |= mask;
}
mask >>= 1;
ADSCLK1=0;/* data changed on falling_edge */
}while(--i);
P2 = 0xF8;
EA = 1;
return result;
}
UINT read_ad_2()
{
BYTE i=20; /* 20 bits to be read */
UINT mask=0x8000;
UINT result=0;
do{;}while( ADDRDY2 );
EA = 0;
P2 = 0xF8;
P2 = 0x88; /*CS下降沿*/
/*read first 16 bits of total 20 bits*/
do{
ADSCLK2=1;/* data valid on rising edge */
if(i>4 && ADSDATA2){ /* max delay 75 ns before data valid. first check i>4*/
result |= mask;
}
mask >>= 1;
ADSCLK2=0;/* data changed on falling_edge */
}while(--i);
P2 = 0xF8;
EA = 1;
return result;
}
void init_ad7703()
{
BYTE i;
selfcal();/*self calibration*/
/*将CAL置高后等待3145655个7703时钟周期,大约是1.5秒.完成初始化*/
for(i=0;i<20;i++){
clear_watchdog(); /*定期清除看门狗*/
delay(100);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -