打印

新手。。求助 计时器A计数

[复制链接]
1373|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yc_2503|  楼主 | 2013-12-10 23:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
vivilzb1985| | 2013-12-10 23:51 | 只看该作者
弱弱的问一下的。楼主你这是什么型号的单片机或Arm的啊?

使用特权

评论回复
板凳
vivilzb1985| | 2013-12-10 23:51 | 只看该作者
这个一般是采用定时器的捕获功能的技术的吧

使用特权

评论回复
地板
yc_2503|  楼主 | 2013-12-11 00:01 | 只看该作者
vivilzb1985 发表于 2013-12-10 23:51
弱弱的问一下的。楼主你这是什么型号的单片机或Arm的啊?

MSP430G2553哎  
//#include <msp430x14x.h>
#include <msp430G2553.h>
#include "in430.h"
typedef unsigned char uchar;
typedef unsigned int  uint;
uint temp=0x00;
void InitClock();
void main(void)
{
    WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT



  
InitClock();
P1SEL |= BIT0;
P1DIR=0Xfe;
// P2DIR=0XFC;                     //P1、0、1、2、3用作输入端
// P2OUT=0XC0;

P1OUT= 0xff;

  CCTL0=CCIE;
  CCR0=10;
  TACTL=TASSEL_0+MC_1;    //子系统时钟,增计数模式
//TACTL = TASSEL_2 + MC_2 + TAIE;           // SMCLK, contmode, interrupt
  
  //_BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt

//P1OUT=0x00;
  _EINT();
for(;;)
{


}
}
/*****************************************************************************
函数名称:Time_A
功能:    定时器A中断服务子程序
参数:    无
返回值:  无
******************************************************************************/
#pragma  vector=TIMER0_A0_VECTOR
__interrupt void Time_A(void)
{
  //if(temp==0xff+1)
  //  temp=0x00;
//while(keyAct());
  P1OUT^=BIT3;
}
// Timer_A3 Interrupt Vector (TAIV) handler
/*
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
switch( TAIV )
{
   case  2: break;                          // CCR1 not used
   case  4: break;                          // CCR2 not used
   case 10: P4OUT ^= BIT5;                  // overflow
            break;
}
}
*/
/*

// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  P4OUT ^= BIT5;                       // Toggle P3.4
}

*/
/************************************
函数名:InitClock
功能:  初始化时钟
参数:  无
返回值:无
************************************/
void InitClock()
{
  unsigned int oscdly;
  BCSCTL1&=~XT2OFF;        //清XT2,使XT2振荡器有效
  do
  {
    IFG1&=~OFIFG;          //清OFIFG
    oscdly=5;
    while(oscdly--);
   
  }
  while(IFG1&OFIFG);
  DCOCTL|=DCO0+DCO1+DCO2;
  BCSCTL1|=RSEL1+RSEL2+RSEL0;
    */
  BCSCTL2|=SELM_2+SELS;      //SMCLK AND MCLK USING XT2
}

这是刚刚写的  然后 第一次跑的时候很正常。。。然后过了几分钟之后 再跑就不对了   用仿真器来单步调会发现TAR莫名的清零了。。。

使用特权

评论回复
5
yc_2503|  楼主 | 2013-12-11 00:03 | 只看该作者
vivilzb1985 发表于 2013-12-10 23:51
这个一般是采用定时器的捕获功能的技术的吧

不用捕获可以么  直接把外部的脉冲当时钟来计数可以么

使用特权

评论回复
6
zeluo| | 2013-12-11 17:27 | 只看该作者
一般   是通过单片机的IO口   定时捕捉吧     这样应该可以实现

使用特权

评论回复
7
dirtwillfly| | 2013-12-11 19:21 | 只看该作者
yc_2503 发表于 2013-12-11 00:03
不用捕获可以么  直接把外部的脉冲当时钟来计数可以么

没见过这样用的

使用特权

评论回复
8
yc_2503|  楼主 | 2013-12-12 00:01 | 只看该作者
zeluo 发表于 2013-12-11 17:27
一般   是通过单片机的IO口   定时捕捉吧     这样应该可以实现

捕获可以多路捕获么  并且各个脉冲的周期不一样的话  比如两路  然后TAR只有一个   还有我翻了好多资料 也都没有说用捕获来多路计数脉冲的  只有计算占空比的

使用特权

评论回复
9
yc_2503|  楼主 | 2013-12-12 00:01 | 只看该作者
dirtwillfly 发表于 2013-12-11 19:21
没见过这样用的

捕获可以多路捕获么  并且各个脉冲的周期不一样的话  比如两路  然后TAR只有一个   还有我翻了好多资料 也都没有说用捕获来多路计数脉冲的  只有计算占空比的

使用特权

评论回复
10
dirtwillfly| | 2013-12-14 12:28 | 只看该作者
yc_2503 发表于 2013-12-12 00:01
捕获可以多路捕获么  并且各个脉冲的周期不一样的话  比如两路  然后TAR只有一个   还有我翻了好多资料  ...

可以多路捕获的,用不同的捕获通道

使用特权

评论回复
11
i1mcu| | 2013-12-15 00:05 | 只看该作者
可以使用中断的。

使用特权

评论回复
12
i1mcu| | 2013-12-15 00:06 | 只看该作者
你是不是要捕获信号的?

使用特权

评论回复
13
yc_2503|  楼主 | 2013-12-15 18:16 | 只看该作者
dirtwillfly 发表于 2013-12-14 12:28
可以多路捕获的,用不同的捕获通道

额 我看利尔达的资料上说  捕获条件满足时  TAR中的值赋值给CCRX   如果多路捕获 那 TAR怎么跑啊

使用特权

评论回复
14
yc_2503|  楼主 | 2013-12-15 18:17 | 只看该作者
i1mcu 发表于 2013-12-15 00:06
你是不是要捕获信号的?

给两个周期不同的脉冲计数

使用特权

评论回复
15
i1mcu| | 2013-12-15 23:47 | 只看该作者
yc_2503 发表于 2013-12-15 18:17
给两个周期不同的脉冲计数

那就捕获脉冲长度的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:<img src="static/image/smiley/comcom/1.gif" class="vm"> ...

6

主题

35

帖子

0

粉丝