3397|2

8

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

两路捕获的问题? [复制链接]

为什么我只能够捕获一路呢?第二路不能够正常的工作呢?


#include <msp430x14x.h>
#include "LCD1602.h"

unsigned int upflag=0;
unsigned int downflag=0;

int main( void )
{
  WDTCTL = WDTPW + WDTHOLD;
   LcdInit();
  P1DIR &=~ BIT2+BIT3;
  P1SEL = BIT2+BIT3;                   //设置P1.2为端口功能模块使用,即做捕获源
  TACTL = TASSEL_2 +TACLR +TAIE + MC1;//ACLK
  CCTL1 = CM_1 +SCS +CAP +CCIE;     //输入上升沿捕获,CCI0A为您捕获信号源
  CCTL2 = CM_1 +SCS +CAP +CCIE;       //输入上升沿捕获,CCI0A为您捕获信号源
 _EINT();
 while(1){
    WriteCommand(0x80);
    WriteData(upflag+0x30);
     WriteCommand(0xC0);
    WriteData(downflag+0x30);
 }
}
/*******************************************\
      定时器A中断服务子函数
      捕获待测信号上升沿
**********************************************/
#pragma vector = TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
  switch(TAIV)                    //向量查询
  {
  case 2:                        //捕获中断
    if(CCTL1 & CM0)            //捕获到上升沿
      upflag++;  TACCTL1 &=~CCIFG;  break;
  case 4:    
    if(CCTL2 & CM0)             //捕获到上升沿
      upflag++;  TACCTL2 &=~CCIFG;   break;
  default:
    break;
  }
}

最新回复

       楼主,你这程序写的太蛋疼了,初始化了两个中断使能,但是只有一个中断处理函数,这怎么能行呢?你编译没发现问题吗?正确的是一个中断时能,上升沿使能,在中断处理函数里,在进行下降沿的处理。       示例:     #pragma vector=TIMERB0_VECTOR        __interrupt void TimerB0(void) {    if(TBCCTL0&CM1)                        //捕获到下降沿      {        TBCTL|=TBCLR;        TBCCTL0=(TBCCTL0&(~CM1))|CM0;    //改为上升沿捕获:CM1置零,CM0置一      }    else if(TBCCTL0&CM0)                    //捕获到上升沿      {        width[i++]=TBCCR0;                  //记录下结束时间        TBCCTL0=(TBCCTL0&(~CM0))|CM1;   //改为下降沿捕获:CM0置零,CM1置一        if(i==10) i=0;                     } }    详情 回复 发表于 2011-8-6 17:32
 
点赞 关注

回复
举报

69

帖子

0

TA的资源

纯净的硅(初级)

沙发
 
你好,请将你使用的MSP430型号告之。谢谢。
 
 

回复

77

帖子

0

TA的资源

纯净的硅(初级)

板凳
 

       楼主,你这程序写的太蛋疼了,初始化了两个中断使能,但是只有一个中断处理函数,这怎么能行呢?你编译没发现问题吗?正确的是一个中断时能,上升沿使能,在中断处理函数里,在进行下降沿的处理。

      示例:

    #pragma vector=TIMERB0_VECTOR       
__interrupt void TimerB0(void)
{
   if(TBCCTL0&CM1)                        //
捕获到下降沿

     {
       TBCTL|=TBCLR;
       TBCCTL0=(TBCCTL0&(~CM1))|CM0;    //
改为上升沿捕获:CM1置零,CM0置一


     }
   else if(TBCCTL0&CM0)                    //
捕获到上升沿

     {
       width[i++]=TBCCR0;                  //
记录下结束时间

       TBCCTL0=(TBCCTL0&(~CM0))|CM1;   //
改为下降沿捕获:CM0置零,CM1置一

       if(i==10) i=0;
              
     }

}

 

 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表