main.lst

来自「本文件提供各种驱动程序和汇编代码,包括温度芯片驱动等等.」· LST 代码 · 共 122 行

LST
122
字号
C51 COMPILER V7.01  MAIN                                                                   06/14/2004 19:30:06 PAGE 1   


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

stmt level    source

   1          //**********************************************************************
   2          //功能          : 定点滤波程序
   3          //作者          : lihj
   4          //创建日期      : 2004-06-13
   5          //版本          : V1.0
   6          //修改记录      :
   7          //***********************************************************************
   8          #include "math.h"
   9          
  10          //系统参数配置
  11          #define TS                      5                                       //信号采样周期定义,单位是100ms
  12          #define TF                      20                                      //滤波时间常数定义,单位是100ms
  13          #define DOT_BITS        8                                       //滤波过程中的放大倍数(定点数小数位数)
  14          
  15          //全局变量定义
  16          int g_nPreInput;                                                //上一周期的采样值
  17          
  18          //内部函数声明
  19          int Filter(int);                                                //滤波函数
  20          
  21          //外部函数声明
  22          int Sample(void);                                               //信号采样接口函数
  23          void HardIni(void);                                             //硬件初始化接口
  24                          
  25          //主循环
  26          void main(void)
  27          {
  28   1              int CurSigVal;                                          //当前信号值
  29   1              int i;
  30   1      
  31   1              //硬件初始化
  32   1              HardIni();
  33   1      
  34   1              //全局变量初始化
  35   1              g_nPreInput = 0;
  36   1      
  37   1              while(1)
  38   1              {
  39   2                      CurSigVal = Filter(Sample());   //采样并滤波
  40   2                      for(i=0;i<20000;i++);                   //待机一段时间后,开始下一循环
  41   2              }
  42   1      }
  43          
  44          //一阶惯性滤波
  45          //最差情况下,12MHz晶振,需要0.27ms
  46          int Filter(int CurInput)
  47          {
  48   1              int t;
  49   1              int temp;
  50   1              int input;
  51   1      
  52   1              input = CurInput<<DOT_BITS;
  53   1      
  54   1              //如果信号没有改变,则直接返回
  55   1              if(g_nPreInput == input)
C51 COMPILER V7.01  MAIN                                                                   06/14/2004 19:30:06 PAGE 2   

  56   1              {
  57   2                      return CurInput;
  58   2              }
  59   1      
  60   1              //对信号进行限幅,输入值不能超过32767/(TS<<DOT_BITS)     
  61   1              if(CurInput > (32767/(TS<<DOT_BITS)))
  62   1              {
  63   2                      CurInput = 32767/(TS<<DOT_BITS);
  64   2      
  65   2                      //可以进行越限报警
  66   2                      //......
  67   2              }
  68   1      
  69   1              //已经逼进最终值时的处理
  70   1              temp = (CurInput<<DOT_BITS)-g_nPreInput;
  71   1              if(abs(temp)*TS < (TS+TF))
  72   1          {
  73   2                      g_nPreInput = input;
  74   2                      return CurInput;
  75   2              }
  76   1      
  77   1              //滤波计算
  78   1              //保存本周期的计算值
  79   1              g_nPreInput = g_nPreInput + (temp*TS)/(TS+TF);
  80   1              
  81   1              t = g_nPreInput>>DOT_BITS;
  82   1      
  83   1              return t;
  84   1      }
  85          
  86          //硬件初始化接口
  87          void HardIni(void)
  88          {
  89   1      
  90   1      }
  91          
  92          //信号采样接口
  93          int Sample(void)
  94          {
  95   1              return 20;
  96   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    162    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       8
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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