老大,我不是什么伸手党哈,我在网上找的相关的资料,再结合自己的硬件改的,弄了好几天,还是调不通。这才上网找你们这些大侠求救。
------------------------------------------------------------------------------*/
#include <DPT.H>
#include <Intrins.h>
/************************************************************
AD7490数据转换 //Full Shutdown mode
*************************************************************/
uint ad7490_convert(uint channel)
{
uchar i,tmp;
uint config_data, get_data;
//WRITE SEQ ADD3 ADD2 ADD1 ADD0 PM1 PM0 SHADOW WEAK/TRI RANGE CODING
config_data = 0x0831;
config_data = config_data|(channel<<6);
SPI_Init();
//CS下降沿启动上一次转化和配置下一次转换的通道
SS=0;
SCK=1;
_nop_();
_nop_();
//配置下一次转换的通道
for (i=0; i<16; i++)
{
if (i < 12)
{
if ((config_data&0x0800) == 0)
MOSI=0;
else
MOSI=1;
}
SCK=0;
config_data = config_data << 1;
_nop_();
_nop_();
SCK=1;
}
//设置AD为Full Shutdown mode
config_data = 0x0821;
config_data = config_data|(channel<<6);
get_data = 0;
SS=1;
//唤醒保持时间
Delay1ms(1);
SS=0;
_nop_();
_nop_();
//CS下降沿读取ADD3
tmp = MISO;
if (tmp == 0)
get_data &= 0xFFFE;
else
get_data |= 0x0001;
get_data = get_data << 1;
//读取转换结果其他位
for (i=0; i<16; i++)
{
if (i < 12)//
{
if ((config_data&0x0800) == 0)
MOSI=0;
else
MOSI=1;
}
SCK=0;
_nop_();
_nop_();
config_data = config_data << 1;
if (i < 15)
{
tmp = MISO;
if (tmp == 0)
get_data &= 0xFFFE;
else
get_data |= 0x0001;
if (i < 14)
get_data = get_data << 1;
}
SCK=1;
}
SS=1;
return get_data&0x0FFF;
}
void vaule(void)
{
unsigned int result,channel=16;
while(1)
{
result=ad7490_convert(1);
}
}
|