?? 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 + -