找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2245|回复: 1
打印 上一主题 下一主题
收起左侧

用MSP430F149做脉冲捕捉 但是一直不进入沿中断 程序如下 求大佬帮忙看看程序有没有...

[复制链接]
跳转到指定楼层
楼主
ID:222731 发表于 2017-7-27 11:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/****************主函数****************/
void main(void)
{  
    uint i;

    /*下面六行程序关闭所有的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;

    WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗
    P6DIR |= BIT2;P6OUT &= ~BIT2;   //打开电平转换
    P2DIR |= BIT3;P2OUT &= ~BIT3;   //电平转换方向3.3V--->5V
    P5DIR = 0xff;
    P5OUT = 0xff;


      /*------选择系统主时钟为8MHz-------*/
    BCSCTL1 &= ~XT2OFF;                 //打开XT2高频晶体振荡器
    do
    {
        IFG1 &= ~OFIFG;                 //清除晶振失败标志
        for (i = 0xFF; i > 0; i--);     //等待8MHz晶体起振
    }
    while ((IFG1 & OFIFG));             //晶振失效标志仍然存在?
    BCSCTL2 |= SELM_2 + SELS;           //MCLK和SMCLK选择高频晶振
      /*------选择系统主时钟为8MHz-------*/   

    P3DIR |= 0X07;
    P4DIR |= 0XFF;
    LCD_init();

    set_pos(0,6);
    LCD_write_data('W');
    LCD_write_data('T');
    LCD_write_data('F');     

    P2DIR |= BIT0;                  //设置P2.0为输出

    P1SEL |= BIT2; //设置P1.2端口为功能模块使用
    P1DIR &=~ BIT2;  
    P1IFG = 0;

    TACTL = TASSEL1+TACLR+TAIE+MC1; //定时器A时钟信号选择SMCLK,同时设置定时器A计数模式为连续增计模式
    CCTL1 = MC0+SCS+CAP+CCIE; //输入上升沿捕获,CCI0A为捕获信号源


    start = 1;
    disp_m = 1;
    end = 1;
    overflow = 0;
    show_falg = 0;


    _EINT();

    while(1)
   {

     P2OUT |= BIT0;
     delay(160);         //给Trig一个启动脉冲
     P2OUT &=~ BIT0;

     while(show_falg); //等待 Echo的 下降沿

     show();             //更新显示



   }
}

#pragma vector=TIMERA1_VECTOR //定时器A中断处理

__interrupt void timer_a(void)

{

  switch(TAIV) //向量查询

  { case 2: //捕获中断
    if(CCTL1&CM0) //上升沿
    {
      CCTL1=(CCTL1&(~CM0))|CM1; //更变设置为下降沿触发
      start=TAR; //记录初始时间
      overflow=0; //溢出计数变量复位

    }
    else if (CCTL1&CM1) //下降沿
    {
      CCTL1=(CCTL1&(~CM1))|CM0; //更变设置为上升沿触发
      end=TAR; //用start,end,overflow计算脉冲宽度
      show_falg = 1;  //打开显示计算处理程序
    }
    break;

  case 10: //定时器溢出中断
    overflow++;
    break; //溢出计数加1

  default:break;
  }

}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2017-7-27 23:42 | 只看该作者
是软件仿真,还是硬件仿真呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表