搜索
bottom↓
回复: 0

上传一个ADS1230的驱动程序,请高手解释其中数据处理部分

[复制链接]

出0入4汤圆

发表于 2012-10-6 19:33:01 | 显示全部楼层 |阅读模式
/*******************************************************************************
// 说明: 头文件声明
*******************************************************************************/
#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周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-10 04:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表