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

📄 serial.lst

📁 这个事在51上面实现lcd串行驱动
💻 LST
字号:
C51 COMPILER V8.02   SERIAL                                                                07/09/2008 11:10:59 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN .\temp\Serial.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\common\serial\Serial.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\temp\Seri
                    -al.lst) OBJECT(.\temp\Serial.obj)

line level    source

   1          /*
   2          *****************************************************************************************
   3          *                                          电赛
   4          *                                     
   5          *                              基于中断的串口驱动及显示程序
   6          *
   7          *                               (c) Copyright 2007, yyw, hbut
   8          *                                     All Rights Reserved
   9          *
  10          *                                            V1.00
  11          *
  12          * File : Serial.c
  13          * By   : 
  14          *****************************************************************************************
  15          */
  16          
  17          //**********************************************************************************
  18          // 程序特点:
  19          //        1.基于中断,可并发执行
  20          //        2.参数可配置(收发缓冲区大小,最大字符串长度,TAB键移动距离)
  21          //**********************************************************************************
  22          // 使用方法:(此范例自包含,独立于其他程序。)
  23          //        先配制收发缓冲区大小等可变参数(在serial.h中的宏定义)
  24          //        1.初始化串口        InitSerial(); 
  25          //        2.初始化串口缓冲区  InitSerialBuffer();
  26          //        3.使用显示字节,字,长字,字符,字符串,清屏函数。
  27          //
  28          //**********************************************************************************
  29          // 波特率计算公式:
  30          //        TH1=256-(2^SMOD/32*Fosc/12*1/Bound)
  31          //    其中:SMOD=0,1;Fosc=晶体或晶振频率;Bound=波特率
  32          //  几个经典值
  33          //  
  34          // 
  35          //**********************************************************************************
  36          
  37          #include "common.h"
  38          
  39          uint8 SerialOutData[MAX_OUT_SIZE];      //收发缓冲区实体
  40          uint8 SerialInData[MAX_IN_SIZE];                
  41          uint8 *OutRear,*OutFront,*InRear,*InFront;              //收发缓冲区读写指针
  42          bit SerialCanSend=1;            //Note:It must be 1.
  43          
  44          void SerialInit() reentrant//串口初始化
  45          {
  46   1              SCON = 0x50;
  47   1              PCON = 0x80;
  48   1              TMOD = TMOD & 0x0f;
  49   1              TMOD = TMOD | 0x20;
  50   1              TH1 = 0xff;                             // 晶振22.1184,波特率115200bps
  51   1              TL1 = 0xff;
  52   1              TR1 = 1;
  53   1              ES  = 1;
  54   1              EA = 1;
C51 COMPILER V8.02   SERIAL                                                                07/09/2008 11:10:59 PAGE 2   

  55   1      }
  56          
  57          // 串口缓冲区初始化
  58          void SerialBufferInit(void) reentrant
  59          {
  60   1          OutRear=SerialOutData;
  61   1              OutFront=SerialOutData;
  62   1          InRear=SerialInData;
  63   1              InFront=SerialInData;
  64   1      }
  65          
  66          // 串口中断处理
  67          void SerialInt(void) reentrant interrupt 4
  68          {
  69   1          uint8 *t;
  70   1      
  71   1          if (TI)
  72   1              {
  73   2              TI=0;
  74   2              if(OutRear==OutFront) {SerialCanSend=1;return;}//SerialOutData Empty
  75   2              SBUF=*OutFront; OutFront++;
  76   2              if(OutFront==SerialOutData+MAX_OUT_SIZE) OutFront=SerialOutData;        
  77   2          }
  78   1          if (RI)
  79   1              {
  80   2              RI=0;
  81   2              t=InRear;t++;
  82   2              if(t==SerialInData+MAX_IN_SIZE) t=SerialInData;
  83   2              if(t==InFront) return;                 //SerialInData Full
  84   2              *InRear=SBUF;
  85   2              InRear=t;
  86   2          }
  87   1      }
  88          
  89          // 从串口缓冲区读1字节数据
  90          uint8 SerialGetChar(uint8 *ch) reentrant
  91          {
  92   1          // ES=0;        
  93   1          if(InRear==InFront) 
  94   1              {
  95   2                      ES=1;
  96   2                      return 0; //SerialInData Empty
  97   2              }          
  98   1          *ch=*InFront;  
  99   1              InFront++;
 100   1          if(InFront==SerialInData+MAX_IN_SIZE) 
 101   1                      InFront=SerialInData;
 102   1          // ES=1;        
 103   1          return 1;
 104   1      }
 105          
 106          void SerialPrintChar(uint8 ch) reentrant //显示字符
 107          {
 108   1          uint8 *t;
 109   1      
 110   1          //ES=0;        
 111   1          if(SerialCanSend)
 112   1              {
 113   2              SerialCanSend=0;
 114   2              TI=1;
 115   2          }
 116   1          t=OutRear;t++;
C51 COMPILER V8.02   SERIAL                                                                07/09/2008 11:10:59 PAGE 3   

 117   1          if(t==SerialOutData+MAX_OUT_SIZE) 
 118   1                      t=SerialOutData;
 119   1          if(t==OutFront) 
 120   1                      {/*ES=1;*/return;}                  //SerialOutData Full
 121   1          *OutRear=ch;
 122   1          OutRear=t;
 123   1          //ES=1;
 124   1      }
 125          
 126          void PrintCh(uint8 ch) reentrant        //内部使用,不建议用户看到。
 127          {
 128   1          if(ch>=0&&ch<=9) ch=ch+'0';
 129   1          else ch=ch+'A'-10;
 130   1          SerialPrintChar(ch);
 131   1      }
 132          
 133          void SerialPrintStr(uint8 *str) reentrant//显示字符串
 134          {
 135   1          EA=0;
 136   1          while (*str)
 137   1              {
 138   2                      SerialPrintChar(*str);
 139   2                      str++;
 140   2          }
 141   1          EA=1;
 142   1      }
 143          
 144          void SerialClear() reentrant  //清屏
 145          {
 146   1          SerialPrintStr("\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个回车换行清屏幕。
 147   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    960    ----
   CONSTANT SIZE    =     26    ----
   XDATA SIZE       =     60    ----
   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 + -