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

📄 serial.lst

📁 移植于51单片机上的ucos。SCH51-OS是整个工程项目
💻 LST
字号:
C51 COMPILER V8.05a   SERIAL                                                               11/09/2008 23:18:21 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN serial.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE serial.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          #include "typedef.h"
   3          #include "ExtDef.h"
   4          
   5          #define LenTxBuf        2000
   6          #define LenRxBuf        50
   7          #define MaxLenStr       100
   8          #define TABNum          8
   9          
  10          uchar xdata TxBuf[LenTxBuf],RxBuf[LenRxBuf];  // buffer entities,缓冲区实体
  11          uchar xdata *inTxBuf,*outTxBuf,*inRxBuf,*outRxBuf; // buffer pointers,缓冲区指针
  12          uchar TIflag;
  13          uchar RIflag;
  14          
  15          
  16          void InitSerialBuffer(void)
  17          {
  18   1              inTxBuf = TxBuf;
  19   1              outTxBuf = TxBuf;
  20   1              inRxBuf = RxBuf;
  21   1              outRxBuf = RxBuf+LenRxBuf-1;
  22   1      }
  23          
  24          void InitSerial(unsigned char BaudRate) 
  25          {
  26   1              unsigned char THTL;
  27   1              switch (BaudRate)
  28   1              {
  29   2                      case 1: THTL = 64; break; //波特率300
  30   2                      case 2: THTL = 160; break; //600
  31   2                      case 3: THTL = 208; break; //1200
  32   2                      case 4: THTL = 232; break; //2400
  33   2                      case 5: THTL = 244; break; //4800
  34   2                      case 6: THTL = 250; break; //9600
  35   2                      case 7: THTL = 253; break; //19200
  36   2                      case 8: THTL = 255; break; //57600
  37   2                      default: THTL = 208;
  38   2              }
  39   1              /* SCON = 0x52; set TI to 1, this is important for printf();if SCON=0x50,printf() function doesn't work!*
             -/
  40   1              SCON = 0x52; //串口方式1,允许接收  ; SM0|SM1|SM2|REN|TB8|RB8|TI|RI , 
  41   1                                      // SM0|SM1 used to define work mode;   00:Mode0(SPI); 
  42   1                                      //                                                                                      01:Mode1,8bit URAT(T1 Band Generator);
  43   1                                      //                                                                             10:Mode2,9bit URAT(Bandrate fsoc/64,fsoc/32;
  44   1                                      //                                                                                      11:Mode3,9bit URAT(T1 Bandrate Generator);
  45   1                                      // SM2=1:multi machines communication;
  46   1                                      // REN=1: Receive enable;
  47   1                                      // TB8: the TX nineth bit;   RB8: the RX  nineth bit
  48   1              TMOD = 0x20; //定时器1定时方式2; Gate | C/T | M1 | M0 | Gate | C/T | M1 | M0 
  49   1                                      //  Gate:external start/stop control , controlled by P3.2(INT0) or P3.3(INT1) 
  50   1                                      // C/T: =0:internal timer ; =1:external counter;
  51   1                                      // M1|M0: 00: 13bits counter/timer;
  52   1                                      //                 01: 16bits counter/timer;
  53   1                                      //                 10: auto reload 8bits counter/timer;
  54   1                                      //                 11: only fits to T0;two 8bits counter/timer; 
C51 COMPILER V8.05a   SERIAL                                                               11/09/2008 23:18:21 PAGE 2   

  55   1              TCON = 0x00;
  56   1              TH1 = THTL;
  57   1              TL1 = THTL;
  58   1              PCON = 0x80; //波特率加倍控制,SMOD位
  59   1              ES = 1; // enable URAT interrupt.
  60   1              TR1 = 1; //启动定时器 
  61   1      }
  62          
  63          
  64          void PrintChar(uchar ch)
  65          {
  66   1              uchar *t;
  67   1              t=inTxBuf; t++;
  68   1              if(t==TxBuf+LenTxBuf) 
  69   1                      t=TxBuf; //Rotate pointer 
  70   1              if(t==outTxBuf)
  71   1                      return;         //Tx Buffer is full
  72   1              *inTxBuf = ch;
  73   1              inTxBuf = t;
*** WARNING C259 IN LINE 73 OF SERIAL.C: '=': pointer: different mspace
  74   1              if(TIflag)
  75   1              {
  76   2                      TIflag = 0;
  77   2                      TI=1;
  78   2              }
  79   1      }
  80          
  81          void PrintStr(uchar *str)
  82          {
  83   1              uchar i;
  84   1              uchar j;
  85   1              uchar ch;
  86   1              for(i=0;i<MaxLenStr;i++)
  87   1              {
  88   2                      ch=*(str+i);
  89   2                      if(ch=='\0')    
  90   2                              break;
  91   2                      else
  92   2                              if(ch=='\n')
  93   2                              {
  94   3                                      PrintChar(10);
  95   3                                      PrintChar(13);
  96   3                              }                       
  97   2                              else
  98   2                                      if(ch=='\t')
  99   2                                      {
 100   3                                              for(j=0;j<TABNum;j++)
 101   3                                                      PrintChar(' ');
 102   3                                      }
 103   2                      else
 104   2                              PrintChar(ch);
 105   2              }
 106   1      }
 107          
 108          void clrscr()
 109          {
 110   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");
 111   1      }
 112          
 113          void serial() 
 114          {
 115   1              uchar *t;
C51 COMPILER V8.05a   SERIAL                                                               11/09/2008 23:18:21 PAGE 3   

 116   1              if(TI)
 117   1              {
 118   2                      TI=0;
 119   2                      if(inTxBuf==outTxBuf)
 120   2                      {
 121   3                              TIflag=1;
 122   3                              return;
 123   3                      }                                               // Tx buffer is empty.
 124   2                      SBUF = *outTxBuf;
 125   2                      outTxBuf++;
 126   2                      if(outTxBuf==TxBuf+LenTxBuf)
 127   2                              outTxBuf=TxBuf;
 128   2              }
 129   1              if(RI)
 130   1              {
 131   2                      RI=0;
 132   2                      if(!RIflag)
 133   2                              RIflag=1;
 134   2                      t=inRxBuf;
 135   2                      t++;
 136   2                      if(t==RxBuf+LenRxBuf)   t=RxBuf;
 137   2                      if(t==outRxBuf) return;  // Rx buffer is full.
 138   2                      *inRxBuf=SBUF;
 139   2                      inRxBuf=t;
 140   2              }
 141   1      }
 142          
 143          void URAT_ISR() interrupt 4
 144          {
 145   1              serial();
 146   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    531    ----
   CONSTANT SIZE    =     26    ----
   XDATA SIZE       =   2050    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     13       9
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -