msp430的定时器A 划分几个独立时间间隔

发布者:Yaqi最新更新时间:2015-11-09 来源: eefocus关键字:msp430  定时器  时间间隔 手机看文章 扫描二维码
随时随地手机看文章
TAIV:
 
#define TAIV_TACCR1         (0x0002)   
 
#define TAIV_TACCR2         (0x0004)   
 
#define TAIV_TAIFG          (0x000A)   
 
TIMERA1_VECTOR是一个中断向量,主要处理CCR1,CCR2,以及定时器A溢出的中断标志,而CCR1,CCR2,以及定时器A产生中断是的TAIV是不同的,分别是2,4,10
 
 
 
switch( TAIV ) { case 2: break; case 4: break; case 10: P3OUT ^= BIT4; break; }
 
这一句的意思是,判断是哪个产生中断的,以执行不懂的程序,当然,在里面没写有,但是当你自己去写的时候可自己加进去。
 
CCR0,CCR1,CCR2
 
分别是比较/捕获模块1,2,3的比较/捕获寄存器,一般CCR0用来控制周期。
 
至于具体怎么应用,这是很难解释的,解释了可能你还是不同。最好的办法就是一边写程序,一边查书。
 
 
 
6月2日 周四 晴    定时器A
 
 
 
现在的认识:
 
MSP430 5438 有3个时钟,分别是 TA0、TA1 和TB
 
了解了定时器A的用法:
 
定时器A可以分成几个独立的时间周期。这几个时钟周期共用一个计数器TA1R 或TA0R。
 
 
 
在头文件中可以查到:
 
 
 
#define TIMER1_A1_VECTOR    (48 * 2u)
 #define TIMER1_A0_VECTOR    (49 * 2u)
 
#define TIMER0_A1_VECTOR    (53 * 2u)
#define TIMER0_A0_VECTOR    (54 * 2u)
 
 
 
TIMER0 含  TA0CCR0- TA0CCR4 五个
 
TIMER1 含  TA1CCR0- TA1CCR2 三个
 
TA0CCR0 对应中断向量 A0_VECTOR   
 
TA0CCR1-4 对应中断向量 A1_VECTOR   
 
 
 
 //A0定时器,用于界面处理
  TA0CCTL0 = CCIE;                          // CCR0 interrupt enabled
  TA0CCTL1 = CCIE;                          // CCR1 interrupt enabled//时间周期1使能
  TA0CCTL2 = CCIE;                          // CCR2 interrupt enabled//时间周期2使能
 TA0CCTL3= CCIE;                          // CCR3 interrupt enabled//时间周期3使能
 //TA0CCTL4= CCIE;                          // CCR3 interrupt enabled//时间周期3使能
  TA0CCR0=256;//TA0R 计数到65535才清零。
  TA0CCR1=4096;  //1s
  TA0CCR2=1024; //1/4
  TA0CCR3=8192;  //2s
 
 
 
  TA0CTL = TASSEL_1+ID_3 + MC_2 + TACLR+ TAIE;     // ACLK, 8分频,MC_2:连续模式, clear TAR 
 
 
 
// Timer1 A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A0 (void)
{
 // TA0CCR0 += 64;// Add Offset to CCR0
  TA0CCR0 += 256;// 1/16s Add Offset to CCR0
  if(ReadUART0_new>0)
    ReadUART0_new--;
   if(ReadUART1_new>0)
    ReadUART1_new--;
 
}
 
 
// Timer_A3 Interrupt Vector (TAIV) handler
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR(void)
{
  switch(__even_in_range(TA0IV,14))
  {
  case 0:   
    break;
  case 2:
    TA0CCR1 +=4096;                //1s  Add Offset to CCR1
    SecondReach=1;
    CountToMunite++;
    SecondTimecount++;
    if(waringstatus>0)
    {
      //buzzer();
     // waringlight();
    }
    break;                         // CCR4 not used
  case 4:
    TA0CCR2+= 1024;                // 1/2s Add Offset to CCR2
   // buzzer();
   // waringlight();
    break;
  case 6:
    spark++;
     TA0CCR3+=8192;                // 2s Add Offset to CCR3
  // buzzer();
   // waringlight();
    break;
  case 8:
    break;                         // CCR3 not used
  case 10:
    break;                         // CCR5 not used
  case 12:
    break;                         // Reserved not used
  case 14:                         // overflow
    break;
  default:
    break;
  }
}
 
 
[page]
 
 
 
