zoukankan      html  css  js  c++  java
  • 「ZigBee模块」基础实验(4)定时器T1的简单应用

    1.实现功能

    使LED1LED2交替闪烁 周期为1s

     

    2.元件连接方式

    P1_0连接LED1

    P1_1连接LED2

     

    3.定时器1相关寄存器:

     

    T1CNTL:定时器1计数器低位字节

    T1CNTH:定时器1计数器高位字节

    T1CTL:定时器1控制器

    T1STAT:定时器1状态标志位

     

    T1CTL:定时器1控制器

    端口

    Bit位

    名称

    初始化

    读/写

    描述

     T1CTL

    (0xE4)

    7:4

    ---

    0000

    R0

    未使用

    3:2

    DIV[1:0]

    00

    R/W

    时钟分频

    00:不分频

    01:8分频

    10:32分频

    11:128分频

    1:0

    MODE[1:0]

    00

    R/W

    定时器1模式选择

    00:暂停运行

    01:自由模式(从0X0000至OXFFFF反复计数)

    10:模计数,从0x000到T1CC0反复计数

    11:正计数/倒计数,从0x0000到T1CC0反复计数并且从T1CC0倒计数到0x0000

    T1CCnHT1CCnL:定时器1捕获寄存器高低字节。

     

    T1STAT定时器1状态标志位

    端口

    Bit位

    名称

    初始化

    读/写

    描述

    T1STAT

    (0xAF)

    7:6

    ---

    00

    R0

    未使用

    5

    OVFIF

    0

    R/W0

    定时器1计数器溢出中断标志,在自由模式和模模式到达终点计数值,在正/倒计数模式中到达0。写1无效。

    4

    CH4IF

    0

    R/W0

    定时器1通道4中断标志位,当通道4中断条件发生时设置。写1无效。

    3

    CH3IF

    0

    R/W0

    定时器1通道3中断标志位,当通道3中断条件发生时设置。写1无效。

    2

    CH2IF

    0

    R/W0

    定时器1通道2中断标志位,当通道2中断条件发生时设置。写1无效。

    1

    CH1IF

    0

    R/W0

    定时器1通道1中断标志位,当通道1中断条件发生时设置。写1无效。

    0

    CH0IF

    0

    R/W0

    定时器1通道0中断标志位,当通道0中断条件发生时设置。写1无效。

     

    IRCON0xC0)——中断标志位寄存器(0:无中断请求 1:有中断请求)

    D7

    D6

    D5

    D4

    D3

    D2

    D1

    D0

    睡眠定时器

    必须为0

    端口0

    定时器4

    定时器3

    定时器2

    定时器1

    DMA完成

     

    4.部分代码分析

    定时器1初始化编程

    T1CTL = 0x0d;  //128分频,自动重装 0X0000-0XFFFF
    T1STAT = 0x21;  //通道0, 中断有效
    IRCON = 0;

    晶振为32MHz,系统默认2分频,再分128次,即定时器1产生一次中断的时间为(32*10^6)/(2*128*16^4)0.5(好坑呀,用了定时器结果还是只能约等于!)

     

    5.完整代码

    #include <ioCC2530.h>
    
    #define uchar unsigned char
    #define uint  unsigned int
    
    //引脚定义
    #define LED1 P1_0
    #define LED2 P1_1
    
    //函数声明
    void ledInit();       //LED初始化
    void T1Init();        //定时器1初始化
    
    //变量声明
    uchar count = 0;      //计定时器1中断次数
    
    /*********************
    LED初始化
    *********************/
    void ledInit()
    {
      P1SEL &= ~0x03;
      P1DIR |= 0x03;
      P1INP &= ~0x03;
      
      LED1 = 1;
      LED2 = 0;
    }
    
    /*********************
    定时器1初始化
    *********************/
    void T1Init()
    {
      T1CTL = 0x0d;         //128分频,自动重装 0X0000-0XFFFF
      T1STAT = 0x21;         //通道0, 中断有效
      IRCON = 0;
    }
    
    /*********************
    主函数
    *********************/
    void main()
    {
      ledInit();
      T1Init();
      while(1)
      {
        if(IRCON == 0x02)
        {
          IRCON &= ~0x02;
          count ++;
          if(count == 1)  //其实本程序可以不用count
          {
            LED1 = ~LED1;
            LED2 = ~LED2;
            count = 0;
          }
        }
      }
    }
  • 相关阅读:
    Code Forces 650 C Table Compression(并查集)
    Code Forces 645B Mischievous Mess Makers
    POJ 3735 Training little cats(矩阵快速幂)
    POJ 3233 Matrix Power Series(矩阵快速幂)
    PAT 1026 Table Tennis (30)
    ZOJ 3609 Modular Inverse
    Java实现 LeetCode 746 使用最小花费爬楼梯(递推)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
  • 原文地址:https://www.cnblogs.com/Donut/p/4124034.html
Copyright © 2011-2022 走看看