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

📄 serial.lst

📁 ucos在51单片机内的移植代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
  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 + -