以下为转载:
 
msp430的定时器
 
对于学习新的单片机来说,就我个人意见在知道基本功能后应该先掌握定时器的用法,可以能帮助你很快的掌握单片机的用法并尽快能进行单片机的应用,所以对于430我也同样先掌握定时器的用法。
 
msp430单片机一共有5种类型的定时器,看门狗定时器(WDT)、基本定时器(Basic Timer1)、8位定时器/计数器(8-bit Timer/Counter)、定时器A(Timer_A)和定时器B(Timer_B)。但是这些模块不是所有msp430型号都具有的功能。
 
1、看门狗定时器(WDT)
 
学过电子的人可能都知道,看门狗的主要功能就是当程序发生故障时能使受控系统重新启动。msp430中它是一个16位的定时器,有看门狗和定时器两种模式。
 
2、基本定时器(Basic Timer1)
 
基本定时器是msp430x3xx和msp430F4xx系列器件中的模块,通常向其他外围提供低频控制信号。它可以只两个8位定时器,也可以是一个16位定时器。
 
3、8位定时器/计数器(8-bit Timer/Counter)
 
如其名字所示,它是8位的定时器,主要应用在支持串行通信或数据交换,脉冲计数或累加以及定时器使用。
 
4、16位定时器A和B
 
定时器A在所有msp430系列单片机中都有,而定时器B在msp430f13x/14x和msp430f43x/44x等器件中出现,基本的结构和定时器A是相同的,由于本人最先熟悉并应用的是定时器A所以在这里就主要谈一下自己对定时器A的了解和应用。
 
定时器A是16位定时器,有4种工作模式,时钟源可选,一般都会有3个可配置输入端的比较/捕获寄存器。并且有8种输出模式。通过8种输出模式很容易实现PWM波。
 
我先给出我的一个应用程序,然后通过程序来书名定时器A的基本用法。程序如下:
 
 
void init_TimerA ( void )
{
CCTL0 = CCIE;                     // 开启比较器0中断
CCR0 = 32768;                    // 1S秒的定时  
CCTL1 = CCIE;                     // 开启比较器1中断
CCR1 = 100;                      // 3.66mS显示延迟
TACTL = TASSEL_1 + MC_1;          // 开启定时器   
}
 
 
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A0(void)
{
time_flag = 1;                   // 时间变动标志
if(time_stop == 1)               // 设置模式标志
    time[0] ++;                    // 秒加1
start_ADC12();                   // 开启AD
}
 
 
#pragma vector = TIMERA1_VECTOR
__interrupt void Timer_A1 ( void )
{
unsigned char tmp;
tmp = TAIV;
 
if ( tmp == 2 )                 // 比较器1中断
{
    led_flag = 1;                 // 刷新显示标志
    CCR1 += 100;                  // 3.35mS
    if ( CCR1 >= 32768 )
      CCR1 -= 32768;
}
if ( tmp == 4 )                 // 比较器2中断
{
    keyread_flag = 1;             // 读取键值标志
    CCR2 += 5000;                 // 152.6mS长按键自加间隔
    if ( CCR2 >= 32768 )
      CCR2 -= 32768;
}   
LPM3_EXIT;                     // 退出低功耗
}
 
