CC2530学习笔记之定时器T1模计数模式中断实现LED闪烁程序

本文介绍如何使用CC2530的T1定时器实现5秒定时中断,并通过模计数功能控制LED的5秒间隔闪烁。详细解析了定时器配置、中断设置及主时钟频率调整过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定时器在我们写代码是经常使用的,它不仅能够实现精确的定时,加上中断使用后,还可以提高MCU运行速度。

目的

主要使用CC2530的T1的模计数功能,5s定时并产生中断,LED 5S 间隔闪烁。

时间计算公式

定 时 器 每 计 数 一 次 的 时 间        T 1 = 分 频 系 数 ( T 1 C T L . D I V ) 定 时 器 t i c k 输 出 设 置 ( C L K C O N C M D . T I C K S P D ) ( u s ) 定时器每计数一次的时间 \ \ \ \ \ \ T1=\frac { 分频系数(T1CTL.DIV)} { 定时器tick输出设置(CLKCONCMD.TICKSPD)} (us)       T1=tick(CLKCONCMD.TICKSPD)(T1CTL.DIV)(us)
中 断 一 次 的 时 间     T = ( T 1 C C 0 H ∗ 258 + T 1 C C 0 L ) ∗ T 1 中断一次的时间\ \ \ T=(T1CC0H*258+T1CC0L)*T1    T=(T1CC0H258+T1CC0L)T1

先看代码

#include <iocc2530.h>
unsigned char temp,temp1;
#define LED1 P0_4 
void T1_init()
{
  T1CTL   |= 0x0E;//128分频 11 模计数模式10
  T1CCTL0 |=0X04; //使用模计数时,必须使能 T1CCTL0.MODE =1
  // C353为十进制50000
  T1CC0H =0X0C3;
  T1CC0L =0X53; 
  IEN0 |=0X80;//EA总中断 7位为1
  IEN1 |=0X02;//T0中断使能 1位为1
  T1IF=0; //清标志位 
}
void Oclk_init()
{
  CLKCONCMD &= ~0x40;        // 设置系统时钟源为 32MHZ晶振
  while(!(SLEEPSTA & 0x40)); // 等待晶振稳定 
  CLKCONCMD &= ~0x3f;      //    定时器tick输出设置   设置系统主时钟频率为 32MHZ
  SLEEPCMD |=0X04;
}
//每中断一次时间为4us*50000=200ms
#pragma vector=T1_VECTOR    
__interrupt void TI_VEC()
{
   T1IF=0;//中断标志位 T1IF
   if(++temp ==25) //200ms*25=5s
   {
     LED1 =~LED1;//led亮度取反
     temp1=1;
     temp=0;
   }   
}
void main()
{
  temp=0;
  temp1=0;
  T1_init();
  Oclk_init();
  P0SEL &=~0x10;//LED引脚为通用口
  P0DIR |= 0x10; //输出模式
  LED1 =1; 
  while(1);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值