Msp430g2553定时器中断与系统时钟配置实战解析

需积分: 19 17 下载量 100 浏览量 更新于2024-09-14 收藏 2KB TXT 举报
"本文主要介绍了如何在基于msp430g2553微控制器上使用定时器,包括停止看门狗定时器、配置LFXT1时钟源、设置捕获/比较中断以及利用定时器进行中断驱动的LED闪烁功能。示例代码展示了两种不同的定时器配置方式,一种是基于ACLK时钟的定时器0A,另一种是基于MCLK时钟的定时器配置。" 在微控制器应用中,定时器是一种至关重要的硬件资源,用于执行周期性任务或计时操作。在msp430g2553这款低功耗微控制器中,定时器的使用涉及到多个寄存器的配置。以下将详细讲解相关知识点: 1. **停止看门狗定时器**: `WDTCTL = WDTPW + WDTHOLD;` 这行代码用于关闭看门狗定时器,防止程序运行过程中因超时而引发复位。WDTPW是写保护密码,WDTHOLD则用于停止看门狗定时器。 2. **配置LFXT1时钟源**: `BCSCTL3 |= LFXT1S_2;` 这行代码设置LFXT1(低频外部晶体振荡器)为内部电压控制振荡器(VLO),频率为12kHz。LFXT1S_2是选择位,用于设置LFXT1的工作模式。 3. **设置捕获/比较中断**: `CCTL0|= CCIE;` 这里是设置定时器A的捕获/比较控制寄存器CCTL0,通过设置CCIE位(0x0010),启用捕获/比较中断。这使得当定时器达到预设的CCR0值时,会产生中断。 4. **定时器配置**: - 示例1中,`TA0CTL = TASSEL_1 + TACLR + MC_1;` 选择了ACLK作为定时器A的时钟源(TASSEL_1),清除了定时器(TACLR),并设置了定时器工作在连续增计数模式(MC_1)。`CCR0=12000;` 设置了捕获/比较寄存器0的初始值,由于ACLK是12kHz,所以这个配置会形成1秒的定时器周期。 - 示例2中,没有明确指定定时器A的时钟源,但提到了`BCSCTL2|=SELM_1+DIVM_3;` 这行代码,它配置MCLK(主时钟)为8MHz,并通过DIVM分频因子设定时器的频率。 5. **中断驱动的LED闪烁**: 在中断服务函数`__interrupt void Timer_A(void)`中,当定时器A的捕获/比较寄存器0匹配到设定值时,会执行中断服务程序,`P1OUT^=BIT6;` 用于切换P1.6引脚的输出状态,实现LED的闪烁效果。 6. **编程注意事项**: - 使用`#pragma vector=TIMER0_A0_VECTOR`来指定中断向量,确保定时器A0中断的正确处理。 - `P1SEL &= ~BIT6;` 和 `P1DIR |= BIT6;` 分别用于将P1.6口配置为通用I/O口和设置为输出模式。 通过以上配置,用户可以根据具体需求调整定时器的参数,实现不同时间间隔的定时任务,同时结合中断机制,可以高效地处理周期性的硬件操作。