wave_measure.lst

来自「自己的平时一些制作 现在整理一下 与大家一起分享」· LST 代码 · 共 108 行

LST
108
字号
C51 COMPILER V7.20   WAVE_MEASURE                                                          03/05/2007 20:53:58 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE WAVE_MEASURE
OBJECT MODULE PLACED IN wave_measure.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE wave_measure.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //十.测低频信号周期/频率的一个程序
   2          /************测低频信号周期的一个程序***********/
   3          //       经过数学变换后就可以用来测频率
   4          //       思路:数一个周期中有多少个2ms,用count放这个计数值
   5          //    当然亦可数有多少个10ms,那样精度稍差。
   6          /**************************************/
   7          
   8          #include<reg51.h>
   9          //定义全局变量用于存放计算值
  10          unsigned char count;
  11          sbit int0=P3^2;         //被测量信号,当然也可以接到其他的引脚
  12          //下面两个变量就是用来 切换数码管的序号 和 存放显示的数据
  13          unsigned char n; 
  14          unsigned char d[4];
  15          
  16          unsigned char code digit[4]={0xf8,0xf4,0xf2,0xf1};  //数码管显示选择
  17          unsigned char code tab[16]={0x3f,6,0x5b,0x4f,0x66,0x6d,0x7d,
  18                                      7,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};                                          
  19                                                        //显示0--9;a--f;
  20          
  21          /********十进制到bcd码转换************/
  22          void hextobcd (unsigned int hexs)          
  23          {
  24   1      d[0]=hexs/1000;
  25   1      hexs=hexs%1000;
  26   1      d[1]=hexs/100;
  27   1      hexs=hexs%100;
  28   1      d[2]=hexs/10;
  29   1      hexs=hexs%10;
  30   1      d[3]=hexs;
  31   1      }
  32          
  33          /*********定时器初始化程序******/
  34          void Init_Timer (void)
  35          {
  36   1      TMOD=0x11;   //定时器1和定时器0都工作在16位定时器方式
  37   1      EA=1;        //cpu开中断
  38   1      ET0=1;       //定时器0开中断
  39   1      ET1=1;       //定时器1开中断
  40   1      TH1=(65536-1000)/256;  //定时常数设置
  41   1      TL1=(65536-1000)%256;
  42   1      TR1=1;
  43   1      }
  44          
  45          /*********定时2毫秒*********/
  46          void timer0(void) interrupt 1
  47          { 
  48   1       count++; //计数
  49   1       TH0=(65536-1843)/256;  //设定定时常数,定时2ms
  50   1       TL0=(65536-1843)%256;
  51   1      }
  52          
  53          /********中断显示***********/
  54          void timer1(void) interrupt 3
  55          {
C51 COMPILER V7.20   WAVE_MEASURE                                                          03/05/2007 20:53:58 PAGE 2   

  56   1       TH1=(65536-1000)/256;
  57   1       TL1=(65536-1000)%256;
  58   1       n=n++;
  59   1       if(n>3) n=0;
  60   1       P0=0; P2=digit[n];P0=tab[d[n]];
  61   1      }
  62          
  63          
  64          /********主函数********/
  65          main()
  66          {
  67   1      unsigned int snumber;  //周期 单位ms
  68   1      Init_Timer();
  69   1      while(1)
  70   1              {
  71   2              count=0;
  72   2              TH0=(65536-1843)/256;  //设定定时常数,定时2ms
  73   2              TL0=(65536-1843)%256;
  74   2              while(int0==0) ;        //测周期长度
  75   2              TR0=1;
  76   2              while(int0==1) ;
  77   2              while(int0==0) ;
  78   2              TR0=0;
  79   2              snumber=count*2;   //计算出有几个2ms,乘以2后得到周期。
  80   2              hextobcd(snumber);  //显示出有几个ms
  81   2              }
  82   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    214    ----
   CONSTANT SIZE    =     20    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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