[求助] msp 430中断进去不啊

lllnnn   2015-4-3 00:49 楼主
#include  
#include "LCD12864.h"

uchar flag[2]={0};
int t=0,t1=0,t2=0;
ulong i;
uint distance=0;
uchar over_flag=0;//溢出标志
uint jl[4]={0};

/***************************关闭所有IO口*************************/
void Close_IO()
{
    /*下面六行程序关闭所有的IO口*/
    P1DIR = 0XFF;P1OUT = 0XFF;
    P2DIR = 0XFF;P2OUT = 0XFF;
    P3DIR = 0XFF;P3OUT = 0XFF;
    P4DIR = 0XFF;P4OUT = 0XFF;
    P5DIR = 0XFF;P5OUT = 0XFF;
    P6DIR = 0XFF;P6OUT = 0XFF;
}

/***************************时钟初始化*************************/
void Clk_Init()
{
  
    BCSCTL1&=~XT2OFF;//打开XT振荡器
    BCSCTL2|=SELM_2+SELS;//MCLK 8M and SMCLK 8M  
    do
    {
      IFG1 &= ~OFIFG;//清除振荡错误标志
      for(i = 0; i < 0xff; i++)  _NOP();//延时等待
    }
    while ((IFG1 & OFIFG) != 0);//如果标志为1继续循环等待
    IFG1&=~OFIFG;
}

/****************************************************/
void Tmolde()
{
P5OUT|=BIT2;//trig9c           
delay_us(15);
P5OUT&=~BIT2;
delay_ms(100);
}
void xianshi(uint l)
{       jl[3] = l/1000;
        l = l%1000;
        jl[2] = l/100;
        l = l%100;
        jl[1] = l/10;
        jl[0] = l%10;      
        
        Write_Cmd(0x80);//第一行第一字节地址
        Display("智能盲人辅助系统");
        Write_Cmd(0x88);//第三行第二字节地址
        Display("距离:");
        Write_Cmd(0x8A);//第三行第二字节地址
    //delay_ms(2000);//等待2秒
    //Write_Cmd(0X01);//清屏
        Write_Data(jl[3]+0x30);
        Write_Data(jl[2]+0x30);
        Write_Data(jl[1]+0x30);
        Write_Data(jl[0]+0x30);
        Display("mm");

  
}

/************************主函数****************************/
void main(void)
{
    WDTCTL = WDTPW + WDTHOLD;   //关闭看门狗
    Close_IO();
    Clk_Init();                 //时钟初始化,外部8M晶振  3
    Ini_Lcd_IO();
    delay_ms(50);
    Ini_Lcd();

    P5DIR&=~BIT1;
    P5SEL|=BIT1;                 // 将6.0定义为外围模块功能
    TACTL=TASSEL_2+TACLR+ID_3+MC_1; //SMCLK,清除TAR,八分频,连续计数模式
    TACCTL1=CCIS_1;//捕获源为P5.0 P5.1
    TACCTL1|=SCS+CAP+CCIE;//捕获模式,同步捕获,工作在捕获模式,中断打开
    TACCTL1=CM_3;
    TACCR0=6000;
    _EINT();//开启总中断
    while(1){
      
    Tmolde();
     if(flag[0]==1&&flag[1]==1){
     flag[0]=0;
     flag[1]=0;
     if(t2>t1)
       t=t2-t1;
     else
    {
      t=6000-t1+t2;
      over_flag=0;
      TACTL=TACLR;
    }
     }
     distance=t*(340/2000);
     /*Write_Cmd(0x91);
     Write_Data(distance+0x30);*/
    xianshi(distance);
   

}
}
   


/*************中断服务函数**********/
#pragma vector = TIMERA1_VECTOR
__interrupt void TIMERA1()
{
          if(TACCTL1&CM_1){
            t1=TACCR1;
          flag[0]=1;
          P3OUT&=~BIT6;}
          if(TACCTL1&CM_2){
           t2=TACCR1;
           flag[1]=1;
       P3OUT&=~BIT7;
           t1++;}
          TACCTL1&=~CCIFG;//清楚标志位
        

   
}
  

回复评论 (2)

有些头文件里timer的溢出中断和比较捕获中断函数的入口名称是分开的,注意检查一下
点赞  2015-4-3 08:47
按照楼上说的产看一下你所用的中断对应的中断向量名
点赞  2015-4-4 08:53
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复