[Zigbee]定时器1

时间:2023-03-09 00:56:45
[Zigbee]定时器1

注意:在定时器可以使用一个输入/输出引脚之前,所需的 I/O 引脚必须配置为定时器 1 的外设引脚。

定时器1的引脚映射方案选用是备用2方案:P07对应通道3、P06-通道4、P12-通道0、P11-通道1、P10-通道2~

定时器1的输出比较模式:在输出比较模式中,与通道相关的IO要设置为输出模式。(什么是输出比较模式,运作机制)在定时器启动后, 计数器的内容会和通道比较寄存器中的内容T1CCnH:T1CCnL做比较。如果这两个内容(值)相等,输出引脚根据比较输出模式T1CCTLn.CMP的设置进行设置、复位或切换。(核心就是将T1CC0的值和每个通道寄存器中的值比较,相等了则产生中断等)

当发生一个比较时,设置IRCON.T1IF 标志和该通道的中断标志T1STAT.CHnIF(n 是通道号码)。如果分别设置了相应的中断屏蔽位T1CCTLn.IM,以及IEN1.T1EN,将产生一个中断请求。

PWM 信号的周期通过设置T1CC0 确定,通道输出的占空比由T1CCn 确定,其中n 是PWM 通道1 或2

定时器1 寄存器

  本节描述了定时器1 的寄存器,由以下寄存器组成:

● T1CNTH – 定时器1 计数高位
● T1CNTL – 定时器1 计数低位
● T1CTL – 定时器1 控制
● T1STAT –定时器1 状态
● T1CCTLn – 定时器1 通道n 捕获/比较控制
● T1CCnH – 定时器1 通道n 捕获/比较高位值[Zigbee]定时器1
● T1CCnL – 定时器1 通道n 捕获/比较低位值

*******************************************************************************************************************

#include<ioCC2530.h>

#define LED2 P1_1

void InitLed();
void InitTimer1();

void InitLed()
{
  P1DIR |= 0x02;
  LED2 = 0;
}

void InitTimer1()
{
  CLKCONCMD &= ~0x40;//  设置时钟源为32MHZ晶振
  while(CLKCONCMD & 0x40);
  CLKCONCMD &= ~0x07;//设置主时钟频率为32MHZ
  CLKCONCMD |= 0x38;//定时器标记输出设置 250KHZ
 
  PERCFG |= 0x40;//定时器的外设IO位置,设为外设位置2 即P1引脚
  P2SEL &= ~0x10;//当PECFG分配同一个IO上两个设备确定优先顺序:TIMER1
  P2DIR |=0x80;//确定不同外设占用引脚的第1优先级:定时器1 通道0-1
 
  P1DIR |=0xff;//P1端口设置为输出
  P1SEL |= 0x02;//TIMER1  通道1 映射P1_1
 
  T1CC1H = 0x00; //20%占空比为200us
  T1CC1L = 0x32; //修改T1CC1L可调整LED的亮度
  T1CC0H = 0x00;
  T1CC0L = 0xff; // 1ms的时钟周期 频率为976.516HZ
  T1CCTL1 = 0x1c; //模式选择 通道1比较模式,T1CCTL1.CMP = 011
  T1CTL = 0x02; // 250KHz 1分频 T1CTL.MODE = 10 :模 ,从0x0000到T1CC0反复计数
}

void main()
{
  InitLed();
  InitTimer1();
  while(1)
  {}
}

************************************************************************************************************************

[Zigbee]定时器1