📄 serial.lst
字号:
26 =1
27 =1 //用户头文件加在最后面
28 =1 //Your head file add here.
77 #endif
78
79 //#include <includes.h>
80 //#include <serial.h>
81 //#include <reg51.h>
82
83 unsigned char TxBuf[LenTxBuf],RxBuf[LenRxBuf];//收发缓冲区实体
84 unsigned char *inTxBuf,*outTxBuf,*inRxBuf,*outRxBuf;//收发缓冲区读写指针
85 bit TIflag=1;//Note:It must be 1.
C51 COMPILER V7.09 SERIAL 11/23/2005 15:21:36 PAGE 16
86
87 void InitSerial() reentrant//串口初始化
88 {
89 1 TMOD=TMOD&0x0F;
90 1 TMOD=TMOD|0x20;
91 1 TL1=0xFD,TH1=0xFD;//19200 , 22.1184MHz
92 1 SCON=0x50;PCON=0x00;
93 1 TR1=1;
94 1 }
95
96 void InitSerialBuffer(void) reentrant//串口缓冲区初始化
97 {
98 1 inTxBuf=TxBuf;outTxBuf=TxBuf;
99 1 inRxBuf=RxBuf;outRxBuf=RxBuf;
100 1 ES=1;
101 1 //EA=1;
102 1 }
103
104 void serial(void) reentrant
105 { //中断在汇编中实现,去掉interrupt 4{//串口中断服务子程序
106 1 unsigned char *t;
107 1
108 1 if(TI){
109 2 TI=0;
110 2 if(inTxBuf==outTxBuf) {TIflag=1;return;}//TxBuf Empty
111 2 SBUF=*outTxBuf; outTxBuf++;
112 2 if(outTxBuf==TxBuf+LenTxBuf) outTxBuf=TxBuf;
113 2 }
114 1 if(RI){
115 2 RI=0;
116 2 t=inRxBuf;t++;
117 2 if(t==RxBuf+LenRxBuf) t=RxBuf;
118 2 if(t==outRxBuf) return; //RxBuf Full
119 2 *inRxBuf=SBUF;
120 2 inRxBuf=t;
121 2 }
122 1 }
123
124 bit yygetch(unsigned char *ch) reentrant//从串口缓冲区读1字节数据
125 {
126 1 //ES=0;
127 1 if(inRxBuf==outRxBuf) {ES=1;return 0;} //RxBuf Empty
128 1 *ch=*outRxBuf; outRxBuf++;
129 1 if(outRxBuf==RxBuf+LenRxBuf) outRxBuf=RxBuf;
130 1 //ES=1;
131 1 return 1;
132 1 }
133
134 void PrintChar(unsigned char ch) reentrant//显示字符
135 {
136 1 unsigned char *t;
137 1
138 1 //ES=0;
139 1 if(TIflag){
140 2 TIflag=0;
141 2 TI=1;
142 2 }
143 1 t=inTxBuf;t++;
144 1 if(t==TxBuf+LenTxBuf) t=TxBuf;
145 1 if(t==outTxBuf) {/*ES=1;*/return;} //TxBuf Full
146 1 *inTxBuf=ch;
147 1 inTxBuf=t;
C51 COMPILER V7.09 SERIAL 11/23/2005 15:21:36 PAGE 17
148 1 //ES=1;
149 1 }
150
151 void PrintCh(unsigned char ch) reentrant//内部使用,不建议用户看到。
152 {
153 1 if(ch>=0&&ch<=9) ch=ch+'0';
154 1 else ch=ch+'A'-10;
155 1 PrintChar(ch);
156 1 }
157
158 void insidePrintByte(unsigned char Byte) reentrant//内部使用,以十六进制格式显示1个字节数据
159 {
160 1 unsigned char c;
161 1 c=Byte;
162 1 c=c>>4;
163 1 PrintCh(c);
164 1 c=Byte;c=c&0x0F;PrintCh(c);
165 1 }
166
167 void PrintByte(unsigned char Byte) reentrant//以十六进制格式显示1个字节数据
168 {
169 1 EA=0;
170 1 insidePrintByte(Byte);
171 1 EA=1;
172 1 }
173
174 void insidePrintWord(unsigned int Word) reentrant//内部使用,以十六进制格式显示1个字数据
175 {
176 1 insidePrintByte(Word>>8);
177 1 insidePrintByte(Word&0xFF);
178 1 }
179
180 void PrintWord(unsigned int Word) reentrant//以十六进制格式显示1个字数据
181 {
182 1 EA=0;
183 1 insidePrintWord(Word);
184 1 EA=1;
185 1 }
186
187 void PrintLong(unsigned long LongWord) reentrant//以十六进制格式显示1个长字数据
188 {
189 1 EA=0;
190 1 insidePrintWord(LongWord>>16);
191 1 insidePrintWord(LongWord&0xFFFF);
192 1 EA=1;
193 1 }
194
195 void PrintStr(unsigned char *str) reentrant//显示字符串
196 {
197 1 int i;
198 1 unsigned char j;
199 1 unsigned char ch;
200 1
201 1 EA=0;
202 1 for(i=0;i<MaxLenStr;i++){
203 2 ch=*(str+i);
204 2 if(ch=='\0') break;
205 2 else if(ch=='\n'){PrintChar(10);PrintChar(13);}
206 2 else if(ch=='\t'){
207 3 for(j=0;j<TABNum;j++)
208 3 PrintChar(' ');
209 3 }
C51 COMPILER V7.09 SERIAL 11/23/2005 15:21:36 PAGE 18
210 2 else PrintChar(ch);
211 2 }
212 1 EA=1;
213 1 }
214
215 void clrscr() reentrant//清屏
216 {
217 1 PrintStr("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");//25个回车换行清屏幕。
218 1 }
C51 COMPILER V7.09 SERIAL 11/23/2005 15:21:36 PAGE 19
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _?InitSerial (BEGIN)
; SOURCE LINE # 87
; SOURCE LINE # 89
0000 53890F ANL TMOD,#0FH
; SOURCE LINE # 90
0003 438920 ORL TMOD,#020H
; SOURCE LINE # 91
0006 758BFD MOV TL1,#0FDH
0009 758DFD MOV TH1,#0FDH
; SOURCE LINE # 92
000C 759850 MOV SCON,#050H
000F E4 CLR A
0010 F587 MOV PCON,A
; SOURCE LINE # 93
0012 D28E SETB TR1
; SOURCE LINE # 94
0014 22 RET
; FUNCTION _?InitSerial (END)
; FUNCTION _?InitSerialBuffer (BEGIN)
; SOURCE LINE # 96
; SOURCE LINE # 98
0000 900000 R MOV DPTR,#inTxBuf
0003 7401 MOV A,#01H
0005 F0 MOVX @DPTR,A
0006 A3 INC DPTR
0007 7400 R MOV A,#HIGH TxBuf
0009 F0 MOVX @DPTR,A
000A A3 INC DPTR
000B 7400 R MOV A,#LOW TxBuf
000D F0 MOVX @DPTR,A
000E F9 MOV R1,A
000F A3 INC DPTR
0010 7401 MOV A,#01H
0012 F0 MOVX @DPTR,A
0013 A3 INC DPTR
0014 7400 R MOV A,#HIGH TxBuf
0016 F0 MOVX @DPTR,A
0017 A3 INC DPTR
0018 E9 MOV A,R1
0019 F0 MOVX @DPTR,A
; SOURCE LINE # 99
001A 900000 R MOV DPTR,#inRxBuf
001D 7401 MOV A,#01H
001F F0 MOVX @DPTR,A
0020 A3 INC DPTR
0021 7400 R MOV A,#HIGH RxBuf
0023 F0 MOVX @DPTR,A
0024 A3 INC DPTR
0025 7400 R MOV A,#LOW RxBuf
0027 F0 MOVX @DPTR,A
0028 F9 MOV R1,A
0029 A3 INC DPTR
002A 7401 MOV A,#01H
002C F0 MOVX @DPTR,A
002D A3 INC DPTR
002E 7400 R MOV A,#HIGH RxBuf
0030 F0 MOVX @DPTR,A
0031 A3 INC DPTR
C51 COMPILER V7.09 SERIAL 11/23/2005 15:21:36 PAGE 20
0032 E9 MOV A,R1
0033 F0 MOVX @DPTR,A
; SOURCE LINE # 100
0034 D2AC SETB ES
; SOURCE LINE # 102
0036 22 RET
; FUNCTION _?InitSerialBuffer (END)
; FUNCTION _?serial (BEGIN)
; SOURCE LINE # 104
0000 90FFFD MOV DPTR,#0FFFDH
0003 120000 E LCALL ?C?ADDXBP
; SOURCE LINE # 108
0006 30997C JNB TI,?C0003
; SOURCE LINE # 109
0009 C299 CLR TI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -