基于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 */

 

posted on 2015-01-13 14:11  江南神枪  阅读(1434)  评论(0)    收藏  举报

导航