|
/*******************************************************************************
// 说明: 头文件声明
*******************************************************************************/
#define ADS1230_GLOBALS
#include "INCLUDES.H"
/*******************************************************************************
// 函数名: Ads1230_Init
// 说明: ADS1230初始化程序
// 描述:
// 入口参数: 无
// 出口参数: 无
*******************************************************************************/
void Ads1230_Init ( void )
{
INT8U delay_count;
ADS1230_PDWN = 1;
_nop_();
_nop_();
ADS1230_PDWN = 0;
for ( delay_count = 0x80; delay_count != 0; delay_count-- )//128
{
_nop_();
}
ADS1230_PDWN = 1;
for ( delay_count = 0x80; delay_count != 0; delay_count-- )
{
_nop_();
}
}
/******************************************************************************
// 函数名: Read_AD_SampleValue_From_Ads1230
// 说明: 读A/D内码值
// 描述:
// 入口参数:
// 出口参数:
*******************************************************************************/
INT32U Read_AD_SampleValue_From_Ads1230 ( void )
{
INT32U receive_data_buf = 0;
INT8U cycle, receive_data_buf2;
ADS1230_CLK = 0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
if ( !ADS1230_DATA )
{
for ( cycle = 0; cycle < 10; cycle++ )
{
_nop_();
_nop_();
}
for ( cycle = 0; cycle < 12; cycle++ )
{
receive_data_buf <<= 1;
ADS1230_CLK = 1;
_nop_();
_nop_();
ADS1230_CLK = 0;
_nop_();
_nop_();
if ( ADS1230_DATA == 1 )
receive_data_buf |= 0x0001;//0000 0000 0000 0001
else
receive_data_buf &= 0xFFFE;//1111 1111 1111 1110
_nop_();
_nop_();
}
for ( cycle = 0; cycle < 8; cycle++ )
{
receive_data_buf2 <<= 1;
ADS1230_CLK = 1;
_nop_();
_nop_();
ADS1230_CLK = 0;
_nop_();
_nop_();
if ( ADS1230_DATA == 1 )
receive_data_buf2 |= 0x01;//0000 0001
else
receive_data_buf2 &= 0xFE;//1111 1110
_nop_();
_nop_();
}
ADS1230_CLK = 0;
for ( cycle = 0; cycle < 5; cycle++ )
{
_nop_();
_nop_();
}
receive_data_buf = ( receive_data_buf << 8 ) + receive_data_buf2;
//raima_back = receive_data_buf * 256 + receive_data_buf2;
return ( receive_data_buf );
}
}
/*******************************************************************************
// 函数名: AdSampleValue_Dight
// 说明:
// 描述:
// 入口参数:
// 出口参数:
*******************************************************************************/
void AdSampleValue_Dight ( void )
{
INT32U dight_data_buf;
dight_data_buf = Read_AD_SampleValue_From_Ads1230 ();
if ( dight_data_buf < 0x80000 )
{
raima_back = dight_data_buf >> 1; }
else
{
ES = 0; // 串行中断使能无效
raima_back = (( ~( dight_data_buf - 1 ) ) & 0x000FFFFF ) >> 1; // 负数 ( 取19位AD值, 屏蔽5位 )
raima_back = -raima_back;
ES = 1; //
}
}
这段代码是网上找的,其中红线部分为什么将转换结果右移一位????请熟悉ADS1230的高手指点一下。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|