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

📄 uart.src

📁 一个完整的51单片机的操作糸统源程序! 内容十分丰富!很有借鉴价值!
💻 SRC
📖 第 1 页 / 共 2 页
字号:
	POP  	AR7
	POP  	AR6
	POP  	AR5
	POP  	AR4
	POP  	AR3
	POP  	AR2
	POP  	AR1
	POP  	AR0
	POP  	PSW
	POP  	DPL
	POP  	DPH
	POP  	B
	POP  	ACC
	RETI 	
; END OF UartInterruptServer

; 
; 
; /******************************************************************************************
; *函数名:		UartCommand
; *参数:			无
; *返回值:		无
; *描述:			串口消息处理/执行程序
; *编写:			王绍伟
; *版本信息:		V1.0			2003年8月15日
; ******************************************************************************************/
; static void UartCmdProcess()

	RSEG  ?PR?UartCmdProcess?UART
UartCmdProcess:
			; SOURCE LINE # 121
; {
			; SOURCE LINE # 122
; 	switch(eUartSign)
			; SOURCE LINE # 123
	MOV  	DPTR,#eUartSign
	MOVX 	A,@DPTR
	DEC  	A
	JZ   	?C0009
	INC  	A
	JNZ  	?C0010
; 	{
			; SOURCE LINE # 124
; 		case DEBUG_START:		
			; SOURCE LINE # 125
?C0008:
; 			bDC = 0;	
			; SOURCE LINE # 126
	CLR  	bDC
; 			g_bDebug = TRUE;
			; SOURCE LINE # 127
	SETB 	g_bDebug
; 			break;
			; SOURCE LINE # 128
	RET  	
; 		case DEBUG_END:
			; SOURCE LINE # 129
?C0009:
; 			g_bDebug = FALSE;
			; SOURCE LINE # 130
	CLR  	g_bDebug
; 			bDC=0;
			; SOURCE LINE # 131
	CLR  	bDC
; 			break;
			; SOURCE LINE # 132
; 	}
			; SOURCE LINE # 133
; }
			; SOURCE LINE # 134
?C0010:
	RET  	
; END OF UartCmdProcess

; 
; 
; /******************************************************************************************
; *函数名:		UartData
; *参数:			无
; *返回值:		无
; *描述:	
; *编写:			王绍伟
; *版本信息:		V1.0			2003年8月15日
; ******************************************************************************************/
; static void UartDataProcess()

	RSEG  ?PR?UartDataProcess?UART
UartDataProcess:
			; SOURCE LINE # 145
; {
			; SOURCE LINE # 146
; 	switch(eUartSign)
			; SOURCE LINE # 147
	MOV  	DPTR,#eUartSign
	MOVX 	A,@DPTR
	ADD  	A,#0FEH
	JNZ  	?C0013
; 	{
			; SOURCE LINE # 148
; 		case UART_SETUP:
			; SOURCE LINE # 149
?C0012:
; 			bDC = 0;
			; SOURCE LINE # 150
	CLR  	bDC
; 			break;
			; SOURCE LINE # 151
; 	}
			; SOURCE LINE # 152
; 	/*命令处理程序*/
; }
			; SOURCE LINE # 154
?C0013:
	RET  	
; END OF UartDataProcess

; 
; 
; 
; /******************************************************************************************
; *函数名:		uart_init
; *参数:			eBaudRate
; *返回值:		无
; *描述:			串口初始化程序,主要设定了波特率以及T1作为波特率产生
; 				器的工作方式等,并且指定了串口数据以及命令存放堆栈
; *编写:			王绍伟
; *版本信息:		V1.0			2003年8月15日
; ******************************************************************************************/
; extern void uart_init(UartBaudrate eBaudRate)

	RSEG  ?PR?_uart_init?UART
_uart_init:
			; SOURCE LINE # 167
