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 + -
显示快捷键?