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

📄 adc.c

📁 MSP430平台下的MCP3208型ADC的驱动
💻 C
字号:
////////////////////////////////////////////////////////////////
//              无线传感器网络节点程序                        //
//                DAC操作子程序                               //
//                编写:蒋路茸                                //
//                日期:2008.6                                //
//                版本:0.1                                   //
//                                                            //
//                AD_CLK  P3.3  SCLK0                         //
//                AD_DOUT P3.2  SOMI0                         //
//                AD_DIN  P3.1  SIMO0                         //
//                AD_CS   P3.0  STE0                          //
////////////////////////////////////////////////////////////////
#include <msp430x14x.h>
#include "adc.h"

#define ADC_DIR      P3DIR
#define ADC_IN       P3IN
#define ADC_OUT      P3OUT
#define ADC_CLK      BIT3
#define ADC_DOUT     BIT2
#define ADC_DIN      BIT1
#define ADC_CS       BIT0
#define ADC_CLK_HI   P3OUT |= BIT3
#define ADC_CLK_LO   P3OUT &= ~BIT3
#define ADC_DIN_HI   P3OUT |= BIT1
#define ADC_DIN_LO   P3OUT &= ~BIT1
#define ADC_CS_HI    P3OUT |= BIT0
#define ADC_CS_LO    P3OUT &= BIT0

#define ADC_CH0      0X18
#define ADC_CH1      0X19
#define ADC_CH2      0X1A
#define ADC_CH3      0X1B
#define ADC_CH4      0X1C
#define ADC_CH5      0X1D
#define ADC_CH6      0X1E
#define ADC_CH7      0X1F

///////////////////////////////////////////////////
//    名称:Adc_Delay
//    功能:adc延时
//    输入:null
//    输出:null
//    返回:null
///////////////////////////////////////////////////
void Adc_Delay(unsigned char i)
{
  unsigned char j;
  for(j=0;j<i;j++)
    _NOP();  
}


///////////////////////////////////////////////////
//    名称:Adc_Init
//    功能:初始化
//    输入:null
//    输出:null
//    返回:null
///////////////////////////////////////////////////
void Adc_Init(void)
{
  P3OUT |= 0X0F;
  P3DIR |= 0X0B;
}


///////////////////////////////////////////////////
//    名称:Adc_Read
//    功能:读取第n通道的采样结果
//    输入:通道号
//    输出:12位采样结果
//    返回:null
///////////////////////////////////////////////////
unsigned int Adc_Read(unsigned char channel)
{
  unsigned char write_byte;
  unsigned char adc_result;
  unsigned char tempi;
  
  write_byte = 0x18;
  write_byte |= channel;  
  ADC_CLK_LO;
  ADC_CS_LO;
  ADC_DIN_HI; 
  ADC_CLK_LO;
  
  for(tempi=0;tempi<5;tempi++)
  {
    ADC_CLK_LO;
    _NOP();
    if((write_byte & 0x10) == 0)
      ADC_DIN_LO;
    else
      ADC_DIN_HI;
    write_byte = write_byte << 1;
    ADC_CLK_HI; 
    _NOP();
  }
  adc_result = 0;  
  _NOP();
  _NOP();
  for(tempi=0;tempi<15;tempi++)
  {
    adc_result = adc_result << 1;
    ADC_CLK_HI;
    _NOP();
    if(ADC_IN & ADC_DOUT)
      adc_result |= 0x0001;
    else
      adc_result &= 0xfffe;
    ADC_CLK_LO;
    _NOP();
    ADC_CS_HI;    
    _NOP();
  }
  adc_result &= 0x0fff;
  return adc_result;  
}

















⌨️ 快捷键说明

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