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

📄 serialtest.lst

📁 这是我做的关于考勤机的一些测试程序
💻 LST
字号:
C51 COMPILER V7.07   SERIALTEST                                                            05/20/2004 14:52:29 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE SERIALTEST
OBJECT MODULE PLACED IN serialtest.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE serialtest.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "reg52.h"
   2          #define LenTxBuf 16
   3          #define LenRxBuf 16
   4          #define MaxLenStr 40
   5          #define TABNum   4
   6          
   7          unsigned char TxBuf[16],RxBuf[16];//收发缓冲区实体
   8          unsigned char *inTxBuf,*outTxBuf,*inRxBuf,*outRxBuf;//收发缓冲区读写指针
   9          bit TIflag=1;//Note:It must be 1.
  10          /*
  11          void InitSerial()//串口初始化
  12          {
  13                  TMOD=TMOD&0x0F;
  14                  TMOD=TMOD|0x20;
  15                  TL1=0xF3,TH1=0xF3;//19200 , 22.1184MHz //4800 ,12, 0xf9 //2400 ,12,0xf3
  16                  SCON=0x50;PCON=0x00;
  17                  TR1=1;
  18          }
  19          */
  20          
  21           void init_comm()
  22           {
  23   1              RCAP2H=0XFF;
  24   1              RCAP2L=0XDC;            //;ffb2 12m, 4800
  25   1                                                      //      ;ffb8  11.0592 4800; ffdch 11.0592 9600
  26   1      
  27   1          
  28   1              SCON=0x50;
  29   1              T2CON=T2CON|0X30;
  30   1              TR2=1;
  31   1              
  32   1       }
  33          /************************************************
  34            串口缓冲区初始化
  35          ************************************************/
  36          void InitSerialBuffer(void)
  37          {
  38   1              inTxBuf=TxBuf;outTxBuf=TxBuf;
  39   1              inRxBuf=RxBuf;outRxBuf=RxBuf;
  40   1              EA=1;ES=1;
  41   1      }
  42          
  43          void serial(void) interrupt 4{//串口中断服务子程序
  44   1              unsigned char *t;
  45   1        //发送时处理的是TxBuf缓冲区的outTxBuf指针
  46   1              if(TI){
  47   2                      TI=0;
  48   2                      if(outTxBuf==inTxBuf) {TIflag=1;return;}//TxBuf Empty
  49   2                      SBUF=*outTxBuf; outTxBuf++;
  50   2                      if(outTxBuf==TxBuf+LenTxBuf) outTxBuf=TxBuf;    
  51   2              }
  52   1         //接收时处理的是RxBuf缓冲区的inRxBuf指针
  53   1              if(RI){
  54   2                      RI=0;
  55   2                      t=inRxBuf;t++;
C51 COMPILER V7.07   SERIALTEST                                                            05/20/2004 14:52:29 PAGE 2   

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

 118   1              PrintWord(LongWord&0xFFFF);
 119   1      }
 120          
 121          void PrintStr(unsigned char *str)//显示字符串
 122          {
 123   1              int i;
 124   1              unsigned char j;
 125   1              unsigned char ch;
 126   1              for(i=0;i<MaxLenStr;i++){
 127   2                      ch=*(str+i);
 128   2                      if(ch=='\0') break;
 129   2                      else if(ch=='\n'){PrintChar(10);PrintChar(13);} 
 130   2                      else if(ch=='\t'){
 131   3                              for(j=0;j<TABNum;j++)
 132   3                                      PrintChar(' ');
 133   3                      }
 134   2                      else PrintChar(ch);
 135   2              }
 136   1      }
 137          
 138          void clrscr()//清屏
 139          {
 140   1              int i;
 141   1              for(i=0;i<25;i++)
 142   1                      PrintStr("\n"); 
 143   1      }
 144          
 145          main()
 146          { unsigned char *var="I am Guo Zhixue",*var2="test! test! test!";
 147   1        init_comm();
 148   1      
 149   1        InitSerialBuffer();
 150   1      
 151   1         while(1)
 152   1         {
 153   2          PrintStr(var);
 154   2              PrintStr(var2);
 155   2              }
 156   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    715    ----
   CONSTANT SIZE    =     36    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     44      25
   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 + -