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

📄 serial.lst

📁 我自个写的一个"C51串口控制台" 目的是可以像用DOS一样命令单片机 正在努力完善
💻 LST
字号:
C51 COMPILER V7.01  SERIAL                                                                 03/25/2006 17:00:53 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN Serial.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Serial.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*******************************/
   2          /*C51 serial console---Csc v1.0*/
   3          /*Author: SPECIAL                  */
   4          /*E_mail: pajoke@163.com           */
   5          /*******************************/
   6          /*
   7          编译时会出现:"*** WARNING L15: MULTIPLE CALL TO SEGMENT"
   8          是交叉调用引起的,可以不用理会.
   9          是可重入的问题(reentrant),可以处理掉,不过不想管它(有点烦)!
  10          最小系统占用资源:Program Size: data=24.0 xdata=0 code=943
  11          */
  12          #include <REG52.H>
  13          #include "Serial.h"
  14          #define  uchar  unsigned char
  15          //*********参数定义********
  16          #define  BufferLength   0x030  //定义串口字符串的缓冲区大小
  17          #define  CmdNum             0x06  //定义系统命令的个数
  18          //*************************
  19          #define CloseSerial SendString("\n>Serial Control System Halt...\n>Serial Close......");
  20          //*************************
  21          uchar    S_Buffer[BufferLength];//串口缓冲区
  22          uchar code cmd_tab[CmdNum][5]=//命令最多只能定义(5-1)个字母,否则会出乱
  23          {
  24          "exit",//0━┓这两个
  25          "help",//1━┛不要改
  26          "ghex",//2
  27          };
  28          //******************************
  29          void serial_Int(void) interrupt 4 //串口中断服务子程序
  30          {   
  31   1       if(RI)
  32   1       {
  33   2              ES=0;
  34   2         switch(GetCmd())
  35   2         {
  36   3              case 0:CloseSerial;
  37   3                              ES=0;
  38   3                              return;
  39   3                              break;
  40   3          case 1:SendCmdType();                                       
  41   3                              break;
  42   3      //***********以下为用户命令的执行区***************/                     
  43   3              case 2:SendString("\nInput One Hex Number!\n");      
  44   3                              SendHex(GetHex());                              
  45   3                              break;                          
  46   3      //***********以上为用户命令的执行区***************/             
  47   3              default:SendString("\nInvalid command!\n");
  48   3                              break;
  49   3          }
  50   2              ES=1;
  51   2              SendString("\nCsc=>");
  52   2       }
  53   1      }
  54          
  55          //**************************
C51 COMPILER V7.01  SERIAL                                                                 03/25/2006 17:00:53 PAGE 2   

  56          void InitSerial() //串口初始化,设波特率要跟据实际情况调整
  57          {
  58   1      /*
  59   1        TMOD=TMOD&0x0F;
  60   1        TMOD=TMOD|0x**;
  61   1        TL1=0x**,TH1=0x**;                         
  62   1        SCON=0x**;
  63   1        TR1=1;
  64   1      */
  65   1        SCON=0x90;//工作方式2  波特率=fosc/32(软件仿真就无所谓了)
  66   1        ES=1;
  67   1        EA=1;
  68   1        SendString("@Serial Control System Start...\n*C51 serial console---Csc v1.0\n*Author: SPECIAL\n*E_mail:p
             -ajoke@163.com\n>Input the command...(Type\"help\"to show CMD type)\nCsc=>");
  69   1      }
  70          //**************************
  71          uchar GetCmd()//从串口取命令 ,返回值"0xFF"用作报错的保留值
  72          {                         
  73   1       uchar i,j;
  74   1       GetString();
  75   1       for(i=0;i<CmdNum;i++)
  76   1       {
  77   2         for(j=0;j<5;j++)
  78   2         {
  79   3               if(S_Buffer[j]!=cmd_tab[i][j])
  80   3                  break;
  81   3               if((S_Buffer[j]=='\0')&&(cmd_tab[i][j]=='\0'))
  82   3                  return(i);
  83   3          }
  84   2        }
  85   1        return(0xff);
  86   1      }
  87          //**************************
  88          void SendString(uchar *ptr)//发送字符串
  89          {
  90   1       do
  91   1       {
  92   2        SendChar(*(ptr++));
  93   2       }while(*(ptr)!='\0');
  94   1      }
  95          //***************************
  96          void GetString()//读取一字符串
  97          {
  98   1        uchar i=0;
  99   1         do
 100   1         {  
 101   2               S_Buffer[i]=GetChar();
 102   2               if(S_Buffer[i]=='\r')
 103   2                {
 104   3                      S_Buffer[i]='\0';
 105   3                      return;
 106   3                }
 107   2               if(S_Buffer[i]!='\b')// 用于解决退格键的输入问题
 108   2               {
 109   3                SendChar(S_Buffer[i]);
 110   3                i++;
 111   3               }
 112   2               else
 113   2               {
 114   3                if(i>0)
 115   3                {
 116   4                  S_Buffer[i]='\0';
C51 COMPILER V7.01  SERIAL                                                                 03/25/2006 17:00:53 PAGE 3   

 117   4                      i--;
 118   4                      S_Buffer[i]='\0';
 119   4                      SendChar('\b');
 120   4                 }
 121   3                 else
 122   3                  S_Buffer[i]='\0';
 123   3               }
 124   2              }while(i<BufferLength-1);
 125   1              S_Buffer[i]='\0';
 126   1      }
 127          //****************************
 128          void SendChar(uchar _char)//发送一个字节
 129          {
 130   1         F0=ES;//保护ES位
 131   1         ES=0;
 132   1         SBUF=_char;
 133   1         while(!TI);
 134   1         TI=0;
 135   1         ES=F0;
 136   1      }
 137          //****************************
 138          uchar GetChar() //读取一个字节
 139          {
 140   1       F0=ES;//保护ES位
 141   1       ES=0;
 142   1       while(!RI);
 143   1       RI=0;
 144   1       ES=F0;
 145   1       return(SBUF);
 146   1      }
 147          //****************************
 148          void SendHex(uchar ch) //发送一个字节的16进制数
 149          {                                          //也适用于发送压缩BCD码
 150   1        SendCh(ch>>4);                                          
 151   1        SendCh(ch&0x0f);
 152   1      }
 153          //****************************
 154          uchar GetHex()
 155          {
 156   1       uchar temp,ret_num;
 157   1       do
 158   1       {
 159   2        temp=GetChar();
 160   2        if(temp=='\b')
 161   2           SendChar('\b');
 162   2       }while(temp=='\b'||temp=='\r');
 163   1       SendChar(temp);
 164   1       if(temp>='0'&&temp<='9')
 165   1         ret_num=(temp-'0')<<4;
 166   1         else
 167   1              if(temp>='A'&&temp<='F')
 168   1                      ret_num=(temp-'A'+10)<<4;
 169   1                else
 170   1                if(temp>='a'&&temp<='f')
 171   1                       ret_num=(temp-'a'+10)<<4;
 172   1                       else
 173   1                       {
 174   2                        SendString("\nError Format!\n");
 175   2                        return 0;
 176   2                       }
 177   1       do
 178   1       {
C51 COMPILER V7.01  SERIAL                                                                 03/25/2006 17:00:53 PAGE 4   

 179   2        temp=GetChar();
 180   2        if(temp=='\b')
 181   2           SendChar('\b');
 182   2       }while(temp=='\b'||temp=='\r');
 183   1       SendChar(temp);
 184   1        if(temp>='0'&&temp<='9')
 185   1         ret_num+=temp-'0';
 186   1         else
 187   1              if(temp>='A'&&temp<='F')
 188   1                      ret_num+=temp-'A'+10;
 189   1                else
 190   1                if(temp>='a'&&temp<='f')
 191   1                       ret_num+=temp-'a'+10;
 192   1                       else
 193   1                       {
 194   2                        SendString("\nError Format!\n");
 195   2                        return 0;
 196   2                       }
 197   1       return(ret_num);
 198   1      }
 199          //****************************
 200          void SendCh(uchar ch)//内部处理函数
 201          {
 202   1        if(ch>=0&&ch<=9)
 203   1              ch=ch+'0';
 204   1        else
 205   1               ch=ch+'A'-10;
 206   1        SendChar(ch);
 207   1      }
 208          //****************************
 209          void SendCmdType()//发送系统所识别的命令列表
 210          {
 211   1       uchar i;
 212   1       SendString("\nCommand list:\n");
 213   1       for(i=0;i<CmdNum;i++)
 214   1       {
 215   2        SendChar(' ');
 216   2        SendChar(i+0x30);
 217   2        SendChar(':');
 218   2        SendString(cmd_tab[i]);
 219   2        SendChar('\n');
 220   2       }
 221   1      }
 222          //*****************************


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    685    ----
   CONSTANT SIZE    =    323    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     48       8
   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 + -