📄 adjd.c
字号:
/*=======================================================*/
/* Copyright (C) WangRuiPeng 2005-2007 */
/* All Rights Reserved */
/* Ver 2006_06_02_10:00 */
/*=======================================================*/
/* AD.c */
/*=======================================================*/
#include <msp430x16x.h>
//-----------------初始化AD-------------------------------//
void Adc12Init(void)
{
ADC12CTL0&=~ENC; //改变设置前停止A/D转换
ADC12CTL0 = MSC+REFON+SHT0_15+SHT1_15 + REF2_5V; //使用内部2.5V参考电压,使用采样保持器。
}
/****************************************************************************
打开或关闭ADC12模块
doit: 0:打开 100:关闭
****************************************************************************/
void Adc12Open(unsigned char doit)
{
if(doit==0)
{
ADC12CTL0 |= ADC12ON;
ADC12CTL0 |= ENC; //允许转换
}
else if(doit==100)
{
ADC12CTL0 &= ~ADC12ON; //不允许转换
ADC12CTL0 &= ~ENC;
}
}
/****************************************************************************
设置转换模式
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(void)
{
ADC12CTL0 |= ENC+ADC12SC; //转换开始
}
//---------------------------单通道多次AD------------------------//
//-------------------------结束后关闭AD-----------------------//
int AD_ch(int ch)
{
unsigned char ci=150;
int *pmem=ADC12MEM;
int a,b;
float sum=0;
a=BIT0<<ch;
// AdcDo(ch,2);
AdcDo(ch,0);
SetTongDao(ch,0,ch,1,0);
Adc12Open(0);
Adc12Go();
while((ADC12IFG&a)==0);
b=pmem[ch];
/*while((ADC12IFG&a)==0);
b=pmem[ch];*/
for(;ci>0;ci--)
{
while((ADC12IFG&a)==0)
{
WDTCTL = WDT_ARST_1000;
}
sum+=pmem[ch];
}
a=sum/150;//求和取平均
Adc12Open(100);//关闭ADC
b+=pmem[ch];
return a;
}
/*P6SEL = 0x48; //P6.3 AD P6.6 DA
P6DIR = 0x40;
Adc12Init();//初始化DAC12*/
void main(void)
{
P6SEL = 0x48; //P6.3 AD P6.6 DA
P6DIR = 0x40;
_EINT();
Adc12Init();
//int i;
//for(i=0;i<15;i++)
//{
AD_ch(7);
//}
//初始化DAC12
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -