exiao 发表于 2014-7-5 20:46
猜不到原因。建议楼主提供代码和电路图
主程序
#include "ads1118.h"
void Init(void) //此函数方便串口调试
{
TMOD = 0X20; //定时器初始化
TH1 = 0XFD;
TR1 = 1;
SM1 = 1;SM0 = 0;
REN = 1;
TI = 1;
}
float Volt_Value;
void main(void)
{
uint value;
Init(); //定时器初始化
EA = 1; //打开中断
ADS1118_Init(); //AD模块初始化
Write_ADS1118(CONFIG_VALUE,0); //
while(1)
{
delay_ms(1000); //延时1s
value = ADS_SEL_Read(4,0); //6.144
printf("value = %d\n\r",value); //输出value的值
Volt_Value = value*6.144/32768; //第二次转换时读出的是前一次的电压
printf("Volt_Value %f\n\r\n\r",Volt_Value); //输出第二次Volt_Value的值
}
}
子程序
#include "ads1118.h"
void delay_ms(uint z) // 延时程序
{
uint x;
for(;z>0;z--)
for(x=110;x>0;x--);
}
void ADS1118_Init(void) //ADS1118初始化程序
{
CS_H;
SCLK_H;
MOSI_L;
}
union aa{ //???
uint dat1[2];
ulong dat2;
};
uint Write_ADS1118(uint dat,uchar mode) //??????
{
// uint temp;
union aa temp;
union aa temp1;
// ulong Value;
uchar i;
if(mode == 1)dat |= 0x8000;
temp.dat1[1] = dat;
temp.dat1[0] = dat;
SCLK_L;
CS_L;
delay_ms(1);
for(i=0;i