- 5
- 0
- 约6.35千字
- 约 6页
- 2017-07-05 发布于湖北
- 举报
定时器11 使用总结——溢出中断
1 的说明
实现实现 时时器器最最简简单单的的溢溢出出中断中断,结合我 头的开发板,使得位于P10 的LED 灯,,以2HZ
的速度不断闪烁。这这样样的的实验实验还还是是非非常常亲亲切的切的,让我想起了第一次在51 上上实现实现了了这这样样的代的代
码,自己第一次在CC2430 上实现上实现,依然非常激动。
2 使用方法概述
需要使用 时器的中断,需要需要知知道道如如何何操操作作才才可可以以产生产生这这个个中中断断请求请求。数数据据手册手册中中提到提到
需要两个条件,第一IEN1.T1EN 需需要要置位置位,第二T IMIF.OVFIM 需要置位。代码中使用modulomodulo、
模式,使使用用该该模模式式可可以以改改变变 时时器器溢溢出出的的频率频率。
3 代码总览
先来看看所有的代码,然然后再分后再分步解释。
//头文件
#include hal.h
// 函数声明
void Timer1_ Init();
//主函数
void main(){
//初始化外部时钟
SSETET__ MMAAIINN__CCLLOOCCK_K_SOUSOURCRCEE((CCRYRYSSTTAALL););
// P1_0 输出
IOIO__ DDIIR_R_PPOORRTT__ PPIINN((11,,00,,IOIO__OOUUTT););
//初始化 时器1
Timer1_ Init();
while(1){
}
}
void Timer1_ Init(){
// 时器1 复位
T IMER1_ INIT();
//设 时器相关参数
//128 分频0000 1100
T 1CTL = 0x0c;
//溢出值低8 位
T 1CC0L=0x24;
//溢出值高8 位
T 1CC0H=0xF4;
// 时器T1 溢出中断使能
T IMER1_ ENABLE_OVERFLOW_ INT(TRUE);
// 时器T1 中断使能
INT_ ENABLE(INUM_T1,INT_ON);
//全局中断使能
INT_GLOBAL_ ENABLE(INT_ON);
//启动 时器1
T IMER1_ RUN(T RUE);
}
// 时器1 中断函数
#pragma vector=T1_VECTOR
__interrupt void Timer1_ ISR(void)
{
//检查中断标志位
if(T 1CTL 0x10){
//L ED 灯反转
P1_0 = !P1_0;
//清中断标志
T 1CTL = ~0x10;
}
}
4 主函数说明
//初始化外部时钟
SET_ MAIN_CLOCK_SOURCE(CRYSTAL);
// P1_0 输出
IO_ DIR_PORT_ PIN(1,0,IO_OUT);
//初始化 时器1
Timer1_ Init();
操作CC2430 之前,先先指指 系统系统时钟时钟,这是一个好习惯。由于由于 时时器器时钟时钟和系统和系统时钟频
率有关,所以所以必须必须要要设设 好好系统系统的时钟的时钟。在 SET_ MAIN_CLOCK_SOURCE()在在这个这个动动作作宏宏中中,
把系统时钟设 为32MHz。(该该宏宏前面前面的文的文章章已已经经提到提到,不多做说明)
请注意 时器的时钟频率 默默认为认为16MHz,而不是32MHz。
请注意CLKCON 的5 :3 位, 该3 位组成了一个定时器时钟的分频器,该该参参数数决决 了了
时器的时钟频率。在定时器1 的的相关相关操操作作中中还还有有 时器时器时时钟钟的的分频分频系系数数设设置置,那那是是 时器时器1
特有的,这这里里的的 时时器器分频分频参参数数是是分频分频了了 时器时器1,3,4 的时钟。相见相见数数据据手册手册或下图或下图:
为了操作IO 口, 义LED 相关相关
原创力文档

文档评论(0)