This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

还是A定时器不中断的问题



各位,连发了几个贴子,但是疑问还是没解决,我还没做目标板,但是用proteus7.7画了图纸,编写了软件如下:

uchar const led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar l;

void main(void)

{

  uchar i=0,k=0;
  WDTCTL=WDTPW+WDTHOLD;
  _DINT();
  BCSCTL2=0;
  BCSCTL1|=XT2OFF;
  TACTL=TASSEL_2+TAIE+MC_2;
  TAR=0;
  TACCTL0=CCIE;
  TACCR0=0x0fff;
  P2DIR=0xff;
  P2SEL=0;
  P2OUT=0;
  P1DIR=0xff;
  P3DIR=0xff;
  P1SEL=0x00;
  P3SEL=0x00;
  P1OUT=led[i];
  P3OUT=led[k];
  _EINT();
  while(1);
 
}


#pragma vector= TIMER0_A1_VECTOR

__interrupt void TIMER0_A1(void)
{
  uchar i=0,k=0;

 if(l++==50)

{
   if(P2OUT&0x80)
      P2OUT=0x01;
    else
      P2OUT<<=1;
    if(i++==9)
    {
      i=0;
      if(k++==9)
        k=0;
    }
   P1OUT=led[i];
   P3OUT=led[k];

}
}

但是还是不能中断,这和IAR 的simulator模式应该就没关系了。如果中断能行,P2口的走·马灯应·闪动,P1和P3口·的数码管应从0-9显示。

请教各位了,谢谢!

  • 进不了中断时因为你的中断向量不对。#pragma vector= TIMER0_A1_VECTOR对应的是CCR1的中断,而程序中设置的是CCR0的中断。

    请看头文件里中断向量的注释

    #define TIMER0_A1_VECTOR    (8 * 2u)  /* 0xFFF0 Timer0)A CC1, TA0 */

    #define TIMER0_A0_VECTOR    (9 * 2u)  /* 0xFFF2 Timer0_A CC0 */

  • zhi chen,

    建议您使用硬件开发板来进行调试和学习,毕竟以后还是要基于真实的硬件来开发,把时间浪费在其他方面不值。

    像我们都没有用过proteus7.7,可能不会给您很满意的答案。