3455|8

50

帖子

0

TA的资源

一粒金砂(高级)

MSP430F5529系统实验AD部分,问题求解 [复制链接]

这个是网站下载的程序,因为本人用的是F5529的板子,没有P6.0的端口输入插头,所以想改用P6.7端口输入,进行试验,中间除了一些问题,请教大神指点:用P6.7输入好像无作用!
//                MSP430F552x
//             -----------------
//         /|\|                 |
//          | |                 |
//          --|RST              |
//            |                 |
//     Vin -->|P6.0/CB0/A0  P1.0|--> LED
//
//   Bhargavi Nisarga
//   Texas Instruments Inc.
//   April 2009
//   Built with CCSv4 and IAR Embedded Workbench Version: 4.21
//******************************************************************************

#include

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  ADC12CTL0 = ADC12SHT02 + ADC12ON;         // Sampling time, ADC12 on
  ADC12CTL1 = ADC12SHP;                     // Use sampling timer
  ADC12IE = 0x01;                           // Enable interrupt
  ADC12CTL0 |= ADC12ENC;
  P6SEL |= 0x01;                            // P6.0 ADC option select
  P1DIR |= 0x01;                            // P1.0 output

  while (1)
  {
    ADC12CTL0 |= ADC12SC;                   // Start sampling/conversion
   
    __bis_SR_register(LPM0_bits + GIE);     // LPM0, ADC12_ISR will force exit
    __no_operation();                       // For debugger
  }
}

#pragma vector = ADC12_VECTOR
__interrupt void ADC12_ISR(void)
{
  switch(__even_in_range(ADC12IV,34))
  {
  case  0: break;                           // Vector  0:  No interrupt
  case  2: break;                           // Vector  2:  ADC overflow
  case  4: break;                           // Vector  4:  ADC timing overflow
  case  6:                                  // Vector  6:  ADC12IFG0
    if (ADC12MEM0 >= 0x7ff)                 // ADC12MEM = A0 > 0.5AVcc?
      P1OUT |= BIT0;                        // P1.0 = 1
    else
      P1OUT &= ~BIT0;                       // P1.0 = 0

    __bic_SR_register_on_exit(LPM0_bits);   // Exit active CPU
  case  8: break;                           // Vector  8:  ADC12IFG1
  case 10: break;                           // Vector 10:  ADC12IFG2
  case 12: break;                           // Vector 12:  ADC12IFG3
  case 14: break;                           // Vector 14:  ADC12IFG4
  case 16: break;                           // Vector 16:  ADC12IFG5
  case 18: break;                           // Vector 18:  ADC12IFG6
  case 20: break;                           // Vector 20:  ADC12IFG7
  case 22: break;                           // Vector 22:  ADC12IFG8
  case 24: break;                           // Vector 24:  ADC12IFG9
  case 26: break;                           // Vector 26:  ADC12IFG10
  case 28: break;                           // Vector 28:  ADC12IFG11
  case 30: break;                           // Vector 30:  ADC12IFG12
  case 32: break;                           // Vector 32:  ADC12IFG13
  case 34: break;                           // Vector 34:  ADC12IFG14
  default: break;
  }
}

最新回复

输入没作用 查寄存器是硬道理。  详情 回复 发表于 2013-10-30 17:35

回复
举报

50

帖子

0

TA的资源

一粒金砂(高级)

这个是我修改的部分

#include

int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  ADC12CTL0 = ADC12SHT02 + ADC12ON;         // Sampling time, ADC12 on
  ADC12CTL1 = ADC12SHP;                     // Use sampling timer
  ADC12IE |= 0x80;                           // Enable interrupt
  ADC12CTL0 |= ADC12ENC;
P6SEL |= 0x80;                            // P6.0 ADC option select
  P1DIR |= 0x01;                            // P1.0 output

  while (1)
  {
    ADC12CTL0 |= ADC12SC;                   // Start sampling/conversion
   
    __bis_SR_register(LPM0_bits + GIE);     // LPM0, ADC12_ISR will force exit
    __no_operation();                       // For debugger
  }
}

#pragma vector = ADC12_VECTOR
__interrupt void ADC12_ISR(void)
{
  switch(__even_in_range(ADC12IV,34))
  {
  case  0: break;                           // Vector  0:  No interrupt
  case  2: break;                           // Vector  2:  ADC overflow
  case  4: break;                           // Vector  4:  ADC timing overflow
  case  6: break;                           // Vector  6:  ADC12IFG0
/* if ( ADC12MEM0 >= 0x7ff )                // ADC12MEM = A0 > 0.5AVcc?
      P1OUT |= BIT0;                        // P1.0 = 1
    else
      P1OUT &= ~BIT0;                       // P1.0 = 0
    __bic_SR_register_on_exit(LPM0_bits);  */// Exit active CPU
  case  8: break;                           // Vector  8:  ADC12IFG1
  case 10: break;                           // Vector 10:  ADC12IFG2
  case 12: break;                           // Vector 12:  ADC12IFG3
  case 14: break;                           // Vector 14:  ADC12IFG4
  case 16: break;                           // Vector 16:  ADC12IFG5
  case 18: break;                           // Vector 18:  ADC12IFG6
  case 20: if (ADC12MEM7 >= 0x7ff)              
      P1OUT |= BIT0;                        // P1.0 = 1
    else
      P1OUT &= ~BIT0;                       // P1.0 = 0

    __bic_SR_register_on_exit(LPM0_bits);   // Vector 20:  ADC12IFG7
  case 22: break;                           // Vector 22:  ADC12IFG8
  case 24: break;                           // Vector 24:  ADC12IFG9
  case 26: break;                           // Vector 26:  ADC12IFG10
  case 28: break;                           // Vector 28:  ADC12IFG11
  case 30: break;                           // Vector 30:  ADC12IFG12
  case 32: break;                           // Vector 32:  ADC12IFG13
  case 34: break;                           // Vector 34:  ADC12IFG14
  default: break;
  }
}

