430的定时器的操作也是通过对定时器相关的寄存器的配置来操作的。
Timer_A主要的寄存器有控制寄存器TACTL,计数器TAR,捕获比较控制寄存器TACCTLx捕获比较寄存器TACCRx,中断向量寄存器TAIV。
TACTL寄存器主要是对定时器的基本模式等进行操作、TAR为一个16位的计数器、TACCTLx用于控制捕获/比较模式。TAIV用于中断标志。
以下以实例来看一下:
/*******************************************************************************
** File Name : main
** Author : LcCode
** Description : Time_A定时示例
*******************************************************************************/
#include <msp430x14x.h>
void main()
{
WDTCTL = WDTPW + WDTHOLD; //Stop watchdog
P2DIR |= 0XFF;
P2OUT |= 0XFF;
CCTL0 |= CCIE; //设置定时器CCR0中断使能
CCR0 = 0xffff; //设置中断间隔
TACTL = TASSEL_2 + MC_2; //设置Timer_A的时钟源为SMCLK、工作模式为Continuous模式
_BIS_SR(LPM0_bits + GIE); //MAP430进入低功耗模式LPM0并使能全局中断
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A ()
{
P2OUT ^= 0xff;
CCR0 += 0xffff;
}
在编写过程中也是挺痛苦的,在msp430x14x.h这个头文件中有很多定义的东西,比如在写CCTL0 |= CCIE;CCR0 = 0xffff;就不太清楚是什么鬼,这里应该是对TACCTLx和TACCRx寄存器的配置才对,查看了头文件才知道,这些寄存器已经被宏定义了。其实很多的东西都已经在头文件里面定义好了,但我都没找到一份这个头文件的说明,在数据手册里面也没有写。我都觉得以后写的时候都不需要用到头文件了,自己去配置寄存器可能会更方便点,毕竟你不知道它到底定义了什么,没有定义什么。用到的时候你不知道这个寄存器在它这里到底该怎么去使用。说去查看头文件,在刚开始学的时候,都不知道各个寄存器是干嘛的,查看起来会很痛苦的。
当然,学习本就是痛苦加快乐的,那就继续痛苦下去吧!