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

📄 serial.lst

📁 此代码是实现将lwip协议移植于51单片机的测试程序
💻 LST
字号:
C51 COMPILER V7.02b   SERIAL                                                               08/25/2006 12:00:01 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN serial.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE serial\serial.c LARGE INCDIR(c:\t\inc;c:\t\inc) DEBUG OBJECTEXTEND PRINT(.\
                    -serial.lst) OBJECT(serial.obj)

stmt level    source

   1          //**********************************************************************************
   2          //杨屹    2002/08/20    第一版
   3          //基于中断的串口驱动及显示程序
   4          //联系方法:gdtyy@ri.gdt.com.cn(2003/07/31以前有效)
   5          //**********************************************************************************
   6          //程序特点:
   7          //        1.基于中断,可并发执行
   8          //        2.参数可配置(收发缓冲区大小,最大字符串长度,TAB键移动距离)
   9          //**********************************************************************************
  10          //使用方法:(此范例自包含,独立于其他程序。)
  11          //        先配制收发缓冲区大小等可变参数(在serial.h中的宏定义)
  12          //        1.开头加入#include <reg51.h>语句,一定要有。
  13          //        2.初始化串口        InitSerial();//本例中为20MHz晶体,300波特率,模式2初始化
  14          //        3.初始化串口缓冲区  InitSerialBuffer();
  15          //        4.使用显示字节,字,长字,字符,字符串,清屏函数。
  16          //自包含
  17          //**********************************************************************************
  18          //波特率计算公式:
  19          //        TH1=256-(2^SMOD/32*Fosc/12*1/Bound)
  20          //    其中:SMOD=0,1;Fosc=晶体或晶振频率;Bound=波特率
  21          //    本例中,SMOD=0;Fosc=20*10E6;Bound=300,所以TH1=0x52。
  22          //Baud rate(20Mhz)
  23          //300(52);1200(D5);2400(EA);4800(F5);9600(FB);19200(FD);38400(FF);
  24          //**********************************************************************************
  25          //书写风格:
  26          //        1.带yy前缀标志的函数为杨屹改写的等效C库函数。
  27          //        2.单个单词用小写,yy定义为前缀,不算一个单词。
  28          //        3.多个单词(2个及以上),每个单词首字母大写。(有时变量名第一个单词首字母小写)
  29          //        4.采用内缩风格,每次缩进一个TAB。
  30          //**********************************************************************************
  31          //应用举例:(可在KEIL仿真环境下运行)
  32          //源程序文件:serial.h/serial.c/main.c
  33          //main.c内容:
  34          //#include <reg51.h>//Note:It must be added.必须在serial.c之前
  35          //#include <serial.c>//Note:It's ".c",not ".h"
  36          //main()
  37          //{
  38          //      unsigned char ch;
  39          //
  40          //      InitSerial();
  41          //      InitSerialBuffer();
  42          //      while(1){
  43          //              PrintStr("\n");
  44          //              PrintByte(90);PrintStr(" ");
  45          //              PrintWord(90);PrintStr(" ");
  46          //              PrintLong(90);PrintStr(" ");
  47          //              PrintChar('y');PrintChar(' ');//千万别写成双引号,否则打印0(乱字符)。
  48          //              PrintStr("\nHello!\nI'm YangYi.\n");
  49          //              PrintStr("Press any key to continue...");
  50          //              while(!yygetch(&ch));
  51          //      }
  52          //}
  53          //**********************************************************************************
  54          //建议:
C51 COMPILER V7.02b   SERIAL                                                               08/25/2006 12:00:01 PAGE 2   

  55          //    你完全可以把该子程序当作函数库使用,以便减少重复劳动,提高代码质量。
  56          //**********************************************************************************
  57          #include <general.h>
*** WARNING C318 IN LINE 57 OF serial\serial.c: can't open file 'general.h'
  58          //#include <serial.h>
  59          //#include <reg51.h>
  60          
  61          unsigned char TxBuf[LenTxBuf],RxBuf[LenRxBuf];//收发缓冲区实体
