打印

捕获中断进不去,请大侠帮忙

[复制链接]
2568|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lovelqs|  楼主 | 2012-7-24 22:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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;
}

相关帖子

沙发
lovelqs|  楼主 | 2012-7-24 22:53 | 只看该作者
只求TimerA捕获能通过p1.0(a通道)捕获脉冲,并算出周期,结果进不去中断,

使用特权

评论回复
板凳
tianm| | 2012-7-25 10:34 | 只看该作者
有没有捕获到脉冲?

使用特权

评论回复
地板
lovelqs|  楼主 | 2012-7-25 14:36 | 只看该作者
已经知道了,谢谢

使用特权

评论回复
5
gygp| | 2012-7-25 15:47 | 只看该作者
楼主分享一下经验呗

使用特权

评论回复
6
figo20042005| | 2012-7-25 22:01 | 只看该作者
这到底怎么解决的

使用特权

评论回复
7
lovelqs|  楼主 | 2012-7-26 16:25 | 只看该作者
其实是个低级的错误,不过我忘了,这是我的最终程序,很准的,你们可以参考一下
测试脉冲的周期时间——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;
}

使用特权

评论回复
8
lovelqs|  楼主 | 2012-7-26 16:26 | 只看该作者
6# figo20042005
你可以看一下下面的程序,已经调试好的,

使用特权

评论回复
9
lovelqs|  楼主 | 2012-7-26 16:27 | 只看该作者
5# gygp 你看一下下面的程序,第一个程序错误太多了,不过还是调试出来了,:D

使用特权

评论回复
10
永远的不知| | 2012-7-26 16:54 | 只看该作者
能自己解决很好,解决问题的过程就是提高的过程。

使用特权

评论回复
11
lovelqs|  楼主 | 2012-7-27 15:12 | 只看该作者
10# 永远的不知 嗯,是呀,理想的和实物仿真的的就是不一样

使用特权

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

本版积分规则

0

主题

10

帖子

0

粉丝