📄 os_time.ls1
字号:
0035 CB 200 XCH A,R3
0036 08 201 INC R0
0037 E6 202 MOV A,@R0
0038 FA 203 MOV R2,A
0039 08 204 INC R0
003A E6 205 MOV A,@R0
003B F9 206 MOV R1,A
003C 90000F 207 MOV DPTR,#0FH
003F 120000 F 208 LCALL ?C?CLDOPTR
0042 F4 209 CPL A
0043 FE 210 MOV R6,A
0044 EF 211 MOV A,R7
0045 5E 212 ANL A,R6
0046 D082 213 POP DPL
0048 D083 214 POP DPH
004A F0 215 MOVX @DPTR,A
004B 7013 216 JNZ ?C0002
217 ; OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
218 ; SOURCE LINE # 43
004D 900000 F 219 MOV DPTR,#OSRdyGrp
0050 E0 220 MOVX A,@DPTR
0051 FF 221 MOV R7,A
0052 900010 222 MOV DPTR,#010H
0055 120000 F 223 LCALL ?C?CLDOPTR
0058 F4 224 CPL A
0059 FE 225 MOV R6,A
005A EF 226 MOV A,R7
005B 5E 227 ANL A,R6
005C 900000 F 228 MOV DPTR,#OSRdyGrp
005F F0 229 MOVX @DPTR,A
230 ; }
231 ; SOURCE LINE # 44
0060 232 ?C0002:
233 ; OSTCBCur->OSTCBDly = ticks; /* Load ticks i
n TCB */
234 ; SOURCE LINE # 45
0060 CF 235 XCH A,R7
0061 ED 236 MOV A,R5
0062 CF 237 XCH A,R7
0063 7800 F 238 MOV R0,#LOW (OSTCBCur)
0065 CB 239 XCH A,R3
0066 E6 240 MOV A,@R0
0067 CB 241 XCH A,R3
0068 08 242 INC R0
0069 E6 243 MOV A,@R0
A51 MACRO ASSEMBLER OS_TIME 08/08/2005 11:36:58 PAGE 5
006A FA 244 MOV R2,A
006B 08 245 INC R0
006C E6 246 MOV A,@R0
006D F9 247 MOV R1,A
006E 900009 248 MOV DPTR,#09H
0071 EC 249 MOV A,R4
0072 8FF0 250 MOV B,R7
0074 120000 F 251 LCALL ?C?ISTOPTR
252 ; OS_EXIT_CRITICAL();
253 ; SOURCE LINE # 46
0077 D2AF 254 SETB EA
255 ; OS_Sched(); /* Find next ta
sk to run! */
256 ; SOURCE LINE # 47
0079 120000 F 257 LCALL OS_Sched
258 ; }
259 ; SOURCE LINE # 48
260 ; }
261 ; SOURCE LINE # 49
007C 262 ?C0003:
007C 22 263 RET
264 ; END OF _OSTimeDly
265
266 ; /*$PAGE*/
267 ; /*
268 ; *****************************************************************************************
****************
269 ; * DELAY TASK FOR SPECIFIED TIME
270 ; *
271 ; * Description: This function is called to delay execution of the currently running task u
ntil some time
272 ; * expires. This call allows you to specify the delay time in HOURS, MINUTES
, SECONDS and
273 ; * MILLISECONDS instead of ticks.
274 ; *
275 ; * Arguments : hours specifies the number of hours that the task will be delayed (max
. is 255)
276 ; * minutes specifies the number of minutes (max. 59)
277 ; * seconds specifies the number of seconds (max. 59)
278 ; * milli specifies the number of milliseconds (max. 999)
279 ; *
280 ; * Returns : OS_NO_ERR
281 ; * OS_TIME_INVALID_MINUTES
282 ; * OS_TIME_INVALID_SECONDS
283 ; * OS_TIME_INVALID_MS
284 ; * OS_TIME_ZERO_DLY
285 ; *
286 ; * Note(s) : The resolution on the milliseconds depends on the tick rate. For example,
you can't do
287 ; * a 10 mS delay if the ticker interrupts every 100 mS. In this case, the de
lay would be
288 ; * set to 0. The actual delay is rounded to the nearest tick.
289 ; *****************************************************************************************
****************
290 ; */
291 ;
292 ; #if OS_TIME_DLY_HMSM_EN > 0
293 ; INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli)
294
---- 295 RSEG ?PR?_OSTimeDlyHMSM?OS_TIME
0000 296 _OSTimeDlyHMSM:
297 USING 0
298 ; SOURCE LINE # 77
0000 900000 F 299 MOV DPTR,#seconds?143
0003 EB 300 MOV A,R3
0004 F0 301 MOVX @DPTR,A
A51 MACRO ASSEMBLER OS_TIME 08/08/2005 11:36:58 PAGE 6
302 ;---- Variable 'minutes?142' assigned to Register 'R5' ----
0005 900000 F 303 MOV DPTR,#hours?141
0008 EF 304 MOV A,R7
0009 F0 305 MOVX @DPTR,A
306 ; {
307 ; SOURCE LINE # 78
308 ; INT32U ticks;
309 ; INT16U loops;
310 ;
311 ;
312 ; if (hours > 0 || minutes > 0 || seconds > 0 || milli > 0) {
313 ; SOURCE LINE # 83
000A D3 314 SETB C
000B 9400 315 SUBB A,#00H
000D 501E 316 JNC ?C0005
000F ED 317 MOV A,R5
0010 9400 318 SUBB A,#00H
0012 5019 319 JNC ?C0005
0014 900000 F 320 MOV DPTR,#seconds?143
0017 E0 321 MOVX A,@DPTR
0018 9400 322 SUBB A,#00H
001A 5011 323 JNC ?C0005
001C 900000 F 324 MOV DPTR,#milli?144+01H
001F E0 325 MOVX A,@DPTR
0020 9400 326 SUBB A,#00H
0022 900000 F 327 MOV DPTR,#milli?144
0025 E0 328 MOVX A,@DPTR
0026 9400 329 SUBB A,#00H
0028 5003 330 JNC $ + 5H
002A 020000 F 331 LJMP ?C0004
002D 332 ?C0005:
333 ; if (minutes > 59) {
334 ; SOURCE LINE # 84
002D ED 335 MOV A,R5
002E D3 336 SETB C
002F 943B 337 SUBB A,#03BH
0031 4003 338 JC ?C0006
339 ; return (OS_TIME_INVALID_MINUTES); /* Validate arguments to be within range
*/
340 ; SOURCE LINE # 85
0033 7F51 341 MOV R7,#051H
0035 22 342 RET
343 ; }
344 ; SOURCE LINE # 86
0036 345 ?C0006:
346 ; if (seconds > 59) {
347 ; SOURCE LINE # 87
0036 900000 F 348 MOV DPTR,#seconds?143
0039 E0 349 MOVX A,@DPTR
003A D3 350 SETB C
003B 943B 351 SUBB A,#03BH
003D 4003 352 JC ?C0008
353 ; return (OS_TIME_INVALID_SECONDS);
354 ; SOURCE LINE # 88
003F 7F52 355 MOV R7,#052H
0041 22 356 RET
357 ; }
358 ; SOURCE LINE # 89
0042 359 ?C0008:
360 ; if (milli > 999) {
361 ; SOURCE LINE # 90
0042 D3 362 SETB C
0043 900000 F 363 MOV DPTR,#milli?144+01H
0046 E0 364 MOVX A,@DPTR
0047 94E7 365 SUBB A,#0E7H
0049 900000 F 366 MOV DPTR,#milli?144
A51 MACRO ASSEMBLER OS_TIME 08/08/2005 11:36:58 PAGE 7
004C E0 367 MOVX A,@DPTR
004D 9403 368 SUBB A,#03H
004F 4003 369 JC ?C0009
370 ; return (OS_TIME_INVALID_MILLI);
371 ; SOURCE LINE # 91
0051 7F53 372 MOV R7,#053H
0053 22 373 RET
374 ; }
375 ; SOURCE LINE # 92
0054 376 ?C0009:
377 ; /* Compute the total number of clock tic
ks required.. */
378 ; /* .. (rounded to the nearest tick)
*/
379 ; ticks = ((INT32U)hours * 3600L + (INT32U)minutes * 60L + (INT32U)seconds) * OS_TI
CKS_PER_SEC
380 ; + OS_TICKS_PER_SEC * ((INT32U)milli + 500L / OS_TICKS_PER_SEC) / 1000L;
381 ; SOURCE LINE # 96
0054 CF 382 XCH A,R7
0055 ED 383 MOV A,R5
0056 CF 384 XCH A,R7
0057 E4 385 CLR A
0058 FC 386 MOV R4,A
0059 FD 387 MOV R5,A
005A FE 388 MOV R6,A
005B 7B3C 389 MOV R3,#03CH
005D FA 390 MOV R2,A
005E F9 391 MOV R1,A
005F F8 392 MOV R0,A
0060 120000 F 393 LCALL ?C?LMUL
0063 EC 394 MOV A,R4
0064 C0E0 395 PUSH ACC
0066 ED 396 MOV A,R5
0067 C0E0 397 PUSH ACC
0069 EE 398 MOV A,R6
006A C0E0 399 PUSH ACC
006C EF 400 MOV A,R7
006D C0E0 401 PUSH ACC
006F 900000 F 402 MOV DPTR,#hours?141
0072 E0 403 MOVX A,@DPTR
0073 FF 404 MOV R7,A
0074 E4 405 CLR A
0075 FC 406 MOV R4,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -