stimer.lst
来自「mifarea卡程序mifarea卡程序mifarea卡程序」· LST 代码 · 共 316 行
LST
316 行
C51 COMPILER V8.00 STIMER 04/23/2009 15:56:16 PAGE 1
C51 COMPILER V8.00, COMPILATION OF MODULE STIMER
OBJECT MODULE PLACED IN .\out_sst89e564\stimer.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE source\stimer.c LARGE BROWSE ORDER NOAREGS DEBUG OBJECTEXTEND PRINT(.\stime
-r.lst) OBJECT(.\out_sst89e564\stimer.obj)
line level source
1 //////////////////////////////////////////////
2 // timer.c //
3 // 1毫秒系统时钟 //
4 // 自定义时间长度中断调用 //
5 // 预定义时间长度中断调用 //
6 // design by: 刘俐训 //
7 //////////////////////////////////////////////
8
9 #include <reg52.h>
10 #include "stimer.h"
11 #include <v51rx2.h>
12 #include "t_event.h"
13 #include "intrsc.h"
14 //#include "wdt.h"
15
16 #ifndef enable
#define enable() EA=1
#define disable() EA=0
#endif
20
21 #ifdef BUZZEROUT
#ifndef BZFRQ
#define BZFRQ
#define BZFRQ0 0
#define BZFRQ2K 2
#define BZFRQ4K 4
#endif
#endif
29
30 #ifndef NULL
#define NULL (void *)0
#endif
33
34 #define USER_TIMER TL0
35 #define SYS_TIMER TH0
36 #define TF_USER TF0
37 #define TF_SYS TF1
38
39
40 typedef struct _INTERVAL
41 {
42 unsigned int mscycles;
43 unsigned char tenmsloops;
44 }INTERVAL;
45
46 typedef struct _TSTATUS
47 {
48 union _TICK
49 {
50 unsigned int cycles;
51 unsigned char loops;
52 }Tick;
53 unsigned int ms;
54 }TSTATUS;
C51 COMPILER V8.00 STIMER 04/23/2009 15:56:16 PAGE 2
55
56 static INTERVAL data Interval = {921, 36};
57 static volatile TSTATUS data TStatus = {0};
58
59 static unsigned char data LedTick = 0;
60 static unsigned char data LedCnt = 0;
61 static bit LedFlash = 0;
62
63 static unsigned char data UserReload;
64 static unsigned long SysClk;
65
66 /*
67 static unsigned char data Led1Tick = 0;
68 static unsigned char data Led1Cnt = 0;
69 static bit Led1Flash = 0;
70 */
71
72 static unsigned char data BuzzerTick = 0;
73 static unsigned char data BuzzerCnt = 0;
74 static unsigned char data BuzzerTimes = 0;
75 static bit fSetting = 0;
76
77 void IntUserTimer(void) interrupt TF0_VECTOR using 2
78 {
79 1 TL0 += UserReload;
80 1 TimerEvent();
81 1 }
82
83 void IntSysTimer( void ) interrupt TF1_VECTOR using 1
84 {
85 1 TStatus.Tick.loops ++;
86 1 if(TStatus.Tick.loops > Interval.tenmsloops)
87 1 {
88 2 TStatus.Tick.loops = 0;
89 2 TStatus.ms += 10;
90 2 if(LedFlash)
91 2 {
92 3 LedCnt ++;
93 3 if(LedCnt >= LedTick)
94 3 {
95 4 LedCnt = 0;
96 4 LED = ~LED;
97 4 }
98 3 }
99 2
100 2 /*
101 2 if(Led1Flash)
102 2 {
103 2 Led1Cnt ++;
104 2 if(Led1Cnt >= Led1Tick)
105 2 {
106 2 Led1Cnt = 0;
107 2 LED1 = ~LED1;
108 2 }
109 2 }
110 2 */
111 2
112 2 if((!fSetting) && BuzzerTimes)
113 2 {
114 3 BuzzerCnt ++;
115 3 if(BuzzerCnt >= BuzzerTick)
116 3 {
C51 COMPILER V8.00 STIMER 04/23/2009 15:56:16 PAGE 3
117 4 BuzzerCnt = 0;
118 4 BUZZER = ~BUZZER;
119 4 if(BUZZER == BUZZEROFF)
120 4 {
121 5 BuzzerTimes --;
122 5 }
123 4 }
124 3 }
125 2 }
126 1 }
127
128 void beep(unsigned char times, unsigned char tick)
129 {
130 1 fSetting = 1;
131 1 BuzzerTick = tick;
132 1 BuzzerTimes = times;
133 1 if(times)
134 1 {
135 2 BUZZER = BUZZERON;
136 2 }
137 1 else
138 1 {
139 2 BUZZER = BUZZEROFF;
140 2 }
141 1 fSetting = 0;
142 1 }
143
144 void delay( unsigned int time )
145 {
146 1 unsigned int data startms;
147 1
148 1 startms = GetTickCount();
149 1
150 1 while((GetTickCount() - startms) < time)
151 1 {
152 2 }
153 1 }
154
155 unsigned int GetTickCount(void)
156 {
157 1 unsigned int data cyl, ms;
158 1
159 1 #ifdef WATCHDOG
//ResetWDT();
#endif
162 1
163 1 ET1 = 0;
164 1 ms = TStatus.ms;
165 1 cyl = TStatus.Tick.cycles;
166 1 ET1 = 1;
167 1
168 1 return cyl / Interval.mscycles + ms;
169 1 }
170
171 unsigned int GetTenTickCount(void)
172 {
173 1 unsigned int data tmp;
174 1
175 1 #ifdef WATCHDOG
//ResetWDT();
#endif
178 1
C51 COMPILER V8.00 STIMER 04/23/2009 15:56:16 PAGE 4
179 1 ET1 = 0;
180 1 tmp = TStatus.ms;
181 1 ET1 = 1;
182 1
183 1 return tmp;
184 1 }
185
186 void InitTimer( unsigned long sysclk )
187 {
188 1 unsigned long data ltmp;
189 1
190 1 if((TMOD & 0xf0) != 0x03)
191 1 {
192 2 TMOD &= 0xf0;
193 2 TMOD |= 0x03;
194 2 }
195 1
196 1 SysClk = sysclk;
197 1 ltmp = SysClk / 100;
198 1 Interval.tenmsloops = (unsigned char)(ltmp >> 8);
199 1 Interval.mscycles = ltmp / 10;
200 1
201 1 SetIntPri(TF1_VECTOR, 0);
202 1 SetIntPri(TF0_VECTOR, 3);
203 1
204 1 TH0=0;
205 1 TR1=1;
206 1 ET1=1;
207 1 enable();
208 1 }
209
210 void InitUserTimer(unsigned char rldval, unsigned char startval)
211 {
212 1 UserReload = rldval;
213 1 TL0 = startval;
214 1 TF0 = 0;
215 1 TR0 = 1;
216 1 ET0 = 1;
217 1 }
218
219 void led(unsigned char ltick)
220 {
221 1 if(ltick == 0)
222 1 {
223 2 LedFlash = 0;
224 2 LED = LEDOFF;
225 2 }
226 1 else if(ltick == 0xff)
227 1 {
228 2 LedFlash = 0;
229 2 LED = LEDON;
230 2 }
231 1 else
232 1 {
233 2 LedTick = ltick;
234 2 LedFlash = 1;
235 2 }
236 1 }
237
238 /*
239 void led1(unsigned char ltick)
240 {
C51 COMPILER V8.00 STIMER 04/23/2009 15:56:16 PAGE 5
241 if(ltick == 0)
242 {
243 Led1Flash = 0;
244 LED1 = LEDOFF;
245 }
246 else if(ltick == 0xff)
247 {
248 Led1Flash = 0;
249 LED1 = LEDON;
250 }
251 else
252 {
253 Led1Tick = ltick;
254 Led1Flash = 1;
255 }
256 }
257 */
258
259 void StartCLKO(unsigned int div)
260 {
261 1 unsigned int data rld;
262 1
263 1 P1_0 = 1;
264 1
265 1 ET2 = 0;
266 1
267 1 T2CON = 0;
268 1 T2MOD = 0x02;
269 1
270 1 rld = 65536 - div;
271 1 RCAP2H = rld >> 8;
272 1 RCAP2L = rld & 0xff;
273 1
274 1 TH2 = 0xff;
275 1 TL2 = 0xff;
276 1
277 1 TR2 = 1;
278 1 }
279
280 void dummy(void)
281 {
282 1
283 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 414 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 4 6
PDATA SIZE = ---- ----
DATA SIZE = 13 14
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?