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

📄 startcount.lst

📁 电子设计训练课题
💻 LST
字号:
C51 COMPILER V8.02   STARTCOUNT                                                            07/19/2007 15:19:54 PAGE 1   


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

line level    source

   1          /*===============================================================*/
   2          /*函数名称: startCount.c                                        */
   3          /*函数功能: 对frenum个脉冲进行计时                              */ 
   4          /*入口参数: val-----------------------------------所计的脉冲数目*/ 
   5          /*函数说明:  T4被配置在P0.0口上面,加外部脉冲时最好加个3 k的上拉电阻
   6                                                                           */                     
   7          /*修改记录: 无修改记录                                          */
   8          /*编写作者: t483-4-19chenyong                                   */
   9          /*编写日期: 2007-4-06                                           */
  10          /*===============================================================*/
  11          #include  "common.h"
  12          #include  "delay.h"
  13          #define   fre_factor   73728
  14          #define   frenum       10         //设定的脉冲数        
  15          extern ulong freTime;
  16          uchar tf2num,temp_page;
  17          extern bit isnewdata;
  18          bit isfilter;
  19          ulong freTime;                             //所用时间
  20          uchar h=0;
  21          
  22          /*================================================================*/
  23          /*开始计时                                                        */
  24          /*================================================================*/
  25          
  26          void startCount(uint val)  
  27          {
  28   1      //      T4_Setvalue(1);
  29   1      //      while(!isfilter);          //等待上升沿的到来    
  30   1              T4_Setvalue(val);              //设定要计数的脉冲个数
  31   1          T4RUN;
  32   1              tf2num=0;
  33   1              T2_Start();
  34   1              isnewdata=0;
  35   1      }
  36          /*================================================================*/
  37          /*计数器初始化说明:     计数器工作在自动重载模式下,采用系统时钟12分频
  38                              中断益处时需要软件对标志位清0,但是不能位寻址,只
  39                                                  能进行字操作.计数时,不需时钟设置.
  40                                                  C/T2(计数模式)--------------------------------1
  41                                                  CP/RL4(自动重载)------------------------------0
  42                                                                            */
  43          /*================================================================*/
  44          
  45          void T4_Initial()              //T4为计数模式  
  46          {
  47   1          temp_page=SFRPAGE;
  48   1              SFRPAGE=0x02;
  49   1              TMR4CF=0x00;
  50   1      
  51   1              TMR4CN=0x02;
  52   1              SFRPAGE=0x00;
  53   1                                     //CT4=1,T4为计数器模式,下降沿触发加1
  54   1              EIE2|=0X04;                //T4中断使能
  55   1              SFRPAGE=temp_page;
C51 COMPILER V8.02   STARTCOUNT                                                            07/19/2007 15:19:54 PAGE 2   

  56   1      }
  57          /*================================================================*/
  58          /*定时器2初始化说明:定时器2工作在自动重载模式下,采用系统时钟12分频
  59                              中断益处时需要软件对标志位清0,
  60                                                  C/T2(定时器模式)-----------------------------0
  61                                                  CP/RL2(自动重载)-----------------------------0
  62                              T2M(系统时钟12分频)--------------------------0
  63                                                                                                */
  64          /*================================================================*/
  65          void T2_Initial()              //t2为定时器模式,采用系统时钟12分频 
  66          {
  67   1          temp_page=SFRPAGE;
  68   1              SFRPAGE=0x00;
  69   1              TMR2CN=0x00;
  70   1              TMR2CF=0x00;
  71   1      
  72   1              RCAP2=0x0000;
  73   1          TMR2=0x0000;                   //定时初始化
  74   1              SFRPAGE=0x00;
  75   1              IE|=0X20;                  //T2中断使能
  76   1              SFRPAGE=temp_page;
  77   1      }
  78          /*================================================================*/
  79          /*定时器2开始工作                                                 */
  80          /*================================================================*/
  81          void T2_Start()
  82          {
  83   1              temp_page=SFRPAGE;
  84   1              SFRPAGE=0x00;
  85   1          TMR2=0x0000;
  86   1              TF2=0;
  87   1              TR2=1;                         //启动定时器 
  88   1              SFRPAGE=temp_page;
  89   1      }
  90          /*================================================================*/
  91          /*设置计数器要计的脉冲数                                          */
  92          /*================================================================*/
  93          void T4_Setvalue(uint val)         
  94          {     
  95   1              temp_page=SFRPAGE;
  96   1          SFRPAGE = 0x02;
  97   1              RCAP4=(~val+1);
  98   1          TMR4=RCAP4;               //装载初始值
  99   1              SFRPAGE=temp_page;
 100   1      }
 101          
 102          /*================================================================*/
 103          /*计数器初始化                                                    */
 104          /*================================================================*/
 105          void Count_Initial(void)
 106          {
 107   1      
 108   1                                         
 109   1              T2_Initial();                              //定时器2初始化
 110   1              T4_Initial();                              //定时器4初始化
 111   1              EA=1;                                              //打开所有中断
 112   1              delay_nus(10);
 113   1              startCount(frenum);                        //开始数脉冲
 114   1              isnewdata=0;
 115   1      
 116   1      }
 117          /*================================================================*/
