📄 smart_timer.lst
字号:
C51 COMPILER V7.10 SMART_TIMER 12/14/2004 10:51:18 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE SMART_TIMER
OBJECT MODULE PLACED IN .\smart_timer.obj
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE ..\SourceFile\smart_timer.c LARGE BROWSE DEBUG OBJECTEXTEND P
-RINT(.\smart_timer.lst) OBJECT(.\smart_timer.obj)
line level source
1 /*************************************************/
2
3 /**************虚拟定时器*******************/
4
5 /*************2003年2月9日*********************/
6
7 /************WROTE BY WANGSW********************/
8 #include "reg52x2.h"
9 #include "define.h"
10
11 byte data SmartTimerNumber = 0;
12 MSGTYPE idata SmartTimerMsgPool[4][2];
13 word data wSmartTimerCounterPool[4];
14 word idata wSmartTimerCounterRestorePool[4];
15 byte idata SmartTimerSeveralPool[4];
16 /***************************************/
17
18 /******************************************************************************************
19 *函数名: smart_timer_server
20 *参数: 无
21 *返回值: 无
22 *描述: 智能定时器服务程序, 依次对智能定时器 中的定时任务进行
23 判定,到时的抛出消息,对于需多次运行的可以重载其定时计
24 数次数
25 *编写: 王绍伟
26 *版本信息: V1.0 2003年8月15日
27 ******************************************************************************************/
28 extern void smart_timer_server(void)
29 {
30 1 byte idata i;
31 1 if(!SmartTimerNumber)
32 1 {
33 2 return; /*r若智能定时器个数为0,则退出*/
34 2 }
35 1 for(i = 0; i < 4; i++)
36 1 {
37 2 if(GETBIT(SmartTimerNumber,i))
38 2 {
39 3 if(!wSmartTimerCounterPool[i])
40 3 {
41 4 msg_queue_in(SmartTimerMsgPool[i][0], SmartTimerMsgPool[i][1]);
42 4 switch(SmartTimerSeveralPool[i])
43 4 {
44 5 case 0x00: /*无限次*/
45 5 wSmartTimerCounterPool[i] = wSmartTimerCounterRestorePool[i];
46 5 break;
47 5 case 0x01: /*一次*/
48 5 RESETBIT(SmartTimerNumber, i);
49 5 break;
50 5 default: /*多次*/
51 5 wSmartTimerCounterPool[i] = wSmartTimerCounterRestorePool[i];
52 5 SmartTimerSeveralPool[i]--;
53 5 break;
54 5 }
C51 COMPILER V7.10 SMART_TIMER 12/14/2004 10:51:18 PAGE 2
55 4 }
56 3 wSmartTimerCounterPool[i]--;
57 3 }
58 2 }
59 1 }
60
61
62
63 /******************************************************************************************
64 *函数名: smart_timer_idle_check
65 *参数: 无
66 *返回值: number
67 *描述: 智能定时器空闲检测,返回空闲定时器数目
68 *编写: 王绍伟
69 *版本信息: V1.0 2003年8月15日
70 ******************************************************************************************/
71 extern byte smart_timer_idle_check(void)
72 {
73 1 byte idata i;
74 1 byte idata number=0;
75 1 for(i = 0; i < 4; i++)
76 1 {
77 2 if(!GETBIT(SmartTimerNumber, i))
78 2 {
79 3 number++;
80 3 }
81 2 }
82 1 return(number);
83 1 }
84
85
86
87 /******************************************************************************************
88 *函数名: smart_timer_start
89 *参数: msgType 消息类型
90 msgPoint 消息指针
91 wCounter 在此例中以5ms为最小计数单位值,设置等待多少
92 个5ms后抛出在智能计时器中的暂存任务消息
93 several 智能计时器重复计数次数,这样可以多次按某一
94 时间间隔抛出储存的消息
95 *返回值: 空闲定时器数目
96 *描述: 开启智能定时器,设置一个在若干时间后被抛出的消息,此消
97 可以重复多次经过一定延时后再次被抛出
98 *编写: 王绍伟
99 *版本信息: V1.0 2003年8月15日
100 ******************************************************************************************/
101 extern byte smart_timer_start(MSGTYPE msgType, MSGPOINT msgPoint, word wCounter, byte several)
102 {
103 1 byte idata i;
104 1 for(i = 0; i < 4; i++)
105 1 {
106 2 if(!GETBIT(SmartTimerNumber, i))
107 2 {
108 3 SmartTimerMsgPool[i][0] = msgType;
109 3 SmartTimerMsgPool[i][1] = msgPoint;
110 3 wSmartTimerCounterPool[i] = wCounter;
111 3 SmartTimerSeveralPool[i] = several;
112 3 wSmartTimerCounterRestorePool[i] = wCounter;
113 3 SETBIT(SmartTimerNumber, i);
114 3 break;
115 3 }
116 2 }
C51 COMPILER V7.10 SMART_TIMER 12/14/2004 10:51:18 PAGE 3
117 1 return((smart_timer_idle_check() << 4) + i);
118 1 }
119
120
121
122 /******************************************************************************************
123 *函数名: smart_timer_stop
124 *参数: number
125 *返回值: 无
126 *描述: 终止相应的智能定时器 ,回收其资源
127 *编写: 王绍伟
128 *版本信息: V1.0 2003年8月15日
129 ******************************************************************************************/
130 extern void smart_timer_stop(byte number)
131 {
132 1 if(number == ALL)
133 1 {
134 2 SmartTimerNumber = 0;
135 2 }
136 1 else
137 1 {
138 2 SmartTimerNumber &= ~((byte)1 << number);
139 2 }
140 1 }
141
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 369 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 5
PDATA SIZE = ---- ----
DATA SIZE = 9 ----
IDATA SIZE = 20 4
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -