📄 sch51.lst
字号:
203 2 Return_code = RETURN_ERROR;
204 2 }
205 1 else
206 1 {
207 2 Return_code = RETURN_NORMAL;
208 2 }
209 1
210 1 SCH_tasks_G[TASK_INDEX].pTask = 0x0000;
211 1 SCH_tasks_G[TASK_INDEX].Delay = 0;
212 1 SCH_tasks_G[TASK_INDEX].Period = 0;
213 1
214 1 SCH_tasks_G[TASK_INDEX].RunMe = 0;
215 1
216 1 return Return_code; // return status
217 1 }
218
219
220 /*------------------------------------------------------------------*-
221
222 SCH_Report_Status()
223
224 Simple function to display error codes.
225
226 This version displays code on a port with attached LEDs:
227 adapt, if required, to report errors over serial link, etc.
228
229 Errors are only displayed for a limited period
230 (60000 ticks = 1 minute at 1ms tick interval).
231 After this the the error code is reset to 0.
232
233 This code may be easily adapted to display the last
234 error 'for ever': this may be appropriate in your
235 application.
236
237 See Chapter 10 for further information.
238
239 -*------------------------------------------------------------------*/
240 void SCH_Report_Status(void)
241 {
242 1 #ifdef SCH_REPORT_ERRORS
243 1 // ONLY APPLIES IF WE ARE REPORTING ERRORS
244 1 // Check for a new error code
245 1 if (Error_code_G != Last_error_code_G)
246 1 {
247 2 // Negative logic on LEDs assumed
248 2 Error_port = 255 - Error_code_G;
249 2
250 2 Last_error_code_G = Error_code_G;
251 2
252 2 if (Error_code_G != 0)
253 2 {
254 3 Error_tick_count_G = 60000;
255 3 }
256 2 else
257 2 {
258 3 Error_tick_count_G = 0;
259 3 }
260 2 }
261 1 else
262 1 {
263 2 if (Error_tick_count_G != 0)
264 2 {
C51 COMPILER V6.10 SCH51 04/18/2001 16:48:04 PAGE 15
265 3 if (--Error_tick_count_G == 0)
266 3 {
267 4 Error_code_G = 0; // Reset error code
268 4 }
269 3 }
270 2 }
271 1 #endif
272 1 }
273
274
275 /*------------------------------------------------------------------*-
276
277 SCH_Go_To_Sleep()
278
279 This scheduler enters 'idle mode' between clock ticks
280 to save power. The next clock tick will return the processor
281 to the normal operating state.
282
283 Note: a slight performance improvement is possible if this
284 function is implemented as a macro, or if the code here is simply
285 pasted into the 'dispatch' function.
286
287 However, by making this a function call, it becomes easier
288 - during development - to assess the performance of the
289 scheduler, using the 'performance analyser' in the Keil
290 hardware simulator. See Chapter 14 for examples for this.
291
292 *** May wish to disable this if using a watchdog ***
293
294 *** ADAPT AS REQUIRED FOR YOUR HARDWARE ***
295
296 -*------------------------------------------------------------------*/
297 void SCH_Go_To_Sleep()
298 {
299 1 PCON |= 0x01; // Enter idle mode (generic 8051 version)
300 1
301 1 // Entering idle mode requires TWO consecutive instructions
302 1 // on 80c515 / 80c505 - to avoid accidental triggering
303 1 //PCON |= 0x01; // Enter idle mode (#1)
304 1 //PCON |= 0x20; // Enter idle mode (#2)
305 1 }
306
307 /*------------------------------------------------------------------*-
308 ---- END OF FILE -------------------------------------------------
309 -*------------------------------------------------------------------*/
C51 COMPILER V6.10 SCH51 04/18/2001 16:48:04 PAGE 16
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION SCH_Dispatch_Tasks (BEGIN)
; SOURCE LINE # 69
; SOURCE LINE # 70
; SOURCE LINE # 74
0000 E4 CLR A
0001 F500 R MOV Index,A
0003 ?C0001:
; SOURCE LINE # 75
; SOURCE LINE # 76
0003 E500 R MOV A,Index
0005 75F007 MOV B,#07H
0008 A4 MUL AB
0009 2400 R ADD A,#LOW SCH_tasks_G+06H
000B F8 MOV R0,A
000C E6 MOV A,@R0
000D D3 SETB C
000E 9400 SUBB A,#00H
0010 4032 JC ?C0003
; SOURCE LINE # 77
; SOURCE LINE # 78
0012 E500 R MOV A,Index
0014 75F007 MOV B,#07H
0017 A4 MUL AB
0018 2400 R ADD A,#LOW SCH_tasks_G
001A F8 MOV R0,A
001B E6 MOV A,@R0
001C FE MOV R6,A
001D 08 INC R0
001E E6 MOV A,@R0
001F AA06 MOV R2,AR6
0021 F9 MOV R1,A
0022 120000 E LCALL ?C?ICALL
; SOURCE LINE # 80
0025 E500 R MOV A,Index
0027 75F007 MOV B,#07H
002A A4 MUL AB
002B 2400 R ADD A,#LOW SCH_tasks_G+06H
002D F8 MOV R0,A
002E 16 DEC @R0
; SOURCE LINE # 84
002F E500 R MOV A,Index
0031 75F007 MOV B,#07H
0034 A4 MUL AB
0035 2400 R ADD A,#LOW SCH_tasks_G+04H
0037 F8 MOV R0,A
0038 E6 MOV A,@R0
0039 FE MOV R6,A
003A 08 INC R0
003B E6 MOV A,@R0
003C 4E ORL A,R6
003D 7005 JNZ ?C0003
; SOURCE LINE # 85
; SOURCE LINE # 86
003F AF00 R MOV R7,Index
0041 120000 R LCALL _SCH_Delete_Task
; SOURCE LINE # 87
; SOURCE LINE # 88
; SOURCE LINE # 89
0044 ?C0003:
C51 COMPILER V6.10 SCH51 04/18/2001 16:48:04 PAGE 17
0044 0500 R INC Index
0046 E500 R MOV A,Index
0048 C3 CLR C
0049 9402 SUBB A,#02H
004B 40B6 JC ?C0001
004D ?C0002:
; SOURCE LINE # 92
004D 120000 R LCALL SCH_Report_Status
; SOURCE LINE # 95
0050 120000 R LCALL SCH_Go_To_Sleep
; SOURCE LINE # 96
0053 22 RET
; FUNCTION SCH_Dispatch_Tasks (END)
; FUNCTION _SCH_Add_Task (BEGIN)
0000 8E00 R MOV pFunction,R6
0002 8F00 R MOV pFunction+01H,R7
0004 8C00 R MOV DELAY,R4
0006 8D00 R MOV DELAY+01H,R5
;---- Variable 'PERIOD' assigned to Register 'R2/R3' ----
; SOURCE LINE # 143
; SOURCE LINE # 146
; SOURCE LINE # 147
;---- Variable 'Index' assigned to Register 'R6' ----
0008 E4 CLR A
0009 FE MOV R6,A
000A ?C0007:
; SOURCE LINE # 150
000A EE MOV A,R6
000B 75F007 MOV B,#07H
000E A4 MUL AB
000F 2400 R ADD A,#LOW SCH_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 # 151
; SOURCE LINE # 152
001F 0E INC R6
; SOURCE LINE # 153
0020 80E8 SJMP ?C0007
0022 ?C0008:
; SOURCE LINE # 156
0022 BE0206 CJNE R6,#02H,?C0009
; SOURCE LINE # 157
; SOURCE LINE # 161
0025 750001 R MOV Error_code_G,#01H
; SOURCE LINE # 164
0028 7F02 MOV R7,#02H
002A 22 RET
; SOURCE LINE # 165
002B ?C0009:
; SOURCE LINE # 168
002B EE MOV A,R6
002C 75F007 MOV B,#07H
C51 COMPILER V6.10 SCH51 04/18/2001 16:48:04 PAGE 18
002F A4 MUL AB
0030 2400 R ADD A,#LOW SCH_tasks_G
0032 F8 MOV R0,A
0033 A600 R MOV @R0,pFunction
0035 08 INC R0
0036 A600 R MOV @R0,pFunction+01H
; SOURCE LINE # 170
0038 EE MOV A,R6
0039 75F007 MOV B,#07H
003C A4 MUL AB
003D 2400 R ADD A,#LOW SCH_tasks_G+02H
003F F8 MOV R0,A
0040 A600 R MOV @R0,DELAY
0042 08 INC R0
0043 A600 R MOV @R0,DELAY+01H
; SOURCE LINE # 171
0045 EE MOV A,R6
0046 75F007 MOV B,#07H
0049 A4 MUL AB
004A 2400 R ADD A,#LOW SCH_tasks_G+04H
004C F8 MOV R0,A
004D A602 MOV @R0,AR2
004F 08 INC R0
0050 A603 MOV @R0,AR3
; SOURCE LINE # 173
0052 EE MOV A,R6
0053 75F007 MOV B,#07H
0056 A4 MUL AB
0057 2400 R ADD A,#LOW SCH_tasks_G+06H
0059 F8 MOV R0,A
005A E4 CLR A
005B F6 MOV @R0,A
; SOURCE LINE # 175
005C AF06 MOV R7,AR6
; SOURCE LINE # 176
005E ?C0010:
005E 22 RET
; FUNCTION _SCH_Add_Task (END)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -