pca_capture.lst

来自「本简易网络导纳分析仪以C8051F020为控制和数据处理核心」· LST 代码 · 共 109 行

LST
109
字号
C51 COMPILER V8.02   PCA_CAPTURE                                                           05/28/2007 15:23:29 PAGE 1   


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

line level    source

   1          /*===============================================================*/
   2          /*函数名称: PCA_Capture.c                                       */
   3          /*函数功能: 主函数,调用各模块                                   */
   4          /*基本思想:  正负边沿均捕捉脉冲                                  */
   5          /*修改记录: 无修改记录                                          */
   6          /*编写作者: t483-4-19chenyong                                   */
   7          /*编写日期: 2007-4-14                                           */
   8          /*===============================================================*/
   9          #include"common.h"
  10          #include"PCA.h"
  11          #include<math.h>
  12          
  13          xdata uint PCA0_Value[12],i;
  14          xdata ulong sum0,sum1,x,y;
  15          uchar number=0;
  16          float value;
  17          bit isnewdata;
  18          /*===============================================================*/
  19          /*  CAPPn----------------------------------------------上升沿捕捉*/
  20          /*  CAPNn----------------------------------------------下降沿捕捉*/
  21          /*  ECCFn--------------------------------------------允许捕捉中断*/   
  22          /*===============================================================*/
  23          void PCA0_Initial()
  24          {                       //PCA CEX0配置为正负边沿均捕捉
  25   1              PCA0CPM0 = 0x31;    //正负边沿触发模式,CEX0捕捉中断使能
  26   1              PCA0CPL0 = 0x00;    
  27   1              PCA0CPH0 = 0x00;    
  28   1      }
  29          void PCA_Initial()
  30          {
  31   1              PCA0MD=0x08;        //PCA采用系统时钟,且PCA溢出中断禁止
  32   1              PCA0CN=0x40;        //启动PCA计数器
  33   1              EIE1|=0x08;         //PCA中断使能
  34   1      }
  35          
  36          float PCA_Capture()
  37          {   
  38   1                              //把捕捉端口配置到P0.0
  39   1          if(isnewdata)       //捕捉十次
  40   1              {                                                 
  41   2                      isnewdata=0;
  42   2                              if(number>=12)
  43   2                              {
  44   3                      sum0=PCA0_Value[1]+PCA0_Value[3]+PCA0_Value[5]+PCA0_Value[7]+PCA0_Value[9];
  45   3                                      sum1=PCA0_Value[2]+PCA0_Value[4]+PCA0_Value[6]+PCA0_Value[8]+PCA0_Value[10];
  46   3                                      if(sum0<sum1)
  47   3                                      {   
  48   4                                          value=sum0;
  49   4                                              value=(float)value*0.2;
  50   4                                              value=(float)value/3.999892398; 
  51   4                                      }
  52   3                                      else
  53   3                                      {
  54   4                                          value=sum1;
  55   4                                              value=(float)value*0.2; 
C51 COMPILER V8.02   PCA_CAPTURE                                                           05/28/2007 15:23:29 PAGE 2   

  56   4                                              value=(float)value/3.999892398;                         
  57   4                                      
  58   4                                      }
  59   3      //                              value=sum0<sum1? x:y;
  60   3      //              value=sum;
  61   3      //                              value=(float)value*0.2;
  62   3      //                              value=(float)value/3.999892398;                  
  63   3                      number=0;
  64   3                              }       
  65   2              }
  66   1              return(value);
  67   1      }
  68          /*
  69            捕捉思想:在中断程序中放个静态变量,电平的跳变间隔就是当前的捕捉值与上次捕捉
  70                      值之差。
  71          */
  72          void PCA_ISR(void) interrupt 9 using 1 
  73          {
  74   1              static xdata uint temp_count=0;
  75   1              if(CCF0)
  76   1              {
  77   2                      PCA0_Value[number] = PCA0CPL0+PCA0CPH0*256-temp_count;
  78   2                      temp_count = PCA0CPL0+PCA0CPH0*256;
  79   2                      number++;
  80   2                      CCF0=0;
  81   2              }
  82   1              isnewdata=1;
  83   1        }             


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    378    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     44    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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