cc2530裸机编程系列笔记1--定时器Timer1模模式的程序设计

发布者:Mengyun最新更新时间:2019-09-04 来源: eefocus关键字:cc2530  裸机编程  定时器  Timer1 手机看文章 扫描二维码
随时随地手机看文章

定时器/计数器是单片机的几大重要资源之一,而cc2530的定时器/计数器与普通的51系列单片机相比,工作模式增加了。通过学习手册可知cc2530的定时器/计数器有三种工作模式,风别为自由模式、模模式和正计数/倒计数模式。无论哪种模式,均可以采用查询和中断两种方式使用定时器的。本专题讲述cc2530定时器/计数器处于模模式时的编程方法。


首先是用查询的方式来使用Timer1定时器。使用Timer定时器时,首先要对该定时器进行初始化,代码如下:


void INIT_Timer1()

  T1CTL = 0x00;     //1分频、停止运行

  T1CTL = 0x0e;     //128分频 模模式

  T1CCTL0 |= 0x04;  //设定timer1通道0输出比较模式

  T1CC0L = 0x24;

  T1CC0H = 0xF4;

  IRCON &= ~0x02;

}


很容明显可以看出在使用Timer1时,我们要用到T1CTL、T1CCTL0、T1CC0L、T1CC0H及IRCON这五个寄存器。T1CTL是控制寄存器,用于①设置分频器划分值如f/8或f/128等,这里的f是标记频率。②定时器三种模式的选择。T1CC0L、T1CC0H这两个寄存器存放的是计数的终值(计数记到该值,设置中断标志位,或产生中断)IRCON中则为中断标志位。之所以写出代码

IRCON &= ~0x02;

是为了先清除Timer1对应的中断标志位。

T1CCTL0 |= 0x04;  //设定timer1通道0输出比较模式


那么该行代码中的T1CCTL0做该赋值操作又有何意义?


模模式需要开启通道0的输出比较模式,否则计数器只有到了0XFF时才会产生溢出中断(相应的产生溢出标志),也就是如果没有设置通道0的输出比较模式,计数器的值到达T1CC0后,不会产生溢出中断(相应的溢出标志不会置1),这点需要特别注意。下面贴出整个该程序的代码:



#include CC2530.h>

#define LED1 P1_0   //定义LED1为P1.0  

 

int count = 0;

 

void INIT_LED(void)

{

  P1SEL &= ~0x01;   //设P1.0为普通I/O功能

  P1DIR |= 0x01;    //设P1.0为输出方向

  LED1 = 0;         //将LED1点亮

}

 

void INIT_Timer1()

  T1CTL = 0x00;     //1分频、停止运行

  T1CTL = 0x0e;     //128分频 模模式

  T1CCTL0 |= 0x04;  //设定timer1通道0输出比较模式

  T1CC0L = 0x24;

  T1CC0H = 0xF4;

  IRCON &= ~0x02;

}

 

void main( void )

{

  INIT_LED();

  INIT_Timer1();

  LED1 = 1 ;

  //int count = 0;

  while(1)

  {

    if(IRCON &= 0x02)    

    {

      count++;

      if(count==1)

      {

         IRCON &= ~0x02 ;

         count = 0;

         LED1 = !LED1;

      }

    }

  }

}

      之所以称该程序的编写方式为查询方式就在于如下代码,


if(IRCON &= 0x02)    

    {

      count++;

      if(count==1)

      {

         IRCON &= ~0x02 ;

         count = 0;

         LED1 = !LED1;

      }

    }

      在主程序中不断对中断标志位进行查询,若中断标致位被置位时需要软件清0。

关键字:cc2530  裸机编程  定时器  Timer1 引用地址:cc2530裸机编程系列笔记1--定时器Timer1模模式的程序设计

上一篇:cc2530裸机编程系列笔记4--GPIO口的使用
下一篇:51单片机系列知识6--中断系统(1)

推荐阅读最新更新时间:2024-11-11 18:11

