📄 hsch51.lst
字号:
216 1 {
217 2 Return_code = RETURN_NORMAL;
218 2 }
219 1
220 1 hSCH_tasks_G[Task_index].pTask = 0;
221 1 hSCH_tasks_G[Task_index].Delay = 0;
222 1 hSCH_tasks_G[Task_index].Period = 0;
223 1
224 1 hSCH_tasks_G[Task_index].RunMe = 0;
225 1
226 1 return Return_code; // return status
227 1 }
228
229
230 /*------------------------------------------------------------------*-
231
232 hSCH_Report_Status()
233
234 Simple function to display error codes.
235
236 This version displays code on a port with attached LEDs:
237 adapt, if required, to report errors over serial link, etc.
238
239 Errors are only displayed for a limited period
240 (60000 ticks = 1 minute at 1ms tick interval).
241 After this the the error code is reset to 0.
242
243 This code may be easily adapted to display the last
244 error 'for ever': this may be appropriate in your
245 application.
246
247 See Chapter 14 for further information.
248
249 -*------------------------------------------------------------------*/
250 void hSCH_Report_Status(void)
251 {
252 1 #ifdef SCH_REPORT_ERRORS
253 1 // ONLY APPLIES IF WE ARE REPORTING ERRORS
254 1 // Check for a new error code
255 1 if (Error_code_G != Last_error_code_G)
256 1 {
257 2 // Negative logic on LEDs assumed
258 2 Error_port = 255 - Error_code_G;
259 2
260 2 Last_error_code_G = Error_code_G;
261 2
262 2 if (Error_code_G != 0)
263 2 {
264 3 Error_tick_count_G = 60000;
265 3 }
266 2 else
267 2 {
268 3 Error_tick_count_G = 0;
269 3 }
270 2 }
271 1 else
272 1 {
273 2 if (Error_tick_count_G != 0)
274 2 {
C51 COMPILER V6.10 HSCH51 04/19/2001 12:07:05 PAGE 15
275 3 if (--Error_tick_count_G == 0)
276 3 {
277 4 Error_code_G = 0; // Reset error code
278 4 }
279 3 }
280 2 }
281 1 #endif
282 1 }
283
284
285 /*------------------------------------------------------------------*-
286
287 hSCH_Go_To_Sleep()
288
289 This scheduler enters 'idle mode' between clock ticks
290 to save power. The next clock tick will return the processor
291 to the normal operating state.
292
293 Note: a slight performance improvement is possible if this
294 function is implemented as a macro, or if the code here is simply
295 pasted into the 'dispatch' function.
296
297 However, by making this a function call, it becomes easier
298 - during development - to assess the performance of the
299 scheduler, using the 'performance analyser' in the Keil
300 hardware simulator. See Chapter 14 for examples for this.
301
302 *** May wish to disable this if using a watchdog ***
303
304 *** ADAPT AS REQUIRED FOR YOUR HARDWARE ***
305
306 -*------------------------------------------------------------------*/
307 void hSCH_Go_To_Sleep()
308 {
309 1 PCON |= 0x01; // Enter idle mode (generic 8051 version)
310 1
311 1 // Entering idle mode requires TWO consecutive instructions
312 1 // on 80c515 / 80c505 - to avoid accidental triggering
313 1 //PCON |= 0x01; // Enter idle mode (#1)
314 1 //PCON |= 0x20; // Enter idle mode (#2)
315 1 }
316
317
318 /*------------------------------------------------------------------*-
319 ---- END OF FILE -------------------------------------------------
320 -*------------------------------------------------------------------*/
321
322
C51 COMPILER V6.10 HSCH51 04/19/2001 12:07:05 PAGE 16
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION hSCH_Dispatch_Tasks (BEGIN)
; SOURCE LINE # 71
; SOURCE LINE # 72
; SOURCE LINE # 76
0000 E4 CLR A
0001 F500 R MOV Index,A
0003 ?C0001:
; SOURCE LINE # 77
; SOURCE LINE # 79
0003 E500 R MOV A,Index
0005 75F008 MOV B,#08H
0008 A4 MUL AB
0009 2400 R ADD A,#LOW hSCH_tasks_G+07H
000B F8 MOV R0,A
000C E6 MOV A,@R0
000D 6049 JZ ?C0003
000F E500 R MOV A,Index
0011 75F008 MOV B,#08H
0014 A4 MUL AB
0015 2400 R ADD A,#LOW hSCH_tasks_G+06H
0017 F8 MOV R0,A
0018 E6 MOV A,@R0
0019 D3 SETB C
001A 9400 SUBB A,#00H
001C 403A JC ?C0003
; SOURCE LINE # 80
; SOURCE LINE # 81
001E E500 R MOV A,Index
0020 75F008 MOV B,#08H
0023 A4 MUL AB
0024 2400 R ADD A,#LOW hSCH_tasks_G
0026 F8 MOV R0,A
0027 E6 MOV A,@R0
0028 FE MOV R6,A
0029 08 INC R0
002A E6 MOV A,@R0
002B AA06 MOV R2,AR6
002D F9 MOV R1,A
002E 120000 E LCALL ?C?ICALL
; SOURCE LINE # 83
0031 E500 R MOV A,Index
0033 75F008 MOV B,#08H
0036 A4 MUL AB
0037 2400 R ADD A,#LOW hSCH_tasks_G+06H
0039 F8 MOV R0,A
003A 16 DEC @R0
; SOURCE LINE # 87
003B E500 R MOV A,Index
003D 75F008 MOV B,#08H
0040 A4 MUL AB
0041 2400 R ADD A,#LOW hSCH_tasks_G+04H
0043 F8 MOV R0,A
0044 E6 MOV A,@R0
0045 FE MOV R6,A
0046 08 INC R0
0047 E6 MOV A,@R0
0048 4E ORL A,R6
0049 700D JNZ ?C0003
; SOURCE LINE # 88
C51 COMPILER V6.10 HSCH51 04/19/2001 12:07:05 PAGE 17
; SOURCE LINE # 90
004B E500 R MOV A,Index
004D 75F008 MOV B,#08H
0050 A4 MUL AB
0051 2400 R ADD A,#LOW hSCH_tasks_G
0053 F8 MOV R0,A
0054 E4 CLR A
0055 F6 MOV @R0,A
0056 08 INC R0
0057 F6 MOV @R0,A
; SOURCE LINE # 91
; SOURCE LINE # 92
; SOURCE LINE # 93
0058 ?C0003:
0058 0500 R INC Index
005A E500 R MOV A,Index
005C C3 CLR C
005D 9402 SUBB A,#02H
005F 40A2 JC ?C0001
0061 ?C0002:
; SOURCE LINE # 96
0061 120000 R LCALL hSCH_Report_Status
; SOURCE LINE # 99
0064 120000 R LCALL hSCH_Go_To_Sleep
; SOURCE LINE # 100
0067 22 RET
; FUNCTION hSCH_Dispatch_Tasks (END)
; FUNCTION _hSCH_Add_Task (BEGIN)
0000 8E00 R MOV Fn_p,R6
0002 8F00 R MOV Fn_p+01H,R7
0004 8C00 R MOV Del,R4
0006 8D00 R MOV Del+01H,R5
;---- Variable 'Per' assigned to Register 'R2/R3' ----
; SOURCE LINE # 150
; SOURCE LINE # 154
; SOURCE LINE # 155
;---- Variable 'Index' assigned to Register 'R6' ----
0008 E4 CLR A
0009 FE MOV R6,A
000A ?C0007:
; SOURCE LINE # 158
000A EE MOV A,R6
000B 75F008 MOV B,#08H
000E A4 MUL AB
000F 2400 R ADD A,#LOW hSCH_tasks_G
0011 F8 MOV R0,A
0012 E6 MOV A,@R0
0013 FC MOV R4,A
0014 08 INC R0
0015 E6 MOV A,@R0
0016 4C ORL A,R4
0017 6009 JZ ?C0008
0019 EE MOV A,R6
001A C3 CLR C
001B 9402 SUBB A,#02H
001D 5003 JNC ?C0008
; SOURCE LINE # 159
; SOURCE LINE # 160
001F 0E INC R6
; SOURCE LINE # 161
0020 80E8 SJMP ?C0007
C51 COMPILER V6.10 HSCH51 04/19/2001 12:07:05 PAGE 18
0022 ?C0008:
; SOURCE LINE # 164
0022 BE0206 CJNE R6,#02H,?C0009
; SOURCE LINE # 165
; SOURCE LINE # 169
0025 750001 R MOV Error_code_G,#01H
; SOURCE LINE # 172
0028 7F02 MOV R7,#02H
002A 22 RET
; SOURCE LINE # 173
002B ?C0009:
; SOURCE LINE # 176
002B EE MOV A,R6
002C 75F008 MOV B,#08H
002F A4 MUL AB
0030 2400 R ADD A,#LOW hSCH_tasks_G
0032 F8 MOV R0,A
0033 A600 R MOV @R0,Fn_p
0035 08 INC R0
0036 A600 R MOV @R0,Fn_p+01H
; SOURCE LINE # 178
0038 EE MOV A,R6
0039 75F008 MOV B,#08H
003C A4 MUL AB
003D 2400 R ADD A,#LOW hSCH_tasks_G+02H
003F F8 MOV R0,A
0040 A600 R MOV @R0,Del
0042 08 INC R0
0043 A600 R MOV @R0,Del+01H
; SOURCE LINE # 179
0045 EE MOV A,R6
0046 75F008 MOV B,#08H
0049 A4 MUL AB
004A 2400 R ADD A,#LOW hSCH_tasks_G+04H
004C F8 MOV R0,A
004D A602 MOV @R0,AR2
004F 08 INC R0
0050 A603 MOV @R0,AR3
; SOURCE LINE # 181
0052 A200 R MOV C,Co_op
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -