CC2530-定时器控制LED闪烁

定时器控制LED闪烁

定时计数器的概念

定时计数器是一种能够对时钟信号或外部输入信号进行计数的装置

计数值设定要求时便向CPU提出处理请求,从而实现定时或记住功能的外设

定时计数器的作用

实现定时和计数,且在工作过程中不需要CPU的过多参与,解放CPU,提高使用效率

与延时的比较

延时函数不断占用CPU执行空循环,降低了工作效率

使用定时计数器来延时,CPU可以同时执行其他任务

工作原理

最基本的工作原理是进行计数

定时计数器的而核心是一个计数器,可以进行加减1的计数

最大值变成0或者从0到最大值被称作溢出

任务要求

采用定时器1控制LED1,使之每5s闪烁一次。

CC2530定时计数器

CC2530共有四个定时计数器:

初始化定时器

使能系统总中断

IEN0寄存器的EA(第7)位

EA=1

使能定时器1中断

IEN1寄存器的TEIE(第1)位

TEIE = 1

设定计时器1的标记频率

image-20240417151300278

T1CTL = 0x05

启动定时器1,设置八分频,自由运行模式

使能定时器1溢出中断(可省略)

代码

#include "ioCC2530.h"

#define D3 P1_0

unsigned int count; // 中断次数变量

// 初始化LED
void initLed(){
    // 方向选择
    P1DIR |= 0x01;  // 设置P1_0
    D3 = 0;
}

// 中断初始化
void _interrupt(){
    EA = 1;       // 开总中断
    T1IE = 1; // 使能定时器1中断
    // 设定标记频率
    T1CTL = 0x05; // 启动定时器1,设置8分频,自由运行模式
}

// 中断服务程序
#pragma vector = T1_VECTOR
__interrupt void T1_ISR(void){
    IRCON = 0x00; // 清空中断标志位
    if(count > 300){
        count = 0x00;
        D3 = !D3;
    }
    else{
        count ++;
    }
}

void main() {
    CLKCONCMD &=~0x7f; // 设置晶振为32mhz速度
    while(CLKCONSTA & 0x40);//等待晶振稳定
    initLed(); // 初始化LED
    _interrupt(); // 初始化中断
    while(1){
    }
}

$$
\text{溢出时间} = \frac{1}{\frac{\text{标记频率}}{\text{分频系数}}} \times 2^{\text{定时器位数}}
$$

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
';