定时器A大致可分为四个功能模块:计数器、比较/捕获寄存器0、比较/捕获寄存器 1、比较/捕获寄存器2。计数器是主体它是一个开启和关闭的定时器,如果开启它就是一直在循环计数,只会有一个溢出中断,也就是当计数由0xffff到0 时会产生一个中断。那怎么实现定时功能呢?这就要靠三个比较/捕获寄存器了以后用CCRx表示。CCR0比较特殊,通过他可以改变计数器的最大计数值,也就是当计数器计数到CCR0的值时自动会将计数器清零。但这需要设置相应的工作模式,模式列表如下:
 
0——停止模式,用于定时器的暂停
 
1——增计数模式,计数器计数到CCR0,再清零计数
 
2——连续计数模式,计数器增计数到0xffff,再清零计数
 
3——增/减计数模式,增计数到CCR0,再减计数到0
 
当计数器计数到CCR0时,CCR0单元会产生一个中断。同样当计数器计数到CCR1和CCR2时,两个单元也都会个产生一个中断。这样我们可以通过定时器A得到三个定时时间了。
 
看程序中的定时器初始化模块。CCTLx是相应比较/捕获寄存器的控制寄存器。它可对比较/捕获寄存器进行设置,在这里只用到比较功能,也就是当计数到CCRx时产生中断,由于CCTLx默认的是比较功能,所以一般也就只用到CCIE 这个控制字,就是开启相应比较器的中断。CCRx就是相应比较器的值。TACTL是计数器的控制寄存器,TASSEL_x是时钟源的选择。
 
0——TACLK,使用外部引脚信号作为输入
 
1——ACLK,辅助时钟
 
2——MCLK,系统主时钟
 
3——INCLK,外部输入时钟
 
我暂时之用到ACLK,32.768KHZ。MC_x是工作模式列表为上边的工作模式列表。对TACTL进行模式设置的同时也开启了定时器,要停止只需把MC_0赋值给TACTL就可以。所以这个计数器工作在增计数模式时钟源为ACLK。
 
中断函数比较/捕获寄存器0和比较/捕获寄存器1、2是分开的,CCR0的中断很容易只需在函数中加上自己的中断相应程序就行。但是CCR1和CCR2是公用一个中断函数的,所这就需要识别到底是哪个中断,这可以通过一个寄存器TAIV来识别,
 
2——比较/捕获寄存器1中断
 
4——比较/捕获寄存器2中断
 
10——定时器溢出
 
0——没有中断
 
在这里需要注意的是TAIV在进行读取时会清楚数值,所以为了能分辨两次值,就需要一个中间变量了 。
 
还要注意的是在增加计数模式时CCR1和CCR2的值应该小于CCR0,否则CCR1和CCR2不会产生中断。并且每次CCR1和CCR2中断后要把他重新赋值这样才能保证CCR1和CCR2的中断间隔时间不变。类似语句如下:
 
CCR1 += 100;                  
    if ( CCR1 >= 32768 )
      CCR1 -= 32768;
 
以上就是定时器A的最基本的应用了,以后会结合实际的应用来具体说明的。
 
关键字:msp430  定时器  时间间隔 引用地址:msp430的定时器A 划分几个独立时间间隔

上一篇:msp430的中断优先级和中断嵌套
下一篇:一个字符串,将里面的数字字符和其他字符分开存放的程序

推荐阅读最新更新时间:2024-03-16 14:38

