进不去中断

2019-07-18 15:31发布

只求TimerA捕获能通过p1.0(a通道)捕获脉冲,并算出周期,结果进不去中断,
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
zhaoxqi
1楼-- · 2019-07-18 16:19
有没有捕获到脉冲?
jlyuan
2楼-- · 2019-07-18 17:10

其实是个低级的错误,不过我忘了,这是我的最终程序,很准的,你们可以参考一下
测试脉冲的周期时间——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;
}
zhenykun
3楼-- · 2019-07-18 20:15
第一个程序确实错误太多了,不过恭喜楼主还是调试出来了
spark周
4楼-- · 2019-07-18 21:28
理想的和实物仿真的的就是不一样
jlyuan
5楼-- · 2019-07-18 23:11
 精彩回答 2  元偷偷看……

一周热门 更多>