⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_time.src

📁 uCOS-II_2.52在51上的移植程序
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; .\OS_TIME.SRC generated from: OS_TIME.C
; COMPILER INVOKED BY:
;        C:\Keil\C51\BIN\C51.EXE OS_TIME.C LARGE BROWSE ORDER NOAREGS DEBUG OBJECTEXTEND SRC(.\OS_TIME.SRC)

$NOMOD51

NAME	OS_TIME

P0	DATA	080H
P1	DATA	090H
P2	DATA	0A0H
P3	DATA	0B0H
PSW	DATA	0D0H
ACC	DATA	0E0H
B	DATA	0F0H
SP	DATA	081H
DPL	DATA	082H
DPH	DATA	083H
PCON	DATA	087H
TCON	DATA	088H
TMOD	DATA	089H
TL0	DATA	08AH
TL1	DATA	08BH
TH0	DATA	08CH
TH1	DATA	08DH
IE	DATA	0A8H
IP	DATA	0B8H
SCON	DATA	098H
SBUF	DATA	099H
CY	BIT	0D0H.7
AC	BIT	0D0H.6
F0	BIT	0D0H.5
RS1	BIT	0D0H.4
RS0	BIT	0D0H.3
OV	BIT	0D0H.2
P	BIT	0D0H.0
TF1	BIT	088H.7
TR1	BIT	088H.6
TF0	BIT	088H.5
TR0	BIT	088H.4
IE1	BIT	088H.3
IT1	BIT	088H.2
IE0	BIT	088H.1
IT0	BIT	088H.0
EA	BIT	0A8H.7
ES	BIT	0A8H.4
ET1	BIT	0A8H.3
EX1	BIT	0A8H.2
ET0	BIT	0A8H.1
EX0	BIT	0A8H.0
PS	BIT	0B8H.4
PT1	BIT	0B8H.3
PX1	BIT	0B8H.2
PT0	BIT	0B8H.1
PX0	BIT	0B8H.0
RD	BIT	0B0H.7
WR	BIT	0B0H.6
T1	BIT	0B0H.5
T0	BIT	0B0H.4
INT1	BIT	0B0H.3
INT0	BIT	0B0H.2
TXD	BIT	0B0H.1
RXD	BIT	0B0H.0
SM0	BIT	098H.7
SM1	BIT	098H.6
SM2	BIT	098H.5
REN	BIT	098H.4
TB8	BIT	098H.3
RB8	BIT	098H.2
TI	BIT	098H.1
RI	BIT	098H.0
?PR?_OSTimeDly?OS_TIME                   SEGMENT CODE 
?PR?_OSTimeDlyHMSM?OS_TIME               SEGMENT CODE 
?XD?_OSTimeDlyHMSM?OS_TIME               SEGMENT XDATA OVERLAYABLE 
?PR?_OSTimeDlyResume?OS_TIME             SEGMENT CODE 
?XD?_OSTimeDlyResume?OS_TIME             SEGMENT XDATA OVERLAYABLE 
?PR?OSTimeGet?OS_TIME                    SEGMENT CODE 
?PR?_OSTimeSet?OS_TIME                   SEGMENT CODE 
	EXTRN	XDATA (OSRdyGrp)
	EXTRN	XDATA (OSRdyTbl)
	EXTRN	IDATA (OSTCBCur)
	EXTRN	XDATA (OSTCBPrioTbl)
	EXTRN	XDATA (OSTime)
	EXTRN	CODE (OS_Sched)
	EXTRN	CODE (?C?CLDOPTR)
	EXTRN	CODE (?C?ISTOPTR)
	EXTRN	CODE (?C?LMUL)
	EXTRN	CODE (?C?ULDIV)
	EXTRN	CODE (?C?LSTXDATA)
	EXTRN	CODE (?C?ILDOPTR)
	PUBLIC	_OSTimeSet
	PUBLIC	OSTimeGet
	PUBLIC	_OSTimeDlyResume
	PUBLIC	?_OSTimeDlyHMSM?BYTE
	PUBLIC	_OSTimeDlyHMSM
	PUBLIC	_OSTimeDly

	RSEG  ?XD?_OSTimeDlyHMSM?OS_TIME
