这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 基于MSP430F1232的ADC10系列通道单次采样实验

共4条 1/1 1 跳转至

基于MSP430F1232的ADC10系列通道单次采样实验

专家
2009-08-24 08:54:33     打赏

/******************************************************************************************************************************
*
* 文件名:    main.c
*
* 文件描述:  基于MSP430F1232的ADC10系列通道单次采样实验
*
* 创建人:    areak, 2009 年8 月16 日
*
* 版本号:    1.0
*
* 修改记录:
*
********************************************************************************************************************************/
//==============================================================================================================================
#include    "io430.h"
#include    "in430.h"
//==============================================================================================================================
unsigned  long int result[3]; //用来存放转换结果的数组
unsigned  int AD_VALUE[3]; 
char   ADC10FLAG=0;  //转换标志
/*==============================================================================================================================
*
* 函 数 名: readdata.
*
* 参 数:    无
*
* 功能描述:    
*        
*          将转换数据读出,存放在 result[3]中;
*
* 返 回 值: 无
*
* 作 者: areak 2009/8/16
*
================================================================================================================================*/
void readdata(void)
{
 char i,j=2;
 for(i=0;i<3;i++)
 {
  result[j] = AD_VALUE[i];
  j=j-1;
 }
 _NOP();
}
/*==============================================================================================================================
*
* 函 数 名: Init_Clk.
*
* 参 数:    无
*
* 功能描述:    
*        
*          基础时钟初始化设置;
*
* 返 回 值: 无
*
* 作 者: areak 2009/8/16
*
================================================================================================================================*/
void Init_Clk(void)
{   
 int i;  
 
 BCSCTL1 = XTS + DIVA_3;
 do
 {
  BCSCTL1 &= ~XT2OFF; //turn on XT2
  IFG1 &= ~OFIFG;  //high frequency crystal is stable
  for (i=0; i < 2000; i++)
  { }
 }while ((IFG1 & OFIFG) !=0);

 // MClk = 6M / 1 = 6M ;
 // SMClk = 6M / 8 = 750K;
 // AClk = 6M / 8 = 750K;
 BCSCTL2 |= SELM_2 + DIVM_0 + SELS + DIVS_3;
}
/*==============================================================================================================================
*
* 函 数 名: TimerA_Uint.
*
* 参 数:    无
*
* 功能描述:    
*        
*          定时器初始化设置,定时1秒;
*
* 返 回 值: 无
*
* 作 者: areak 2009/8/16
*
================================================================================================================================*/
void TimerA_Uint(void)
{
    P2DIR  |= 0x02;   // P2.1 output
 TACTL  = TACLR;
 TACCR0  = 46875;   //750K/8/46875 =2Hz    
 TACCTL0  = CCIE;
 TACTL  = TASSEL_2 + ID_3 + MC_1;
}
/*==============================================================================================================================
*
* 函 数 名: ADC_Uint.
*
* 参 数:    无
*
* 功能描述:    
*        
*          ADC10设置,系列通道单次采样;
*
* 返 回 值: 无
*
* 作 者: areak 2009/8/16
*
================================================================================================================================*/
void ADC_Uint(void)

   ADC10CTL0  &=  ~ENC;
 
 ADC10DTC0  =  ADC10CT; //选择为连续转移数据
 
 ADC10CTL0 |= SREF_1;
 ADC10CTL0 |= ADC10SHT_3;
        ADC10CTL0 |= REFON;
 ADC10CTL0 |= REF2_5V;
 ADC10CTL0 |= MSC;  //连续采样转换
 ADC10CTL0 |= ADC10IE;
 ADC10CTL0 |= ADC10ON;
 
 ADC10CTL1 |= INCH_2;  //A2--A0
 ADC10CTL1 |= SHS_0;
 ADC10CTL1 |= CONSEQ_1; //系列通道单次采样
 
 ADC10DTC1  =  0x03;   // 连续采样3次中断一次
 
 ADC10SA  = (unsigned int)AD_VALUE + 1; //数据转移起始地址
 
 ADC10CTL0  |=  ENC  + ADC10SC; 
}
/*==============================================================================================================================
*
* 函 数 名: main.
*
* 参 数:    无
*
* 功能描述:    
*        
*          系统主程序
*
* 返 回 值: 无
*
* 作 者: areak 2009/8/16
*
================================================================================================================================*/
void main(void)
{
 WDTCTL   =  WDTPW  +  WDTHOLD; 
 Init_Clk();   
    TimerA_Uint();
 ADC_Uint();
 
 _EINT();

while(1)
{
   if(ADC10FLAG==1)
   {
     ADC10FLAG = 0;
     readdata();
     _NOP();
   }
}
}
/*==============================================================================================================================
*
* 函 数 名: ADC10_ISR.
*
* 参 数:    无
*
* 功能描述:    
*        
*          ADC10中断服务程序,用于设置转换结束标志;
*
* 返 回 值: 无
*
* 作 者: areak 2009/8/16
*
================================================================================================================================*/
// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
{
 ADC10FLAG = 1;
}
/*==============================================================================================================================
*
* 函 数 名: Timer_A.
*
* 参 数:    无
*
* 功能描述:    
*        
*          Timer_A中断服务程序,定时1秒钟启动一次转换;
*
* 返 回 值: 无
*
* 作 者: areak 2009/8/16
*
================================================================================================================================*/
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
    P2OUT ^= 0x02;                            // Toggle P2.1
    ADC10CTL0  |=  ENC  + ADC10SC;
}
//==============================================================================================================================
//END OF FILE
//==============================================================================================================================




关键词: 基于     MSP430F1232     ADC10     系列         

专家
2009-08-24 08:56:18     打赏
2楼

发表上来格式就乱了,大家将就着看吧,呵呵!


院士
2009-08-24 16:53:50     打赏
3楼

还行啊,能忍受


菜鸟
2009-08-28 21:55:08     打赏
4楼

谢谢分享。









DIY材料,PVC透明板[url]http://shop58887821.taobao.com[/url]


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]