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

2019-08-07 14:27发布

就是想用计时器A来对外部的一个脉冲计数   网上查了一通都只是说把定时器的时钟源设置成待测脉冲即可  具体怎么设置啊  。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
vivilzb1985
1楼-- · 2019-08-07 18:50
弱弱的问一下的。楼主你这是什么型号的单片机或Arm的啊?
vivilzb1985
2楼-- · 2019-08-08 00:12
这个一般是采用定时器的捕获功能的技术的吧
yc_2503
3楼-- · 2019-08-08 00:34
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莫名的清零了。。。
yc_2503
4楼-- · 2019-08-08 03:56
 精彩回答 2  元偷偷看……
zeluo
5楼-- · 2019-08-08 06:18
一般   是通过单片机的IO口   定时捕捉吧     这样应该可以实现
dirtwillfly
6楼-- · 2019-08-08 06:33
yc_2503 发表于 2013-12-11 00:03
不用捕获可以么  直接把外部的脉冲当时钟来计数可以么

没见过这样用的

一周热门 更多>