📄 adc12.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 + -