📄 serial.ls1
字号:
209 ; // 4.使用显示字节,字,长字,字符,字符串,清屏函数。
210 ; //自包含
211 ; //**********************************************************************************
212 ; //波特率计算公式:
213 ; // TH1=256-(2^SMOD/32*Fosc/12*1/Bound)
214 ; // 其中:SMOD=0,1;Fosc=晶体或晶振频率;Bound=波特率
215 ; // 本例中,SMOD=0;Fosc=20*10E6;Bound=300,所以TH1=0x52。
216 ; //Baud rate(20Mhz)
217 ; //300(52);1200(D5);2400(EA);4800(F5);9600(FB);19200(FD);38400(FF);
218 ; //**********************************************************************************
219 ; //书写风格:
220 ; // 1.带yy前缀标志的函数为杨屹改写的等效C库函数。
221 ; // 2.单个单词用小写,yy定义为前缀,不算一个单词。
222 ; // 3.多个单词(2个及以上),每个单词首字母大写。(有时变量名第一个单词首字母小写)
223 ; // 4.采用内缩风格,每次缩进8个空格。
224 ; //**********************************************************************************
225 ; //应用举例:(可在KEIL仿真环境下运行)
226 ; //源程序文件:serial.h/serial.c/main.c
227 ; //main.c内容:
228 ; //#include <reg51.h>//Note:It must be added.必须在serial.c之前
229 ; //#include <serial.h>
230 ; //main()
231 ; //{
232 ; // unsigned char ch;
233 ; //
234 ; // InitSerial();
235 ; // InitSerialBuffer();
236 ; // while(1){
237 ; // PrintStr("\n");
238 ; // PrintByte(90);PrintStr(" ");
239 ; // PrintWord(90);PrintStr(" ");
240 ; // PrintLong(90);PrintStr(" ");
241 ; // PrintChar('y');PrintChar(' ');//千万别写成双引号,否则打印0(乱字符)。
242 ; // PrintStr("\nHello!\nI'm YangYi.\n");
243 ; // PrintStr("Press any key to continue...");
244 ; // while(!yygetch(&ch));
245 ; // }
246 ; //}
247 ; //**********************************************************************************
A51 MACRO ASSEMBLER SERIAL 09/04/2007 10:27:37 PAGE 5
248 ; //建议:
249 ; // 你完全可以把该子程序当作函数库使用,以便减少重复劳动,提高代码质量。
250 ; //**********************************************************************************
251 ;
252 ; #ifndef OS_MASTER_FILE
253 ; #include "includes.h"
254 ; #endif
255 ;
256 ; //#include <includes.h>
257 ; //#include <serial.h>
258 ; //#include <reg51.h>
259 ;
260 ; unsigned char TxBuf[LenTxBuf],RxBuf[LenRxBuf];//收发缓冲区实体
261 ; unsigned char *inTxBuf,*outTxBuf,*inRxBuf,*outRxBuf;//收发缓冲区读写指针
262 ; bit TIflag=1;//Note:It must be 1.
263 ;
264 ; void InitSerial() reentrant//串口初始化
265
---- 266 RSEG ?PR?_?InitSerial?SERIAL
0000 267 _?InitSerial:
268 ; SOURCE LINE # 87
269 ; {
270 ; TMOD=TMOD&0x0F;
271 ; SOURCE LINE # 89
0000 53890F 272 ANL TMOD,#0FH
273 ; TMOD=TMOD|0x20;
274 ; SOURCE LINE # 90
0003 438920 275 ORL TMOD,#020H
276 ; TL1=0xFD,TH1=0xFD;//19200 , 22.1184MHz
277 ; SOURCE LINE # 91
0006 758BFD 278 MOV TL1,#0FDH
0009 758DFD 279 MOV TH1,#0FDH
280 ; SCON=0x50;PCON=0x00;
281 ; SOURCE LINE # 92
000C 759850 282 MOV SCON,#050H
000F E4 283 CLR A
0010 F587 284 MOV PCON,A
285 ; TR1=1;
286 ; SOURCE LINE # 93
0012 D28E 287 SETB TR1
288 ; }
289 ; SOURCE LINE # 94
0014 22 290 RET
291 ; END OF _?InitSerial
292
293 ;
294 ; void InitSerialBuffer(void) reentrant//串口缓冲区初始化
295
---- 296 RSEG ?PR?_?InitSerialBuffer?SERIAL
0000 297 _?InitSerialBuffer:
298 USING 0
299 ; SOURCE LINE # 96
300 ; {
301 ; inTxBuf=TxBuf;outTxBuf=TxBuf;
302 ; SOURCE LINE # 98
0000 900000 F 303 MOV DPTR,#inTxBuf
0003 7401 304 MOV A,#01H
0005 F0 305 MOVX @DPTR,A
0006 A3 306 INC DPTR
0007 7400 F 307 MOV A,#HIGH (TxBuf)
0009 F0 308 MOVX @DPTR,A
000A A3 309 INC DPTR
000B 7400 F 310 MOV A,#LOW (TxBuf)
000D F0 311 MOVX @DPTR,A
000E F9 312 MOV R1,A
000F A3 313 INC DPTR
A51 MACRO ASSEMBLER SERIAL 09/04/2007 10:27:37 PAGE 6
0010 7401 314 MOV A,#01H
0012 F0 315 MOVX @DPTR,A
0013 A3 316 INC DPTR
0014 7400 F 317 MOV A,#HIGH (TxBuf)
0016 F0 318 MOVX @DPTR,A
0017 A3 319 INC DPTR
0018 E9 320 MOV A,R1
0019 F0 321 MOVX @DPTR,A
322 ; inRxBuf=RxBuf;outRxBuf=RxBuf;
323 ; SOURCE LINE # 99
001A 900000 F 324 MOV DPTR,#inRxBuf
001D 7401 325 MOV A,#01H
001F F0 326 MOVX @DPTR,A
0020 A3 327 INC DPTR
0021 7400 F 328 MOV A,#HIGH (RxBuf)
0023 F0 329 MOVX @DPTR,A
0024 A3 330 INC DPTR
0025 7400 F 331 MOV A,#LOW (RxBuf)
0027 F0 332 MOVX @DPTR,A
0028 F9 333 MOV R1,A
0029 A3 334 INC DPTR
002A 7401 335 MOV A,#01H
002C F0 336 MOVX @DPTR,A
002D A3 337 INC DPTR
002E 7400 F 338 MOV A,#HIGH (RxBuf)
0030 F0 339 MOVX @DPTR,A
0031 A3 340 INC DPTR
0032 E9 341 MOV A,R1
0033 F0 342 MOVX @DPTR,A
343 ; ES=1;
344 ; SOURCE LINE # 100
0034 D2AC 345 SETB ES
346 ; //EA=1;
347 ; }
348 ; SOURCE LINE # 102
0036 22 349 RET
350 ; END OF _?InitSerialBuffer
351
352 ;
353 ; void serial(void) reentrant
354
---- 355 RSEG ?PR?_?serial?SERIAL
0000 356 _?serial:
357 USING 0
358 ; SOURCE LINE # 104
0000 90FFFD 359 MOV DPTR,#0FFFDH
0003 120000 F 360 LCALL ?C?ADDXBP
361 ; { //中断在汇编中实现,去掉interrupt 4{//串口中断服务子程序
362 ; unsigned char *t;
363 ;
364 ; if(TI){
365 ; SOURCE LINE # 108
0006 30997C 366 JNB TI,?C0003
367 ; TI=0;
368 ; SOURCE LINE # 109
0009 C299 369 CLR TI
370 ; if(inTxBuf==outTxBuf) {TIflag=1;return;}//TxBuf Empty
371 ; SOURCE LINE # 110
000B 900000 F 372 MOV DPTR,#outTxBuf
000E E0 373 MOVX A,@DPTR
000F FB 374 MOV R3,A
0010 A3 375 INC DPTR
0011 E0 376 MOVX A,@DPTR
0012 FA 377 MOV R2,A
0013 A3 378 INC DPTR
0014 E0 379 MOVX A,@DPTR
A51 MACRO ASSEMBLER SERIAL 09/04/2007 10:27:37 PAGE 7
0015 F9 380 MOV R1,A
0016 C003 381 PUSH AR3
0018 C002 382 PUSH AR2
001A C001 383 PUSH AR1
001C 900000 F 384 MOV DPTR,#inTxBuf
001F E0 385 MOVX A,@DPTR
0020 FB 386 MOV R3,A
0021 A3 387 INC DPTR
0022 E0 388 MOVX A,@DPTR
0023 FA 389 MOV R2,A
0024 A3 390 INC DPTR
0025 E0 391 MOVX A,@DPTR
0026 F9 392 MOV R1,A
0027 D082 393 POP DPL
0029 D083 394 POP DPH
002B D0E0 395 POP ACC
002D 6B 396 XRL A,R3
002E 7008 397 JNZ ?C0175
0030 E9 398 MOV A,R1
0031 6582 399 XRL A,DPL
0033 7003 400 JNZ ?C0175
0035 EA 401 MOV A,R2
0036 6583 402 XRL A,DPH
0038 403 ?C0175:
0038 7005 404 JNZ ?C0004
003A D200 F 405 SETB TIflag
003C 020000 F 406 LJMP ?C0005
003F 407 ?C0004:
408 ; SBUF=*outTxBuf; outTxBuf++;
409 ; SOURCE LINE # 111
003F 900000 F 410 MOV DPTR,#outTxBuf
0042 E0 411 MOVX A,@DPTR
0043 FB 412 MOV R3,A
0044 A3 413 INC DPTR
0045 E0 414 MOVX A,@DPTR
0046 FA 415 MOV R2,A
0047 A3 416 INC DPTR
0048 E0 417 MOVX A,@DPTR
0049 F9 418 MOV R1,A
004A 120000 F 419 LCALL ?C?CLDPTR
004D F599 420 MOV SBUF,A
004F 900000 F 421 MOV DPTR,#outTxBuf+01H
0052 E4 422 CLR A
0053 75F001 423 MOV B,#01H
0056 120000 F 424 LCALL ?C?IILDX
425 ; if(outTxBuf==TxBuf+LenTxBuf) outTxBuf=TxBuf;
426 ; SOURCE LINE # 112
0059 900000 F 427 MOV DPTR,#outTxBuf
005C E0 428 MOVX A,@DPTR
005D FB 429 MOV R3,A
005E A3 430 INC DPTR
005F E0 431 MOVX A,@DPTR
0060 FA 432 MOV R2,A
0061 A3 433 INC DPTR
0062 E0 434 MOVX A,@DPTR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -