CC2430基础——定时器1试验

 

定时器1是一个16位定时器,具有定时器/计数器/脉宽调制功能。它有3个单独可编程 输入捕获/输出比较 信道,每一个信道都可以用来当做PWM输出或用来捕获输入信号的边沿时间(关于什么是输入捕获/输出比较,以及如何实现PWM输出,读者可自行查阅CC2430中文手册)。

 

要求定时器的溢出周期为0.5s。为此,需要计算出相应的溢出值(暂设为N)。

系统时钟频率选为32MHz,提供给定时器的时钟频率默认为16MHz(两者都由特殊功能寄存器 CLKCON 来配置,具体可查阅CC2430中文手册)。

对于定时器1,设置其时钟分频为128分频。

综上所述,可列式如下:

求出N=62500,其十六进制为 0xF424,即需要设置 T1CC0H=0xF4,T1CC0L=0x24 即可 。

 

/*
实验说明:定时器Timer1实验,定时器计数溢出,LED1闪烁
*/

#include <ioCC2430.h>

#define led1 P1_0
#define led2 P1_1

/*系统时钟初始化
-------------------------------------------------------*/
void xtal_init(void)
{
SLEEP &= ~0x04; //都上电
while(!(SLEEP & 0x40)); //晶体振荡器开启且稳定
CLKCON &= ~0x47; //选择32MHz 晶体振荡器
SLEEP |= 0x04;
}

/*LED初始化
-------------------------------------------------------*/
void led_init(void)
{
P1SEL = 0x00; //P1为普通 I/O 口
P1DIR |= 0x03; //P1.0 P1.1 输出

led1 = 1; //关闭LED1
led2 = 0; //点亮LED2 作为运行灯提示

}

/*T1初始化
-------------------------------------------------------*/
void timer1_init(void)
{

T1IE=1; //开T1中断
OVFIM=1; //开T1溢出中断

T1CC0L=0x24; //溢出值低8位
T1CC0H=0xF4; //溢出值高8位

T1CTL = 0x0e; //128分频;modulo模式(0x0000->T1CC0);开始运行;
T1IF=0; //清中断标志

EA=1; //开总中断
}

/*主函数
-------------------------------------------------------*/
void main(void)
{
xtal_init();//系统时钟初始化
led_init(); //LED初始化
timer1_init();//T1初始化

while(1); //等待溢出中断
}

/*T1终端服务子程序
-------------------------------------------------------*/
#pragma vector=T1_VECTOR
__interrupt void T1_ISR(void)
{
EA=0; //关中断

led1 = !led1; //LED灯反转

EA=1; //开中断

T1CTL &= ~0x10; //清中断标志
}

posted @ 2012-07-22 23:48  平湖之下  阅读(605)  评论(0编辑  收藏  举报