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

📄 com.lst

📁 USB鼠标,单片机的,可以
💻 LST
字号:
C51 COMPILER V6.23a  COM                                                                   08/17/2006 16:45:14 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE COM
OBJECT MODULE PLACED IN .\Obj\Com.obj
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE ..\..\Driver\Comm\Com.c LARGE OPTIMIZE(2,SPEED) MODP2 PRINT(.\Obj\Com.lst) 
                    -OBJECT(.\Obj\Com.obj) 

stmt level    source

   1          
   2          /*
   3          * CopyRight (C) 2006,江苏盛唐电子产品有限公司
   4          * All Rights Reserved.
   5          *
   6          * 文件名称:com.c
   7          * 文件标识:
   8          * 摘    要:串口RS233底层收发驱动。
   9          * 
  10          * 当前版本:1.0
  11          * 作    者:熊刚
  12          * 完成日期:2004-05-04
  13          *
  14          * 取代版本: 
  15          * 原作者  :
  16          * 完成日期:
  17          */
  18          #include "..\inc\includes.h"
  19          
  20          char xdata ser_buffer[SERIAL_BUFF_SIZE];  /* the receive buffer*/
  21          
  22          int ser_end = -1;
  23          int ser_start=-1;      /* indexes into receive buffer*/
  24          int ser_ch;
  25          int char_ready=0;           /* current character and ready flag*/
  26          
  27          int serial_lock = 0;                /* serial ISR semaphore so the buffer*/
  28                                           /* isn't altered will it is being written*/
  29          //功能介绍:串口通讯中断服务程序。
  30          //入口参数:无
  31          //出口参数:无
  32          //备注:系统开中断后由中断触发执行。
  33          void  Serial_Isr(void) interrupt 4
  34          {
  35   1              
  36   1      /* this is the ISR (Interrupt Service Routine) for the com port.  It is very*/
  37   1      /* simple.  When it gets called, it gets the next character out of the receive*/
  38   1      /* buffer register 0 and places it into the software buffer. Note: C takes care*/
  39   1      /* of all the register saving and house work.  Cool huh!*/
  40   1      
  41   1                  /* lock out any other functions so the buffer doesn't get corrupted*/
  42   1              if(TI)
  43   1              {
  44   2                      //TI = 0;
  45   2                      return ;
  46   2              }
  47   1              
  48   1              if ( !RI )
  49   1              {
  50   2                      return ;                             //有数据或无数据用1、0表示 
  51   2              }   
  52   1          serial_lock = 1;        /*封锁对串行缓冲区的其它操作*/
  53   1      
  54   1                  /* place character into next position in buffer*/
C51 COMPILER V6.23a  COM                                                                   08/17/2006 16:45:14 PAGE 2   

  55   1      
  56   1          ser_ch = SBUF;
  57   1          if (++ser_end > SERIAL_BUFF_SIZE-1)
  58   1          {
  59   2              ser_end = 0;        /*寻找到循环缓冲区的结尾位置*/
  60   2              }
  61   1      
  62   1          ser_buffer[ser_end] = ser_ch;       /*将串行口读取到的数据放入队列尾部*/
  63   1      
  64   1          ++char_ready;               /*接收数量计数器加1 */
  65   1      
  66   1          serial_lock = 0;            /*打开对串行接收数据缓冲区的锁定*/
  67   1          RI = 0;
  68   1      }
  69          
  70          /*///////////////////////////////////////////////////////////////////////*/
  71          //功能介绍:检查缓冲区是否接收到数据。获取收到的数据的数量
  72          //入口参数:无
  73          //出口对数:返回接收的数据个数,没有数据返回0
  74          //备注:
  75          
  76          int Ready_Serial(char SeriesComID)
  77          {
  78   1              SeriesComID = SeriesComID;
  79   1          return(char_ready);
  80   1      
  81   1      }
  82          
  83          /*/////////////////////////////////////////////////////////////////////////*/
  84          // 功能介绍:从串行缓冲接收区中读取1个数据
  85          // 入口参数:存放读取到的数据的地址指针
  86          // 出口参数: 读取成功,返回1,失败时,返回数据0
  87          // 备注:
  88          int Serial_Read(char SeriesComID,char *RdData)
  89          {
  90   1              /* wait for isr to end*/
  91   1      
  92   1              SeriesComID = SeriesComID;
  93   1      
  94   1          while(serial_lock);     /*等待串行接收中断完成*/
  95   1          if (ser_end != ser_start)
  96   1          {
  97   2      
  98   2              if (++ser_start > SERIAL_BUFF_SIZE-1)   /*移动头指针, 找到读取数据的位置*/
  99   2                  ser_start = 0;
 100   2      
 101   2                      *RdData = ser_buffer[ser_start];         /*从缓冲区中取数*/
 102   2                                                      /*并送到入口变量中*/
 103   2              if (char_ready > 0)             /*接收数据数量计数器减1*/
 104   2                  --char_ready;
 105   2      
 106   2              return(1);     /*返回读取到数据的成功标志*/
 107   2      
 108   2          }  
 109   1          else
 110   1          {
 111   2              return(0);      /*读取失败时,返回读取失败的标志*/
 112   2              }
 113   1      } 
 114          
 115          //功能介绍:将字符的内容从串行口发出
 116          //入口参数:准备发送的数据
C51 COMPILER V6.23a  COM                                                                   08/17/2006 16:45:14 PAGE 3   

 117          //出口参数:无
 118          //备注:   程序中没有使用超时退出机制,如果硬件发生故障,会出现死循环.
 119          void Serial_Write(char SeriesComID,char ch)
 120          {
 121   1              SeriesComID = SeriesComID;
 122   1      
 123   1              SBUF = ch;
 124   1          while ( !TI );
 125   1          TI = 0;
 126   1      }
 127          
 128          //功能介绍:打开串行口
 129          //  入口参数:   port_base 使用串行口的端口号
 130          //              baud    串行口设定的波特率
 131          //              configuration 串行口工作参数设置,包括数据位数,剞偶校验等
 132          //  出口参数:
 133          //      备注: 请使用头文件中定义的符号常量来设置工作参数
 134          void Open_Serial(int port_base, int baud, int configuration)
 135          {
 136   1              port_base = port_base;
 137   1              baud = baud;
 138   1              configuration = configuration;
 139   1      
 140   1              //串口初始化
 141   1              SCON = 0x52;                                //设置串口
 142   1              PCON &= 0x80;
 143   1      
 144   1              TMOD = 0x20;
 145   1              TH1  = 0xFB;                                //波特率19200
 146   1              TL1  = 0xFB;                                
 147   1              
 148   1              TR1  = 1;
 149   1              TI = 0;
 150   1              
 151   1              ES = 1;                 //允许串口中断
 152   1              EA = 1;
 153   1              
 154   1      } 
 155          
 156          /*功能介绍:关闭串行口
 157            入口参数:将关闭的串行口号
 158            出口参数:无
 159              备注:
 160          */
 161          void Close_Serial(int port_base)
 162          {
 163   1              port_base = port_base;
 164   1              ES = 0;
 165   1      } 
 166          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    505    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     74      15
   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 + -