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

📄 serial.lst

📁 HID 设备测试程序
💻 LST
字号:
C51 COMPILER V7.50   SERIAL                                                                11/24/2008 09:12:33 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN Serial.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE Serial.c BROWSE DEFINE(__DEBUG__) DEBUG OBJECTEXTEND

line level    source

   1          /*===============================================================================//
   2          //== 文 件 名:Serial.c
   3          //== author      :gnsusn
   4          //== 说    明:串口操作
   5          //== 修改日志:2008.7.14 创建文件
   6          //== 
   7          //===============================================================================*/
   8          #include <reg52.H>
   9          
  10          #include "Serial.h"
  11          
  12          static struct _serial serial;           //== 串口操作结构体
  13          
  14          //===============================================================================//
  15          //== 函 数 名:Init_Serial_Data
  16          //== 功   能 :初始化串口用到的数据
  17          //== 说   明 :
  18          //== 时   间 :2008.7.15 创建函数
  19          //== 入口参数:无
  20          //== 返 回 值:0(表示成功)
  21          //===============================================================================//
  22          unsigned char Init_Serial_Data(void)
  23          {
  24   1              serial.send_position = 0;
  25   1              serial.send_bufp = 0;
  26   1              serial.flag = 0;
  27   1              serial.send_number = 0;
  28   1              serial.rece_position = 0;
  29   1              //serial.rece_bufp = rece_buf;
  30   1              //serial.rece_number = sizeof(rece_buf);
  31   1      
  32   1              return 0;
  33   1      }
  34          
  35          //===============================================================================//
  36          //== 函 数 名:Print_Msg
  37          //== 功   能 :通过串口0打印信息
  38          //== 说   明 :
  39          //== 时   间 :2008.7.14 创建函数
  40          //== 入口参数:信息的首地址
  41          //== 返 回 值:0(表示成功)
  42          //===============================================================================//
  43          unsigned char Print_Msg(unsigned char* pMsg)
  44          {
  45   1              if (!pMsg)                                      //== 判断指针是否有效
  46   1              {
  47   2                      return INVAL_POINTER;   //== 数据指针无,效返回1
  48   2              }
  49   1              
  50   1              if (serial.flag != SIDEL)       //== 判断串口是否被占用
  51   1              {
  52   2                      while(serial.flag != SIDEL);//== 等待释放串口
  53   2              }
  54   1      
  55   1              serial.flag = SMESSAGE;         //== 置发送类型为信息
C51 COMPILER V7.50   SERIAL                                                                11/24/2008 09:12:33 PAGE 2   

  56   1              serial.send_bufp = pMsg;        //== 信息地址指针赋给发送缓冲区指针
  57   1              SBUF = *(serial.send_bufp++);   //== 发送第一个字符,剩下的由中断处理
  58   1      
  59   1              return 0;
  60   1      }
  61          
  62          //===============================================================================//
  63          //== 函 数 名:Print_Data
  64          //== 功   能 :通过串口发送数据
  65          //== 说   明 :
  66          //== 时   间 :2008.7.14 创建函数
  67          //== 入口参数:pData:信息的首地址;Num:发送字节的个数
  68          //== 返 回 值:0(表示成功)
  69          //===============================================================================//
  70          unsigned char Print_Data(unsigned char* pData, unsigned char Num)
  71          {
  72   1              if (!pData)                                     //== 判断指针是否有效
  73   1              {
  74   2                      return INVAL_POINTER;   //== 数据指针无,效返回1
  75   2              }
  76   1      
  77   1              if (serial.flag != SIDEL)       //== 判断串口是否被占用
  78   1              {
  79   2                      while(serial.flag != SIDEL);//== 等待释放串口
  80   2              }
  81   1      
  82   1              serial.flag = SDATA;            //== 置发送类型为数据
  83   1              serial.send_number = Num;       //== 将要发送数据的个数
  84   1              serial.send_bufp = pData;       //== 数据地址指针赋给发送缓冲区指针
  85   1              SBUF = *serial.send_bufp;       //== 发送第一个字符,剩下的由中断处理
  86   1              serial.send_position = 1;       //== 数据已经发送完一个
  87   1      
  88   1              return 0;
  89   1      }
  90          
  91          //===============================================================================//
  92          //== 函 数 名:PrintLongInt
  93          //== 功   能 :打印长整型数据
  94          //== 说   明 :
  95          //== 时   间 :2008.7.14 创建函数
  96          //== 入口参数:Data:要打印的数据
  97          //== 返 回 值:0(表示成功)
  98          //===============================================================================//
  99          unsigned char Print_Long(unsigned long Data)
 100          {
 101   1              unsigned char display_buffer[10];
 102   1              unsigned long number = Data;
 103   1              char i;
 104   1      
 105   1              for (i=0; i<10; i++)
 106   1              {
 107   2                      display_buffer[i] = 0;
 108   2              }
 109   1      
 110   1              for (i=9; i>=0; i--)
 111   1              {
 112   2                      display_buffer[i] = '0' + number%10;
 113   2                      number /= 10;
 114   2              }
 115   1      
 116   1              for (i=0; i<9; i++)
 117   1              {
C51 COMPILER V7.50   SERIAL                                                                11/24/2008 09:12:33 PAGE 3   

 118   2                      if (display_buffer[i] != '0') break;
 119   2              }
 120   1      
 121   1              Print_Data(&display_buffer[i], 10-i);
 122   1      
 123   1              return 0;
 124   1      }
 125          
 126          //===============================================================================//
 127          //== 函 数 名:Print_Hex
 128          //== 功   能 :打印十六进制数
 129          //== 说   明 :
 130          //== 时   间 :2008.7.14 创建函数
 131          //== 入口参数:Data:要打印的数据
 132          //== 返 回 值:0(表示成功)
 133          //===============================================================================//
 134          unsigned char Print_Hex(unsigned char* pData, unsigned char number)
 135          {
 136   1              unsigned char code HEX_Tab[] = {'0','1','2','3','4','5','6','7',
 137   1                                                                              '8','9','A','B','C','D','E','F',};
 138   1              unsigned char i, temp[2];
 139   1      
 140   1              for (i=0; i<number; i++)
 141   1              {
 142   2                      Print_Msg("0x");
 143   2                      temp[1] = HEX_Tab[(*(pData+i))&0x0f];
 144   2                      temp[0] = HEX_Tab[(*(pData+i))>>4];
 145   2                      Print_Data(temp, 2);
 146   2                      Print_Msg(" ");
 147   2              }
 148   1      
 149   1              return 0;
 150   1      }
 151          
 152          //===============================================================================//
 153          //== 函 数 名:Serial_Saver
 154          //== 功   能 :串口中断服务程序
 155          //== 说   明 :
 156          //== 时   间 :2008.7.15 创建函数
 157          //== 入口参数:无
 158          //== 返 回 值:无
 159          //===============================================================================//
 160          void Serial_Saver(void) interrupt 4
 161          {
 162   1              if (TI)
 163   1              {
 164   2                      TI = 0;
 165   2      
 166   2                      switch (serial.flag)
 167   2                      {
 168   3                              case SMESSAGE:                                  //== 发送信息时引起的中断
 169   3                              {
 170   4                                      if (*serial.send_bufp)          //== 信息未发送完
 171   4                                      {
 172   5                                              SBUF = *(serial.send_bufp++);
 173   5                                      }
 174   4                                      else                                            //== 信息发送完
 175   4                                      {
 176   5                                              serial.send_bufp = 0;   //== 发送缓冲区无效
 177   5                                              serial.flag = SIDEL;    //== 置串口状态为闲
 178   5                                      }
 179   4                              }break;
C51 COMPILER V7.50   SERIAL                                                                11/24/2008 09:12:33 PAGE 4   

 180   3      
 181   3                              case SDATA:                                             //== 发送数据时引起的中断
 182   3                              {
 183   4                                      if (serial.send_position<serial.send_number)
 184   4                                      {
 185   5                                              SBUF = *(serial.send_bufp+serial.send_position);
 186   5                                              serial.send_position += 1;
 187   5                                      }
 188   4                                      else                                            //== 数据发送完毕
 189   4                                      {
 190   5                                              serial.send_bufp = 0;
 191   5                                              serial.flag = SIDEL;
 192   5                                              serial.send_position = 0;
 193   5                                              serial.send_number = 0;
 194   5                                      }
 195   4                              }break;
 196   3      
 197   3                              default: break;
 198   3                      }
 199   2              }
 200   1              else
 201   1              {
 202   2                      RI = 0;
 203   2              }
 204   1      }
 205          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    451    ----
   CONSTANT SIZE    =     21    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11      20
   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 + -