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

📄 adc12.c

📁 MSP430F169内置 温度传感器,用此程序可测出温度!
💻 C
字号:
#include<MSP430x16x.h>
#include"adc12.h"

unsigned char Wait=0; //转换结束标志位 0:没有结束;1:结束
unsigned int AdMem[16];//转换结果缓冲区
#define AD_CI 10
unsigned char AdCi=AD_CI;//单通道或者系列多次转换的转换次数
#define DUO_CI 0;//0:单通道或者系列单次转换,1:但通道或者系列多次转换

/******************************************************************************
初始化
******************************************************************************/
void Adc12Init()
{
  ADC12CTL0 &= ~ENC;//使ADC模块处于初始状态
  ADC12CTL0=MSC+REFON+REF2_5V+SHT0_15+SHT1_15;//使用内部2。5V参考电压,使用采样保持定时器1和2
}

/*******************************************************************************
打开或关闭ADC12模块
doit:0:打开; 100:关闭
*******************************************************************************/
void Adc12Open(unsigned char doit)
{
  if(doit==0)
  {
    ADC12CTL0 &= ~ENC;
    ADC12CTL0 |= ADC12ON;//ADC内核控制,只有在ENC=0才能在被修改
    ADC12CTL0 |= ENC;   //允许转换
  }
  else if(doit==100)
  {
    ADC12CTL0 &= ~ENC;
    ADC12CTL0 &= ~ADC12ON; //不允许转换
  }
}

/******************************************************************************
设置转换模式
adr:转换的首地址。取值:0~15
mod:转换模式。0:单通道单次;1:系列通道单次;2:单通道多次;3:系列通道多次
******************************************************************************/
void AdcDo(unsigned int adr,unsigned char mod)
{
  ADC12CTL1=(adr<<12)+SHP+(mod<<1);//SHP表示由采样定时器控制字样
}

/*****************************************************************************
设置通道
tongdao:选择模拟输入通道,取值:0~15;
eos:为0时系列没有结束;为0x80时在系列转换结束时,表示本次转换结束后,
mem:转换存储器控制寄存器,取值:0~15
verf:参考电压0~7
inter:0:本次通道转换完后不触发中断;1:本次转换完后触发中断
******************************************************************************/
void SetTongDao(unsigned char tongdao,unsigned char eos,unsigned char mem,
                unsigned char verf,unsigned char inter)
{
  char *pmem_ctl=ADC12MCTL;
  pmem_ctl += mem;
  *pmem_ctl=tongdao+eos+(verf<<4);
  if(inter==0)
    ADC12IE &= ~(0x1<<mem);
  else
    ADC12IE |= (0x1<<mem);
}

/*******************************************************************************
软件触发转换开始
*******************************************************************************/
void Adc12Go()
{
  unsigned char q0;
  
  for(q0=0;q0<16;q0++)
    AdMem[q0]=0;
  Wait=0;
  ADC12CTL0 |= ENC+ADC12SC;//转换开始
  while(Wait==0)//等待转换结束
    ;
}

/*******************************************************************************
AD 转换器中断函数
中断源:一次转换结束后,转换结果装入转换存储寄存器时置位
*******************************************************************************/
#pragma vector=ADC_VECTOR
__interrupt void Adc()
{
  //unsigned char q0;
  //int *pmem=ADC12MEM;
  AdMem[0]=ADC12MEM0;
  Wait=1;  //转换结束标志为置位
  ADC12IFG=0;
  
  /*for(q0=0;q0<16;q0++)
  {
    AdMem[q0]=*pmem;
    pmem++;
  }
 */     
}
/******************************************************************************
从AdMem中读出转换结果,本函数读出了AdMem所有的16个寄存器,可根据需要进行修改,
不读出所有寄存器 。
padc:读出的结果保存在数组中,padc为指向次数组的指针
******************************************************************************/
void AdcGet(unsigned int *padc)
{
  unsigned char q0;
  for(q0=0;q0<16;q0++)
  {
    *padc=AdMem[q0];
    padc++;
  }
}

⌨️ 快捷键说明

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