关于定时器的捕获模块

2019-03-24 12:24发布

各位大神谁有关于定时器捕获模块的程序,能不能给贴一个,什么型号的430都行的啊!谢谢! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
jishuaihu
1楼-- · 2019-03-24 15:26
 精彩回答 2  元偷偷看……
angeleader
2楼-- · 2019-03-24 19:38
< :TI_MSP430_内容页_SA7 --> 多谢帮顶
vince_CN
3楼-- · 2019-03-24 22:38
我的程序,只有在片上内部,用接地和接电源来产生捕捉信号,才能成功。引脚外面的信号却捕捉不到
angeleader
4楼-- · 2019-03-25 03:52
 精彩回答 2  元偷偷看……
wstt
5楼-- · 2019-03-25 09:40
  1. //***********************************************************************
    // MSP-FET430P140 Demo - Timer_A0, Capture of ACLK/8 using SMCLK
    //
    // Description: Input capture of ACLK/8 on P1.1(TA0)
    // Run to breakpoint at the _NOP() instruction to see 16 capture
    // values and the differences.
    // ACLK = 32768Hz, MCLK = SMCLK = default ~800kHz
    // //* An external watch crystal on XIN XOUT is required for ACLK *//
    //
    // MSP430F149
    // -----------------
    // /|| XIN|-
    // | | | 32kHz
    // --|RST XOUT|-
    // | |
    // | P2.0/ACLK|---+
    // | | |
    // | P1.1/TA0|<--+
    // | |
    // | P1.0|--->LED

    //
    // H. Grewal
    // Texas Instruments Inc.
    // Feb 2005
    // Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.21A
    //******************************************************************************

    #include <msp430x14x.h>

    unsigned int new_cap=0;
    unsigned int old_cap=0;
    unsigned int cap_diff=0;

    unsigned int diff_array[16]; // RAM array for differences
    unsigned int capture_array[16]; // RAM array for captures
    unsigned char index=0;
    unsigned char count = 0;

    void main(void)
    {
    volatile unsigned int i;
    WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
    for (i=0; i<20000; i++) // Delay for crystal stabilization
    {
    }
    P1DIR = 0x01; // Set P1.0 out,1.1 input dir
    P1OUT &= ~0x01; // LED off
    P1SEL = 0x02; // Set P1.1 to TA0
    P2DIR = 0x01; // P2.0-ACLK
    P2SEL |= 0x01;
    BCSCTL1 |= DIVA_3; // ACLK/8

    CCTL0 = CM_1 + SCS + CCIS_0 + CAP + CCIE; // Rising edge + CCI0A (P1.1)
    // + Capture Mode + Interrupt

    TACTL = TASSEL_2 + MC_2; // SMCLK + Continuous Mode

    _BIS_SR(LPM0_bits + GIE); // LPM0 + Enable global ints
    }

    #pragma vector=TIMERA0_VECTOR
    __interrupt void TimerA0(void)
    {
    new_cap = TACCR0;
    cap_diff = new_cap - old_cap;

    diff_array[index] = cap_diff; // record difference to RAM array
    capture_array[index++] = new_cap;
    if (index == 16)
    {
    index = 0;
    P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR
    }
    old_cap = new_cap; // store this capture value
    count ++;
    if (count == 32)
    {
    count = 0;
    _NOP(); // SET BREAKPOINT HERE
    }

    }
复制代码
亦轩阁
6楼-- · 2019-03-25 09:44

#include "MSp430G2553.h"unsigned int start,end;unsigned char overflow;
void main( void ){   WDTCTL = WDTPW + WDTHOLD;  P1DIR|=BIT0+BIT6;//P1.6LED,  P1SEL|=BIT0+BIT2;//P1.0->ACLK输出,P1.2->捕获输入  P1OUT&=~BIT6;//关闭LED  BCSCTL1 =DIVA_3;//ACLK8分频(vlo=12Khz)  CCTL1=CM_1+SCS+CCIS_0+CAP+CCIE;//上升沿+同步+CCI0A(p1.2)+捕获功能+捕获中断  TACTL=TASSEL_2+MC_2+ID_3+TAIE+TACLR;//SCLK(DCO=1.1Mhz)8分频,连续计数模式  _BIS_SR(LPM0_bits+GIE);}#pragma vector=TIMER0_A1_VECTOR__interrupt void Timer_A (void){  switch(TAIV)  {    case 2:      if(CCTL1&CM_1)      {        CCTL1=(CCTL1&(~CM_1))|CM_2;        start=TAR;        overflow=0;      }     if(CCTL1&CM_2)//else if与if区别要注意      {          CCTL1=(CCTL1&(~CM_2))|CM_1;          end=TAR;      }      P1OUT|=BIT6;      break;    case 10:      overflow++;      break;    default:      break;   }}

一周热门 更多>

相关问题

    相关文章