*** ERROR C202 IN LINE 61 OF SERIAL\SERIAL.C: 'LenTxBuf': undefined identifier
*** ERROR C136 IN LINE 61 OF SERIAL\SERIAL.C: invalid dimension size: [0]
*** ERROR C202 IN LINE 61 OF SERIAL\SERIAL.C: 'LenRxBuf': undefined identifier
*** ERROR C136 IN LINE 61 OF SERIAL\SERIAL.C: invalid dimension size: [0]
  62          unsigned char *inTxBuf,*outTxBuf,*inRxBuf,*outRxBuf;//收发缓冲区读写指针
  63          bit TIflag=1;//Note:It must be 1.
  64          
  65          void InitSerial()//串口初始化
  66          {
  67   1              TMOD=TMOD&0x0F;
*** ERROR C202 IN LINE 67 OF SERIAL\SERIAL.C: 'TMOD': undefined identifier
  68   1              TMOD=TMOD|0x20;
*** ERROR C202 IN LINE 68 OF SERIAL\SERIAL.C: 'TMOD': undefined identifier
  69   1              TL1=0x52,TH1=0x52;//300,0x52,20MHz
*** ERROR C202 IN LINE 69 OF SERIAL\SERIAL.C: 'TL1': undefined identifier
  70   1              SCON=0x50;PCON=0x00;
*** ERROR C202 IN LINE 70 OF SERIAL\SERIAL.C: 'SCON': undefined identifier
*** ERROR C202 IN LINE 70 OF SERIAL\SERIAL.C: 'PCON': undefined identifier
  71   1              TR1=1;
*** ERROR C202 IN LINE 71 OF SERIAL\SERIAL.C: 'TR1': undefined identifier
  72   1      }
  73          
  74          void InitSerialBuffer(void)//串口缓冲区初始化
  75          {
  76   1              inTxBuf=TxBuf;outTxBuf=TxBuf;
  77   1              inRxBuf=RxBuf;outRxBuf=RxBuf;
  78   1              EA=1;ES=1;
*** ERROR C202 IN LINE 78 OF SERIAL\SERIAL.C: 'EA': undefined identifier
*** ERROR C202 IN LINE 78 OF SERIAL\SERIAL.C: 'ES': undefined identifier
  79   1      }
  80          
  81          void serial(void) interrupt 4{//串口中断服务子程序
  82   1              unsigned char *t;
  83   1      
  84   1              if(TI){
*** ERROR C202 IN LINE 84 OF SERIAL\SERIAL.C: 'TI': undefined identifier
  85   2                      TI=0;
*** ERROR C202 IN LINE 85 OF SERIAL\SERIAL.C: 'TI': undefined identifier
  86   2                      if(inTxBuf==outTxBuf) {TIflag=1;return;}//TxBuf Empty
  87   2                      SBUF=*outTxBuf; outTxBuf++;
*** ERROR C202 IN LINE 87 OF SERIAL\SERIAL.C: 'SBUF': undefined identifier
  88   2                      if(outTxBuf==TxBuf+LenTxBuf) outTxBuf=TxBuf;    
*** ERROR C202 IN LINE 88 OF SERIAL\SERIAL.C: 'LenTxBuf': undefined identifier
  89   2              }
  90   1              if(RI){
*** ERROR C202 IN LINE 90 OF SERIAL\SERIAL.C: 'RI': undefined identifier
  91   2                      RI=0;
*** ERROR C202 IN LINE 91 OF SERIAL\SERIAL.C: 'RI': undefined identifier
  92   2                      t=inRxBuf;t++;
  93   2                      if(t==RxBuf+LenRxBuf) t=RxBuf;
*** ERROR C202 IN LINE 93 OF SERIAL\SERIAL.C: 'LenRxBuf': undefined identifier
  94   2                      if(t==outRxBuf) return;                 //RxBuf Full
  95   2                      *inRxBuf=SBUF;
*** ERROR C202 IN LINE 95 OF SERIAL\SERIAL.C: 'SBUF': undefined identifier
C51 COMPILER V7.02b   SERIAL                                                               08/25/2006 12:00:01 PAGE 3   

  96   2                      inRxBuf=t;
  97   2              }
  98   1      }
  99          
 100          bit yygetch(unsigned char *ch)//从串口缓冲区读1字节数据
 101          {
 102   1              ES=0;
*** ERROR C202 IN LINE 102 OF SERIAL\SERIAL.C: 'ES': undefined identifier
 103   1              if(inRxBuf==outRxBuf) {ES=1;return 0;}          //RxBuf Empty
*** ERROR C202 IN LINE 103 OF SERIAL\SERIAL.C: 'ES': undefined identifier
 104   1              *ch=*outRxBuf;  outRxBuf++;
 105   1              if(outRxBuf==RxBuf+LenRxBuf) outRxBuf=RxBuf;
*** ERROR C202 IN LINE 105 OF SERIAL\SERIAL.C: 'LenRxBuf': undefined identifier
 106   1              ES=1;
*** ERROR C202 IN LINE 106 OF SERIAL\SERIAL.C: 'ES': undefined identifier
 107   1              return 1;
 108   1      }
 109          
 110          void PrintChar(unsigned char ch)//显示字符
 111          {
 112   1              unsigned char *t;
 113   1      
 114   1              ES=0;
*** ERROR C202 IN LINE 114 OF SERIAL\SERIAL.C: 'ES': undefined identifier
 115   1              if(TIflag){             
 116   2                      TIflag=0;
 117   2                      TI=1;
*** ERROR C202 IN LINE 117 OF SERIAL\SERIAL.C: 'TI': undefined identifier
 118   2              }
 119   1              t=inTxBuf;t++;
 120   1              if(t==TxBuf+LenTxBuf) t=TxBuf;
*** ERROR C202 IN LINE 120 OF SERIAL\SERIAL.C: 'LenTxBuf': undefined identifier
 121   1              if(t==outTxBuf) {ES=1;return;}                  //TxBuf Full
*** ERROR C202 IN LINE 121 OF SERIAL\SERIAL.C: 'ES': undefined identifier
 122   1              *inTxBuf=ch;
 123   1              inTxBuf=t;
 124   1              ES=1;
*** ERROR C202 IN LINE 124 OF SERIAL\SERIAL.C: 'ES': undefined identifier
 125   1      }
 126          
 127          void PrintCh(unsigned char ch)//内部使用,不建议用户看到。
 128          {
 129   1              if(ch>=0&&ch<=9) ch=ch+'0';
 130   1              else if(ch>=10&&ch<=15) ch=ch+'A'-10;
 131   1              PrintChar(ch);
 132   1      }
 133          
 134          void PrintByte(unsigned char Byte)//以十六进制格式显示1个字节数据
 135          {
 136   1              unsigned char c;
 137   1              c=Byte;
 138   1              c=c>>4;PrintCh(c);
 139   1              c=Byte;c=c&0x0F;PrintCh(c);
 140   1      }
 141          
 142          void PrintWord(unsigned int Word)//以十六进制格式显示1个字数据
 143          {
 144   1              PrintByte(Word>>8);
 145   1              PrintByte(Word&0xFF);
 146   1      }
 147          
 148          void PrintLong(unsigned long LongWord)//以十六进制格式显示1个长字数据
