os_time.ls1
来自「在51单片机上移植成功的UCOS-II操作系统源代码,包括源代码及相关注释」· LS1 代码 · 共 1,130 行 · 第 1/5 页
LS1
1,130 行
0053 D082 200 POP DPL
0055 D083 201 POP DPH
0057 F0 202 MOVX @DPTR,A
0058 7013 203 JNZ ?C0002
204 ; OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
205 ; SOURCE LINE # 42
005A 900000 F 206 MOV DPTR,#OSRdyGrp
005D E0 207 MOVX A,@DPTR
005E FF 208 MOV R7,A
005F 900010 209 MOV DPTR,#010H
0062 120000 F 210 LCALL ?C?CLDOPTR
0065 F4 211 CPL A
0066 FE 212 MOV R6,A
0067 EF 213 MOV A,R7
0068 5E 214 ANL A,R6
0069 900000 F 215 MOV DPTR,#OSRdyGrp
006C F0 216 MOVX @DPTR,A
217 ; }
218 ; SOURCE LINE # 43
006D 219 ?C0002:
220 ; OSTCBCur->OSTCBDly = ticks; /* Load ticks i
n TCB */
221 ; SOURCE LINE # 44
006D 7800 F 222 MOV R0,#LOW (OSTCBCur)
006F 8603 223 MOV AR3,@R0
0071 08 224 INC R0
0072 E6 225 MOV A,@R0
0073 FA 226 MOV R2,A
0074 08 227 INC R0
0075 E6 228 MOV A,@R0
0076 F9 229 MOV R1,A
0077 900009 230 MOV DPTR,#09H
007A EC 231 MOV A,R4
007B 8DF0 232 MOV B,R5
007D 120000 F 233 LCALL ?C?ISTOPTR
234 ; OS_EXIT_CRITICAL();
235 ; SOURCE LINE # 45
0080 D2AF 236 SETB EA
237 ; OSSched(); /* Find next ta
sk to run! */
238 ; SOURCE LINE # 46
0082 120000 F 239 LCALL _?OSSched
240 ; }
241 ; SOURCE LINE # 47
242 ; }
A51 MACRO ASSEMBLER OS_TIME 09/09/2007 21:13:22 PAGE 5
243 ; SOURCE LINE # 48
0085 244 ?C0003:
0085 900002 245 MOV DPTR,#02H
0088 020000 F 246 LJMP ?C?ADDXBP
247 ; END OF _?OSTimeDly
248
249 ; /*$PAGE*/
250 ; /*
251 ; *****************************************************************************************
****************
252 ; * DELAY TASK FOR SPECIFIED TIME
253 ; *
254 ; * Description: This function is called to delay execution of the currently running task u
ntil some time
255 ; * expires. This call allows you to specify the delay time in HOURS, MINUTES
, SECONDS and
256 ; * MILLISECONDS instead of ticks.
257 ; *
258 ; * Arguments : hours specifies the number of hours that the task will be delayed (max
. is 255)
259 ; * minutes specifies the number of minutes (max. 59)
260 ; * seconds specifies the number of seconds (max. 59)
261 ; * milli specifies the number of milliseconds (max. 999)
262 ; *
263 ; * Returns : OS_NO_ERR
264 ; * OS_TIME_INVALID_MINUTES
265 ; * OS_TIME_INVALID_SECONDS
266 ; * OS_TIME_INVALID_MS
267 ; * OS_TIME_ZERO_DLY
268 ; *
269 ; * Note(s) : The resolution on the milliseconds depends on the tick rate. For example,
you can't do
270 ; * a 10 mS delay if the ticker interrupts every 100 mS. In this case, the de
lay would be
271 ; * set to 0. The actual delay is rounded to the nearest tick.
272 ; *****************************************************************************************
****************
273 ; */
274 ;
275 ; INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli) reentrant
276
---- 277 RSEG ?PR?_?OSTimeDlyHMSM?OS_TIME
0000 278 _?OSTimeDlyHMSM:
279 USING 0
280 ; SOURCE LINE # 75
0000 90FFFF 281 MOV DPTR,#0FFFFH
0003 120000 F 282 LCALL ?C?ADDXBP
0006 EB 283 MOV A,R3
0007 F0 284 MOVX @DPTR,A
0008 90FFFF 285 MOV DPTR,#0FFFFH
000B 120000 F 286 LCALL ?C?ADDXBP
000E ED 287 MOV A,R5
000F F0 288 MOVX @DPTR,A
0010 90FFFF 289 MOV DPTR,#0FFFFH
0013 120000 F 290 LCALL ?C?ADDXBP
0016 EF 291 MOV A,R7
0017 F0 292 MOVX @DPTR,A
0018 90FFFA 293 MOV DPTR,#0FFFAH
001B 120000 F 294 LCALL ?C?ADDXBP
295 ; {
296 ; INT32U ticks;
297 ; INT16U loops;
298 ;
299 ;
300 ; if (hours > 0 || minutes > 0 || seconds > 0 || milli > 0) {
301 ; SOURCE LINE # 81
A51 MACRO ASSEMBLER OS_TIME 09/09/2007 21:13:22 PAGE 6
001E 900006 302 MOV DPTR,#06H
0021 120000 F 303 LCALL ?C?XBPOFF
0024 E0 304 MOVX A,@DPTR
0025 D3 305 SETB C
0026 9400 306 SUBB A,#00H
0028 502D 307 JNC ?C0005
002A 900007 308 MOV DPTR,#07H
002D 120000 F 309 LCALL ?C?XBPOFF
0030 E0 310 MOVX A,@DPTR
0031 D3 311 SETB C
0032 9400 312 SUBB A,#00H
0034 5021 313 JNC ?C0005
0036 900008 314 MOV DPTR,#08H
0039 120000 F 315 LCALL ?C?XBPOFF
003C E0 316 MOVX A,@DPTR
003D D3 317 SETB C
003E 9400 318 SUBB A,#00H
0040 5015 319 JNC ?C0005
0042 900009 320 MOV DPTR,#09H
0045 120000 F 321 LCALL ?C?XBPOFF
0048 E0 322 MOVX A,@DPTR
0049 FE 323 MOV R6,A
004A A3 324 INC DPTR
004B E0 325 MOVX A,@DPTR
004C D3 326 SETB C
004D 9400 327 SUBB A,#00H
004F EE 328 MOV A,R6
0050 9400 329 SUBB A,#00H
0052 5003 330 JNC $ + 5H
0054 020000 F 331 LJMP ?C0004
0057 332 ?C0005:
333 ; if (minutes > 59) {
334 ; SOURCE LINE # 82
0057 900007 335 MOV DPTR,#07H
005A 120000 F 336 LCALL ?C?XBPOFF
005D E0 337 MOVX A,@DPTR
005E FE 338 MOV R6,A
005F D3 339 SETB C
0060 943B 340 SUBB A,#03BH
0062 4005 341 JC ?C0006
342 ; return (OS_TIME_INVALID_MINUTES); /* Validate arguments to be within range
*/
343 ; SOURCE LINE # 83
0064 7F51 344 MOV R7,#051H
0066 020000 F 345 LJMP ?C0007
346 ; }
347 ; SOURCE LINE # 84
0069 348 ?C0006:
349 ; if (seconds > 59) {
350 ; SOURCE LINE # 85
0069 900008 351 MOV DPTR,#08H
006C 120000 F 352 LCALL ?C?XBPOFF
006F E0 353 MOVX A,@DPTR
0070 D3 354 SETB C
0071 943B 355 SUBB A,#03BH
0073 4005 356 JC ?C0008
357 ; return (OS_TIME_INVALID_SECONDS);
358 ; SOURCE LINE # 86
0075 7F52 359 MOV R7,#052H
0077 020000 F 360 LJMP ?C0007
361 ; }
362 ; SOURCE LINE # 87
007A 363 ?C0008:
364 ; if (milli > 999) {
365 ; SOURCE LINE # 88
007A 900009 366 MOV DPTR,#09H
A51 MACRO ASSEMBLER OS_TIME 09/09/2007 21:13:22 PAGE 7
007D 120000 F 367 LCALL ?C?XBPOFF
0080 E0 368 MOVX A,@DPTR
0081 FC 369 MOV R4,A
0082 A3 370 INC DPTR
0083 E0 371 MOVX A,@DPTR
0084 D3 372 SETB C
0085 94E7 373 SUBB A,#0E7H
0087 EC 374 MOV A,R4
0088 9403 375 SUBB A,#03H
008A 4005 376 JC ?C0009
377 ; return (OS_TIME_INVALID_MILLI);
378 ; SOURCE LINE # 89
008C 7F53 379 MOV R7,#053H
008E 020000 F 380 LJMP ?C0007
381 ; }
382 ; SOURCE LINE # 90
0091 383 ?C0009:
384 ; /* Compute the total number of clock tic
ks required.. */
385 ; /* .. (rounded to the nearest tick)
*/
386 ; ticks = ((INT32U)hours * 3600L + (INT32U)minutes * 60L + (INT32U)seconds) * OS_TI
CKS_PER_SEC
387 ; + OS_TICKS_PER_SEC * ((INT32U)milli + 500L / OS_TICKS_PER_SEC) / 1000L;
388 ; SOURCE LINE # 94
0091 AF06 389 MOV R7,AR6
0093 E4 390 CLR A
0094 FC 391 MOV R4,A
0095 FD 392 MOV R5,A
0096 FE 393 MOV R6,A
0097 7B3C 394 MOV R3,#03CH
0099 FA 395 MOV R2,A
009A F9 396 MOV R1,A
009B F8 397 MOV R0,A
009C 120000 F 398 LCALL ?C?LMUL
009F C004 399 PUSH AR4
00A1 C005 400 PUSH AR5
00A3 C006 401 PUSH AR6
00A5 C007 402 PUSH AR7
00A7 900006 403 MOV DPTR,#06H
00AA 120000 F 404 LCALL ?C?XBPOFF
00AD E0 405 MOVX A,@DPTR
00AE FF 406 MOV R7,A
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?