📄 serial.src
字号:
; .\serial.SRC generated from: .\serial.c
$NOMOD51
NAME SERIAL
P0 DATA 080H
P1 DATA 090H
P2 DATA 0A0H
P3 DATA 0B0H
T0 BIT 0B0H.4
AC BIT 0D0H.6
T1 BIT 0B0H.5
EA BIT 0A8H.7
IE DATA 0A8H
RD BIT 0B0H.7
ES BIT 0A8H.4
IP DATA 0B8H
RI BIT 098H.0
INT0 BIT 0B0H.2
CY BIT 0D0H.7
TI BIT 098H.1
INT1 BIT 0B0H.3
PS BIT 0B8H.4
SP DATA 081H
OV BIT 0D0H.2
WR BIT 0B0H.6
SBUF DATA 099H
PCON DATA 087H
SCON DATA 098H
TMOD DATA 089H
TCON DATA 088H
IE0 BIT 088H.1
IE1 BIT 088H.3
B DATA 0F0H
ACC DATA 0E0H
ET0 BIT 0A8H.1
ET1 BIT 0A8H.3
TF0 BIT 088H.5
TF1 BIT 088H.7
RB8 BIT 098H.2
TH0 DATA 08CH
EX0 BIT 0A8H.0
IT0 BIT 088H.0
TH1 DATA 08DH
TB8 BIT 098H.3
EX1 BIT 0A8H.2
IT1 BIT 088H.2
P BIT 0D0H.0
SM0 BIT 098H.7
TL0 DATA 08AH
SM1 BIT 098H.6
TL1 DATA 08BH
SM2 BIT 098H.5
PT0 BIT 0B8H.1
PT1 BIT 0B8H.3
RS0 BIT 0D0H.3
TR0 BIT 088H.4
RS1 BIT 0D0H.4
TR1 BIT 088H.6
PX0 BIT 0B8H.0
PX1 BIT 0B8H.2
DPH DATA 083H
DPL DATA 082H
REN BIT 098H.4
RXD BIT 0B0H.0
TXD BIT 0B0H.1
F0 BIT 0D0H.5
PSW DATA 0D0H
?PR?_?InitSerial?SERIAL SEGMENT CODE
?PR?_?InitSerialBuffer?SERIAL SEGMENT CODE
?PR?_?serial?SERIAL SEGMENT CODE
?PR?_?PrintChar?SERIAL SEGMENT CODE
?PR?_?PrintStr?SERIAL SEGMENT CODE
?PR?_?clrscr?SERIAL SEGMENT CODE
?CO?SERIAL SEGMENT CODE
?C_INITSEG SEGMENT CODE
?XD?SERIAL SEGMENT XDATA
EXTRN CODE (?C?ADDXBP)
EXTRN CODE (?C?CLDPTR)
EXTRN CODE (?C?IILDX)
EXTRN DATA (?C_XBP)
EXTRN CODE (?C?CSTPTR)
EXTRN CODE (?C?XBPOFF)
EXTRN CODE (?C?CLDOPTR)
PUBLIC TxBuf
PUBLIC RxBuf
PUBLIC outTxBuf
PUBLIC inTxBuf
PUBLIC outRxBuf
PUBLIC inRxBuf
PUBLIC TIflag
PUBLIC _?clrscr
PUBLIC _?PrintStr
PUBLIC _?PrintChar
PUBLIC _?serial
PUBLIC _?InitSerialBuffer
PUBLIC _?InitSerial
RSEG ?XD?SERIAL
TIflag: DS 1
inRxBuf: DS 3
outRxBuf: DS 3
inTxBuf: DS 2
outTxBuf: DS 3
RxBuf: DS 50
TxBuf: DS 2000
RSEG ?CO?SERIAL
?SC_0:
DB 00AH,00AH,00AH,00AH,00AH,00AH,00AH,00AH,00AH,00AH
DB 00AH,00AH,00AH,00AH,00AH,00AH,00AH,00AH,00AH,00AH
DB 00AH,00AH,00AH,00AH,00AH,000H
RSEG ?C_INITSEG
DB 041H
DW TIflag
DB 001H
; /*
; *********************************************************************************************************
; * uC/OS-II
; * 实时内核
; *
; * (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
; * 版权所有
; *
; * MCU-51 专用代码
; * KEIL C51大模式编译
; *
; * 文件名 : SERIAL.C
; * 作者 : Jean J. Labrosse
; * 改编 : 杨屹 gdtyy@ri.gdt.com.cn 巨龙公司系统集成开发部 2002.09.27
; *********************************************************************************************************
; */
;
; //**********************************************************************************
; //杨屹 2002/08/20 第一版
; //基于中断的串口驱动及显示程序
; //联系方法:gdtyy@ri.gdt.com.cn(2003/07/31以前有效)
; //**********************************************************************************
; //程序特点:
; // 1.基于中断,可并发执行
; // 2.参数可配置(收发缓冲区大小,最大字符串长度,TAB键移动距离)
; //**********************************************************************************
; //使用方法:(此范例自包含,独立于其他程序。)
; // 先配制收发缓冲区大小等可变参数(在serial.h中的宏定义)
; // 1.开头加入#include <reg51.h>语句,一定要有。
; // 2.初始化串口 InitSerial();//本例中为20MHz晶体,300波特率,模式2初始化
; // 3.初始化串口缓冲区 InitSerialBuffer();
; // 4.使用显示字节,字,长字,字符,字符串,清屏函数。
; //自包含
; //**********************************************************************************
; //波特率计算公式:
; // TH1=256-(2^SMOD/32*Fosc/12*1/Bound)
; // 其中:SMOD=0,1;Fosc=晶体或晶振频率;Bound=波特率
; // 本例中,SMOD=0;Fosc=20*10E6;Bound=300,所以TH1=0x52。
; //Baud rate(20Mhz)
; //300(52);1200(D5);2400(EA);4800(F5);9600(FB);19200(FD);38400(FF);
; //***********************************************************************************
;
;
; #ifndef OS_MASTER_FILE
; #include "includes.h"
; #endif
;
; //#include <includes.h>
; //#include <serial.h>
; //#include <reg51.h>
;
; INT8U xdata TxBuf[LenTxBuf],RxBuf[LenRxBuf];//收发缓冲区实体
; INT8U xdata*inTxBuf,*outTxBuf,*inRxBuf,*outRxBuf;//收发缓冲区读写指针unsigned char
; BOOLEAN TIflag=1;//Note:It must be 1.
;
; void InitSerial() reentrant//串口初始化
RSEG ?PR?_?InitSerial?SERIAL
_?InitSerial:
; SOURCE LINE # 56
; {
; TMOD=TMOD&0x0F;
; SOURCE LINE # 58
ANL TMOD,#0FH
; TMOD=TMOD|0x20;
; SOURCE LINE # 59
ORL TMOD,#020H
; TL1=0xFD;TH1=0xFD;//19200 , 22.1184MHz
; SOURCE LINE # 60
MOV TL1,#0FDH
MOV TH1,#0FDH
; SCON=0x50;PCON=0x00;
; SOURCE LINE # 61
MOV SCON,#050H
CLR A
MOV PCON,A
; TR1=1;
; SOURCE LINE # 62
SETB TR1
; }
; SOURCE LINE # 63
RET
; END OF _?InitSerial
;
; void InitSerialBuffer(void) reentrant//串口缓冲区初始化
RSEG ?PR?_?InitSerialBuffer?SERIAL
_?InitSerialBuffer:
USING 0
; SOURCE LINE # 65
; {
; inTxBuf=TxBuf;outTxBuf=TxBuf;
; SOURCE LINE # 67
MOV DPTR,#inTxBuf
MOV A,#HIGH (TxBuf)
MOVX @DPTR,A
INC DPTR
MOV A,#LOW (TxBuf)
MOVX @DPTR,A
MOV R1,A
INC DPTR
MOV A,#01H
MOVX @DPTR,A
INC DPTR
MOV A,#HIGH (TxBuf)
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; inRxBuf=RxBuf;outRxBuf=RxBuf;
; SOURCE LINE # 68
MOV DPTR,#inRxBuf
MOV A,#01H
MOVX @DPTR,A
INC DPTR
MOV A,#HIGH (RxBuf)
MOVX @DPTR,A
INC DPTR
MOV A,#LOW (RxBuf)
MOVX @DPTR,A
MOV R1,A
INC DPTR
MOV A,#01H
MOVX @DPTR,A
INC DPTR
MOV A,#HIGH (RxBuf)
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; ES=1;
; SOURCE LINE # 69
SETB ES
; //EA=1;
; }
; SOURCE LINE # 71
RET
; END OF _?InitSerialBuffer
;
; void serial(void) reentrant
RSEG ?PR?_?serial?SERIAL
_?serial:
USING 0
; SOURCE LINE # 73
MOV DPTR,#0FFFDH
LCALL ?C?ADDXBP
; { //中断在汇编中实现,去掉interrupt 4{//串口中断服务子程序
; unsigned char *t;
;
; if(TI){
; SOURCE LINE # 77
JB TI,$ + 6H
LJMP ?C0003
; TI=0;
; SOURCE LINE # 78
CLR TI
; if(inTxBuf==outTxBuf) {TIflag=1;return;}//TxBuf Empty
; SOURCE LINE # 79
MOV DPTR,#outTxBuf
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
PUSH AR3
PUSH AR2
PUSH AR1
MOV DPTR,#inTxBuf
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
POP DPL
POP DPH
POP ACC
XRL A,#01H
JNZ ?C0028
MOV A,R1
XRL A,DPL
JNZ ?C0028
MOV A,R6
XRL A,DPH
?C0028:
JNZ ?C0004
MOV DPTR,#TIflag
INC A
MOVX @DPTR,A
LJMP ?C0005
?C0004:
; SBUF=*outTxBuf; outTxBuf++;
; SOURCE LINE # 80
MOV DPTR,#outTxBuf
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL ?C?CLDPTR
MOV SBUF,A
MOV DPTR,#outTxBuf+01H
CLR A
MOV B,#01H
LCALL ?C?IILDX
; if(outTxBuf==TxBuf+LenTxBuf) outTxBuf=TxBuf;
; SOURCE LINE # 81
MOV DPTR,#outTxBuf
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV A,#01H
MOV DPTR,#TxBuf+07D0H
XRL A,R3
JNZ ?C0029
MOV A,R1
XRL A,DPL
JNZ ?C0029
MOV A,R2
XRL A,DPH
?C0029:
JNZ ?C0003
MOV R3,#01H
MOV DPTR,#outTxBuf
INC A
MOVX @DPTR,A
INC DPTR
MOV A,#HIGH (TxBuf)
MOVX @DPTR,A
INC DPTR
MOV A,#LOW (TxBuf)
MOVX @DPTR,A
; }
; SOURCE LINE # 82
?C0003:
; if(RI){
; SOURCE LINE # 83
JB RI,$ + 6H
LJMP ?C0005
; RI=0;
; SOURCE LINE # 84
CLR RI
; t=inRxBuf;t++;
; SOURCE LINE # 85
MOV DPTR,#inRxBuf
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
XCH A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
INC DPTR
CLR A
MOV B,#01H
LCALL ?C?IILDX
; if(t==RxBuf+LenRxBuf) t=RxBuf;
; 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
MOV R1,A
MOV A,#01H
MOV DPTR,#RxBuf+032H
XRL A,R3
JNZ ?C0030
MOV A,R1
XRL A,DPL
JNZ ?C0030
MOV A,R2
XRL A,DPH
?C0030:
JNZ ?C0008
MOV R3,#01H
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
INC A
MOVX @DPTR,A
INC DPTR
MOV A,#HIGH (RxBuf)
MOVX @DPTR,A
INC DPTR
MOV A,#LOW (RxBuf)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -