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;
          }
        }
      }
    }
  • 相关阅读:
    POJ1006: 中国剩余定理的完美演绎(非原创)
    poj 1001 分析
    document.createElement()的用法
    js innertext
    转csdn-css4
    css中最基本几个选择器
    Django解决(1146, "Table 'd42.django_session' doesn't exist")方法
    django清理migration终极解决办法
    linux中的fork炸弹
    nginx转发php文件到php-fpm服务器提示502错误
  • 原文地址:https://www.cnblogs.com/Donut/p/4124034.html
Copyright © 2011-2022 走看看