MSP430定时器的使用
通过计算设置周期。 #include msp430f149.h void main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; //WDTCTL = 0X5A80;关狗 CCTL0 = CCIE; //使能CCR0中断 CCR0 = 4095; //设置周期为0.5s TACTL = TASSEL_2 + ID_2 + MC_1; //时钟源的选择,分频,模式 P2DIR = 0XFF; //
[单片机]
MSP430单片机对步进电机的驱动控制设计
单片机实现的步进电机控制系统具有成本低、使用灵活的特点,广泛应用于数控机床、机器人,定量进给、工业自动控制以及各种可控的有定位要求的机械工具等应用领域。步进电机是数字控制电机,将脉冲信号转换成角位移,电机的转速、停止的位置取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,非超载状态下,根据上述线性关系,再加上步进电机只有周期性误差而无累积误差,因此步进电机适用于单片机控制。步进电机通过输入脉冲信号进行控制,即电机的总转动角度由输入脉冲总数决定,而电机的转速由脉冲信号频率决定。步进电机的驱动电路是根据单片机产生的控制信号进行工作。因此,单片机通过向步进电机驱动电路发送控制信号就能实现对步进电机的控制。 1 系统设计原理 步进电
[单片机]
<font color='red'>MSP430</font>单片机对步进电机的驱动控制设计
单片机实现60s定时器
知识: IE寄存器 TCON寄存器 TMOD 寄存器 /***************** 2个定时中断,2个按钮中断 *******************/ #include reg51.h #define SEG P2 //数码管 断码口 #define SCANP P1 //数码管 com扫描口 sbit OC = P0^0; //定义573锁存器使能口,我是用的573驱动7段数码管 sbit PB0=P3^2; //按钮0 sbit PB1=P3^3; //按钮1 /******************** 第一个定时器
[单片机]
单片机实现60s<font color='red'>定时器</font>
STM32通用定时器TIM实现PWM波配置步骤
//1、开启定时器时钟和需要用到的IO口 void Clock_Init(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);//因为准备把PB5口作为输出端口,所以接下来AFIO使能,如果使用默认的PA7 输 //出则不用使能AFIO,但需要使能GPIOA } //2、IO口并重映射TIM3 void GPIO_Out_Init(void) { GPIO_InitTypeDef GPIO_Init
[单片机]
MSP430F249外部中断P1.3口
/****************************************************************** ** ** File : DExternInterrupt.c | Interrupt | ** Version : 1.0 ** Description : Extern Interrupt ** Author : LightWu ** Date : 2013-4-16
[单片机]
MSP430F5529 DriverLib 库函数学习笔记(十五)SFR 模块
平台:Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) API (机翻) 特殊函数寄存器API提供了一组用于使用MSP430Ware SFR模块的函数。提供了启用和禁用中断和控制~ RST/NMI引脚的功能。 SFR模块可以使设备的其他外设产生中断。 SFR APl被分成两组: SFR管理中断的函数 SFR 管理RST/NMI引脚控制的函数 SFR管理中断的函数 SFR_enableInterrupt(uint8_t interruptMask) //启用选定
[单片机]
基于CCS工程MSP430串口升级(一)
第一次接触MSP430的芯片,第一次使用CCS开发环境,花了将近一个星期的时间,才把MSP430串口升级做出来。 同样分成BOOT,APP,上位机,三个部分来讲解。 BOOT 在lnk_msp430fg479.cmd中修改BOOT Flash的起始地址(0xF000~0xFFE0),将近4K的Flash MEMORY { SFR : origin = 0x0000, length = 0x0010 PERIPHERALS_8BIT : origin = 0x0010, length = 0x00F0 PERIPHERALS_16BIT : origin = 0x0100, len
[单片机]
基于CCS工程<font color='red'>MSP430</font>串口升级(一)
基于MSP430单片机的便携式PID参数整定仪的实现
0 引言 PID控制是最常的控制策略,在工业过程控制中90%以上的控制回路具有PID结构。PID控制之所以被广泛应用主要是因为它算法简单,在实际中容易被理解和实现,而且许多高级控制都以PID控制为基础。但是由于环境的变化,使被控对象具有时变性,参数经过一段时间以后会 出现性能欠佳、适应性变差、控制效果下降等情况。因此,寻求参数自动整定技术,以适应复杂工况及高性能指标的控制要求,是实现节能优化控制的重要手段,具有重大的工程实践意义。 1 自整定过程原理 本文主要研究了一种手持式的PID参数整定仪器,此整定仪具有整定单变量和双变量的双重功能,控制系统主要采用低能耗的MSP430微控制器,软件部分采用的软件开发平台是IAR MSP
[单片机]
基于<font color='red'>MSP430</font>单片机的便携式PID参数整定仪的实现
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved