定时器1使用总结

定时器1使用总结

ID:38236763

大小:661.74 KB

页数:6页

时间:2019-05-27

定时器1使用总结_第1页
定时器1使用总结_第2页
定时器1使用总结_第3页
定时器1使用总结_第4页
定时器1使用总结_第5页
资源描述:

《定时器1使用总结》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、定时器1使用总结——溢出中断1目的说明实现定时器最简单的溢出中断,结合我手头的开发板,使得位于P10的LED灯,以2HZ的速度不断闪烁。这样的实验还是非常亲切的,让我想起了第一次在51上实现了这样的代码,自己第一次在CC2430上实现,依然非常激动。2使用方法概述需要使用定时器的中断,需要知道如何操作才可以产生这个中断请求。数据手册中提到需要两个条件,第一IEN1.T1EN需要置位,第二TIMIF.OVFIM需要置位。代码中使用modulo、模式,使用该模式可以改变定时器溢出的频率。3代码总览先

2、来看看所有的代码,然后再分步解释。//头文件#include"hal.h"//函数声明voidTimer1_Init();//主函数voidmain(){//初始化外部时钟SET_MAIN_CLOCK_SOURCE(CRYSTAL);//P1_0输出IO_DIR_PORT_PIN(1,0,IO_OUT);//初始化定时器1Timer1_Init();while(1){}}voidTimer1_Init(){//定时器1复位TIMER1_INIT();//设定定时器相关参数//128分频00001

3、100T1CTL=0x0c;//溢出值低8位T1CC0L=0x24;//溢出值高8位T1CC0H=0xF4;//定时器T1溢出中断使能TIMER1_ENABLE_OVERFLOW_INT(TRUE);//定时器T1中断使能INT_ENABLE(INUM_T1,INT_ON);//全局中断使能INT_GLOBAL_ENABLE(INT_ON);//启动定时器1TIMER1_RUN(TRUE);}//定时器1中断函数#pragmavector=T1_VECTOR__interruptvoidTime

4、r1_ISR(void){//检查中断标志位if(T1CTL&0x10){//LED灯反转P1_0=!P1_0;//清中断标志T1CTL&=~0x10;}}4主函数说明//初始化外部时钟SET_MAIN_CLOCK_SOURCE(CRYSTAL);//P1_0输出IO_DIR_PORT_PIN(1,0,IO_OUT);//初始化定时器1Timer1_Init();操作CC2430之前,先指定系统时钟,这是一个好习惯。由于定时器时钟和系统时钟频率有关,所以必须要设定好系统的时钟。在SET_MAIN

5、_CLOCK_SOURCE()在这个动作宏中,把系统时钟设定为32MHz。(该宏前面的文章已经提到,不多做说明)请注意定时器的时钟频率默认为16MHz,而不是32MHz。请注意CLKCON的5:3位,该3位组成了一个定时器时钟的分频器,该参数决定了定时器的时钟频率。在定时器1的相关操作中还有定时器时钟的分频系数设置,那是定时器1特有的,这里的定时器分频参数是分频了定时器1,3,4的时钟。相见数据手册或下图:为了操作IO口,定义LED相关的IO口为输出。IO_DIR_PORT_PIN()的相关操作

6、如下面的代码所示:#defineIO_DIR_PORT_PIN(port,pin,dir)do{if(dir==IO_OUT)P##port##DIR

7、=(0x01<<(pin));elseP##port##DIR&=~(0x01<<(pin));}while(0)该宏操作了PXDIR寄存器,定义了IO口的方向。5定时器初始化操作TIMER1_INIT()把定时器1的寄存器全部复位。具体的代码如下:#defineTIMER1_INIT()do{T1CTL=0x00;T1CCTL

8、0=0x00;T1CCTL1=0x00;T1CCTL2=0x00;TIMIF&=~0x40;}while(0)从这个代码中也可以看出定时器1的操作和哪些寄存器有关。具体的定义可以查看数据手册,这里不多做说明。6设定定时器中断频率操作代码如下//128分频00001100T1CTL=0x0c;//溢出值低8位T1CC0L=0x24;//溢出值高8位T1CC0H=0xF4;由于CC2430的运行速度比较快,所以需要对定时器1进行分频。由于T1CTL在前面的函数中已经被全部复位,所以可以舒服的

9、操作T1CTL寄存器。在这里把系统时钟设定为128分频,定时器T1的运行速度只有125K。这个速度对于0.5闪烁来说,还是非常快的。接着设定T1CC0寄存器。这个寄存器还是非常特殊的。请注意,T1CC0在modulo模式和up-down模式中,始终作为定时器T1计数的最大值。数据手册上说定时器1有3个比较匹配中断,其实这个和AVR的定时器1有的两个比较匹配时一样的,因为CC2430没有一个专用寄存器储存计数的最大值,那么定时器1的比较通道0就“牺牲”了比较通道的作用。所以要产生两路频率指定的PW

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。