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

📄 commrtos.src

📁 ucos2的驱动程序
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; 
;     if (pbuf->RingBufRxCtr < COMM_RX_BUF_SIZE) {           /* See if buffer is full                    */
			; SOURCE LINE # 82
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	LCALL	?C?ILDPTR
	CLR  	C
	SUBB 	A,#040H
	MOV  	A,B
	SUBB 	A,#00H
	JC   	$ + 5H
	LJMP 	?C0009
;         pbuf->RingBufRxCtr++;                              /* No, increment character count            */
			; SOURCE LINE # 83
	CLR  	A
	MOV  	B,#01H
	LCALL	?C?IILDPTR
;         *pbuf->RingBufRxInPtr++ = c;                       /* Put character into buffer                */
			; SOURCE LINE # 84
	MOV  	DPTR,#03H
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#05H
	CLR  	A
	MOV  	B,#01H
	LCALL	?C?PLDIOPTR
	MOV  	A,R7
	LCALL	?C?CSTPTR
;         if (pbuf->RingBufRxInPtr == &pbuf->RingBufRx[COMM_RX_BUF_SIZE]) { /* Wrap IN pointer           */
			; SOURCE LINE # 85
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#05H
	LCALL	?C?PLDOPTR
	PUSH 	AR3
	PUSH 	AR2
	PUSH 	AR1
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	ADD  	A,#04BH
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
	POP  	DPL
	POP  	DPH
	POP  	ACC
	XRL  	A,R3
	JNZ  	?C0019
	MOV  	A,R1
	XRL  	A,DPL
	JNZ  	?C0019
	MOV  	A,R2
	XRL  	A,DPH
?C0019:
	JNZ  	?C0008
;             pbuf->RingBufRxInPtr = &pbuf->RingBufRx[0];
			; SOURCE LINE # 86
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	ADD  	A,#0BH
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
	PUSH 	AR3
	PUSH 	AR2
	PUSH 	AR1
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#05H
	LCALL	?C?PSTOPTR
;         }
			; SOURCE LINE # 87
?C0008:
;         OSSemPost(pbuf->RingBufRxSem);                     /* Indicate that character was received     */
			; SOURCE LINE # 88
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#02H
	LCALL	?C?PLDOPTR
	LCALL	_OSSemPost
;     }
			; SOURCE LINE # 89
; }
			; SOURCE LINE # 90
?C0009:
	MOV  	DPTR,#04H
	LJMP 	?C?ADDXBP
; END OF _?CommPutRxChar

; 
; INT8U  CommGetChar (INT16U to, INT8U *err) reentrant

	RSEG  ?PR?_?CommGetChar?COMMRTOS
_?CommGetChar:
	USING	0
			; SOURCE LINE # 92
	MOV  	DPTR,#0FFFDH
	LCALL	?C?ADDXBP
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
	MOV  	DPTR,#0FFFEH
	LCALL	?C?ADDXBP
	MOV  	A,R6
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R7
	MOVX 	@DPTR,A
	MOV  	DPTR,#0FFFBH
	LCALL	?C?ADDXBP
; {
;     INT8U          c;
;     INT8U          oserr;
;     COMM_RING_BUF *pbuf;
;     pbuf=&CommBuf;
			; SOURCE LINE # 97
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	INC  	DPTR
	INC  	DPTR
	MOV  	A,#01H
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#HIGH (CommBuf)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#LOW (CommBuf)
	MOVX 	@DPTR,A
;     OSSemPend(pbuf->RingBufRxSem, to, &oserr);             /* Wait for character to arrive             */
			; SOURCE LINE # 98
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	INC  	DPTR
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#02H
	LCALL	?C?PLDOPTR
	PUSH 	AR3
	PUSH 	AR2
	PUSH 	AR1
	MOV  	DPTR,#05H
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	INC  	DPTR
	MOV  	R1,DPL
	MOV  	R2,DPH
	MOV  	DPTR,#?_OSSemPend?BYTE+05H
	MOV  	A,#01H
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
	POP  	AR1
	POP  	AR2
	POP  	AR3
	LCALL	_OSSemPend
;     if (oserr == OS_TIMEOUT) {                             /* See if characters received within timeout*/
			; SOURCE LINE # 99
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	INC  	DPTR
	MOVX 	A,@DPTR
	CJNE 	A,#0AH,?C0010
;         *err = COMM_RX_TIMEOUT;                            /* No, return error code                    */
			; SOURCE LINE # 100
	MOV  	DPTR,#07H
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	A,#05H
	LCALL	?C?CSTPTR
;         return (NUL);
			; SOURCE LINE # 101
	MOV  	R7,#00H
	LJMP 	?C0011
;     } else {
			; SOURCE LINE # 102
?C0010:
;         OS_ENTER_CRITICAL();
			; SOURCE LINE # 103
	CLR  	EA
;         pbuf->RingBufRxCtr--;                              /* Yes, decrement character count           */
			; SOURCE LINE # 104
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	INC  	DPTR
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	A,#0FFH
	MOV  	B,A
	LCALL	?C?IILDPTR
;         c = *pbuf->RingBufRxOutPtr++;                      /* Get character from buffer                */
			; SOURCE LINE # 105
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	INC  	DPTR
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#08H
	CLR  	A
	MOV  	B,#01H
	LCALL	?C?PLDIOPTR
	LCALL	?C?CLDPTR
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	MOVX 	@DPTR,A
;         if (pbuf->RingBufRxOutPtr == &pbuf->RingBufRx[COMM_RX_BUF_SIZE]) {     /* Wrap OUT pointer     */
			; SOURCE LINE # 106
	INC  	DPTR
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#08H
	LCALL	?C?PLDOPTR
	PUSH 	AR3
	PUSH 	AR2
	PUSH 	AR1
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	INC  	DPTR
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	ADD  	A,#04BH
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
	POP  	DPL
	POP  	DPH
	POP  	ACC
	XRL  	A,R3
	JNZ  	?C0020
	MOV  	A,R1
	XRL  	A,DPL
	JNZ  	?C0020
	MOV  	A,R2
	XRL  	A,DPH
?C0020:
	JNZ  	?C0013
;             pbuf->RingBufRxOutPtr = &pbuf->RingBufRx[0];
			; SOURCE LINE # 107
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	INC  	DPTR
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	ADD  	A,#0BH
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
	PUSH 	AR3
	PUSH 	AR2
	PUSH 	AR1
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	INC  	DPTR
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#08H
	LCALL	?C?PSTOPTR
;         }
			; SOURCE LINE # 108
?C0013:
;         OS_EXIT_CRITICAL();
			; SOURCE LINE # 109
	SETB 	EA
;         *err = COMM_NO_ERR;
			; SOURCE LINE # 110
	MOV  	DPTR,#07H
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	CLR  	A
	LCALL	?C?CSTPTR
;         return (c);
			; SOURCE LINE # 111
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	MOVX 	A,@DPTR
	MOV  	R7,A
;     }
			; SOURCE LINE # 112
; }
			; SOURCE LINE # 113