;---- Variable 'eBaudRate?340' assigned to Register 'R7' ----
; {
			; SOURCE LINE # 168
; 	ES = 0;			/*关串行口中断*/	
			; SOURCE LINE # 169
	CLR  	ES
; 	
; #ifdef SPEEDUP
; 	RESETBIT(PCON, 7);   /*SMOD=1			波特率加速位*/
			; SOURCE LINE # 172
	ANL  	PCON,#07FH
; #else
; 	SETBIT(PCON, 7);
; #endif
; 	
; 	TMOD &= 0x0F;
			; SOURCE LINE # 177
	ANL  	TMOD,#0FH
; 	TMOD |= 0x20;
			; SOURCE LINE # 178
	ORL  	TMOD,#020H
; 	ET1 = 0;				/*中断无效*/
			; SOURCE LINE # 179
	CLR  	ET1
; 	TH1 = eBaudRate;
			; SOURCE LINE # 180
	MOV  	TH1,R7
; 	TL1 = eBaudRate;
			; SOURCE LINE # 181
	MOV  	TL1,R7
; 	TR1 = 1;				/*定时器开启*/
			; SOURCE LINE # 182
	SETB 	TR1
; 	SCON = 0x50;
			; SOURCE LINE # 183
	MOV  	SCON,#050H
; 	pUartDataPool = UartDataPool;
			; SOURCE LINE # 184
	MOV  	DPTR,#pUartDataPool
	CLR  	A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#HIGH (UartDataPool)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#LOW (UartDataPool)
	MOVX 	@DPTR,A
; 	pUartCommandPool = UartCommandPool;
			; SOURCE LINE # 185
	MOV  	DPTR,#pUartCommandPool
	CLR  	A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#HIGH (UartCommandPool)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#LOW (UartCommandPool)
	MOVX 	@DPTR,A
; 	ES = 1;				/*串行口中断printf需要串口关闭*/
			; SOURCE LINE # 186
	SETB 	ES
; }
			; SOURCE LINE # 187
	RET  	
; END OF _uart_init

; 
; 
; /******************************************************************************************
; *函数名:		uart_send_data
; *参数:			pData
; *返回值:		len
; *描述:			以串口发送以pData为首地址,len长度的字节数据
; *编写:			王绍伟
; *版本信息:		V1.0			2003年8月15日
; ******************************************************************************************/
; extern void uart_send(byte* pData, byte len)

	RSEG  ?PR?_uart_send?UART
_uart_send:
	USING	0
			; SOURCE LINE # 198
	MOV  	DPTR,#pData?441
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
;---- Variable 'len?442' assigned to Register 'R5' ----
; {
			; SOURCE LINE # 199
; 	bool bES;
; 	byte data i;
; 	bES = ES;		/*禁止串口产生中断,而以查询的方式发送数据*/
			; SOURCE LINE # 202
	MOV  	C,ES
	MOV  	bES?443,C
; 	ES = 0;
			; SOURCE LINE # 203
	CLR  	ES
; 	if(!len)
			; SOURCE LINE # 204
	MOV  	A,R5
	JNZ  	?C0015
; 	{
			; SOURCE LINE # 205
; 		i = len;
			; SOURCE LINE # 206
	MOV  	R7,AR5
	MOV  	i?444,R7
; 	}
			; SOURCE LINE # 207
	SJMP 	?C0017
?C0015:
; 	else
; 	{
			; SOURCE LINE # 209
; 		i = strlen(pData);
			; SOURCE LINE # 210
	MOV  	DPTR,#pData?441
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	LCALL	_strlen
	MOV  	i?444,R7
; 	}
			; SOURCE LINE # 211
?C0017:
; 	while(i--)
			; SOURCE LINE # 212
	MOV  	R7,i?444
	DEC  	i?444
	MOV  	A,R7
	JZ   	?C0018
; 	{
			; SOURCE LINE # 213
; 		SBUF = *pData++;
			; SOURCE LINE # 214
	MOV  	DPTR,#pData?441
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	CLR  	A
	MOV  	B,#01H
	LCALL	?C?ILDIX
	MOV  	R1,B
	MOV  	R2,A
	LCALL	?C?CLDPTR
	MOV  	SBUF,A
?C0019:
; 		while(!TI);
			; SOURCE LINE # 215
	JNB  	TI,?C0019
?C0020:
; 		TI = 0;
			; SOURCE LINE # 216
	CLR  	TI
; 	}
			; SOURCE LINE # 217
	SJMP 	?C0017
?C0018:
; 	ES = bES;
			; SOURCE LINE # 218
	MOV  	C,bES?443
	MOV  	ES,C
; }
			; SOURCE LINE # 219
	RET  	