回复

50

帖子

0

TA的资源

一粒金砂(高级)

调试中,ADC12IV 应该是有 数据值的  但是修改后,没有值,ADC12MEM0有值,ADC12MEM7 为0;P1.0输出也为高

我所理解的正确是应该ADC12IV ADC12MEM7均有值,,P1.0输出受控制

[ 本帖最后由 woaiweibo 于 2013-10-29 19:13 编辑 ]
6XBA0A[X~A}@[UR8G2@RJ)V.jpg

回复

6040

帖子

206

TA的资源

版主

好像没看到你设置使用哪个通道,是不是有类似的设置?你可以看一下手册。

点评

这个是我修改的部分: ADC12IE |= 0x80; // Enable interrupt ADC12CTL0 |= ADC12ENC; P6SEL |= 0x80; // P6.7 ADC option select P1DIR |= 0x01;  详情 回复 发表于 2013-10-29 19:40

回复

50

帖子

0

TA的资源

一粒金砂(高级)

回复 4楼lcofjp 的帖子

这个是我修改的部分:
ADC12IE |= 0x80;                           // Enable interrupt
ADC12CTL0 |= ADC12ENC;
P6SEL |= 0x80;                            // P6.7 ADC option select
  P1DIR |= 0x01;

P6.7输入

是不是转换只能从P6.0开始,不能单路选通??

点评

你那只是设置引脚和设置中断,跟AD都没有任何关系的,我是让你看看手册,找找如何设置输入通道。不可能不能单路选通,看手册的习惯是一定要养成的。  详情 回复 发表于 2013-10-29 20:02

回复

6040

帖子

206

TA的资源

版主

回复 5楼woaiweibo 的帖子

你那只是设置引脚和设置中断,跟AD都没有任何关系的,我是让你看看手册,找找如何设置输入通道。不可能不能单路选通,看手册的习惯是一定要养成的。

点评

大神教育的是,自己还是太菜鸟,有些问题没弄清,自己也没好好研究。这是个坏习惯。大神提醒看配置,我试了试弄好了!谢谢“卡尔夫”,以后还要多赐教! #include int main(void) { WDTCTL = WDTPW + WDTHOL  详情 回复 发表于 2013-10-29 20:26

回复

50

帖子

0

TA的资源

一粒金砂(高级)

回复 6楼lcofjp 的帖子

大神教育的是,自己还是太菜鸟,有些问题没弄清,自己也没好好研究。这是个坏习惯。大神提醒看配置,我试了试弄好了!谢谢“卡尔夫”,以后还要多赐教!
#include
int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P6SEL |= 0x80;                            // P6.0 ADC option select
  ADC12CTL0 = ADC12SHT02 + ADC12ON;         // Sampling time, ADC12 on


  ADC12CTL1 = ADC12SHP+ADC12CSTARTADD_7;               // Use sampling timer
  ADC12MCTL7 = ADC12INCH_7;
  ADC12IE = 0x80;                           // Enable interrupt
  ADC12CTL0 |= ADC12ENC;
  P1DIR |= 0x01;                            // P1.0 output
  while (1)
  {
    ADC12CTL0 |= ADC12SC;                   // Start sampling/conversion
   
    __bis_SR_register(LPM0_bits + GIE);     // LPM0, ADC12_ISR will force exit
    __no_operation();                       // For debugger
  }
}

#pragma vector = ADC12_VECTOR
__interrupt void ADC12_ISR(void)
{
  switch(__even_in_range(ADC12IV,34))
  {
  case  0: break;                           // Vector  0:  No interrupt
  case  2: break;                           // Vector  2:  ADC overflow
  case  4: break;                           // Vector  4:  ADC timing overflow
  case  6: break;                           // Vector  6:  ADC12IFG0
  case  8: break;                           // Vector  8:  ADC12IFG1
  case 10: break;                           // Vector 10:  ADC12IFG2
  case 12: break;                           // Vector 12:  ADC12IFG3
  case 14: break;                           // Vector 14:  ADC12IFG4
  case 16: break;                           // Vector 16:  ADC12IFG5
  case 18: break;                           // Vector 18:  ADC12IFG6
  case 20: if (ADC12MEM7 >= 0x7ff)                 // ADC12MEM = A0 > 0.5AVcc?
          P1OUT &= ~BIT0;
    else
            P1OUT |= BIT0;
    __bic_SR_register_on_exit(LPM0_bits);   // Vector 20:  ADC12IFG7
  case 22: break;                           // Vector 22:  ADC12IFG8
  case 24: break;                           // Vector 24:  ADC12IFG9
  case 26: break;                           // Vector 26:  ADC12IFG10
  case 28: break;                           // Vector 28:  ADC12IFG11
  case 30: break;                           // Vector 30:  ADC12IFG12
  case 32: break;                           // Vector 32:  ADC12IFG13
  case 34: break;                           // Vector 34:  ADC12IFG14
  default: break;
  }
}

点评

恭喜你了,不是我不直接告诉你答案,我也记不住那些寄存器,我也得去查手册,手边还没有,得去下载,太麻烦了。  详情 回复 发表于 2013-10-29 21:06

回复

6040

帖子

206

TA的资源

版主

回复 7楼woaiweibo 的帖子

恭喜你了,不是我不直接告诉你答案,我也记不住那些寄存器,我也得去查手册,手边还没有,得去下载,太麻烦了。

回复

1185

帖子

1

TA的资源

纯净的硅(高级)

输入没作用 查寄存器是硬道理。

回复
您需要登录后才可以回帖 登录 | 注册

猜你喜欢
随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表