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能够拷贝黏贴照片,觉得简直太便捷了



联系我们

全国服务热线:4000-399-000 公司邮箱:343111187@qq.com

  工作日 9:00-18:00

关注我们

官网公众号

官网公众号

Copyright?2020 广州凡科互联网科技股份有限公司 版权所有 粤ICP备10235580号 客服热线 18720358503

技术支持:h5制作网站