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

2019-04-13 12:13发布

      上篇专题中描述的是采用查询的方式完成定时器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