wave_generator_measure.lst

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

LST
142
字号
C51 COMPILER V7.20   WAVE_GENERATOR_MEASURE                                                03/05/2007 21:48:09 PAGE 1   


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

line level    source

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

  56   1       TH1=(65536-23040)/256;  //设定定时常数,产生25ms中断,这样输出的就是周期50ms的方波
  57   1       TL1=(65536-23040)%256;
  58   1       led=!led;                      //输出去反
  59   1       TR1=1;                                         //启动定时器1
  60   1      }
  61          
  62          /*********定时器0中断服务程序**************/
  63          /*********定时2毫秒*********/
  64          void timer0 (void) interrupt 1
  65          { 
  66   1       count++; //计数
  67   1       TH0=(65536-1843)/256;  //设定定时常数,定时2ms
  68   1       TL0=(65536-1843)%256;
  69   1      }
  70          
  71          
  72          /*******非中断的数码管显示子程序***********/
  73          //由于这里中断用完了,所以
  74          /******************************************/
  75          void display()
  76          {
  77   1       unsigned char m;
  78   1       for(m=0;m<4;m++)
  79   1         {
  80   2          P2=digit[m]; P0=tab[d[m]];  
  81   2              delay(250);
  82   2          P0=0;
  83   2         }
  84   1      }
  85          
  86          /*****主函数main****/
  87          /*******实现P1^0输出周期50ms方波,P3^2输入该方波..****/ 
  88          /**..我们可以用金属线连接两个引脚*******/
  89          /***显示方波的周期:单位ms**/
  90          /***定时器0产生2ms中断,定时器1产生25ms中断*****/
  91          /*****************************/
  92          
  93          main()
  94          {
  95   1      unsigned char i;
  96   1      unsigned int snumber;  //周期: 单位ms
  97   1      Init_Timer();
  98   1      while(1)
  99   1              {
 100   2              count=0;
 101   2              for(i=0;i<10;i++)  { display(); delay(250);}   //显示及延时
 102   2              TH0=(65536-1843)/256;  //设定定时常数,定时2ms
 103   2              TL0=(65536-1843)%256;
 104   2              while(int0==0) ;        //测周期长度 //先等待上升沿..
 105   2              TR0=1;              //..启动定时器0..
 106   2              while(int0==1) display();    //..等待下降沿..
 107   2              while(int0==0) display();    //..再等待上升沿..
 108   2              TR0=0;              //同时停止定时器0
 109   2              snumber=count*2;   //计算出有几个2ms,乘以2后得到周期。
 110   2              hextobcd(snumber);  //显示出有几个ms
 111   2              }
 112   1      }
 113          
 114          


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V7.20   WAVE_GENERATOR_MEASURE                                                03/05/2007 21:48:09 PAGE 3   

   CODE SIZE        =    227    ----
   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 + -
显示快捷键?