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

📄 adc12.c

📁 zigbee子节点源代码
💻 C
字号:
#include <msp430x16x.h>
#include "adc12.h"

char wait=0;
unsigned int Adc_mem[16];
#define AD_CI 10
unsigned int AdcI=AD_CI;

void Adc_Init()
{
  ADC12CTL0&=~ENC;
  ADC12CTL0|=MSC+REF2_5V+REFON+SHT0_15+SHT1_15;//采样转换立即进行(不需要SHI上升沿),爱用内部参考2.5V,采样保持时间为60×T(ADC12CLK)
  ADC12CTL1=ADC12SSEL_2;//选择MCLK
}
void Adc_Start()
{
  
    //unsigned int ad_mem[16];
    //unsigned int Adc_mem[16];
    unsigned char q0;
    int *pmem=ADC12MEM;
    WDTCTL=WDTPW+WDTHOLD;
    for(q0=0;q0<16;q0++)
    {
      Adc_mem[q0]=0x00;
      *pmem=0x00;
      pmem++;
    }
    Adc12Do(0,3);//转换首地址为5,序列通道多次转换
    SetTongDao(3,0,0,1,0); //void SetTongDao(unsigned char tongdao,unsigned char eos,unsigned char mem,unsigned char verf,unsigned char inter)
    SetTongDao(5,0,1,1,0);
    SetTongDao(7,0x80,2,1,1);
    Adc12Open(0);
    Adc12Go(Adc_mem,16);
    
    //AdcGet(Adc_mem);
    _NOP();
    LPM3;
}
void Adc12Do(unsigned int addr,unsigned int mod)
{
  ADC12CTL1=(addr<<12)+(mod<<1)+SHP;//SHP表示由采样定时器控制采样
}
void SetTongDao(unsigned tongdao,unsigned char eos,unsigned int mem,unsigned char ref,unsigned char inter)
{
  char *pmem_ctl=ADC12MCTL;
  pmem_ctl+=mem;
  *pmem_ctl=tongdao+(ref<<4)+eos;
  if(inter==0)
    ADC12IE&=~(0x01<<mem);
  else
    ADC12IE|=(0x01<<mem);
}
void Adc12Open(unsigned char swich)
{
  if(swich==0)
  {
    ADC12CTL0|=ADC12ON;
    ADC12CTL0|=ENC;//允许转换0
  }
  else
  {
    ADC12CTL0&=~ADC12ON;//不允许转换
    ADC12CTL0&=~ENC;
  }
}
void Adc12Go(unsigned int *Adc,int n)
{
  unsigned char q0;
  for(q0=0;q0<n;q0++)
    *(Adc+q0)=0;
    //Adc[q0]=0;
  wait=0;
  ADC12CTL0|=ENC+ADC12SC;
  while(wait==0);//等待转换完成
}
/***************************************************************************
AD转换器中断函数
***************************************************************************/
#ifdef __ICC430
#pragma vector=ADC_VECTOR
__interrupt void Adc()
#elif defined(_MSP430_)
interrupt (ADC_VECTROR) int* Adc()
{
    unsigned char q0;
    int *pmem=ADC12MEM;
    int iq0;
    
    if(wait==0)
    {
      for(q0=0;q0<16;q0++)
      {
        Adc_mem[q0]+=*pmem;
        pmem++;
      }
      AdcI--;
      if(AdcI==0)
      {
        Adc12open(100);
        wait=1;
        for(q0=0;q0<16;q0++)
          Adc_mem[q0]/=AD_CI;
        AdcI=AD_CI;
      }
    }
    else
    {
      for(q0=0;q0<16;q0++)
      {
	iq0 += *pmem;
	pmem++;
      }
    }

}
#endif

void Adc12Get(unsigned int *padc)
{
  int q0;
  for(int q0=0;q0<16;q0++)
  {
    *padc=Adc_mem[q0];
     padc++;
  }
}

⌨️ 快捷键说明

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