C51 COMPILER V7.02b   SERIAL                                                               08/25/2006 12:00:01 PAGE 4   

 149          {
 150   1              PrintWord(LongWord>>16);
 151   1              PrintWord(LongWord&0xFFFF);
 152   1      }
 153          
 154          void PrintStr(unsigned char *str)//显示字符串
 155          {
 156   1              int i;
 157   1              unsigned char j;
 158   1              unsigned char ch;
 159   1              for(i=0;i<MaxLenStr;i++){
*** ERROR C202 IN LINE 159 OF SERIAL\SERIAL.C: 'MaxLenStr': undefined identifier
 160   2                      ch=*(str+i);
 161   2                      if(ch=='\0') break;
 162   2                      else if(ch=='\n'){PrintChar(10);PrintChar(13);} 
 163   2                      else if(ch=='\t'){
 164   3                              for(j=0;j<TABNum;j++)
*** ERROR C202 IN LINE 164 OF SERIAL\SERIAL.C: 'TABNum': undefined identifier
 165   3                                      PrintChar(' ');
 166   3                      }
 167   2                      else PrintChar(ch);
 168   2              }
 169   1      }
 170          
 171          void clrscr()//清屏
 172          {
 173   1              int i;
 174   1              for(i=0;i<25;i++)
 175   1                      PrintStr("\n"); 
 176   1      }

C51 COMPILATION COMPLETE.  1 WARNING(S),  31 ERROR(S)

⌨️ 快捷键说明

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