zoukankan      html  css  js  c++  java
  • CC2540开发板学习笔记(四)——定时器

    一、实验内容

         分别使用定时器T1和T3使得LED周期性闪烁

    二、实验过程

    1、定时器T1(查询IRCON来控制)

    (1)需要调配的寄存器

    T1CTL(0XE4) Timer1控制寄存器
      BIT3,BIT2:定时器分频倍数选择
    00:不分
    01:8分频
    10:32分频
    11:128分频
      BIT1,BIT0:定时器模式选择:
    00:暂停
    01:自动重装:0X0000—0XFFFF
    10:比较计数:0X0000—T1CC0
    11:PWM方式
    T1STAT(0XAF) Timer1状态寄存器:
      BIT5:OVFIF
    定时器溢出中断标志,在数值达到计数终值时置为1.
     

    Bit4: 定时器 1 通道 4 中断标志位
    Bit3: 定时器 1 通道 3 中断标志位
    Bit2: 定时器 1 通道 2 中断标志位
    Bit1: 定时器 1 通道 1 中断标志位
    Bit0: 定时器 1 通道 0 中断标志位

    IRCON(0XCO) 中断标志位寄存器;

    (2)定时器T1的初始化:

    T1CTL=0X0d;
    T1STAT=0X21;

    (3)代码实现

    #include<ioCC2540.h>
    
    #define LED1 P1_0    //定义LED1,方便查阅代码
    
    void Init()//初始化函数
    {
      P1SEL = 0X00;    //实现LED的初始化
      P1DIR = 0X01;
      P1INP = 0X00;
      LED1 = 0;
      
      T1CTL = 0X0d;  //128分频,自动重装0X0000-0XFFFF;,时钟频率为16MHZ
      T1STAT = 0X21; //通道0,中断有效
      EA=1;
    }
    
    
    void main(void)
    {
      Init();
      unsigned char count=0;
    
      while(1)
      {
        if(IRCON>0)       //检查是否置位为1
        {
          IRCON=0;
          count++;         //由于分频128后,已经满足1s的闪烁周期。
    
          if(count>=1)
          {
            count=0;
            LED1=~LED1;
          }
        }
      }
    }

    image

    2、定时器T3(中断方式)

    (1)需要调配的寄存器

    T3CTL(0XCB) Timer3:控制寄存器
      BIT7,BIT6,BIT5:定时器时钟分频倍数选择

    000:不分频

    001 :2 分频

    010 : 4 分频

    011 : 8分频

    100 :16 分频

    101 :32 分频

    110 : 64 分频

    111 :128分频

      BIT4:T3起止控制位
      BIT3:溢出中断掩码
    0:关中断溢出
    1:开中断溢出
      BIT2:清计数值,高电平有效
      BIT1,BIT0:T3模式选择:

    00 :自动重装 0X00 -0XFF
    01 : DOWN ( 从 T3CC0 到 0X00 计数一次 )
    10 : 模计数(反复从 0X00 到 T3CC0 计数)
    11 : UP/DOWN( 反复从 0X00 到 T3CC0计数再到 0X00)

    T3CCTL0(0XCC) T3通道 0 捕获/比较控制寄存器
      BIT6:T3通道 0 中断掩码
    0:关中断,1:开中断
      BIT5,BIT4,BIT3:T3通道 0 比较输出模式选择
      BIT2:T3通道 0 模式选择:
    0:捕获     1:比较
      BIT1,BIT0:T3通道 0 捕获模式选择:

    00 没有捕获

    01 上升沿捕获

    10 下降沿捕获

    11 边沿捕获

    T3CC0(0XCD) T3 通道 0 捕获 / 比较寄存器
    T3CCTL1(0XCE) T3通道 1 捕获/比较控制寄存器
      BIT6:T3通道1中断掩码
    0:关中断,1:开中断
      BIT5,BIT4,BIT3:T3通道 1 比较输出模式选择
      BIT2:T3通道 1 模式选择:
    0:捕获     1:比较
      BIT1,BIT0:T3通道 1 捕获模式选择:

    00 没有捕获

    01 上升沿捕获

    10 下降沿捕获

    11 边沿捕获

    T3CC1(0XCF) T3 通道 1 捕获 / 比较寄存器

    定时器T3有 4种工作模式:分别是自由、正计数 /倒计数模式、 倒计数模式。
    image

    (2)代码实现(使用自由模式)

    无法解析此远程名称: 'util.cnblogs.com#include<ioCC2540.h>
    
    #define LED1 P1_0    //定义LED1,方便查阅代码
    
    unsigned char count=0;
    
    void Init()//初始化函数
    {
      P1SEL = 0X00;    //实现LED的初始化
      P1DIR = 0X01;
      P1INP = 0X00;
      LED1 = 0;
      
      T3CTL = 0X08;  //开溢出中断
      T3IE = 1;      //开纵中断和T3中断
      T3CTL |= 0XE0; //开128分频,128/(16*10e6)*N=0.5s,N=65536;
      T3CTL &= ~0x03; //自动重装   貌似溢出的数值改变成256.。不懂为什么。。
      T3CTL |= 0X10; //2分频(16MHZ),然后就是开始启动
      EA=1;          //打开中断总闸
      
    }
    
    
    void main(void)
    {
      Init();
    
      while(1)
      {
       
      }
    }
      
    
    #pragma vector = T3_VECTOR
    __interrupt void fu()
    {
      IRCON = 0x00;   //清除中断标志
      count++;
      if(count>250)
      {
        count = 0;
        LED1=~LED1;
      }
    }
  • 相关阅读:
    HTML5服务器发送事件(Server-Send Events)
    无人问津的排序(一)----希尔排序
    NB二人组(二)----归并排序
    40、常用字符串格式化有哪几种?
    39、请用代码简答实现stack
    38、一行代码实现删除列表中重复的值 ?
    37、如何在函数中设置一个全局变量 ?
    NB二人组(一)----堆排序
    快排
    LOW逼三人组(三)----插入排序
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4295537.html
Copyright © 2011-2022 走看看