#define P_ADS7822_CS P1_7 //Port of ADS7822 CS
#define P_ADS7822_CLK P1_6 //Port of ADS7822 Clock
#define P_ADS7822_Dout P1_4 //Port of ADS7822 Dout
int16 ReadSpi_ADS7822(void)
{
int i; //定义数据读取次数变量
int j; //定义采样数据暂存单元
int ADS7822_Value; //定义采样数据存储单元
P_ADS7822_CLK=0; //addclock为低电平
P_ADS7822_CS=0; //启动A/D转换
P_ADS7822_CLK=1; //送3个脉冲取样
P_ADS7822_CLK=0;
P_ADS7822_CLK=1;
P_ADS7822_CLK=0;
P_ADS7822_CLK=1;
//P_ADS7822_Dout=1;
//ADS7822_Value=0;
/读取采样数据
for(i=11;i>=0;i--)
{
//送读取脉冲
P_ADS7822_CLK=0;
P_ADS7822_CLK=1;
/读取数据
j=(int)(P_ADS7822_Dout);
//数据移位后与前面数据相或
ADS7822_Value=ADS7822_Value|(j<<i);
}
//一次采样完成,片选置为高电平
P_ADS7822_CS=1;
//Ref = 2.5
//VDC = Dout * 2.5 / 4096
//ADS7822_Value = ADS7822_Value * 0x05 / 0x1FFF;
return ADS7822_Value;
}
程序是参考网上的例子,按照时序图做的,MCU是CC2530,但是ADS7822_Value的值总是0xFFF,不知道哪位能指点一下。
//P_ADS7822_Dout=1;
//ADS7822_Value=0;
这两句启用与否,都对上述情况无影响。