?C0011:
	MOV  	DPTR,#0AH
	LJMP 	?C?ADDXBP
; END OF _?CommGetChar

; 
; INT8U  CommGetTxChar (INT8U *err) reentrant

	RSEG  ?PR?_?CommGetTxChar?COMMRTOS
_?CommGetTxChar:
	USING	0
			; SOURCE LINE # 115
	MOV  	DPTR,#0FFFDH
	LCALL	?C?ADDXBP
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
	MOV  	DPTR,#0FFFCH
	LCALL	?C?ADDXBP
; { 
;     INT8U          c;
;     COMM_RING_BUF *pbuf;
;     pbuf=&CommBuf;
			; SOURCE LINE # 119
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	INC  	DPTR
	MOV  	A,#01H
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#HIGH (CommBuf)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#LOW (CommBuf)
	MOVX 	@DPTR,A
; 
;     if (pbuf->RingBufTxCtr > 0) {                          /* See if buffer is empty                   */
			; SOURCE LINE # 121
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#04BH
	LCALL	?C?ILDOPTR
	SETB 	C
	SUBB 	A,#00H
	MOV  	A,B
	SUBB 	A,#00H
	JNC  	$ + 5H
	LJMP 	?C0014
;         pbuf->RingBufTxCtr--;                              /* No, decrement character count            */
			; SOURCE LINE # 122
	MOV  	DPTR,#04BH
	MOV  	A,#0FFH
	MOV  	B,A
	LCALL	?C?IILDOPTR
;         c = *pbuf->RingBufTxOutPtr++;                      /* Get character from buffer                */
			; SOURCE LINE # 123
	MOV  	DPTR,#053H
	CLR  	A
	MOV  	B,#01H
	LCALL	?C?PLDIOPTR
	LCALL	?C?CLDPTR
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	MOVX 	@DPTR,A
;         if (pbuf->RingBufTxOutPtr == &pbuf->RingBufTx[COMM_TX_BUF_SIZE]) {     /* Wrap OUT pointer     */
			; SOURCE LINE # 124
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#053H
	LCALL	?C?PLDOPTR
	PUSH 	AR3
	PUSH 	AR2
	PUSH 	AR1
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	ADD  	A,#096H
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
	POP  	DPL
	POP  	DPH
	POP  	ACC
	XRL  	A,R3
	JNZ  	?C0021
	MOV  	A,R1
	XRL  	A,DPL
	JNZ  	?C0021
	MOV  	A,R2
	XRL  	A,DPH
?C0021:
	JNZ  	?C0015
;             pbuf->RingBufTxOutPtr = &pbuf->RingBufTx[0];
			; SOURCE LINE # 125
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	ADD  	A,#056H
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
	PUSH 	AR3
	PUSH 	AR2
	PUSH 	AR1
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#053H
	LCALL	?C?PSTOPTR
;         }
			; SOURCE LINE # 126
?C0015:
;         OSSemPost(pbuf->RingBufTxSem);                     /* Indicate that character will be sent     */
			; SOURCE LINE # 127
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#04DH
	LCALL	?C?PLDOPTR
	LCALL	_OSSemPost
;         *err = COMM_NO_ERR;
			; SOURCE LINE # 128
	MOV  	DPTR,#04H
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	CLR  	A
	LCALL	?C?CSTPTR
;         return (c);                                        /* Characters are still available           */
			; SOURCE LINE # 129
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	MOVX 	A,@DPTR
	MOV  	R7,A
	SJMP 	?C0016
;     } else {
			; SOURCE LINE # 130
?C0014:
;         *err = COMM_TX_EMPTY;
			; SOURCE LINE # 131
	MOV  	DPTR,#04H
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	A,#04H
	LCALL	?C?CSTPTR
;         return (NUL);                                      /* Buffer is empty                          */
			; SOURCE LINE # 132
	MOV  	R7,#00H
;     }
			; SOURCE LINE # 133
; }
			; SOURCE LINE # 134
?C0016:
	MOV  	DPTR,#07H
	LJMP 	?C?ADDXBP
; END OF _?CommGetTxChar

	END

⌨️ 快捷键说明

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