?_OSTimeDlyHMSM?BYTE:
      hours?141:   DS   1
    minutes?142:   DS   1
    seconds?143:   DS   1
      milli?144:   DS   2
	ORG  5
      ticks?145:   DS   4
      loops?146:   DS   2

	RSEG  ?XD?_OSTimeDlyResume?OS_TIME
?_OSTimeDlyResume?BYTE:
       ptcb?248:   DS   3
; /*
; *********************************************************************************************************
; *                                                uC/OS-II
; *                                          The Real-Time Kernel
; *                                             TIME MANAGEMENT
; *
; *                          (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL
; *                                           All Rights Reserved
; *
; * File : OS_TIME.C
; * By   : Jean J. Labrosse
; *********************************************************************************************************
; */
; 
; #ifndef  OS_MASTER_FILE
; #include "includes.h"
; #endif
; 
; /*
; *********************************************************************************************************
; *                                DELAY TASK 'n' TICKS   (n from 0 to 65535)
; *
; * Description: This function is called to delay execution of the currently running task until the
; *              specified number of system ticks expires.  This, of course, directly equates to delaying
; *              the current task for some time to expire.  No delay will result If the specified delay is
; *              0.  If the specified delay is greater than 0 then, a context switch will result.
; *
; * Arguments  : ticks     is the time delay that the task will be suspended in number of clock 'ticks'.
; *                        Note that by specifying 0, the task will not be delayed.
; *
; * Returns    : none
; *********************************************************************************************************
; */
; 
; void  OSTimeDly (INT16U ticks)

	RSEG  ?PR?_OSTimeDly?OS_TIME
_OSTimeDly:
	USING	0
			; SOURCE LINE # 35
;---- Variable 'ticks?040' assigned to Register 'R4/R5' ----
	XCH  	A,R5
	MOV  	A,R7
	XCH  	A,R5
	XCH  	A,R4
	MOV  	A,R6
	XCH  	A,R4
; {
			; SOURCE LINE # 36
;    
; 
; 
;     if (ticks > 0) {                                                      /* 0 means no delay!         */
			; SOURCE LINE # 40
	SETB 	C
	MOV  	A,R5
	SUBB 	A,#00H
	MOV  	A,R4
	SUBB 	A,#00H
	JC   	?C0003
;         OS_ENTER_CRITICAL();
			; SOURCE LINE # 41
	CLR  	EA
;         if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {  /* Delay current task        */
			; SOURCE LINE # 42
	MOV  	R0,#LOW (OSTCBCur)
	XCH  	A,R3
	MOV  	A,@R0
	XCH  	A,R3
	INC  	R0
	MOV  	A,@R0
	MOV  	R2,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R1,A
	MOV  	DPTR,#0EH
	LCALL	?C?CLDOPTR
	ADD  	A,#LOW (OSRdyTbl)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (OSRdyTbl)
	MOV  	DPH,A
	PUSH 	DPH
	PUSH 	DPL
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	R0,#LOW (OSTCBCur)
	XCH  	A,R3
	MOV  	A,@R0
	XCH  	A,R3
	INC  	R0
	MOV  	A,@R0
	MOV  	R2,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R1,A
	MOV  	DPTR,#0FH
	LCALL	?C?CLDOPTR
	CPL  	A
	MOV  	R6,A
	MOV  	A,R7
	ANL  	A,R6
	POP  	DPL
	POP  	DPH
	MOVX 	@DPTR,A
	JNZ  	?C0002
;             OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
			; SOURCE LINE # 43
	MOV  	DPTR,#OSRdyGrp
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	DPTR,#010H
	LCALL	?C?CLDOPTR
	CPL  	A
	MOV  	R6,A
	MOV  	A,R7
	ANL  	A,R6
	MOV  	DPTR,#OSRdyGrp
	MOVX 	@DPTR,A
;         }
			; SOURCE LINE # 44
?C0002:
;         OSTCBCur->OSTCBDly = ticks;                                       /* Load ticks in TCB         */
			; SOURCE LINE # 45
	XCH  	A,R7
	MOV  	A,R5
	XCH  	A,R7
	MOV  	R0,#LOW (OSTCBCur)
	XCH  	A,R3
	MOV  	A,@R0
	XCH  	A,R3
	INC  	R0
	MOV  	A,@R0
	MOV  	R2,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R1,A
	MOV  	DPTR,#09H
	MOV  	A,R4
	MOV  	B,R7
	LCALL	?C?ISTOPTR
;         OS_EXIT_CRITICAL();
			; SOURCE LINE # 46
	SETB 	EA
;         OS_Sched();                                                       /* Find next task to run!    */
			; SOURCE LINE # 47
	LCALL	OS_Sched
;     }
			; SOURCE LINE # 48
; }
			; SOURCE LINE # 49
