⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ads7841.c

📁 采样芯片ADS7841驱动程序,C语言编写
💻 C
字号:
#include <Reg52.h>
#include <Intrins.h>
#include <AbsAcc.h>

#include "meter.h"
/*
uint ADS7841_READ(uchar CH)
{
    uchar  i, dt;
    uint   AD_RESULT=0;
      
    CS7841=0;                       // 芯片允许
                     _nop_();                        
    SCK=0;
    SDI=0;
    dt=CH;
    i=0;
    while(i<8)                      //写入8位控制字
    {
        if(dt>=0x80)  
             SDI=1;	            //时钟上升沿锁存SDI
        else 
             SDI=0;
        _nop_();
        SCK=1;                     //开始发送命令字
        _nop_();
        dt<<=1;
        SCK=0;                     //时钟脉冲,一共24个
        
        i++;
    }
                                  //等待转换完成(20us)
    for(i=0;i<20;i++)    {    _nop_();   }
    
    SCK=1;
    i=0;
    while(i<12)                     //读取12位AD转换值
    {
        AD_RESULT<<=1;    _nop_();
        SCK=0;
        if(SDO)     
            AD_RESULT|=0x0001;     //用时钟的下降沿读取
        if(i==7)        { _nop_();  _nop_(); }
        SCK=1;
        
        i++;
    }                                          
    i=0;
    while(i<4)                     //滤掉多余的4个时钟
    {
                          _nop_();
        SCK=0;           _nop_();
        SCK=1;
        
        i++;
    }
    SDI=1;
    CS7841=1;                      //禁止芯片
                                
    AD_RESULT&=0x0fff;             //屏蔽高4 bit                 

    return AD_RESULT;                        
}
*/
uint ADS7841_READ(uchar CH)
{
    uchar  i;
    uchar  dt;
    uint   AD_RESULT=0;
      
    SCK=0;
    SDI=0;
    CS7841=0;                       // 芯片允许
    _nop_();                        
    
    dt=CH;
    i=0;
    while(i<8)                      //写入8位控制字
    {
        if(dt>=0x80)     SDI=1;	      //时钟上升沿锁存SDI
        else             SDI=0;
        
        SCK=1;                     //开始发送命令字
        SCK=0;                     //时钟脉冲,一共24个
        
        dt<<=1;
        i++;
    }
    SDI=0;
                                  //等待转换完成(20us)
    for(i=0;i<20;i++)    {    _nop_();   }
    
    i=0;
    SCK=1;
    while(i<12)                     //读取12位AD转换值
    {
        AD_RESULT<<=1;    
        SCK=0;
        
        if(SDO)         AD_RESULT|=0x0001;     //用时钟的下降沿读取
        if(i==7)        { _nop_(); _nop_(); }

        _nop_();        
        SCK=1;
        
        i++;
    }                                          
    i=0;
    while(i<4)                     //滤掉多余的4个时钟
    {
        SCK=0;           
        SCK=1;
        
        i++;
    }
    SCK=0;
    
    CS7841=1;                      //禁止芯片
                                    
    AD_RESULT&=0x0fff;             //屏蔽高4 bit                 

    return AD_RESULT;                        
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -