基于LPC17XX的软件定时器Timer(非中断)
本软定时器简单好用,和硬件相关的代码只有短短的三四行!只需作简单修改就可以用到不同的CPU或平台中!
H文件如下:
1 /* 2 ****************************************************************************************************** 3 **文件名称: timer.h ** 4 **文件标识: LPC1758 ** 5 **摘 要: 定时器TIMER相关函数头文件 ** 6 **当前版本: V1.0 ** 7 **作 者: 江南神枪 ** 8 **完成日期: 2012.01.04 ** 9 ****************************************************************************************************** 10 */ 11 #ifdef TIMER_GLOBALS 12 #define TIMER_EXT 13 #else 14 #define TIMER_EXT extern 15 #endif 16 17 18 /* 19 ****************************************************************************************************** 20 ** 变量定义 ** 21 ****************************************************************************************************** 22 */ 23 24 //定时器结构定义. 25 struct timer 26 { 27 unsigned int start; //起始的时间值---(单位:毫秒). 28 unsigned int interval; //时间间隔-------(单位:毫秒). 29 }; 30 31 32 /* 33 ****************************************************************************************************** 34 **函数名称: void Timer0_Init(void) ** 35 **函数描述:定时器T0初始化(每1ms计数器TC就会+1,直至0xFFFFFFFF时翻转到0) ** 36 **参 数: 无 ** 37 **返 回: 无 ** 38 ****************************************************************************************************** 39 */ 40 TIMER_EXT void Timer0_Init(void); 41 42 /* 43 ****************************************************************************************************** 44 **函数名称: uint32_t clock_time(void) ** 45 **函数描述:返回系统当前毫秒值 ** 46 **参 数: 无 ** 47 **返 回: 当前毫秒值TC ** 48 ****************************************************************************************************** 49 */ 50 TIMER_EXT uint32_t clock_time(void); 51 52 /* 53 ****************************************************************************************************** 54 **函数名称: void timer_set(struct timer *t, uint32_t interval) ** 55 **函数描述:设置定时器 ** 56 **参 数: *t---------定时器名称(结构指针) ** 57 ** interval---时间间隔(毫秒) ** 58 **返 回: 无 ** 59 ****************************************************************************************************** 60 */ 61 TIMER_EXT void timer_set(struct timer *t, uint32_t interval); 62 63 /* 64 ****************************************************************************************************** 65 **函数名称: void timer_reset(struct timer *t) ** 66 **函数描述:重置某个定时器 ** 67 **参 数: *t---定时器名称(结构指针) ** 68 **返 回: 无 ** 69 ****************************************************************************************************** 70 */ 71 TIMER_EXT void timer_reset(struct timer *t); 72 73 /* 74 ****************************************************************************************************** 75 **函数名称: void timer_restart(struct timer *t) ** 76 **函数描述:重启某个定时器 ** 77 **参 数: *t---定时器名称(结构指针) ** 78 **返 回: 无 ** 79 ****************************************************************************************************** 80 */ 81 TIMER_EXT void timer_restart(struct timer *t); 82 83 /* 84 ****************************************************************************************************** 85 **函数名称: uint32_t timer_expired(struct timer *t) ** 86 **函数描述:检查某个定时器是否已超时 ** 87 **参 数: *t---定时器名称(结构指针) ** 88 **返 回: 1:超时 0:没超时 ** 89 ****************************************************************************************************** 90 */ 91 TIMER_EXT uint32_t timer_expired(struct timer *t); 92 93 /* 94 ****************************************************************************************************** 95 ** End Of File ** 96 ****************************************************************************************************** 97 */
C文件如下:
1 /* 2 ****************************************************************************************************** 3 **文件名称: timer.c ** 4 **文件标识: LPC1758 ** 5 **摘 要: 定时器TIMER相关函数(不采用中断的方法) ** 6 **当前版本: V1.0 ** 7 **作 者: 江南神枪 ** 8 **完成日期: 2012.01.04 ** 9 ****************************************************************************************************** 10 */ 11 #define TIMER_GLOBALS 12 #include "LPC17xx.h" 13 #include "timer.h" 14 15 16 /* 17 ****************************************************************************************************** 18 **函数名称: void Timer_Init(void) ** 19 **函数描述:定时器T0初始化(每1ms计数器TC就会+1,直至0xFFFFFFFF时翻转到0) ** 20 **参 数: 无 ** 21 **返 回: 无 ** 22 ****************************************************************************************************** 23 */ 24 void Timer0_Init(void) 25 { 26 //使用定时器计数器T0 --- PC每个PCLK就加1,当PC=PR+1=(SystemCoreClock / 4 / 1000)时,PC会复位,TC就会加1,即每1ms计数器TC就加1. 27 28 29 LPC_TIM0->TCR = 0x02; // 定时计数器复位. 30 LPC_TIM0->PR = (SystemCoreClock / 4 / 1000) - 1; // 预分频寄存器. 31 LPC_TIM0->TCR = 0x01; // 启动定时器. 32 33 } 34 35 /* 36 ****************************************************************************************************** 37 **函数名称: uint32_t clock_time(void) ** 38 **函数描述:返回系统当前毫秒值 ** 39 **参 数: 无 ** 40 **返 回: 当前毫秒值TC ** 41 ****************************************************************************************************** 42 */ 43 uint32_t clock_time(void) 44 { 45 return(LPC_TIM0->TC); 46 } 47 48 /* 49 ****************************************************************************************************** 50 **函数名称: void timer_set(struct timer *t, uint32_t interval) ** 51 **函数描述:设置定时器 ** 52 **参 数: *t---------定时器名称(结构指针) ** 53 ** interval---时间间隔(毫秒) ** 54 **返 回: 无 ** 55 ****************************************************************************************************** 56 */ 57 void timer_set(struct timer *t, uint32_t interval) 58 { 59 t->interval = interval; 60 t->start = clock_time(); 61 } 62 63 /* 64 ****************************************************************************************************** 65 **函数名称: void timer_reset(struct timer *t) ** 66 **函数描述:重置某个定时器 ** 67 **参 数: *t---定时器名称(结构指针) ** 68 **返 回: 无 ** 69 ****************************************************************************************************** 70 */ 71 void timer_reset(struct timer *t) 72 { 73 t->start += t->interval; 74 } 75 76 /* 77 ****************************************************************************************************** 78 **函数名称: void timer_restart(struct timer *t) ** 79 **函数描述:重启某个定时器 ** 80 **参 数: *t---定时器名称(结构指针) ** 81 **返 回: 无 ** 82 ****************************************************************************************************** 83 */ 84 void timer_restart(struct timer *t) 85 { 86 t->start = clock_time(); 87 } 88 89 /* 90 ****************************************************************************************************** 91 **函数名称: uint32_t timer_expired(struct timer *t) ** 92 **函数描述:检查某个定时器是否已超时 ** 93 **参 数: *t---定时器名称(结构指针) ** 94 **返 回: 1:超时 0:没超时 ** 95 ****************************************************************************************************** 96 */ 97 uint32_t timer_expired(struct timer *t) 98 { 99 return( (uint32_t)(clock_time() - t->start) >= (uint32_t)t->interval ); 100 } 101 102 /* 103 ****************************************************************************************************** 104 ** End Of File ** 105 ****************************************************************************************************** 106 */