MSP430定时器A捕捉脉实例[调试通过,很好用]
运行代码
/*****************************************************************
//功能:利用定时器A的捕捉能测量脉冲信号的脉宽
//
//
// MSP430F449
// -----------------
// /|| XIN|-
// | | | 32kHz
// --|RST XOUT|-
// | |
// | P1.5/ACLK|---+
// | | |
// | P2.0/TA2|<--+
// | |
// | |
//说明:ACLK要进行8分频(4K),并将其作为外部的要捕获的脉冲;
//MCLK=SMCLK=8M;
*****************************************************************/
#include int pwm_start,pwm_end,pwm_wide=0; void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR = 0x20; // P1.5 输出 P1SEL = 0x20; // P1.5输出ACLK P2SEL|=BIT0; //P2.0 CCI2A SCFI0 |= FN_4; SCFQCTL = 121; // (121+1) ×32768 *2= 7.99Mhz FLL_CTL0=DCOPLUS+OSCCAP1; //MCLK=SMCLK=8M FLL_CTL1 |= FLL_DIV_8; //ACLK要进行8分频,ACLK=4K TACCTL2 =CAP+CM_3+CCIS_0+SCS+CCIE; //捕获模式,上升和下降都捕获,选择CCI2A,同步,捕获中断开 //Capture input select: 0 - CCI2A TACTL = TASSEL_2 + MC_2 ; //SMCLK=8M,L连续计数模式 _EINT(); //开总中断 LPM0; _NOP(); pwm_wide=pwm_end-pwm_start; while(1); } // Timer_A3 Interrupt Vector (TAIV) handler #pragma vector=TIMERA1_VECTOR __interrupt void Timer_A(void) { switch(TAIV) {case 2:break; case 4: if(TACCTL2 & CCI) pwm_start=CCR2; else pwm_end=CCR2; //pwm_wide=pwm_end-pwm_start; break; case 10: break; } LPM0_EXIT; } 检验方法: 在调试环境下,在watch 窗口观察pwm_end和pwm_start,然后相减! 我计算了一下。在所给的例子中理论值pwm_end-pwm_start=976 通过观察的结果是978,还是有点误差,可能是由于晶振的值原因,计算上的舍入有点偏差。
上一篇:MSP430--时钟模块
下一篇:msp430硬件II2C
推荐阅读最新更新时间:2024-10-28 10:25
设计资源 培训 开发板 精华推荐
- LT6656BCDC-3 的典型应用,用于基本连接的 3V 电压基准
- 具有 ATmega1281 AVR 微控制器的天线分集 2.4 GHz 无线电收发器
- MIC2095-1YMT限流配电开关典型应用
- MIC4826 EL 灯驱动器分离电源应用
- AKD4620B-B,AK4620B 24 位 ADC/DAC 转换器评估板
- 使用具有可编程电源电压的 ADXRS450 数字速率传感器和 ADuC7026 MCU 感测角速度
- 【训练营】ESP8266时钟+548151A
- LTC3411AEDD 演示板、1.25A、4MHz、同步降压型 DC/DC 转换器
- NCP163AMX280TBGEVB:NCP163 XDFN4 评估板
- LTC3832,高效率 3.3V 至 1.8V/20A 同步降压型 DC/DC 转换器