📄 uart.src
字号:
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 + -