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

📄 serial.lst

📁 单片机和PC机串口通讯
💻 LST
字号:
C51 COMPILER V8.02   SERIAL                                                                09/14/2007 22:10:13 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN serial.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE serial.c LARGE BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //**********************************************************************************
   2          // 孙尚新 
   3          //基于中断的串口驱动及显示程序
   4          //联系方法: sunshangxin@163.com
   5          //**********************************************************************************
   6          
   7          
   8          #include <command.h>
   9          #define ENTER_KEY       0x0d
  10          #define BACK_KEY        0x08
  11          #define ESC_KEY         0x1b
  12          
  13          
  14          unsigned char TxBuf[LenTxBuf],RxBuf[LenRxBuf];//收发缓冲区实体
  15          unsigned char *inTxBuf,*outTxBuf,*inRxBuf,*outRxBuf;//收发缓冲区读写指针
  16          bit TIflag=1;//Note:It must be 1.
  17          
  18          #define CRYSTAL                 22118400
  19          #define SERBAUD                 19200
  20          
  21          void InitSerial()//串口初始化
  22          {
  23   1              TMOD=TMOD&0x0F;
  24   1              TMOD=TMOD|0x20;
  25   1              TL1=256 - (CRYSTAL/12/32/SERBAUD),TH1=256-(CRYSTAL/12/32/SERBAUD);
  26   1              SCON=0x50;PCON=0x00;
  27   1              TR1=1;
  28   1      }
  29          
  30          void InitSerialBuffer(void) //串口缓冲区初始化
  31          {
  32   1              inTxBuf=TxBuf;outTxBuf=TxBuf;
  33   1              inRxBuf=RxBuf;outRxBuf=RxBuf;
  34   1              ES=1;
  35   1              //EA=1;
  36   1      }
  37          
  38          void serial(void) interrupt 4
  39          {    //中断在汇编中实现,去掉interrupt 4{//串口中断服务子程序
  40   1              unsigned char *t;
  41   1              if(TI){
  42   2                      TI=0;
  43   2                      if(inTxBuf==outTxBuf) {TIflag=1;return;}//TxBuf Empty
  44   2                      SBUF=*outTxBuf; outTxBuf++;
  45   2                      if(outTxBuf==TxBuf+LenTxBuf) outTxBuf=TxBuf;    
  46   2              }
  47   1              if(RI){
  48   2                      RI=0;
  49   2                      t=inRxBuf;t++;
  50   2                      if(t==RxBuf+LenRxBuf) t=RxBuf;
  51   2                      if(t==outRxBuf) return;                 //RxBuf Full
  52   2                      *inRxBuf=SBUF;
  53   2                      inRxBuf=t;
  54   2              }
  55   1      }
C51 COMPILER V8.02   SERIAL                                                                09/14/2007 22:10:13 PAGE 2   

  56          
  57          bit getch(unsigned char *ch) //从串口缓冲区读1字节数据
  58          {
  59   1              //ES=0;        
  60   1              if(inRxBuf==outRxBuf) {ES=1;return 0;}          //RxBuf Empty
  61   1              *ch=*outRxBuf;  outRxBuf++;
  62   1              if(outRxBuf==RxBuf+LenRxBuf) outRxBuf=RxBuf;
  63   1              //ES=1;        
  64   1              return 1;
  65   1      }
  66          
  67          void PrintChar(unsigned char ch) //显示字符
  68          {
  69   1              unsigned char *t;
  70   1                      //ES=0;        
  71   1              
  72   1              t=inTxBuf;t++;
  73   1              if(t==TxBuf+LenTxBuf) t=TxBuf;
  74   1              if(t==outTxBuf) {/*ES=1;*/return;}                  //TxBuf Full
  75   1              *inTxBuf=ch;
  76   1              inTxBuf=t;
  77   1                      if(TIflag){             
  78   2                      TIflag=0;
  79   2                      TI=1;
  80   2              }
  81   1              //ES=1;        
  82   1      }
  83          
  84          void PrintCh(unsigned char ch) //内部使用,不建议用户看到。
  85          {
  86   1              if(ch>=0&&ch<=9) ch=ch+'0';
  87   1              else ch=ch+'A'-10;
  88   1              PrintChar(ch);
  89   1      }
  90          
  91          void insidePrintByte(unsigned char Byte) //内部使用,以十六进制格式显示1个字节数据
  92          {
  93   1              unsigned char c;
  94   1              c=Byte;
  95   1              c=c>>4;        
  96   1              PrintCh(c);
  97   1              c=Byte;c=c&0x0F;PrintCh(c);        
  98   1      }
  99          
 100          void PrintByte(unsigned char Byte) //以十六进制格式显示1个字节数据
 101          {
 102   1              EA=0;        
 103   1              insidePrintByte(Byte);                
 104   1              EA=1;
 105   1      }
 106          
 107          void insidePrintWord(unsigned int Word) //内部使用,以十六进制格式显示1个字数据
 108          {               
 109   1              insidePrintByte(Word>>8);
 110   1              insidePrintByte(Word&0xFF);                        
 111   1      }
 112          
 113          void PrintWord(unsigned int Word) //以十六进制格式显示1个字数据
 114          {       
 115   1              EA=0;
 116   1              insidePrintWord(Word);
 117   1              EA=1;
C51 COMPILER V8.02   SERIAL                                                                09/14/2007 22:10:13 PAGE 3   

 118   1      }
 119          
 120          void PrintLong(unsigned long LongWord) //以十六进制格式显示1个长字数据
 121          {
 122   1              EA=0;
 123   1              insidePrintWord(LongWord>>16);
 124   1              insidePrintWord(LongWord&0xFFFF);
 125   1              EA=1;
 126   1      }
 127          
 128          void PrintStr(unsigned char *str) //显示字符串
 129          {
 130   1              int i;
 131   1              unsigned char j;
 132   1              unsigned char ch;
 133   1              
 134   1              EA=0;
 135   1              for(i=0;i<MaxLenStr;i++){
 136   2                      ch=*(str+i);
 137   2                      if(ch=='\0') break;
 138   2                      else if(ch=='\n'){PrintChar(10);PrintChar(13);} 
 139   2                      else if(ch=='\t'){
 140   3                              for(j=0;j<TABNum;j++)
 141   3                                      PrintChar(' ');
 142   3                      }
 143   2                      else PrintChar(ch);
 144   2              }
 145   1              EA=1;
 146   1      }
 147          
 148          void clrscr() //清屏
 149          {        
 150   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");//25个回车换行清屏幕。
 151   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    946    ----
   CONSTANT SIZE    =     26    ----
   XDATA SIZE       =   2062      17
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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