; END OF _uart_send

; 
; 
; /******************************************************************************************
; *函数名:		uart_process
; *参数:			无
; *返回值:		无
; *描述:			串口处理程序,
; *编写:			王绍伟
; *版本信息:		V1.0			2003年8月15日
; ******************************************************************************************/
; extern void uart_process(void)

	RSEG  ?PR?uart_process?UART
uart_process:
	USING	0
			; SOURCE LINE # 230
; {
			; SOURCE LINE # 231
; 	byte i;
; 	if(bDC == FALSE)					/*若是命令,则比较命令字符串,设置串口命令标识*/
			; SOURCE LINE # 233
	JB   	bDC,?C0022
; 	{
			; SOURCE LINE # 234
; 
; 		for(i = 0; i < UART_CMD; i++)
			; SOURCE LINE # 236
	CLR  	A
	MOV  	DPTR,#i?545
	MOVX 	@DPTR,A
?C0023:
	MOV  	DPTR,#i?545
	MOVX 	A,@DPTR
	MOV  	R7,A
	CLR  	C
	SUBB 	A,#02H
	JNC  	?C0024
; 		{
			; SOURCE LINE # 237
; 			if(!strcmp(UartCommandPool, UartCmdString[i]))
			; SOURCE LINE # 238
	MOV  	A,R7
	ADD  	A,ACC
	ADD  	A,#LOW (UartCmdString)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (UartCmdString)
	MOV  	DPH,A
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,AR6
	MOV  	R1,A
	MOV  	R3,#0FFH
	MOV  	R0,#LOW (UartCommandPool)
	MOV  	R4,#HIGH (UartCommandPool)
	MOV  	R5,#00H
	LCALL	?C?STRCMP
	MOV  	A,R7
	JNZ  	?C0025
; 			{
			; SOURCE LINE # 239
; 				eUartSign = i;
			; SOURCE LINE # 240
	MOV  	DPTR,#i?545
	MOVX 	A,@DPTR
	MOV  	DPTR,#eUartSign
	MOVX 	@DPTR,A
; 				ES = 1;	
			; SOURCE LINE # 241
	SETB 	ES
; 				UartCmdProcess();						/*对命令进行处理*/
			; SOURCE LINE # 242
	LCALL	UartCmdProcess
; 				break;
			; SOURCE LINE # 243
	SJMP 	?C0024
; 			}
			; SOURCE LINE # 244
; 		}
			; SOURCE LINE # 245
?C0025:
	MOV  	DPTR,#i?545
	MOVX 	A,@DPTR
	INC  	A
	MOVX 	@DPTR,A
	SJMP 	?C0023
?C0024:
; 		
; 		ES = 1;								/*设置完命令标识后允许串口中断*/
			; SOURCE LINE # 247
	SETB 	ES
; 	}
			; SOURCE LINE # 248
	RET  	
?C0022:
; 	else									
; 	{
			; SOURCE LINE # 250
; 		UartDataProcess();							
			; SOURCE LINE # 251
	LCALL	UartDataProcess
; 	}
			; SOURCE LINE # 252
; }
			; SOURCE LINE # 253
?C0028:
	RET  	
; END OF uart_process

	END

⌨️ 快捷键说明

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