找回密码
 立即注册

QQ登录

只需一步,快速开始

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

msp430f149开捕获为什么无法进入case2

[复制链接]
回帖奖励 60 黑币 回复本帖可获得 60 黑币奖励! 每人限 1 次(中奖概率 50%)
跳转到指定楼层
楼主


#include "msp430x14x.h"
#include "iic.h"

unsigned int TA_OverflowCnt;      //TA溢出次数存放变量
unsigned long int Period;       //周期测量结果存放变量
unsigned int PervCapVal;         //前一次捕获值存放变量

void display()     //显示
{

    // OLED_ShowString(0, 2, "haha:",16);
     //OLED_ShowString(0, 0, "20",16);
     //OLED_ShowChar(33, 0, '-',16);
     //OLED_ShowChar(57, 0, '-',16);
   //  OLED_ShowChar(78, 2,':',16);
    // OLED_ShowChar(102, 2,':',16);
     OLED_ShowCHinese(0,0,0);
     OLED_ShowCHinese( 16,0,1);
    // OLED_ShowChar(32, 4,':',16);   
     //OLED_ShowString(0, 6, "new money:",16);
    // OLED_ShowNum(0,4,TA_OverflowCnt,2,16);
     OLED_ShowString(112,0,"HZ",16);
     //OLED_ShowNum(0,6,3,5,16);      //显示
}

void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;

  P1SEL |= BIT2;      //P1.2设为第二功能(TA1),不同单片机可能不同
  P1DIR &= ~(BIT2);   //P1.2(TA1)设为输入(可省略)

  TACTL= TASSEL_2+MC_2+TACLR+TAIE;

  TACCTL1 =CAP + CM_3 +CCIS_1 + SCS + CCIE;
  //捕获模块1启动,选择TA1(P1.2)管脚作为捕获源,上升沿捕获,同步捕获,开启捕获中断

  Initial_LY096BG30();   //OLED初始化
  OLED_Clear();
  display();
  _EINT();      //总中断允许
  LPM0;       //因为TimerA要用SMCLK,只能进入低功耗模式0休眠

}


#pragma vector = TIMERA1_VECTOR
__interrupt void TA_ISR(void)   //Timer_A中断入口
{
  switch(TAIV)
  {
  case 2:     //比较/捕获模块1中断
            Period = TA_OverflowCnt*65536 + TACCR1-PervCapVal;    //计算周期
            PervCapVal = TACCR1;      //保存捕获值,供下一次使用
            TA_OverflowCnt = 0;     //溢出次数清零
            OLED_ShowNum(0,2,Period,5,16);      //显示
            OLED_ShowNum(0,6,3,5,16);      //显示
            break;
  case 4:   break;
  case 10:  TA_OverflowCnt++;     //TA每次溢出,溢出次数变量+1
            break;  
  }
}


进入不了这个中断,我查了一下手册    捕获模式:寄存器 CCRx 捕获了定时器 TAR 值时置位。
说明没有捕获到定时器TAR


  case 2:     //比较/捕获模块1中断
            Period = TA_OverflowCnt*65536 + TACCR1-PervCapVal;    //计算周期
            PervCapVal = TACCR1;      //保存捕获值,供下一次使用
            TA_OverflowCnt = 0;     //溢出次数清零
            OLED_ShowNum(0,2,Period,5,16);      //显示
            OLED_ShowNum(0,6,3,5,16);      //显示
            break;



问题是:为什么捕获不了TAR中的值   我的oled ,脉冲输入没有问题


IMG_20210719_174246(1).jpg (1.68 MB, 下载次数: 106)

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

使用道具 举报

沙发
ID:808634 发表于 2021-7-19 18:12 | 只看该作者
已解决,谢谢admin
回复

使用道具 举报

板凳
ID:808634 发表于 2021-7-19 18:16 | 只看该作者
CCISx:在捕获模式中用来定义提供捕获事件的输入源
0: 选择 CCIxA
1: 选择 CCIxB
2: 选择 GND
3: 选择 Vcc
应该选择 CCIS_0  选择CCIXA
因为我使用的就是Timer_A

评分

参与人数 1黑币 +30 收起 理由
admin + 30 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:954170 发表于 2021-7-20 15:36 | 只看该作者
一是查看中断是否打开;二是查看你的标志位是否置1或置0;三是查看中断模块初始化;我以前也试过这种情况。
回复

使用道具 举报

5#
ID:81196 发表于 2021-7-21 14:34 | 只看该作者
首先确定你的捕获源对不对,然后是确定源的上升下降沿方式,确定好了来龙去脉如果还是不行的话,那就是你配置不对,这两点对了肯定能进去
回复

使用道具 举报

6#
ID:781863 发表于 2021-7-29 13:57 | 只看该作者
应该是你的捕获源不对
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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