搜索
bottom↓
回复: 0

关于MSP430的ADC DTC传输问题

[复制链接]

出0入0汤圆

发表于 2013-7-17 19:12:10 | 显示全部楼层 |阅读模式
#include  "msp430g2553.h"

void wait_ref_ready()  //等待ADC参考源设置完成
{
  //与_EINT()功能一致,打开总中断  
  __enable_interrupt();                     // Enable interrupts.
  TACCR0 = 30;                              // Delay to allow Ref to settle
  TACCTL0 |= CCIE;                          // 打开TACCR0中断
  TACTL = TASSEL_2 | MC_1;                  // TACLK = SMCLK, Up mode.
  LPM0;                                     // Wait for delay.
  TACCTL0 &= ~CCIE;                         // 关闭TACCR0中断
  __disable_interrupt();                    //关闭总中断   
}

void main(void)
{
  unsigned int loop,sample;
  unsigned int Sum;
  unsigned int *pointer;
  pointer = 0x00;
  
  //关闭看门狗
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  //单通道重复采样,选择A1通道采样
  ADC10CTL1 = CONSEQ_2 + INCH_2;            // Repeat single channel, A1
  //选择参考源Vref+,Vss。16个转换时钟,参考源开启,2.5V,ADC10模块开启,打开ADC中断
  ADC10CTL0 =SREF_1+ ADC10SHT_2 + REFON + MSC + REF2_5V  + ADC10ON + ADC10IE; // ADC10ON, interrupt enabl
  wait_ref_ready();
  //采样32次
  ADC10DTC1 = 0x20;                         // 32 conversions
  //P1.1作为采样通道
  ADC10AE0 |= 0x04;                         // P1.1 ADC option select
  //P1.0设置为输出
  P1DIR |= 0x01;                            // Set P1.0 to output direction
  P1OUT = 0x01;   //灯亮
  for (;;)
  {
   
    Sum = 0x00;
    //关闭ADC使能开关
    ADC10CTL0 &= ~ENC;
    //等待ADC10模块不忙
    while (ADC10CTL1 & BUSY);               // Wait if ADC10 core is active
    ADC10SA = 0x200;                        // Data buffer start
    //启动ADC转换
    ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
    //进入低功耗模式LPM0,开总中断
    __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit
   for(loop = 0; loop < 0x20; loop++)
    {
       sample=*(pointer+0x200+loop);
//       if(sample > MAX) sample =MAX ;
//       if(sample < MIN) sample =MIN ;
//       Sum += (sample & 0x03ff);   
       Sum += sample;
    }
    Sum = Sum/2;
    if(Sum > 0x1ff)
       P1OUT &= 0xfe;   //灯灭
    else
       P1OUT |=0x01;    //灯亮
   
  }
}

// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
  __bic_SR_register_on_exit(CPUOFF);        // Clear CPUOFF bit from 0(SR)
}


#pragma vector=TIMER0_A0_VECTOR
__interrupt void ta0_isr(void)
{
  TACTL = 0;    //关闭计数器,退出LPM0模式
  LPM0_EXIT;                                // Exit LPM0 on return
}


请教各位大神,我的程序哪里出问题了,为什么P1.1口电平总是VCC,导致sample一直为1024?就算P1.1接GND也是一样。。。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-22 22:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表