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

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

#include 

#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; 
  
  /*等待晶振稳定*/
  while(!(SLEEPSTA & 0x40));   
  
  /*TICHSPD二分频,CLKSPD不分频*/
  CLKCONCMD &= ~0x47; 
  
  /*关闭RC振荡器*/
  SLEEPCMD |= 0x04; 

  
  /*设置定时器T1,128分频,模模式,从0计数到T1CC0*/
  T1CTL |= 0x0E;            
  
  /*装入定时器初值(比较值)*/
  T1CC0L = 62500%256;
  T1CC0H = 62500/256;  
  
  /*设置捕获比较通道0为比较模式,用以触发中断*/
  T1CCTL0 ^=BIT(2);      
  
  /*使能Timer1中断*/
  T1IE = 1;    
  
  /*开启总中断*/
  EA = 1;              
}

/****************************/
//定时器1中断函数
/****************************/
#pragma vector = T1_VECTOR
__interrupt void T1_ISR(void)
{
  LED1 = !LED1;
}


By:霜月孤鸟

2015.12.5

你可能感兴趣的:(嵌入式硬件)