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

📄 demo.lst

📁 一个基于C51指令系统的简易uCOS示范程序,有完整的代码分析
💻 LST
字号:
C51 COMPILER V7.07   DEMO                                                                  05/31/2008 20:36:05 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE DEMO
OBJECT MODULE PLACED IN DEMO.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DEMO.C LARGE BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <includes.h>
   2          
   3          #define SERIAL_BAUDRATE0 0
   4          #define SERIAL_BAUDRATE1 1
   5          #define SERIAL_BAUDRATE2 2
   6          #define SERIAL_BAUDRATE3 3
   7          #define SERIAL_MODE0 0//8-bit var. baudrate
   8          #define SERIAL_MODE1 1//9-bit var. baudrate
   9          
  10          #define COMM_Q_SIZE 100//Maximum to 65535
  11          
  12          OS_EVENT *CommQRx,*CommQTx;
  13          void *CommMsgRx[COMM_Q_SIZE],*CommMsgTx[COMM_Q_SIZE];
  14          INT8U SerialStatWord;//Readonly
  15                               //  __ __ __ __ __ __ __ __
  16                               // |__|__|__|__|__|__|__|__|
  17                               //  D7 D6 D5 D4 D3 D2 D1 D0
  18                               //
  19                               //  D7:    Serial Mode
  20                               //             0--SERIAL_MODE0
  21                               //             1--SERIAL_MODE1
  22                               //  D6-D4: Serial Baudrate
  23                               //             000--SERIAL_BAUDRATE0
  24                               //             001--SERIAL_BAUDRATE1
  25                               //             010--SERIAL_BAUDRATE2
  26                               //             011--SERIAL_BAUDRATE3
  27                               //             others--SERIAL_BAUDRATE0(default,can also be defined by user)
  28                               //  D3 D2: Tx-Buffer Status
  29                               //             00--Normal(stored,but not full)
  30                               //             10--Empty
  31                               //             11--Full
  32                               //  D1 D0: Rx-Buffer Status
  33                               //             00--Normal
  34                               //             10--Empty
  35                               //             11--Full
  36                                  
  37          void SerialInit(INT8U smode,INT8U sbaudrate) reentrant;
  38          void SerialBufCreate(void) reentrant;
  39          void RxBufgetch(INT8U *ch) reentrant;
  40          void TxBufputch(INT8U *ch) reentrant;
  41          void SerialBufClr(void) reentrant;
  42          void Serial(void) reentrant;
  43          
  44          #define TxStart() TI=1
  45          #define SerialRelease() ES=0
  46          
  47          /*
  48          *************************************************************************************************
  49          */
  50          void SerialInit(INT8U smode,INT8U sbaudrate) reentrant//串口初始化
  51          {    
  52   1          if(smode==SERIAL_MODE0) {SCON=0x50;SerialStatWord&=0x7F;}
  53   1          else {SCON=0xD0;SerialStatWord|=0x80;}
  54   1          SerialStatWord&=0x8F;
  55   1          TMOD&=0x0F;
C51 COMPILER V7.07   DEMO                                                                  05/31/2008 20:36:05 PAGE 2   

  56   1          TMOD|=0x20;
  57   1          switch(sbaudrate)
  58   1          {
  59   2              case SERIAL_BAUDRATE0:
  60   2                  TL1=0xFD;//19200bps@11.059MHz,TL1=256-(2^SMOD/32*Fosc/12*1/Baudrate)
  61   2                  PCON=0x80;
  62   2                  break;
  63   2              case SERIAL_BAUDRATE1:
  64   2                  TL1=0xFD;//9600bps@11.059MHz
  65   2                  PCON=0x00;
  66   2                  SerialStatWord|=0x10;
  67   2                  break;
  68   2              case SERIAL_BAUDRATE2:
  69   2                  TL1=0xFA;//4800bps@11.059MHz
  70   2                  PCON=0x00;
  71   2                  SerialStatWord|=0x20;
  72   2                  break;
  73   2              case SERIAL_BAUDRATE3:
  74   2                  TL1=0xF4;//2400bps@11.059MHz
  75   2                  PCON=0x00;
  76   2                  SerialStatWord|=0x30;
  77   2                  break;
  78   2              default:
  79   2                  TL1=0xFD;//9600bps@11.059MHz
  80   2                  PCON=0x00;
  81   2          }
  82   1          TH1=TL1;
  83   1          TR1=1;//Start timer1
  84   1          ES=1;//Enable serialport interrupt
  85   1      }
  86          /*
  87          *************************************************************************************************
  88          */
  89          void SerialBufCreate(void) reentrant//建立串口收发缓冲区
  90          {
  91   1          CommQRx=OSQCreate(&CommMsgRx[0],COMM_Q_SIZE);
  92   1          CommQTx=OSQCreate(&CommMsgTx[0],COMM_Q_SIZE);
  93   1          SerialStatWord&=0xF0;
  94   1          SerialStatWord|=0x0A;
  95   1      }
  96          /*
  97          *************************************************************************************************
  98          */
  99          void RxBufgetch(INT8U *ch) reentrant//从串口接收缓冲区读1字节数据
 100          {
 101   1          ch=(INT8U *)OSQAccept(CommQRx);
 102   1          if(ch!=(INT8U *)0) SerialStatWord&=0xFC;
 103   1          else {SerialStatWord&=0xFC;SerialStatWord|=0x02;}
 104   1      }
 105          /*
 106          *************************************************************************************************
 107          */
 108          void TxBufputch(INT8U *ch) reentrant//向串口发送缓冲区写1字节数据
 109          {
 110   1          INT8U err;
 111   1          err=OSQPost(CommQTx,(void *)ch);
 112   1          if(err==OS_NO_ERR) SerialStatWord&=0xF3;
 113   1          else {SerialStatWord&=0xF3;SerialStatWord|=0x0C;}
 114   1      }
 115          /*
 116          *************************************************************************************************
 117          */
C51 COMPILER V7.07   DEMO                                                                  05/31/2008 20:36:05 PAGE 3   

 118          void SerialBufClr(void) reentrant//清空串口收发缓冲区
 119          {
 120   1          OSQFlush(CommQRx);
 121   1          OSQFlush(CommQTx);
 122   1          SerialStatWord&=0xF0;
 123   1          SerialStatWord|=0x0A;
 124   1      }
 125          /*
 126          *************************************************************************************************
 127          */
 128          void Serial(void) reentrant//串口中断服务子程序
 129          {
 130   1          INT8U *ch,err;
 131   1          if(TI)
 132   1          {
 133   2              TI=0;
 134   2              ch=(INT8U *)OSQAccept(CommQTx);
 135   2              if(ch!=(INT8U *)0)
 136   2              {
 137   3                  ACC=*ch;
 138   3                  TB8=P;
 139   3                  SBUF=ACC;
 140   3                  SerialStatWord&=0xF3;
 141   3              }
 142   2              else {SerialStatWord&=0xF3;SerialStatWord|=0x08;}        
 143   2          }
 144   1          if(RI)
 145   1          {
 146   2              RI=0;
 147   2              if(SM0)
 148   2              {
 149   3                  ACC=SBUF;
 150   3                  if(P==RB8)
 151   3                  {
 152   4                      err=OSQPost(CommQRx,(void *)0x99);//sfr SBUF=0x99,see "reg51.h"
 153   4                      if(err==OS_NO_ERR) {SerialStatWord&=0xFC;}
 154   4                      else {SerialStatWord&=0xFC;SerialStatWord|=0x03;}
 155   4                  }
 156   3              }
 157   2              else
 158   2              {
 159   3                  err=OSQPost(CommQRx,(void *)0x99);//sfr SBUF=0x99,see "reg51.h"
 160   3                  if(err==OS_NO_ERR) {SerialStatWord&=0xFC;}
 161   3                  else {SerialStatWord&=0xFC;SerialStatWord|=0x03;}
 162   3              }
 163   2          }
 164   1      }
 165          /*
 166          *************************************************************************************************
 167          */
 168          /*
 169          *************************************************************************************************
 170          */
 171          void PrintChar(INT8U ch) reentrant//显示字符(ASCII码)
 172          {
 173   1          INT8U temp;
 174   1          do {temp=SerialStatWord&0x0C;}//Delay till Tx-Buffer empty(very important)
 175   1          while(temp!=0x08);
 176   1          TxBufputch(&ch);
 177   1          TxStart();
 178   1      }
 179          /*
C51 COMPILER V7.07   DEMO                                                                  05/31/2008 20:36:05 PAGE 4   

 180          *************************************************************************************************
 181          */
 182          void PrintDec(INT16U dec) reentrant//十进制格式显示数据(16-bit)
 183          {
 184   1          INT8U a,b,c,d,e;
 185   1          a=dec%10;
 186   1          b=dec%100/10;
 187   1          c=dec%1000/100;
 188   1          d=dec%10000/1000;
 189   1          e=dec/10000;
 190   1          if(e!=0) PrintChar(e+'0');
 191   1          if(d!=0) PrintChar(d+'0');
 192   1          if(c!=0) PrintChar(c+'0');
 193   1          if(b!=0) PrintChar(b+'0');
 194   1          PrintChar(a+'0');
 195   1      }
 196          /*
 197          *************************************************************************************************
 198          */
 199          void PrintHex(INT8U hex) reentrant//十六进制格式显示数据(8-bit)
 200          {
 201   1          INT8U temp;
 202   1          temp=hex>>4;
 203   1          if(temp>=0&&temp<=9) temp=temp+'0';
 204   1          else temp=temp+'A'-10;
 205   1          PrintChar(temp);
 206   1          temp=hex&0x0F;
 207   1          if(temp>=0&&temp<=9) temp=temp+'0';
 208   1          else temp=temp+'A'-10;
 209   1          PrintChar(temp);
 210   1      }
 211          /*
 212          *************************************************************************************************
 213          */
 214          void PrintStr(INT8U *str) reentrant//显示字符串
 215          {
 216   1          INT8U temp;
 217   1          do {temp=SerialStatWord&0x0C;}//Delay till Tx-Buffer empty(very important)
 218   1          while(temp!=0x08);
 219   1          while(*str!='\0')
 220   1          {
 221   2              TxBufputch(str);
 222   2              str++;
 223   2          }
 224   1          TxStart();
 225   1      }
 226          /*
 227          *************************************************************************************************
 228          */
 229          void ClrScr() reentrant//清屏
 230          {        
 231   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");
 232   1      }
 233          /*
 234          *************************************************************************************************
 235          */
 236          #define TASK_STK_SIZE MaxStkSize//Maximum to 65535
 237          
 238          OS_STK MyTaskStk[TASK_STK_SIZE];
 239          
 240          void MyTask(void *ppdata) reentrant
 241          {
C51 COMPILER V7.07   DEMO                                                                  05/31/2008 20:36:05 PAGE 5   

 242   1          ppdata=ppdata;
 243   1          while(1)
 244   1          {
 245   2              ClrScr();
 246   2              PrintStr("\t\t***********************************************************\n");
 247   2              PrintStr("\t\t*    (c) 2003 DRAGON JUBILATION ELECTRONICS Co., Ltd.     *\n");
 248   2              PrintStr("\t\t*                 All Rights Reserved                     *\n");
 249   2              PrintStr("\t\t*       THE DEMO OF 8051MCU SERIAL COMMUNICATIONS         *\n");
 250   2              PrintStr("\t\t*                    Ver 1.0(beta)                        *\n");
 251   2              PrintStr("\t\t*                                                         *\n");
 252   2              PrintStr("\t\t*      ###       ###            ###########   ########    *\n");
 253   2              PrintStr("\t\t*       ##       #########      ###   ##      ###    ##   *\n");
 254   2              PrintStr("\t\t*   ##########   ###            ###   ##      ###    ##   *\n");
 255   2              PrintStr("\t\t*     ##   #      #######       ### #####     ###    ##   *\n");
 256   2              PrintStr("\t\t*      #  #             ##      ### ##  ##    #########   *\n");
 257   2              PrintStr("\t\t*  ############  #########      ### ##  ##    ###         *\n");
 258   2              PrintStr("\t\t*    ########    ###            ###  #####    ###         *\n");
 259   2              PrintStr("\t\t*    ##     ##   ########       ###   ##      ###         *\n");
 260   2              PrintStr("\t\t*    #########   ###            ###   ##      ###     ##  *\n");
 261   2              PrintStr("\t\t*    ##     ##   ########        ##########    ########   *\n");
 262   2              PrintStr("\t\t*    #########   ###                                      *\n");
 263   2              PrintStr("\t\t*    ##     ##   ########        ##   ##     ##    ##     *\n");
 264   2              PrintStr("\t\t*    ##     ##   ###     ##     ###    ###    ###   ###   *\n");
 265   2              PrintStr("\t\t*    ##    ##     ########      ###    ###    ###   ####  *\n");
 266   2              PrintStr("\t\t*                                                         *\n");
 267   2              PrintStr("\t\t***********************************************************\n");
 268   2              PrintStr("\t\tSerialStatWord=");PrintHex(SerialStatWord);PrintChar('\n');
 269   2              OSTimeDly(0);
 270   2          }
 271   1      }
 272          /*
 273          *************************************************************************************************
 274          */ 
 275          main()
 276          {
 277   1          OSInit();
 278   1          SerialBufCreate();
 279   1          SerialInit(SERIAL_MODE0,SERIAL_BAUDRATE3);
 280   1          OSTaskCreate(MyTask, (void *)0, &MyTaskStk[0],0);
 281   1          OSStart();
 282   1      }
 283          
 284           
 285          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1556    ----
   CONSTANT SIZE    =   1304    ----
   XDATA SIZE       =    707    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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