?C0003:
	RET  	
; END OF _OSTimeDly

; /*$PAGE*/
; /*
; *********************************************************************************************************
; *                                     DELAY TASK FOR SPECIFIED TIME
; *
; * Description: This function is called to delay execution of the currently running task until some time
; *              expires.  This call allows you to specify the delay time in HOURS, MINUTES, SECONDS and
; *              MILLISECONDS instead of ticks.
; *
; * Arguments  : hours     specifies the number of hours that the task will be delayed (max. is 255)
; *              minutes   specifies the number of minutes (max. 59)
; *              seconds   specifies the number of seconds (max. 59)
; *              milli     specifies the number of milliseconds (max. 999)
; *
; * Returns    : OS_NO_ERR
; *              OS_TIME_INVALID_MINUTES
; *              OS_TIME_INVALID_SECONDS
; *              OS_TIME_INVALID_MS
; *              OS_TIME_ZERO_DLY
; *
; * Note(s)    : The resolution on the milliseconds depends on the tick rate.  For example, you can't do
; *              a 10 mS delay if the ticker interrupts every 100 mS.  In this case, the delay would be
; *              set to 0.  The actual delay is rounded to the nearest tick.
; *********************************************************************************************************
; */
; 
; #if OS_TIME_DLY_HMSM_EN > 0
; INT8U  OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli)

	RSEG  ?PR?_OSTimeDlyHMSM?OS_TIME
_OSTimeDlyHMSM:
	USING	0
			; SOURCE LINE # 77
	MOV  	DPTR,#seconds?143
	MOV  	A,R3
	MOVX 	@DPTR,A
;---- Variable 'minutes?142' assigned to Register 'R5' ----
	MOV  	DPTR,#hours?141
	MOV  	A,R7
	MOVX 	@DPTR,A
; {
			; SOURCE LINE # 78
;     INT32U ticks;
;     INT16U loops;
; 
; 
;     if (hours > 0 || minutes > 0 || seconds > 0 || milli > 0) {
			; SOURCE LINE # 83
	SETB 	C
	SUBB 	A,#00H
	JNC  	?C0005
	MOV  	A,R5
	SUBB 	A,#00H
	JNC  	?C0005
	MOV  	DPTR,#seconds?143
	MOVX 	A,@DPTR
	SUBB 	A,#00H
	JNC  	?C0005
	MOV  	DPTR,#milli?144+01H
	MOVX 	A,@DPTR
	SUBB 	A,#00H
	MOV  	DPTR,#milli?144
	MOVX 	A,@DPTR
	SUBB 	A,#00H
	JNC  	$ + 5H
	LJMP 	?C0004
?C0005:
;         if (minutes > 59) {
			; SOURCE LINE # 84
	MOV  	A,R5
	SETB 	C
	SUBB 	A,#03BH
	JC   	?C0006
;             return (OS_TIME_INVALID_MINUTES);    /* Validate arguments to be within range              */
			; SOURCE LINE # 85
	MOV  	R7,#051H
	RET  	
;         }
			; SOURCE LINE # 86
?C0006:
;         if (seconds > 59) {
			; SOURCE LINE # 87
	MOV  	DPTR,#seconds?143
	MOVX 	A,@DPTR
	SETB 	C
	SUBB 	A,#03BH
	JC   	?C0008
;             return (OS_TIME_INVALID_SECONDS);
			; SOURCE LINE # 88
	MOV  	R7,#052H
	RET  	
;         }
			; SOURCE LINE # 89
?C0008:
;         if (milli > 999) {
			; SOURCE LINE # 90
	SETB 	C
	MOV  	DPTR,#milli?144+01H
	MOVX 	A,@DPTR
	SUBB 	A,#0E7H
	MOV  	DPTR,#milli?144
	MOVX 	A,@DPTR
	SUBB 	A,#03H
	JC   	?C0009
;             return (OS_TIME_INVALID_MILLI);
			; SOURCE LINE # 91
	MOV  	R7,#053H
	RET  	
;         }
			; SOURCE LINE # 92
?C0009:
;                                                  /* Compute the total number of clock ticks required.. */
;                                                  /* .. (rounded to the nearest tick)                   */
;         ticks = ((INT32U)hours * 3600L + (INT32U)minutes * 60L + (INT32U)seconds) * OS_TICKS_PER_SEC
;               + OS_TICKS_PER_SEC * ((INT32U)milli + 500L / OS_TICKS_PER_SEC) / 1000L;
			; SOURCE LINE # 96
	XCH  	A,R7
	MOV  	A,R5
	XCH  	A,R7
	CLR  	A
	MOV  	R4,A
	MOV  	R5,A
	MOV  	R6,A
	MOV  	R3,#03CH
	MOV  	R2,A
	MOV  	R1,A
	MOV  	R0,A
	LCALL	?C?LMUL
	MOV  	A,R4
	PUSH 	ACC
	MOV  	A,R5
	PUSH 	ACC
	MOV  	A,R6
	PUSH 	ACC
	MOV  	A,R7
	PUSH 	ACC
	MOV  	DPTR,#hours?141
	MOVX 	A,@DPTR
	MOV  	R7,A
	CLR  	A
	MOV  	R4,A
	MOV  	R5,A
	MOV  	R6,A
	MOV  	R3,#010H
	MOV  	R2,#0EH
	MOV  	R1,A
	MOV  	R0,A
	LCALL	?C?LMUL
	POP  	ACC
	MOV  	R3,A
	POP  	ACC
	MOV  	R2,A
	POP  	ACC
	MOV  	R1,A
	POP  	ACC
	MOV  	R0,A
	MOV  	A,R7
	ADD  	A,R3
	MOV  	R3,A
	MOV  	A,R6
	ADDC 	A,R2
	MOV  	R2,A
	MOV  	A,R5
	ADDC 	A,R1
	MOV  	R1,A
	MOV  	A,R4
	ADDC 	A,R0
	MOV  	R0,A
	MOV  	DPTR,#seconds?143
	MOVX 	A,@DPTR
	MOV  	R7,A
	CLR  	A
	MOV  	R4,A
	MOV  	R5,A
	MOV  	R6,A
	MOV  	A,R3
	ADD  	A,R7
	MOV  	R7,A
	MOV  	A,R6
	ADDC 	A,R2
	MOV  	R6,A
	MOV  	A,R5
	ADDC 	A,R1
	MOV  	R5,A
	MOV  	A,R4
	ADDC 	A,R0
	MOV  	R4,A
	CLR  	A
	MOV  	R3,#032H
	MOV  	R2,A
	MOV  	R1,A
	MOV  	R0,A
	LCALL	?C?LMUL
	MOV  	A,R4
	PUSH 	ACC
	MOV  	A,R5
	PUSH 	ACC
	MOV  	A,R6
	PUSH 	ACC

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -