CC2530定时器1实现查询定时1-2

时间:2024-10-09 09:54:33

1源码

#include "iocc2530.h"

void led_init(){
  P1SEL &=~0xff;//通用io
  P1DIR |=0x01;//输入输出
  P1_0=0;//灭灯
}

void T1_init(){
  
  T1CTL =0x0d;//设置分频,和模式(128分频,0x0000~0xffff)
// 最大计数值=定时时长/定时器计数周期=0.25/(1/16M(时钟源) X 128(分频) )=31250=0x7A12
}
void main(){

  int count;
  
  //选择时钟源,上电默认是内部时钟源16M
  
  led_init();//初始化LED
  T1_init();//初始化定时器1

  
  while(1){
    if(IRCON>0){
        IRCON=0x00;//清除溢出标志
        count++;
    }
    if(count==2){//
      P1_0=1;
    }
    if(count==4){//
      P1_0=0;
    }
    if(count>4){
    count=0;
    }
  }
}

2寄存器讲解

CC2530芯片默认上电时,是使用内部的两个RC电路作为时钟来源的。具体来说,这两个RC电路分别提供高频时钟(16MHz)和低频时钟(32KHz)信号。

io的

定时器的
T1CTL

在使用定时器1的定时功能时,使用T1CC0H和T1CC0L两个寄存器存放最大计数值的 高8位和低8位。T1CCxH和T1CCxL共5对,分别对应定时器1的通道0到通道4,两个寄存器 的功能描述如表T-1-33-2和表T-1-33-3。 

T1CCxH
T1CCxL

定时器1的工作模式设定 由于需要手工设定最大计数值,因此可为定时器1选择工作模式为正计数/倒计数模 式,只需要设置T1CTL寄存器中的MODE[1:0]位即可。一旦设置了定时器1的工作模式 (MODE[1:0]为非零值),则定时器1立刻开始定时计数工作,设置代码如下。 T1CTL|=0x03; //定时器1采用模模式

如果使用的是定时器3或定时器4,参照表T-1-33-4设置相关寄存器。

T3CNTH
T4CNTN

 T1STAT寄存器的描述

查询方式

1判断计数的值

通过读取T1CNTH和T1CNTL两个寄存器来分别获取当前计数值的高位字节和低位字节。

当读取T1CNTL寄存器时,计数器的高位字节会被缓冲到T1CNTH寄存器,以便高位字节可以从T1CNTH中读出,因此在程序中应先读取T1CNTL寄存器,然后读取T1CNTH寄存器。

2判断溢出寄存器
IRCON
#include "iocc2530.h"

void led_init(){
  P1SEL &=~0xff;//通用io
  P1DIR |=0x01;//输入输出
  P1_0=0;//灭灯
}

void T1_init(){
  
  T1CTL =0x0d;//设置分频,和模式(128分频,0x0000~0xffff)
// 最大计数值=定时时长/定时器计数周期=0.25/(1/16M(时钟源) X 128(分频) )=31250=0x7A12
}
void main(){

  int count;
  
  //选择时钟源,上电默认是内部时钟源16M
  
  led_init();//初始化LED
  T1_init();//初始化定时器1

  
  while(1){
    if(IRCON>0){
        IRCON=0x00;//清除溢出标志
        count++;
    }
    if(count==2){//
      P1_0=1;
    }
    if(count==4){//
      P1_0=0;
    }
    if(count>4){
    count=0;
    }
  }
}