📄 sch51a.lst
字号:
221 1 }
C51 COMPILER V6.10 SCH51A 04/09/2001 15:00:14 PAGE 14
222
223
224 /*------------------------------------------------------------------*-
225
226 SCH_Report_Status()
227
228 Simple function to display error codes.
229
230 This version displays code on a port with attached LEDs:
231 adapt, if required, to report errors over serial link, etc.
232
233 Errors are only displayed for a limited period
234 (60000 ticks = 1 minute at 1ms tick interval).
235 After this the the error code is reset to 0.
236
237 This code may be easily adapted to display the last
238 error 'for ever': this may be appropriate in your
239 application.
240
241 See Chapter 10 for further information.
242
243 -*------------------------------------------------------------------*/
244 void SCH_Report_Status(void)
245 {
246 1 #ifdef SCH_REPORT_ERRORS
247 1 // ONLY APPLIES IF WE ARE REPORTING ERRORS
248 1 // Check for a new error code
249 1 if (Error_code_G != Last_error_code_G)
250 1 {
251 2 // Negative logic on LEDs assumed
252 2 Error_port = 255 - Error_code_G;
253 2
254 2 Last_error_code_G = Error_code_G;
255 2
256 2 if (Error_code_G != 0)
257 2 {
258 3 Error_tick_count_G = 60000;
259 3 }
260 2 else
261 2 {
262 3 Error_tick_count_G = 0;
263 3 }
264 2 }
265 1 else
266 1 {
267 2 if (Error_tick_count_G != 0)
268 2 {
269 3 if (--Error_tick_count_G == 0)
270 3 {
271 4 Error_code_G = 0; // Reset error code
272 4 }
273 3 }
274 2 }
275 1 #endif
276 1 }
277
278
279 /*------------------------------------------------------------------*-
280
281 SCH_Go_To_Sleep()
282
283 This scheduler enters 'idle mode' between clock ticks
C51 COMPILER V6.10 SCH51A 04/09/2001 15:00:14 PAGE 15
284 to save power. The next clock tick will return the processor
285 to the normal operating state.
286
287 Note: a slight performance improvement is possible if this
288 function is implemented as a macro, or if the code here is simply
289 pasted into the 'dispatch' function.
290
291 However, by making this a function call, it becomes easier
292 - during development - to assess the performance of the
293 scheduler, using the 'performance analyser' in the Keil
294 hardware simulator. See Chapter 14 for examples for this.
295
296 *** May wish to disable this if using a watchdog ***
297
298 *** ADAPT AS REQUIRED FOR YOUR HARDWARE ***
299
300 -*------------------------------------------------------------------*/
301 void SCH_Go_To_Sleep()
302 {
303 1 PCON |= 0x01; // Enter idle mode (generic 8051 version)
304 1
305 1 // Entering idle mode requires TWO consecutive instructions
306 1 // on 80c515 / 80c505 - to avoid accidental triggering
307 1 //PCON |= 0x01; // Enter idle mode (#1)
308 1 //PCON |= 0x20; // Enter idle mode (#2)
309 1 }
310
311
312 /*------------------------------------------------------------------*-
313 ---- END OF FILE -------------------------------------------------
314 -*------------------------------------------------------------------*/
C51 COMPILER V6.10 SCH51A 04/09/2001 15:00:14 PAGE 16
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION SCH_Dispatch_Tasks (BEGIN)
; SOURCE LINE # 73
; SOURCE LINE # 74
; SOURCE LINE # 78
0000 E4 CLR A
0001 F500 R MOV Index,A
0003 ?C0001:
; SOURCE LINE # 79
; SOURCE LINE # 80
0003 E500 R MOV A,Index
0005 75F005 MOV B,#05H
0008 A4 MUL AB
0009 2400 R ADD A,#LOW SCH_tasks_G+04H
000B F8 MOV R0,A
000C E6 MOV A,@R0
000D D3 SETB C
000E 9400 SUBB A,#00H
0010 402E JC ?C0003
; SOURCE LINE # 81
; SOURCE LINE # 82
0012 E500 R MOV A,Index
0014 75F005 MOV B,#05H
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 # 84
0025 E500 R MOV A,Index
0027 75F005 MOV B,#05H
002A A4 MUL AB
002B 2400 R ADD A,#LOW SCH_tasks_G+04H
002D F8 MOV R0,A
002E 16 DEC @R0
; SOURCE LINE # 88
002F E500 R MOV A,Index
0031 75F005 MOV B,#05H
0034 A4 MUL AB
0035 2400 R ADD A,#LOW SCH_tasks_G+03H
0037 F8 MOV R0,A
0038 E6 MOV A,@R0
0039 7005 JNZ ?C0003
; SOURCE LINE # 89
; SOURCE LINE # 90
003B AF00 R MOV R7,Index
003D 120000 R LCALL _SCH_Delete_Task
; SOURCE LINE # 91
; SOURCE LINE # 92
; SOURCE LINE # 93
0040 ?C0003:
0040 0500 R INC Index
0042 E500 R MOV A,Index
0044 C3 CLR C
0045 9403 SUBB A,#03H
C51 COMPILER V6.10 SCH51A 04/09/2001 15:00:14 PAGE 17
0047 40BA JC ?C0001
0049 ?C0002:
; SOURCE LINE # 96
0049 120000 R LCALL SCH_Report_Status
; SOURCE LINE # 99
004C 120000 R LCALL SCH_Go_To_Sleep
; SOURCE LINE # 100
004F 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
;---- Variable 'DELAY' assigned to Register 'R7' ----
0004 AF05 MOV R7,AR5
;---- Variable 'PERIOD' assigned to Register 'R3' ----
; SOURCE LINE # 147
; SOURCE LINE # 150
; SOURCE LINE # 151
;---- Variable 'Index' assigned to Register 'R6' ----
0006 E4 CLR A
0007 FE MOV R6,A
0008 ?C0007:
; SOURCE LINE # 154
0008 EE MOV A,R6
0009 75F005 MOV B,#05H
000C A4 MUL AB
000D 2400 R ADD A,#LOW SCH_tasks_G
000F F8 MOV R0,A
0010 E6 MOV A,@R0
0011 FC MOV R4,A
0012 08 INC R0
0013 E6 MOV A,@R0
0014 4C ORL A,R4
0015 6009 JZ ?C0008
0017 EE MOV A,R6
0018 C3 CLR C
0019 9403 SUBB A,#03H
001B 5003 JNC ?C0008
; SOURCE LINE # 155
; SOURCE LINE # 156
001D 0E INC R6
; SOURCE LINE # 157
001E 80E8 SJMP ?C0007
0020 ?C0008:
; SOURCE LINE # 160
0020 BE0306 CJNE R6,#03H,?C0009
; SOURCE LINE # 161
; SOURCE LINE # 165
0023 750001 R MOV Error_code_G,#01H
; SOURCE LINE # 168
0026 7F03 MOV R7,#03H
0028 22 RET
; SOURCE LINE # 169
0029 ?C0009:
; SOURCE LINE # 172
0029 EE MOV A,R6
002A 75F005 MOV B,#05H
002D A4 MUL AB
002E 2400 R ADD A,#LOW SCH_tasks_G
0030 F8 MOV R0,A
0031 A600 R MOV @R0,pFunction
C51 COMPILER V6.10 SCH51A 04/09/2001 15:00:14 PAGE 18
0033 08 INC R0
0034 A600 R MOV @R0,pFunction+01H
; SOURCE LINE # 174
0036 EE MOV A,R6
0037 75F005 MOV B,#05H
003A A4 MUL AB
003B 2400 R ADD A,#LOW SCH_tasks_G+02H
003D F8 MOV R0,A
003E A607 MOV @R0,AR7
; SOURCE LINE # 175
0040 EE MOV A,R6
0041 75F005 MOV B,#05H
0044 A4 MUL AB
0045 2400 R ADD A,#LOW SCH_tasks_G+03H
0047 F8 MOV R0,A
0048 A603 MOV @R0,AR3
; SOURCE LINE # 177
004A EE MOV A,R6
004B 75F005 MOV B,#05H
004E A4 MUL AB
004F 2400 R ADD A,#LOW SCH_tasks_G+04H
0051 F8 MOV R0,A
0052 E4 CLR A
0053 F6 MOV @R0,A
; SOURCE LINE # 179
0054 AF06 MOV R7,AR6
; SOURCE LINE # 180
0056 ?C0010:
0056 22 RET
; FUNCTION _SCH_Add_Task (END)
; FUNCTION _SCH_Delete_Task (BEGIN)
;---- Variable 'TASK_INDEX' assigned to Register 'R7' ----
; SOURCE LINE # 195
; SOURCE LINE # 196
; SOURCE LINE # 199
0000 EF MOV A,R7
0001 75F005 MOV B,#05H
0004 A4 MUL AB
0005 2400 R ADD A,#LOW SCH_tasks_G
0007 F8 MOV R0,A
0008 E6 MOV A,@R0
0009 FC MOV R4,A
000A 08 INC R0
000B E6 MOV A,@R0
000C 4C ORL A,R4
000D 7007 JNZ ?C0011
; SOURCE LINE # 200
; SOURCE LINE # 204
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -