文章目录
-
-
- 一、硬件连接
- 二、寄存器描述
-
- (一)、定时器模式配置
- (二)、分频值
- (三)、定时器比较模式配置
- (四)、计数值配置
- (五)、定时值的计算公式
- (六)、中断标志位
- 三、示例代码
- 四、实验现象
-
一、硬件连接
LED灯阴极接地,通过三极管控制阳极导通状态。采用定时器1进行定时器中断实验。
二、寄存器描述
配置定时器主要修改定时器的分频值、模式和计数值。
(一)、定时器模式配置
当定时器设置为比较模式(compare mode)时才能通过设置的比较值产生溢出中断。主要通过寄存器T1CCTL0的MODE来配置,此处应设置为1。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL4FkeNBzaU1keNpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL0AjN4IDN0ADM5ITMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
(二)、分频值
通过配置T1CTL的DIV[1:0]来选择,由于CC2530主频为32MHz,如果不配置的话默认是2分频即16MHz。当这里的分频值DIV选择11的话则分频的结果是16MHz/128即125KHz。
(三)、定时器比较模式配置
如果选择的模式是自动重装载,则对应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 <ioCC2530.h>
#define LED P0_1
void 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亮一次。