CC2530学习(三)定时器定时(轮询)


文章目录

      • 一、硬件连接
      • 二、寄存器描述
        • (一)、定时器模式配置
        • (二)、分频值
        • (三)、定时器比较模式配置
        • (四)、计数值配置
        • (五)、定时值的计算公式
        • (六)、中断标志位
      • 三、示例代码
      • 四、实验现象

一、硬件连接
LED灯阴极接地,通过三极管控制阳极导通状态。采用定时器1进行定时器中断实验。
二、寄存器描述
配置定时器主要修改定时器的分频值、模式和计数值。
(一)、定时器模式配置 当定时器设置为比较模式(compare mode)时才能通过设置的比较值产生溢出中断。主要通过寄存器T1CCTL0的MODE来配置,此处应设置为1。
CC2530学习(三)定时器定时(轮询)
文章图片

(二)、分频值 通过配置T1CTL的DIV[1:0]来选择,由于CC2530主频为32MHz,如果不配置的话默认是2分频即16MHz。当这里的分频值DIV选择11的话则分频的结果是16MHz/128即125KHz。
【CC2530学习(三)定时器定时(轮询)】CC2530学习(三)定时器定时(轮询)
文章图片

(三)、定时器比较模式配置 如果选择的模式是自动重装载,则对应T1CTL的MODE[1:0]需要设置为01,计数值从0上升到0xFFFF,计数溢出会进入中断且清空计数值。而如果MODE[1:0]设置为10,则定时器会计数到用户自定义的计数值,同样是计数溢出则进入中断。具体寄存器如上图所示。
(四)、计数值配置 如果定时器配置的模式为10的话则需要进行计数值的配置,主要配置寄存器T1CC0H和T1CC0L,它们两者分别存储定时器计数比较值的高八位和低八位。
CC2530学习(三)定时器定时(轮询)
文章图片

(五)、定时值的计算公式 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来判断。
CC2530学习(三)定时器定时(轮询)
文章图片

三、示例代码
#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亮一次。

    推荐阅读