搜索
bottom↓
回复: 4

看看我的程序,就是捕获不了!

[复制链接]

出0入0汤圆

发表于 2010-7-27 20:36:21 | 显示全部楼层 |阅读模式
我写的是430单片机测频率的程序,定时1S,用捕获计算脉冲的个数。程序比较简单,但是就是测频率没显示,难道是哪个寄存器设置错误?
求解于高手。
#include <MSP430x26x.h>

unsigned int Ts_width,Plus_times;
unsigned char overflow;
void Init_CLK(void);

void main (void)
{
    WDTCTL = WDTPW+WDTHOLD;                   //关闭看门狗定时器
   
    Init_CLK();
   
    P1DIR &=~BIT2;                        //设置P1.2方向为输入
    P1SEL |= BIT2;                             //设置P1.2端口为功能模块使用
    TACTL = TASSEL_2+ID_3+TACLR+TAIE+MC_0;     //定时器A时钟信号选择SMCLK,1M,同时停止定时器A
    CCTL1 = CM_1+SCS+CAP+CCIE+CCIS_0;                 //输入上升沿捕获,CCI1A为捕获信号源
    CCR0=5000-1;                                      //定时5ms
   
    _EINT();                                  //中断允许
    while(1)
  {
     //显示频率,这里略写     
  }
}

#pragma vector=TIMERA1_VECTOR              //定时器A中断处理
__interrupt void timer_a(void)
{
switch(TAIV)                              //向量查询
   {
      case 2:                             //捕获中断
        {
          Plus_times++;                    //记下脉冲个数
          TACTL |=MC_1;                   //开定时器
        }
        break;
      case 10:
        overflow++;
        if(overflow==200)                 //定时1S到
        {
            CCTL1 &=CM_0;                   //禁止捕获
            overflow=0;
            Ts_width=Plus_times;
            Plus_times=0;
            CCTL1 |=CM_1;                   //捕获允许
        }
        break;
     default:
       break;
   }
}
/*****************高频时钟初始化**************************/
void Init_CLK(void)
{
  unsigned int iq0;

   BCSCTL1&=~XT2OFF;                 //打开XT2振荡器
   do
   {
   IFG1 &= ~OFIFG;                   // 清除振荡器失效标志
   for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振
   }
   while ((IFG1 & OFIFG));   // 判断XT2是否起振,起振,则为0
  
  BCSCTL2=SELM_2+SELS;          //选择MCLK、SMCLK为XT2,8M
}
显示部分绝对没问题,大家帮忙看看我的捕获模块怎么错了。
I am新手,请老手们赐解!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2010-7-27 21:08:06 | 显示全部楼层
case 2:                             //捕获中断
        {
          Plus_times++;                    //记下脉冲个数
         /****** TACTL |=MC_1;                   //开定时器********/
        }

/****** TACTL |=MC_1;                   //开定时器********/
难道是这句话错了???

出0入0汤圆

发表于 2011-5-23 21:21:18 | 显示全部楼层
case 2:                             //捕获中断
        {
          Plus_times++;                    //记下脉冲个数
          TACTL |=MC_1;                   //开定时器
        }
        break;

程序没有仔细看,但你这个break应该在case的{}里面吧。

出0入0汤圆

发表于 2011-5-23 23:53:49 | 显示全部楼层
这个应该没关系吧。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-24 23:07

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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