cc2530裸机编程系列笔记2--定时器Timer1模模式程序(中断方式)

      上篇专题中描述的是采用查询的方式完成定时器Timer1模模式程序的设计,本篇则介绍采用中断的方式完成定时器Timer1模模式程序的设计。查询的方式,上篇已经介绍过就是在主程序中不断的查询中断标志是否被置位,置位后则进行相应处理。中断的方式则为,当中断产生时,CC2530在硬件的作用下将程序跳转到中断中断服务程序去执行。先贴出中断方式的程序:

#include <ioCC2530.h>

#define uint8  unsigned char
#define uint16 unsigned int
#define BIT(x) (1 << x)

#define LED1 P1_0

/****************************/
//函数声明
/****************************/
void initial(void);


/**************************************/
//主函数
/**************************************/

void main(void)
{
  initial();
  
  while(1)
  {

  }
}

/****************************/
//初始化函数
/****************************/
void initial(void)
{
  /*设置P1.0为输出模式*/
  P1DIR ^= BIT(0);
  
  /*关闭LED1*/
  LED1 = 1;
  
  /*选择外部石英晶振*/
  CLKCONCMD &= ~0x40; 
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是基于CC2530定时器1模式中断1ms的代码示例,你可以根据自己的需求进行修改: ```c #include "ioCC2530.h" #define TIMER_TICKS_1MS 32678 // 定时器计数器为16位,时钟频率为32.768kHz,计数1ms需要的时钟周期数为:32768/1000=32.768 void Timer1_Init(void) { T1CTL |= 0x0C; // 选择模式3,即模式1+模式2 T1CCTL0 |= 0x44; // 选择模式1,设置为定时器模式,并启用中断 T1CC0L = TIMER_TICKS_1MS & 0xFF; // 设置计数器初始值低8位 T1CC0H = TIMER_TICKS_1MS >> 8; // 设置计数器初始值高8位 T1IE = 1; // 使能定时器1中断 T1CNTL = 0; // 将计数器清零 T1CNTH = 0; T1CTL |= 0x02; // 启动定时器1 } #pragma vector = T1_VECTOR __interrupt void Timer1_ISR(void) { T1IF = 0; // 清除定时器1中断标志 // 在此处添加需要执行的代码,每1ms执行一次 } int main(void) { Timer1_Init(); // 初始化定时器1 EA = 1; // 全局使能中断 while(1) { // 在此处添加需要执行的代码,不需要关心定时器1 } } ``` 在以上示例代码中,定时器1使用了模式3,即同时使用模式1和模式2。模式1是定时器模式,使用定时器计数器进行计时,并在计时结束时产生中断模式2是比较模式,使用比较器进行比较,并在比较器输出变化时产生中断。在模式3下,定时器1同时使用了定时器模式和比较模式,每1ms产生一次中断。需要注意的是,中断服务函数中应尽量不要使用过多的计算和延时操作,以免影响定时器1的计时精度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值