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