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

📄 demo.lst

📁 UCOSII2.85针对8051单片机的移植版本
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   DEMO                                                                  12/14/2007 08:25:27 PAGE 1   


C51 COMPILER V7.50, 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

line level    source

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

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

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

 180          void PrintChar(INT8U ch) reentrant//显示字符(ASCII码)
 181          {
 182   1          INT8U temp;
 183   1          do {temp=SerialStatWord&0x0C;}//Delay till Tx-Buffer empty(very important)
 184   1          while(temp!=0x08);

⌨️ 快捷键说明

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