打印

中断进不去

[复制链接]
811|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jlyuan|  楼主 | 2014-9-8 12:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "msp430f4152.h"
#define LCD_ZREO                 0XFA//0xf5
#define LCD_ONE                  0x60
#define LCD_TWO                  0xD6
#define LCD_THREE                0xf4
#define LCD_FOUR                 0x6c
#define LCD_FIVE                 0xbc
#define LCD_SIX                  0xbe
#define LCD_SEVEN                0xe0
#define LCD_EIGHT                0xfe
#define LCD_NINE                 0xfc
unsigned char aa[10]={LCD_ZREO ,LCD_ONE ,LCD_TWO ,LCD_THREE , LCD_FOUR ,LCD_FIVE ,LCD_SIX ,LCD_SEVEN,  LCD_EIGHT ,LCD_NINE };
unsigned int j,sub,data;
unsigned char i;
void clkinit()
{
  FLL_CTL0 &= ~XT1OF;
  FLL_CTL0 &= ~XTS_FLL;
  FLL_CTL1 &= ~(FLL_DIV0);
  FLL_CTL1 &= ~(FLL_DIV1);
}
void Portinit()
{
  P1DIR |= 0X00;
  P1SEL |= 0X01;
}
void Timer_Ainit()
{
  TA0CTL |= TASSEL0 + MC1;
  TA0CCR0=0;
  TACCTL0 |= SCS + CM1 + CCIS0 + CAP + CCIE;  
}
void LCDinit()
{
  unsigned char i;
  LCDACTL |= LCD4MUX + LCDON + LCDFREQ_128;
  
  LCDAPCTL0 = 0X1F;
  LCDAPCTL1 = 0X00;
  LCDAVCTL0 |= LCDCPEN;
  LCDAVCTL1 |= 0X18;
  P5SEL = 0XF0;
  for(i=0;i<10;i++)
    LCDMEM[i] = 0;
}
void chazhi()    //pulse recurrent time) 脉冲周期时间
{
  sub = TA0CCR0;
  sub = sub - j;
}
void LCDdiaplay()
{
  LCDMEM[8] = 0;
  LCDMEM[9] = 0;
  data = sub%10;         //32768
  LCDMEM[7] = aa[data];
  data = sub/10%10;
  LCDMEM[6] = aa[data];
  data = sub/100%10;
  LCDMEM[5] = aa[data];
  data = sub/1000%10;
  LCDMEM[4] = aa[data];
  data = sub/10000%10;
  LCDMEM[3] = aa[data];
  LCDMEM[2] = 0;
  LCDMEM[1] = 0;
  LCDMEM[0] = 0;
}
void testLCD()
{

  LCDMEM[0]=0xff;
  LCDMEM[1]=0xff;
  LCDMEM[2]=0xff;
  LCDMEM[3]=0xff;
  LCDMEM[4]=0xff;
  LCDMEM[5]=0xff;
  LCDMEM[6]=0xff;
  LCDMEM[7]=0xff;
  LCDMEM[8]=0xff;
  LCDMEM[9]=0xff;
  
}
void main( void )
{
  WDTCTL = WDTPW + WDTHOLD;       // Stop watchdog timer to prevent time out reset
  clkinit();
  Portinit();
  Timer_Ainit();
  LCDinit();
  j=sub=data=0;
  testLCD();
  _EINT();
  while(1)
  {
    chazhi();
    LCDdiaplay();
  }
}
#pragma vector = TIMERA1_VECTOR
__interrupt void Timer_A1()
{
   
   j =TA0CCR0;
   TA0CTL &= ~TAIFG;
}
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A0()
{
   j = TA0CCR0;
   TACCTL0 &= ~CCIFG;
}

相关帖子

沙发
jlyuan|  楼主 | 2014-9-8 12:10 | 只看该作者
只求TimerA捕获能通过p1.0(a通道)捕获脉冲,并算出周期,结果进不去中断,

使用特权

评论回复
板凳
zhaoxqi| | 2014-9-8 12:11 | 只看该作者
有没有捕获到脉冲?

使用特权

评论回复
地板
jlyuan|  楼主 | 2014-9-8 12:12 | 只看该作者
已经知道了,谢谢

使用特权

评论回复
5
zhanghqi| | 2014-9-8 12:13 | 只看该作者
楼主分享一下经验呗

使用特权

评论回复
6
jlyuan|  楼主 | 2014-9-8 12:14 | 只看该作者
其实是个低级的错误,不过我忘了,这是我的最终程序,很准的,你们可以参考一下
测试脉冲的周期时间——made by lqs


#include "msp430f4152.h"
#define LCD_ZREO                 0XFA//0xf5
#define LCD_ONE                  0x60
#define LCD_TWO                  0xD6
#define LCD_THREE                0xf4
#define LCD_FOUR                 0x6c
#define LCD_FIVE                 0xbc
#define LCD_SIX                  0xbe
#define LCD_SEVEN                0xe0
#define LCD_EIGHT                0xfe
#define LCD_NINE                 0xfc
unsigned char aa[10]={LCD_ZREO ,LCD_ONE ,LCD_TWO ,LCD_THREE , LCD_FOUR ,LCD_FIVE ,LCD_SIX ,LCD_SEVEN,  LCD_EIGHT ,LCD_NINE };
unsigned int j=0,sub=0,data=0;
unsigned char i=0;
float f=0;
void clkinit()
{
  FLL_CTL0 &= ~XT1OF;
  FLL_CTL0 &= ~XTS_FLL;
  FLL_CTL1 &= ~(FLL_DIV0);
  FLL_CTL1 &= ~(FLL_DIV1);
}
void Portinit()
{
  P1DIR &= 0X00;
  P1SEL |= 0X01;
}
void Timer_Ainit()
{
  TA0CTL |= TASSEL0 + MC_2;
  TA0R = 0X00;
  TACCTL0 |= SCS + CM1 + CAP + CCIE; // CCIS0 +
}
void LCDinit()
{
  unsigned char t;
  LCDACTL |= LCD4MUX + LCDON + LCDFREQ_128;
  
  LCDAPCTL0 = 0X1F;
  LCDAPCTL1 = 0X00;
  LCDAVCTL0 |= LCDCPEN;
  LCDAVCTL1 |= 0X18;
  P5SEL = 0XF0;
  for(t=0;t<10;t++)
    LCDMEM[t] = 0;
}
void chazhi()    //pulse recurrent time) 脉冲周期时间
{
    j++;
    if(j==1)
    {
      TACCR0 = 0X00;
    }

    if(j==2)
    {
     j=0;
     sub = TACCR0;   
  }
}
void LCDdiaplay()
{
  sub= f/32768*1000;//0.0001
  LCDMEM[9] = 0x02;
  LCDMEM[8] = 0;
  data = sub%10;
  LCDMEM[7] = aa[data];  //1.000
  data = sub/10%10;      
  LCDMEM[6] = aa[data] + 0x01;
  data = sub/100%10;
  LCDMEM[5] = aa[data];
  data = sub/1000%10;
  LCDMEM[4] = aa[data];
//  data = sub/10000%10;
  LCDMEM[3] = 0;
//  data = sub/100000%10;
  LCDMEM[2] = 0;
  LCDMEM[1] = 0;
  LCDMEM[0] = 0;
}
/*void testLCD()
{

  LCDMEM[0]=0xff;
  LCDMEM[1]=0xff;
  LCDMEM[2]=0xff;
  LCDMEM[3]=0xff;
  LCDMEM[4]=0xff;
  LCDMEM[5]=0xff;
  LCDMEM[6]=0xff;
  LCDMEM[7]=0xff;
  LCDMEM[8]=0xff;
  LCDMEM[9]=0xff;
}*/
void main( void )
{
  WDTCTL = WDTPW + WDTHOLD;       // Stop watchdog timer to prevent time out reset
  clkinit();
  Portinit();
  Timer_Ainit();
  LCDinit();
  _EINT();
  while(1)
  {
      LCDdiaplay();
  }
}

#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A0()
{
  //做脉冲的时间差值
   j++;
    if(j == 1)
    {
      TAR = 0X00;  //定时器数TAR0送到TACCR0;
    }
    if(j == 2)
    {
     j = 0;
     f = TACCR0;
    }
  TACCTL0 &= ~CCIFG;
}

使用特权

评论回复
7
zhenykun| | 2014-9-8 12:15 | 只看该作者
第一个程序确实错误太多了,不过恭喜楼主还是调试出来了

使用特权

评论回复
8
spark周| | 2014-9-8 12:16 | 只看该作者
理想的和实物仿真的的就是不一样

使用特权

评论回复
9
jlyuan|  楼主 | 2014-9-8 12:18 | 只看该作者
是啊,呵呵

使用特权

评论回复
10
jlyuan|  楼主 | 2014-9-8 12:19 | 只看该作者
今年中秋收获不小,呵呵,结贴了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

880

主题

12030

帖子

4

粉丝