天天看点

「ZigBee模块」基础实验(4)定时器T1的简单应用

1.实现功能

使LED1与LED2交替闪烁 周期为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

T1CCnH、T1CCnL:定时器1捕获寄存器高低字节。

T1STAT定时器1状态标志位

端口 Bit位 名称 初始化 读/写 描述

T1STAT

(0xAF)

7:6 --- 00 R0 未使用
5 OVFIF R/W0 定时器1计数器溢出中断标志,在自由模式和模模式到达终点计数值,在正/倒计数模式中到达0。写1无效。
4 CH4IF R/W0 定时器1通道4中断标志位,当通道4中断条件发生时设置。写1无效。
3 CH3IF R/W0 定时器1通道3中断标志位,当通道3中断条件发生时设置。写1无效。
2 CH2IF R/W0 定时器1通道2中断标志位,当通道2中断条件发生时设置。写1无效。
1 CH1IF R/W0 定时器1通道1中断标志位,当通道1中断条件发生时设置。写1无效。
CH0IF R/W0 定时器1通道0中断标志位,当通道0中断条件发生时设置。写1无效。

IRCON(0xC0)——中断标志位寄存器(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;
      }
    }
  }
}      
「ZigBee模块」基础实验(4)定时器T1的简单应用