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

📄 serial.ls1

📁 本人于2005年初开始准备将&micro C/OS-II嵌入式实时操作系统移植到8051单片机上
💻 LS1
📖 第 1 页 / 共 5 页
字号:
                     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 + -