CC2530学习(三)定时器定时(轮询)
文章目录
- 一、硬件连接
- 二、寄存器描述
- (一)、定时器模式配置
- (二)、分频值
- (三)、定时器比较模式配置
- (四)、计数值配置
- (五)、定时值的计算公式
- (六)、中断标志位
- 三、示例代码
- 四、实验现象
一、硬件连接
LED灯阴极接地,通过三极管控制阳极导通状态。采用定时器1进行定时器中断实验。
二、寄存器描述
配置定时器主要修改定时器的分频值、模式和计数值。
(一)、定时器模式配置 当定时器设置为比较模式(compare mode)时才能通过设置的比较值产生溢出中断。主要通过寄存器T1CCTL0的MODE来配置,此处应设置为1。
文章图片
(二)、分频值 通过配置T1CTL的DIV[1:0]来选择,由于CC2530主频为32MHz,如果不配置的话默认是2分频即16MHz。当这里的分频值DIV选择11的话则分频的结果是16MHz/128即125KHz。
【CC2530学习(三)定时器定时(轮询)】
文章图片
(三)、定时器比较模式配置 如果选择的模式是自动重装载,则对应T1CTL的MODE[1:0]需要设置为01,计数值从0上升到0xFFFF,计数溢出会进入中断且清空计数值。而如果MODE[1:0]设置为10,则定时器会计数到用户自定义的计数值,同样是计数溢出则进入中断。具体寄存器如上图所示。
(四)、计数值配置 如果定时器配置的模式为10的话则需要进行计数值的配置,主要配置寄存器T1CC0H和T1CC0L,它们两者分别存储定时器计数比较值的高八位和低八位。
文章图片
(五)、定时值的计算公式 T = 1/(f/DIV)*CC0
其中T是定时器产生溢出中断的定时值,f为CC2530主频(在配置了系统主频分频为1时是32MHz,默认主频为2分频,即16MHz),DIV由T1CTL[3:2]决定,CC0由T1CC0H和T1CC0L决定。
(六)、中断标志位 定时器1是否产生溢出中断(定时器计数值是否到达CC0)可通过IRCON的第1位定时器1中断标志位T1IF来判断。
文章图片
三、示例代码
#include #define LED P0_1void LED_Init(void)
{
P0SEL &= ~0X02;
//设置P0.1为普通IO口,~代表按位取反,~0x01==0xFE,将最低位设置为0
P0DIR |= 0X02;
//设置P0.1为输出模式
P0INP &= ~0X02;
//设置最低位为0,即配置P0.1为上拉模式
LED = 0;
}void TIM_Init(void)
{
T1CTL = 0X0E;
//从0x0000计数到T1CC0
T1CCTL0 |= 0X04;
T1CC0H = 0XF4;
T1CC0L = 0X24;
//12500 精确的0.5s
}void main(void)
{
LED_Init();
TIM_Init();
while(1)
{
if(IRCON&0X02)//判断是否产生
{
IRCON &= ~0X02;
LED = ~LED;
}
}
}
四、实验现象
LED灯间隔1s亮一次。
推荐阅读
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 2018-02-06第三天|2018-02-06第三天 不能再了,反思到位就差改变
- 第三节|第三节 快乐和幸福(12)
- android第三方框架(五)ButterKnife
- 遇到一哭二闹三打滚的孩子,怎么办┃山伯教育
- 三十年后的广场舞大爷
- 由浅入深理解AOP
- 一百二十三夜,请嫁给我
- 2018年9月5日,星期三,天气晴