C51 COMPILER V8.02   STARTCOUNT                                                            07/19/2007 15:19:54 PAGE 3   

 118          /*读计数器的值                                                    */
 119          /*================================================================*/
 120          float Read_Number(void)
 121          {
 122   1              
 123   1              float t3frequency[10],sum=0;   
 124   1          float average_frequncy=0,temp;         //所测频率值
 125   1              float return_value;
 126   1              unsigned char n=0;
 127   1              if (isfilter)
 128   1              {
 129   2                      temp = (float)fre_factor/freTime;
 130   2                      temp = (float)temp*100;
 131   2                      t3frequency[h++] = (float)temp*100;
 132   2                  Port_Initial();                                //端口初始化
 133   2                      Count_Initial();
 134   2                      delay_nms(100);
 135   2                      startCount(frenum);
 136   2                  if(h>=10)
 137   2              
 138   2                      //可以设置断点观测频率值
 139   2                      {
 140   3                              h=0;
 141   3                              for(n=0;n<10;n++)
 142   3                          {
 143   4                              sum+=t3frequency[n];
 144   4                      
 145   4                          }
 146   3                              sum = sum-t3frequency[0];
 147   3                          return_value=(float)sum/9;
 148   3                      }
 149   2                   //结束if
 150   2              }
 151   1          return(return_value);
 152   1      
 153   1      }
 154          
 155          void T4_Service() interrupt 16 
 156          {   
 157   1                                     //frenum个频率计满,产生T4中断
 158   1              temp_page=SFRPAGE; 
 159   1              SFRPAGE=0x00;
 160   1              TR2=0;
 161   1      
 162   1              freTime=TMR2;              //计算所用时间
 163   1              SFRPAGE = 0x02;
 164   1          TR4=0;                                 //关闭计数器
 165   1              TF4=0;
 166   1              isfilter=1;
 167   1              freTime+=65536L*tf2num-34;    //需要加上T2的溢出时间
 168   1      //      freTime=freTime*0.344140206;
 169   1              //0.3441402此数据为经验值,对50个数据处理的结果
 170   1              SFRPAGE=temp_page;
 171   1      }
 172          /*================================================================*/
 173          /*中断服务函数                                                    */
 174          /*================================================================*/
 175          void T2_Service() interrupt 5
 176          {                              //T2定时溢出处理
 177   1              temp_page=SFRPAGE; 
 178   1              SFRPAGE=0x00;
 179   1              TF2=0;                             
C51 COMPILER V8.02   STARTCOUNT                                                            07/19/2007 15:19:54 PAGE 4   

 180   1              tf2num++;
 181   1          SFRPAGE=temp_page;
 182   1      }
 183          
 184          /*=============================end=================================*/
 185          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    535    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7      57
   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 + -