STM32通用定时器TIM2的使用方法解析
STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。(TIM1和TIM8是能够产生3对PWM互补输出的高级登时其,常用于三相电机的驱动,时钟由APB2的输出产生;TIM2-TIM5是普通定时器;TIM6和TIM7是基本定时器,其时钟由APB1输出产生) 本实验要实现的功能是:用普通定时器TIM2每一秒发生一次更新事件,进入中断服务程序翻转LED1的状态。 预备知识: ① STM32通用定时器TIM2是16位自动重装载计数器。 ② 向上计数模式:从0开始计数,计到自动装载寄存器(TIMx_ARR)中的数值时,清0,依次循环。 需要弄清楚的两个问题: 1
[单片机]
STM32通用<font color='red'>定时器</font>TIM2的使用方法解析
基于STM32F103ZET6主控平台实现定时器TIM3的驱动
定时器描述:定时器的运用主要是对重装载值和预分频的配置,这两个寄存器配置决定定时器定时的时长,接下来是开启定时器中断,当设置的时长溢出便会进入中断,在相应的中断服务函数中编写要执行的程序即可实现隔一段时间执行一次程序的效果,例如LED的亮灭。 第一步:编写tim.h头文件 #ifndef __TIM_H #define __TIM_H #include sys.h void TIM3_Init(u16 arr,u16 psc);//定时器3初始化 #endif 第二步:编写tim.c文件 #include tim.h #include led.h void TIM3_IRQHandler(void) { if
[单片机]
配备音乐定时器的蓝牙智能牙刷
没有计时器的帮助,如何保证刷牙的时间达到推荐的2分钟?来自智能牙刷Beam Brush的幕后人员表示:人们平均的刷牙时间仅有46秒,但是一个简单的定时器,就能让50%以上的人们达到2分钟的推荐时间。该团队的蓝牙牙刷,在1年前的CES上首次亮相,并在6月得到了FDA的批准,上周正式上市的价格为49.99美元。除了一个跟踪刷牙的频率和时间的传感器,它还有一个可以播放2分钟音乐的定时器。      通过牙刷柄上的一个按钮,用户还可以将数据同步到配套的应用上,并将其发送给牙医。   来自肯塔基州路易斯维尔的Beam Technologies公司甚至想到了实际的奖励计划,比如达到了每天刷牙至少2次、每次至少2分钟的话。
[模拟电子]
配备音乐<font color='red'>定时器</font>的蓝牙智能牙刷
单片机定时器/计数器的基本结构及工作原理
本文主要学习定时器/计数器的基本结构。对结构的学习首先要明确定时器/计数器的功能,可参考第一节的内容来理解。目前常用的单片机中往往都配备了定时器/计数器。在AT89S52芯片内包含有三个16位的定时器/计数器:T0、T1和T2,其核心是加1计数器。我们主要要求掌握T0和T1的结构和功能。学习中要注意从电路结构上来理解功能的实现。定时器/计数器方式寄存器TMOD和定时器/计数器控制寄存器TCON是用以设定定时器/计数器的工作方式、定时或计数功能,控制启动或停止以及产生溢出中断的重要模块,应该对这两个寄存器中的逐位的定义和功能进行学习和掌握。 一、定时器/计数器的功能 AT89S52单片机定时器/计数器的基本部件是两个8位的计数器(
[单片机]
单片机<font color='red'>定时器</font>/计数器的基本结构及工作原理
STM32学习笔记:通用定时器基本设定
STM32 包含11个定时器,其中TIM2~TIM5为通用定时器。 通用定时器挂载在低速外设总线APB1上,其时钟来源于输入为APB1的一个倍频器,只要APB1的时钟分频数不为1,TIMx的时钟频率就会为APB1时钟频率的2倍,即72MHz 。 配置通用定时器需要4步(以配置TIM2为例): (1)配置系统时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);倍 开启TIM2与GPIOA的时钟,其中TIM2挂载在APB1上,GPIOA挂载在APB2上;
[单片机]
STM32定时器中断关于何时清除中断的总结
问题:在调STM32的程序的时候,发现定时器(timer2)比自己设定的中断周期缩小了一倍。设定为10ms中断一次,但实测发现5ms便中断了一次。 初始化代码如下: void InitTimer2(void) { RCC- APB1ENR|=0x01; //enable clock,max clock=36M TIM2- PSC=71; // counter clock CK_CNT=72M/(71+1)=1M TIM2- ARR=10000; // 10000*1us=10ms TIM2- CR1 |=0x0080; //Auto-reload preload enable TIM2- EGR |=0x0001;
[单片机]
定时器编写的4相八拍步进电机程序
这个用了定时器实现步进电机调速这样更省CPU到时候跟其他程序组织的时候可移植性好 #include code unsigned char BUJIN = { 0x01, 0x03 , 0x02 , 0x06 , 0x04 , 0x0c , 0x08 , 0x09 } ;// 节拍代码 unsigned char i ; void Init_Timer1(void) { TMOD |= 0x10; //使用模式1,16位定时器,使用 | 符号可以在使用多个定时器时不受影响 TH1=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出 TL1=0x00; EA
[单片机]
新唐NuMicro M051定时器1测试程序
新唐ARM芯片NuMicro M051单片机的资料太少了,根本没有资料可以参考,只能根据数据手册对寄存器编程,定时器1跑了起来。经验证正确0603 #include "SmartM_M0.h" unsigned char i; VOID TMR1Init(VOID) { PROTECT_REG ( APBCLK |= 0x08; //定时器1时钟使能 CLKSEL1 |= 0x4000; //定时器1时钟选择外部高速晶振0X000,内部22为0X4000 IPRSTC2 |= 0x40; //TIMER1先复位 IPRSTC2 &= 0xFB; //定时器1正常工作 TCSR1 &= 0x1
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved