[求助] 下面的代码我觉得没有错啊,可是就是没有方波产生?

benni   2012-7-10 10:32 楼主
include  <msp430g2231.h>

unsigned int flag = 0;
void main()
{
    WDTCTL = WDTPW +WDTHOLD;   //STOP WDT
   // FLL_CTL0 |= XCAP14PF;   //匹配14PF的负载电容
    P1SEL &= ~BIT5;      
    P1DIR |= BIT5; 
    TACTL = TASSEL1 + TACLR ; 
    TACCTL0 = CCIE;
    TACCR0 = 1748;
    TACTL |= MC0;
    _EINT();
    while (1) {    LPM0;    }
}

# pragma vector = TIMERA0_VECTOR
__interrupt void TimerA0_ISR(void)
{
    P1OUT ^= BIT5;
    flag++;
}

我用flag作为标志,发现并没有进入中断,为什么啊?哪里错了?

回复评论 (18)

引用: 原帖由 benni 于 2012-7-10 10:32 发表 include  unsigned int flag = 0;void main(){    WDTCTL = WDTPW +WDTHOLD;   //STOP WDT   // FLL_CTL0 |= XCAP14PF;   //匹配14PF的负载电容    P1 ...

目测你没有设置TA的计数模式~

#include <msp430g2553.h>

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1DIR |= BIT0;                            // P1.0 output
  CCTL0 = CCIE;                             // CCR0 interrupt enabled
  CCR0 = 50000;
  TACTL = TASSEL1 + TACLR + MC_2;
  //TACTL = TASSEL_2 + MC_2;                  // SMCLK, contmode

  _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt
}

// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
  P1OUT ^= BIT0;                            // Toggle P1.0
  CCR0 += 50000;                            // Add Offset to CCR0
}
点赞  2012-7-10 10:48
TACTL |= MC0;
是停止计数……
点赞  2012-7-10 10:49

回复 沙发 juring 的帖子

TACTL |= MC0;
这个不是增计数模式吗?
点赞  2012-7-10 10:57

回复 板凳 juring 的帖子

TACTL |= MC0;
这不是增计数模式吗?
点赞  2012-7-10 10:57

回复 沙发 juring 的帖子

为什么调试时,好像没有进入中断似的,那个flag一直都是保持0值~~求救啊~~~
点赞  2012-7-10 11:03
引用: 原帖由 benni 于 2012-7-10 10:57 发表 TACTL |= MC0; 这个不是增计数模式吗?

同学~
00111.jpg
点赞  2012-7-10 11:06
你计数器不工作怎么进中断呢?
点赞  2012-7-10 11:07

回复 7楼 juring 的帖子

我改着    TACTL = TASSEL1 + TACLR + MC_1;
还是不行哦,这怎么回事啊~
点赞  2012-7-10 13:04
我改着 TACTL = TASSEL1 + TACLR + MC_1;

我确定没问题
点赞  2012-7-10 13:10

回复 10楼 juring 的帖子

对啊 ,我也觉得没什么问题啊,可是我用示波器连在p1.5口看不到方波,是杂乱的波,,调试时好像没有进入中断,是不是哪里没有设置好啊~我用的是msp430g2231的
点赞  2012-7-10 13:14
我的程序没问题,你看看你中断向量是不是写错了~

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1SEL &= ~BIT5;
  P1DIR |= BIT5;                            // P1.0 output
  CCTL0 = CCIE;                             // CCR0 interrupt enabled
  CCR0 = 50000;
  TACTL = TASSEL1 + TACLR + MC_1;
  //TACTL = TASSEL_2 + MC_2;                  // SMCLK, contmode
  TACCTL0 = CCIE;
  _EINT();
  while(1){

  _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt

  }
}

// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
  P1OUT ^= BIT5;                            // Toggle P1.0
//  CCR0 += 50000;                            // Add Offset to CCR0
}
点赞  2012-7-10 13:16

回复 12楼 juring 的帖子

我也试着这样改了,可是我发现头文件里就是我那样写的中断矢量,没有错啊,改着你那就出错了~
点赞  2012-7-10 13:42
我还没仔细看,关于MC0和MC_0是不一样的
MC0  ----〉01
MC1  ----〉10

MC_0 —>00
MC_1 —>01
MC_2 —>10
MC_3 —>11
没工作,没女人老婆,没宽带 ,  没钱
点赞  2012-7-10 16:58
你先把断点设在中断里,看看到不到断点看过吧?
没工作,没女人老婆,没宽带 ,  没钱
点赞  2012-7-10 17:45
project  option不会没有设置过吧?
没工作,没女人老婆,没宽带 ,  没钱
点赞  2012-7-10 17:50

回复 11楼 benni 的帖子

不好意思 我原来用的是2553

2231我试过了,程序没问题啊

#include  “msp430g2231.h”

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1SEL &= ~BIT5;
  P1DIR |= BIT5;                            // P1.5 output
  TACTL = TASSEL1 + TACLR;                  // SMCLK, contmode
  TACCTL0 = CCIE;                             // CCR0 interrupt enabled
  TACCR0 = 1748;
  TACTL |= MC0;

  _EINT();
  while (1)
  {
          LPM0;
  }                // Enter LPM0 w/ interrupt
}

// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  P1OUT ^= BIT5;                            // Toggle P1.0
}

可以进中断

[ 本帖最后由 juring 于 2012-7-10 19:22 编辑 ]
点赞  2012-7-10 19:21
看看2231的Device Erratasheet里面有没有相关的,好像有提到过定时器的
没工作,没女人老婆,没宽带 ,  没钱
点赞  2012-7-11 16:11
G2553和G2231的资源是不一样的,G2553功能更多一些,楼主可以参考2012年MSP430的最新选型指南
点赞  2012-8-7 12:34
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复