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

📄 ad12.c

📁 使用MSP430f247芯片内的ADC12模块实现单通道动态采集外部电压
💻 C
字号:
#include "msp430x24x.h"
#include "All_functions.h"
//****************************

#define ADC_times 10;//定义转换10次
unsigned int ADCtimes=ADC_times;
unsigned int Waitflag;
unsigned int Ad_Mem[16];

//*************************
//       AD初始化
//*********************
void AD12Init()
{
  ADC12CTL0&=~ENC;
  ADC12CTL0=MSC+REF2_5V+SHT0_15+SHT1_15;//内部参考电压2.5V
 
}
//******************************************************
//address:转换首地址
//Cchannel:通道模式选择
//********************************************************
void AD_MOD(unsigned int address,unsigned int Cchannel)
{
  ADC12CTL1=(address<<12)+SHP+(Cchannel<<1);
}
//*****************************************************
//eos:序列结束控制痊
//SEL_channel:输入通道选择0-15
//SEL_mem:转换存储寄存器选择0-15
//SEL_REF:参考电压源选择0-7
//SEL_IE:中断使能
//*****************************************************
void S_INCH(unsigned int eos,unsigned int SEL_channel,unsigned int SEL_mem,unsigned int SEL_REF,unsigned int SEL_IE)
{
  char *pm=ADC12MCTL;
  pm+=SEL_mem;
  *pm=eos+SEL_channel+(SEL_REF<<4);
  if(SEL_IE==1)
    ADC12IE&=(0x01<<SEL_mem);
  else
    ADC12IE&=0x00;  
}
//*************************************************
//
//************************************************
void ADopen(unsigned int flag)
{
  if(flag==1)
  {
    ADC12CTL0 |= ADC12ON;
    ADC12CTL0 |= ENC; 
  }
  else
  {
    ADC12CTL0 &= ~ADC12ON; 	//不允许转换
    ADC12CTL0 &= ~ENC;
  }
}
//***************************************************
//        转换开始
//**************************************************
void AD_start()
{
  unsigned char q0;

  for(q0=0;q0<16;q0++)
          Ad_Mem[q0]=0;
  Waitflag=0;
  ADC12CTL0 |= ENC+ADC12SC;	//转换开始
  while(Waitflag==0);           //等待转换结束
}
#pragma vector=ADC12_VECTOR
__interrupt void Adc()
{
  unsigned char q0;
  unsigned int iq0;
  int *pmem=ADC12MEM;
  if(Waitflag==0)
  {
          for(q0=0;q0<16;q0++)
          {
                  Ad_Mem[q0] += *pmem;
                  pmem++;
          }

          ADCtimes--;
          if(ADCtimes==0)
          {
             ADopen(0); 	//关闭ADC12模块
             Waitflag=1;		//转换结束的标志位置位
             for(q0=0;q0<16;q0++)
             {
                 Ad_Mem[q0] = Ad_Mem[q0]/ADC_times;
              }
              ADCtimes=ADC_times;
          }
  }
  else
  {
        for(q0=0;q0<16;q0++)
          {
                  iq0 += *pmem;
                  pmem++;
          }
  }
}

⌨️ 快捷键说明

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