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

📄 dsp.lst

📁 使用C8051F实现脉搏及血氧饱和度测量 包括均值滤波
💻 LST
字号:
C51 COMPILER V8.02   DSP                                                                   12/05/2007 10:38:51 PAGE 1   


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

line level    source

   1          #include "sample.h"
   2          #define uchar unsigned char
   3          #define uint unsigned int
   4          #define FILTLEN 7
   5          #define DELSTEP 7
   6          #define DELGATE 50
   7          unsigned int DataPos;
   8          unsigned long DC_RED;
   9          unsigned long DC_IRED;
  10          unsigned char RED_MIN,RED_MAX;
  11          unsigned char IRED_MIN,IRED_MAX;
  12          xdata unsigned char SampleRed[SAMPLESIZE];
  13          xdata unsigned char SampleIRed[SAMPLESIZE];
  14          xdata unsigned char ProBuffer[SAMPLESIZE];
  15          
  16          void itoa(uint i,uchar *c)
  17          {
  18   1              char l;
  19   1              if(i>=1000)
  20   1                      l=3;
  21   1              else if(i>=100)
  22   1                      l=2;
  23   1              else if(i>=10)
  24   1                      l=1;
  25   1              else
  26   1                      l=0;
  27   1              c[l+1]=0;
  28   1              while(l>=0)
  29   1              {
  30   2                      c[l]=i%10+0x30;
  31   2                      i/=10;
  32   2                      l--;
  33   2              }
  34   1      }
  35          
  36          void Filter(uchar Data[SAMPLESIZE],uchar Min,uchar Max)  //均值滤波
  37          {
  38   1              uint i;
  39   1              float t;
  40   1              for     (i=0;i<FILTLEN/2;i++)
  41   1              {
  42   2                      t=Data[i];
  43   2                      t=(t-Min)*255/(Max-Min)+0.5;
  44   2                      ProBuffer[i]=(uchar)t;
  45   2      
  46   2                      t=Data[SAMPLESIZE-i-1];
  47   2                      t=(t-Min)*255/(Max-Min)+0.5;
  48   2                      ProBuffer[SAMPLESIZE-i-1]=(uchar)t;
  49   2              }
  50   1              for(i=FILTLEN/2;i<SAMPLESIZE-FILTLEN/2;i++)
  51   1              {
  52   2                      t=Data[i-3]+Data[i-2]+Data[i-1]+Data[i]+Data[i+1]+Data[i+2]+Data[i+3];
  53   2                      t/=FILTLEN;
  54   2                      t=(t-Min)*255/(Max-Min)+0.5;
  55   2                      ProBuffer[i]=(uchar)t;
C51 COMPILER V8.02   DSP                                                                   12/05/2007 10:38:51 PAGE 2   

  56   2              }
  57   1      }
  58          void Process(uchar OriData[SAMPLESIZE],uchar * Freq,uchar * Delta)
  59          {                                                         
  60   1              xdata uint PeakPos[15],MinPos[15],MaxPos[15];
  61   1              uint i;
  62   1              float Time,DeltaTemp=0;
  63   1              int t;
  64   1              uchar j,Peak=0,PeakLen=0,MinValue=255,MaxValue=0;
  65   1              for     (i=DELSTEP;i<SAMPLESIZE;i++)
  66   1              {
  67   2                        t=ProBuffer[i-DELSTEP]-ProBuffer[i];
  68   2                        if(t>DELGATE)
  69   2                        {
  70   3                                 if(Peak<t)
  71   3                                 {
  72   4                                              Peak=t;
  73   4                                              PeakPos[PeakLen]=i;
  74   4                                      }
  75   3                        }
  76   2                        else if(Peak>0)
  77   2                        {
  78   3                                      Peak=0;
  79   3                                      PeakLen++;              
  80   3                        }
  81   2              }
  82   1              //PeakLen--;
  83   1              Time=0;
  84   1              for(j=0;j<PeakLen-1;j++)
  85   1                      Time+=PeakPos[j+1]-PeakPos[j];
  86   1              Time=12000.0/Time*(PeakLen-1)+0.5;
  87   1              *Freq=(uchar)Time;
  88   1              /////////////////////////////////////////////
  89   1              for(j=0;j<PeakLen-1;j++)
  90   1              {
  91   2                       MinPos[j]=0;
  92   2                       MaxPos[j]=0;
  93   2                       MinValue=255;
  94   2                       MaxValue=0;
  95   2                       for(i=PeakPos[j];i<PeakPos[j+1];i++)
  96   2                       {
  97   3                               if(ProBuffer[i]<MinValue)
  98   3                               {
  99   4                                      MinValue=ProBuffer[i];
 100   4                                      MinPos[j]=i;
 101   4                               }
 102   3                               if(ProBuffer[i]>MaxValue)
 103   3                               {
 104   4                                      MaxValue=ProBuffer[i];
 105   4                                      MaxPos[j]=i;
 106   4                               }
 107   3                       }
 108   2              }
 109   1              for(j=0;j<PeakLen-1;j++)
 110   1                      DeltaTemp+=OriData[MaxPos[j]]-OriData[MinPos[j]];
 111   1              DeltaTemp=DeltaTemp/(PeakLen-1)+0.5;
 112   1              *Delta=(uchar)DeltaTemp;
 113   1      }
 114                  


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V8.02   DSP                                                                   12/05/2007 10:38:51 PAGE 3   

   CODE SIZE        =   1474    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   3072      90
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     14      40
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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