4MSP430定时执行器
摘要: 一刚开始未写好就提交了,,,,,,,,此次再来一个全的实际上针对一般定时执行器吧!无非,,,,定时执行,,,,造成终断,,,,关键点难题也不讲过,,,,看着我下边的基础理论详细介绍一部分,,,我更重视...
一刚开始未写好就提交了,,,,,,,,此次再来一个全的
实际上针对一般定时执行器吧!无非,,,,定时执行,,,,造成终断,,,,关键点难题也不讲过,,,,看着我下边的基础理论详细介绍一部分,,,我更重视于实战演练解读,,由于自身学习培训也喜爱听一步一步实战演练解读的.随后再.
看一下实际的基础理论材料,,,,,,随后就,,,,,明白了,,,,会了
CCR0 和 TACCR0 是一个哈,,,,,,,,别别处见到CCR0就蒙了哈,,,它是设定的计数较为值,,
430的定时执行器能挑选数字时钟来源于,,实际看看面,,,假如不挑选那麼便是用一个引脚(特殊的)的键入PWM做为他的数字时钟了
先上菜----外界引脚来四个升高沿就进到下边的终断涵数
本质----內部电子计数器TAR在计数到CCR0(TACCR0)时就进去了
__interrupt void Timer_A0 (void) //定时执行器A0终断系统服务 P4OUT ^= BIT1; //P4_1引脚翻转 }
随后再说一个升高沿,,便会进到---外溢终断-------能够撤销,不许他有外溢终断
本质----內部电子计数器TAR在计数到CCR0后,,再说一个升高沿就变为 0 了,,,随后就就进去了
__interrupt void Timer_A1 (void) //A1,A2,外溢终断都是进 switch( TAIV ) case TAIV_TAIFG://外溢终断 P4OUT ^= BIT1; //P4_1翻转 break; }
下边是详细的程序
P1_0引脚,来四个升高沿TAR变成4,,P4_1翻转,,,再说一个沿TAR变成0,再说四个,TAR变成4,,P4_1翻转,再说一个沿TAR变成0,再说四个,TAR变成4,,P4_1翻转,,,循环系统
因此发觉第一次来四个P4_1翻转,,,,之后的全是来五个再翻转了,,因此假如你要来四个翻转,,那麼TACCR0应当为3
#include io430.h void main( void ) // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD;//关掉看门狗 P4DIR |= BIT1; TACTL |= TASSEL_0 + MC_1+ TAIE + TACLR;//数字时钟外界引脚键入,增计数方式,造成外溢终断(能够撤销),消除一下外溢,,实际上认真细致一点嘛,先消除再聊 TACCR0 = 3;//计标值3 TACCTL0 = CCIE;//容许终断 __enable_interrupt();//开启总终断 #pragma vector = TIMERA0_VECTOR __interrupt void Timer_A0 (void) //定时执行器A0终断系统服务 P4OUT ^= BIT1; #pragma vector = TIMERA1_VECTOR __interrupt void Timer_A1 (void) //A1,A2,外溢终断都是进 switch( TAIV ) case TAIV_TAIFG://外溢终断 P4OUT ^= BIT1; break; }
如今除掉外溢终断
#include io430.h void main( void ) // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD;//关掉看门狗 P4DIR |= BIT1; TACTL |= TASSEL_0 + MC_1+TACLR;//外界引脚方式,,增计数方式 TACCR0 = 3;//计标值3,实际上是4,,由于有一个外溢变成0 TACCTL0 = CCIE;//容许终断 __enable_interrupt();//开启总终断 #pragma vector = TIMERA0_VECTOR __interrupt void Timer_A0 (void) //定时执行器A0终断系统服务 P4OUT ^= BIT1; }
下边是一些实际表述
#include io430.h void main( void ) // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD;//关掉看门狗 P4DIR |= BIT1+BIT2; TACTL |= TASSEL_0 + MC_2+TACLR;//外界引脚方式,,持续计数方式 TACCR0 = 4;//计标值4 TACCTL0 = CCIE;//容许终断 __enable_interrupt();//开启总终断 #pragma vector = TIMERA0_VECTOR __interrupt void Timer_A0 (void) //定时执行器A0终断系统服务 P4OUT ^= BIT1; }
能够那样
#include io430.h void main( void ) // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD;//关掉看门狗 P4DIR |= BIT1+BIT2; TACTL |= TASSEL_0 + MC_2+TACLR;//外界引脚方式,,持续计数方式 TACCR0 = 4;//计标值4 TACCTL0 = CCIE;//容许终断 __enable_interrupt();//开启总终断 #pragma vector = TIMERA0_VECTOR __interrupt void Timer_A0 (void) //定时执行器A0终断系统服务 TACCR0 = TACCR0 + 4;//******这儿,这儿***********// P4OUT ^= BIT1; }
由于是持续计数方式,因此能够用TACCR1了,,,,
#include io430.h void main( void ) // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD;//关掉看门狗 P4DIR |= BIT1+BIT2; TACTL |= TASSEL_0 + MC_2+TACLR;//外界引脚方式,,持续计数方式 TACCR0 = 4;//计标值4,TAR==TACCR0进到它的终断涵数 TACCTL0 = CCIE;//容许终断 TACCR1 = 6;//计标值6,TAR==TACCR1进到它的终断涵数 TACCTL1 = CCIE;//容许终断 __enable_interrupt();//开启总终断 #pragma vector = TIMERA0_VECTOR __interrupt void Timer_A0 (void) //定时执行器A0终断系统服务 TACCR0 = TACCR0 + 4;//******这儿,这儿***********// P4OUT ^= BIT1; #pragma vector = TIMERA1_VECTOR __interrupt void Timer_A1 (void) //A1,A2,外溢终断都是进(同用) switch( TAIV ) case TAIV_TACCR1://计数 TACCR1 的终断 TACCR1 = TACCR1 + 6; P4OUT ^= BIT2; break; }
即然有外溢终断那麼加上上外溢终断吧
#include io430.h void main( void ) // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD;//关掉看门狗 P4DIR |= BIT1+BIT2+BIT3; TACTL |= TASSEL_0 + MC_2 + TAIE +TACLR;//外界引脚方式,,增计数方式 TACCR0 = 4;//计标值4,TAR==TACCR0进到它的终断涵数 TACCTL0 = CCIE;//容许终断 TACCR1 = 6;//计标值6,TAR==TACCR1进到它的终断涵数 TACCTL1 = CCIE;//容许终断 __enable_interrupt();//开启总终断 #pragma vector = TIMERA0_VECTOR __interrupt void Timer_A0 (void) //定时执行器A0终断系统服务 TACCR0 = TACCR0 + 4;//******这儿,这儿***********// P4OUT ^= BIT1; #pragma vector = TIMERA1_VECTOR __interrupt void Timer_A1 (void) //A1,A2,外溢终断都是进(同用) switch( TAIV ) case TAIV_TACCR1://计数 TACCR1 的终断 TACCR1 = TACCR1 + 6; P4OUT ^= BIT2; break; case TAIV_TAIFG://外溢终断,,,,ffff变0时 P4OUT ^= BIT3; break; }
下边是基础理论专业知识的详细介绍,,,看过上边再看一下下边,,,,,
通俗化来说,430F249有三个震荡器,LFXT1,,XT2,,DCO,
內部的主数字时钟MCLK,,分系统数字时钟SMCLK和輔助数字时钟ACLK是由这三个震荡器来源于出示的.
MCLK:主数字时钟
能够挑选3个震荡器(LFXT1、XT2、DCO)之一,或他们1/2/4/8分频后做为其数据信号源;
SMCLK:分系统数字时钟
能够挑选两个震荡器(XT2、DCO),或他们1/2/4/8分频后做为其数据信号源;
ACLK:輔助数字时钟
只有由LFXT1数字时钟数据信号或1/2/4/8分频后做为其数据信号源。
有三个呢!!!真多
自打blog能够拷贝黏贴照片,觉得简直太便捷了