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

📄 adjd.c

📁 此程序是针对MSP430F147型单片机的一个经典程序
💻 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 + -