CC2530裸机编程-定时器1

2024-06-18 14:38
文章标签 裸机 cc2530 定时器 编程

本文主要是介绍CC2530裸机编程-定时器1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 测试端口LED的配置

//以P0_6端口为例
#define LED P0_6void Hal_LEDInit(void)
{P0SEL &= ~0xC0; //通用IOP0DIR |= 0xC0;  //输出模式LED = 0;//初始状态为灭
}

2.设置系统主时钟

void Hal_SystemClockInit(void)
{CLKCONCMD &= ~0x40;       //设置系统时钟源为32MHZ的晶振while(CLKCONSTA & 0x40);  //等待晶振稳定为32MHZCLKCONCMD &= ~0x07;       //设置系统主时钟频率为32MHZCLKCONCMD |= 0x38;        //定时器标记输出为250KHZSLEEPCMD |= 0x04;         //关闭不使用的RC振荡器
}

3.自由运行模式下的Timer1配置

void Hal_Timer1Init(void)
{T1CTL = 0x01; //1分频,自由运行(0x0000-0xFFFF反复计数)T1STAT= 0x21; //通道0, 中断有效   
}

4.Timer1中断函数

#pragma vector=T1_VECTOR 
__interrupt void T1_IRQ(void)
{LED = !LED;T1IF=0;
}

5.主函数

void main(void)
{Hal_SystemClockInit();Hal_Timer1Init();Hal_LEDInit();IEN1 |=0x02;             //P0口中断使能EA = 1;                  //使能全局中断while(1);
}

6.完整源代码

/****************************************** Filename:       hal_timer1.c* Date:           2017-09-08* Author:         By Kevin** Description:    Timer1 Experiment
****************************************/#include <ioCC2530.h>#define LED P0_6void Hal_SystemClockInit(void);
void Hal_Timer1Init(void);
void Hal_LEDInit(void);void main(void)
{Hal_SystemClockInit();Hal_Timer1Init();Hal_LEDInit();IEN1 |=0x02;             //P0口中断使能EA = 1;                  //使能全局中断while(1);
}#pragma vector=T1_VECTOR 
__interrupt void T1_IRQ(void)
{LED = !LED;T1IF=0;
}void Hal_SystemClockInit(void)
{CLKCONCMD &= ~0x40;       //设置系统时钟源为32MHZ的晶振while(CLKCONSTA & 0x40);  //等待晶振稳定为32MHZCLKCONCMD &= ~0x07;       //设置系统主时钟频率为32MHZCLKCONCMD |= 0x38;        //定时器标记输出为250KHZSLEEPCMD |= 0x04;         //关闭不使用的RC振荡器
}void Hal_Timer1Init(void)
{T1CTL = 0x01; //1分频,自由运行(0x0000-0xFFFF反复计数)T1STAT= 0x21; //通道0, 中断有效   
}void Hal_LEDInit(void)
{P0SEL &= ~0x40; //通用IOP0DIR |= 0x40;  //输出模式LED = 0;//初始状态为灭
}

7.分析

该例程是利用Timer1中断实现LED灯的闪烁,那么该配置下LED闪烁的频率是多少呢?或者说怎样设置LED闪烁的频率呢?

该例程中系统时钟选择是32MHz的外部石英晶振,定时器的标记频率设置为250kHz,计数器的数值以250khz的频率增加,即计数器的数值每隔 1250000s(=4us) 增加1。例程中定时器1为自由运行模式,从0x0000到0xFFFF反复计数,计数到0xFFFF时就产生一次中断并将计数器的值清零,那么产生一次中断的精确时间间隔 Δt=4×(655350+1)=262144us 。每进一次中断,LED灯的状态就改变一次,则两次中断就是LED灯闪烁的一个周期 T ,则有T=2×Δt=524288us=524.288ms,那么LED灯闪烁的频率 F=1T=10.524288Hz=1.9073486328125Hz ,下面来看一下IO口P0_6输出的波形验证一下其正确性:
实际输出波形
由图可知,实际输出波形的周期 T=0.5244047917s ,频率 F=1.906923842Hz ,从测量结果来看,实际输出与理论计算是高度一致的。

这篇关于CC2530裸机编程-定时器1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072278

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

16.Spring前世今生与Spring编程思想

1.1.课程目标 1、通过对本章内容的学习,可以掌握Spring的基本架构及各子模块之间的依赖关系。 2、 了解Spring的发展历史,启发思维。 3、 对 Spring形成一个整体的认识,为之后的深入学习做铺垫。 4、 通过对本章内容的学习,可以了解Spring版本升级的规律,从而应用到自己的系统升级版本命名。 5、Spring编程思想总结。 1.2.内容定位 Spring使用经验

又看见定时器了,怎么这么想写了~~

1.scheduleUpdate(); 与virtual void update(float dt);   联合使用,就是每隔一段时间就调用一次update,实际上是每一帧都调用一次updata方法,scheduleUpdate();方法相当于开启了定时器。 2.schedule的作用和scheduleUpdate差不多,只是这个其实更好用一些,这个可以只是指定调用的方法,系统默认每一帧都调用一

IPython小白教程:提升你的Python交互式编程技巧,通俗易懂!

IPython是一个增强的Python交互式shell,它提供了丰富的功能和便捷的交互方式,使得Python开发和数据分析工作更加高效。本文将详细介绍IPython的基本概念、使用方法、主要作用以及注意事项。 一、IPython简介 1. IPython的起源 IPython由Fernando Pérez于2001年创建,旨在提供一个更高效的Python交互式编程环境。 2. IPyt

从《深入设计模式》一书中学到的编程智慧

软件设计原则   优秀设计的特征   在开始学习实际的模式前,让我们来看看软件架构的设计过程,了解一下需要达成目标与需要尽量避免的陷阱。 代码复用 无论是开发何种软件产品,成本和时间都最重要的两个维度。较短的开发时间意味着可比竞争对手更早进入市场; 较低的开发成本意味着能够留出更多营销资金,因此能更广泛地覆盖潜在客户。 代码复用是减少开发成本时最常用的方式之一。其意图

Java并发编程—阻塞队列源码分析

在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。   在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了D

剑指offer—编程题7(用两个栈实现一个队列)

题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。 代码如下: [java]  view plain copy print ? public class Test07 {       /**       * 用两个栈模拟的队列       *

剑指Offer—编程题4 ( 替换空格)

一、题目:替换空格 题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”。    在网络编程中,如果URL参数中含有特殊字符,如空格、'#'等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在'%'后面跟上ASCII码的两位十六进制的表示。