当前位置:   article > 正文

03:时钟与中断代码(LED闪烁与波形)【MSP430F5529】_中断程序msp430

中断程序msp430

目录

定时器与中断

代码一:LED闪烁

功能描述

代码实现(有详细注释)

代码二:波形测试

功能描述

代码实现(有详细注释)

测试输出


定时器与中断

        系统正常运行,当发生某个特定具有优先级的事件,系统目前正在运行的任务暂停,去执行中断事件服务函数,一般可在中断服务函数中进行一个计数操作,或者完成某个完整的工作。

        而定时器与中断有什么关系呢,它可以设置的是一个检测频率,检测某个事件是否发生。若设置定时器为1S,则1s执行一次中断判断事件是否发生,发生,则执行中断服务函数内部逻辑。

代码一:LED闪烁

功能描述

        要实现的功能是:LED每500ms切换一次状态,即500ms亮、500ms灭,循环。

        先对LED、对定时器进行初始化,然后写入中断函数。

         * 使用TA0,CCR0
         * TACK = SMCLK/1 = 1M, 1/1M = 1us,计数500ms,即配置TA0CCR0 = 500000。

        当定时器到500000时,即时间过去了500ms,这个时候判断中断服务函数的条件,执行函数内部的逻辑,使LED灯的电平发生翻转。

代码实现(有详细注释)

  1. #include <msp430.h>
  2. int main(void)
  3. {
  4. WDTCTL = WDTPW | WDTHOLD; //关闭“看门狗”
  5. //LED初始化
  6. P4DIR |= BIT7; //初始化为输出
  7. P4OUT &= ~BIT0; //初始化低电平
  8. //定时器初始化
  9. TA0CCTL0 = CCIE; //使能CCR0中断
  10. TA0CCR0 = 500000; //设置计数值,500000*1us=500ms
  11. TA0CTL = TASSEL_2 + MC_1 + TACLR; //选择时钟源,选择工作模式
  12. __bis_SR_register(LPM0_bits + GIE); //全局中断,使用‘_EINT();’也可
  13. }
  14. //中断服务函数
  15. #pragma vector = TIMER0_A0_VECTOR
  16. __interrupt void TIMER0_A0_ISR(void)
  17. {
  18. P4OUT ^= BIT7; //每500ms,引脚输出取反
  19. }

代码二:波形测试

功能描述

        设置一个定时器中断,并在中断服务例程中切换两个引脚的输出状态,从而产生PWM(脉宽调制)信号。这种技术广泛应用于电机控制、LED亮度调节等领域

代码实现(有详细注释)

  1. #include"msp430.h"
  2. void main(void)
  3. {
  4. WDTCTL = WDTPW+WDTHOLD;
  5. P1DIR |= BIT1; //设置P1.0为输出
  6. P8DIR |= BIT2;
  7. TA0CCTL0 = CCIE; //使能中断
  8. TA0CCR0 = 5000;
  9. TA0CTL = TASSEL_2 + MC_1 + TACLR; //设置TA0,时钟源为SMCLK,计数模式为增计数,清零
  10. __bis_SR_register(LPM0_bits + GIE); //进入低功耗,打开全局中断
  11. __no_operation();
  12. }
  13. #pragma vector = TIMER0_A0_VECTOR
  14. __interrupt void TIMER0_A0_ISR(void) //任意选定管脚输出PWM波
  15. {
  16. P1OUT ^= BIT1;
  17. P8OUT ^= BIT2;
  18. }

测试输出

修改TA0CCR0的值,如下,测量P1.2的输出波形,

  1. TA0CCR0 = 500          //T=500us,f = 1053Hz
  2. TA0CCR0 = 1000         //T=1000us,f = 523.6Hz
  3. TA0CCR0 = 5000         //T=5000us,f = 105.3Hz
  4. TA0CCR0 = 20000        //T=50000us,f = 10.5Hz

       1. 当TA0CCR0 = 500时,T=500us,示波器测试结果如下图:

        2.当TA0CCR0 = 1000时,T=1ms,示波器测试结果如下:

        3.当TA0CCR0 = 5000时,T=5ms,示波器测试结果如下:

        4.当TA0CCR0 =20000时,T=20ms,示波器测试结果如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/656514
推荐阅读
相关标签
  

闽ICP备14008679号