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

📄 51测频测相c.lst

📁 等精度测频率、测相位 用c语言编程 简单方便
💻 LST
字号:
C51 COMPILER V8.08   51瞋频瞋相C                                                           03/20/2009 21:54:12 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE 51瞋频瞋相C
OBJECT MODULE PLACED IN 51测频测相C.OBJ
COMPILER INVOKED BY: D:\program files\Keil 3.2\C51\BIN\C51.EXE 51测频测相C.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #include <absacc.h>
   3          #include <INTRINS.H>
   4          
   5          #define DPTR XBYTE[0X6000]
   6          unsigned char DISPBUF1,DISPBUF2,DISPBUF3,DISPBUF4,keynum,BUFTH0,BUFTL0=100,BUFTH1,BUFTL1=100;
   7          unsigned int TIME1S_count;
   8          
   9          unsigned long  TMPA;
  10          
  11          void mDelay(unsigned int Delay);
  12          void display(void);
  13          unsigned char keyscan(void);
  14          void readkey(unsigned char date);
  15          void BCD_CHANGE(void);
  16          void display1(void);
  17          
  18          #include<stdio.h>
  19          
  20          sbit P3_2=P3^2;
  21          sbit P3_3=P3^3;
  22          sbit P3_0=P3^0;
  23          sbit P3_1=P3^1;
  24          sbit P3_7=P3^7;
  25          bit flag1s,flag_countT0;
  26          bit flag_KHz,flag_cexiang,flag_cezhou,flag_openT0,flag_openT1,flag_display1;
  27          unsigned long int period0,period1;
  28          unsigned char n0=0,n1=0,countn0;
  29          
  30          void int0() interrupt 0 using 0
  31          {if(!flag_cezhou)//如果flag_cezhou标志被清零了,代表数据已被取走,要重新开TR0
  32   1              {if(!flag_openT0)
  33   2                      {TH0=0;TL0=0;n0=0;TR0=1;flag_openT0=1;P3_7=~P3_7;}//如果第一次中断则开TR0
  34   2              else//如果第二次中断
  35   2                      {flag_openT0=0;
  36   3                      TR0=0;//则关TR0,
  37   3                      BUFTH0=TH0;BUFTL0=TL0;//并存储TH0,TL0,
  38   3                      if(!flag_cexiang)
  39   3                      {TH1=0;TL1=0;n1=0;TR1=1;EX1=1;flag_openT1=1;}//并同时开TR1,
  40   3                      flag_cezhou=1; //最后设立flag_cezhou标志
  41   3                      }
  42   2              }
  43   1      }
  44          void time0() interrupt 1 using 1
  45          {n0++;countn0++;}
  46          
  47          void int1() interrupt 2 using 2
  48          {if(flag_openT1)//如果已经开了TR1
  49   1              {TR1=0;BUFTH1=TH1;BUFTL1=TL1;flag_cexiang=1;
  50   2              flag_openT1=0;
  51   2              }
  52   1      }
  53          void time1() interrupt 3 using 3 
  54          {n1++;}
  55          void time2() interrupt 5 using 3
C51 COMPILER V8.08   51瞋频瞋相C                                                           03/20/2009 21:54:12 PAGE 2   

  56          {
  57   1              TF2=0;
  58   1              if(flag_countT0)
  59   1              {       TIME1S_count++;
  60   2                      if(TIME1S_count==170)
  61   2                              {TR0=0;TIME1S_count=0;P3_1=~P3_1;flag1s=1;}
  62   2              }       
  63   1              display();
  64   1      }
  65                   
  66          main()
  67          {  
  68   1              float f=0,p=0;
  69   1      //      unsigned char tmp0=0;
  70   1              TMOD=0X11; 
  71   1              TH0=0;
  72   1              TL0=0;
  73   1              TH1=0;
  74   1              TL1=0;
  75   1      
  76   1              RCAP2H=0xe8;
  77   1              RCAP2L=0xef;//T2的定时初值,用于数码管扫描与1s时间的产生
  78   1      
  79   1              EA=1;
  80   1              ET0=1;
  81   1              ET1=1;
  82   1              ET2=1;
  83   1              TR2=1;
  84   1      
  85   1              IT1=1;
  86   1              IT0=1;
  87   1              EX0=1;
  88   1              EX1=1;
  89   1      
  90   1              P3_3=1;
  91   1              P3_2=1;
  92   1              keynum=1;
  93   1              //flag_KHz=1;
  94   1              while(1)
  95   1              {       
  96   2                      while(keynum==1)//((keynum==1)&&flag_KHz)
  97   2                      {       EX0=0;
  98   3                              EX1=0;
  99   3                              TMOD=0X15;
 100   3                              flag_countT0=1; 
 101   3                              readkey(keyscan());
 102   3                              if(flag1s==1)
 103   3                              {
 104   4                                      flag1s=0;
 105   4                                      f=TH0*256+TL0+65536*countn0;
 106   4                                      if(f>100000)
 107   4                                              {f=f/1000;flag_KHz=1;} 
 108   4                                      else if(f>10000)
 109   4                                              {f=f/100;flag_KHz=1;} 
 110   4                                      else if(f>1000)
 111   4                                              {f=f/10;flag_KHz=1;}     
 112   4                                      else {P3_0=1;flag_KHz=0;}
 113   4                                      TMPA=(int)(f*10);
 114   4                                      BCD_CHANGE();
 115   4                                      
 116   4                                      TIME1S_count=0;
 117   4                                      countn0=0;
C51 COMPILER V8.08   51瞋频瞋相C                                                           03/20/2009 21:54:12 PAGE 3   

 118   4                                      n0=0;
 119   4                                      TH0=0;
 120   4                                      TL0=0;
 121   4                                      TR0=1;
 122   4                                      display();
 123   4                              }
 124   3                      }
 125   2                      while((keynum==2)|(keynum==3))
 126   2                      {       EX0=1;
 127   3                              EX1=1;
 128   3                              readkey(keyscan());
 129   3                              flag_countT0=0;
 130   3                              TMOD=0X11;
 131   3      
 132   3                              if(flag_cezhou)
 133   3                                      {period0=(BUFTH0<<8)+BUFTL0+65536*n0;//计算半周期
 134   4                                      //tmp0++;
 135   4                              //      if(tmp0==5)
 136   4                                              //{
 137   4                                              flag_cezhou=0;
 138   4                                              //tmp0=0;BUFTH0=0;BUFTL0=0;n0=0;
 139   4                                      //      }
 140   4                                      }         //并清标志
 141   3                              if(flag_cexiang)
 142   3                                      {period1=(BUFTH1<<8)+BUFTL1+65536*n1;
 143   4                                      flag_cexiang=0;}
 144   3      
 145   3                              if(keynum==2)
 146   3                              {       //TMPA=0;
 147   4                              //      period0=500;
 148   4                                      //if(period0!=0)
 149   4                                      f=(10000000./(period0));//计算频率与实际仿真测试做的校准修正 
 150   4                                      if(f<10000)
 151   4                                              {flag_KHz=0;}
 152   4                                      else if(f<15000)                                  
 153   4                                              {f=f/10;flag_KHz=0;}
 154   4                                      else if(f<100000)
 155   4                                              {f=f/10;flag_KHz=1;}
 156   4                                      else if(f<1000000)
 157   4                                              {f=f/100;flag_KHz=1;}
 158   4                                      else
 159   4                                              {f=f/1000;flag_KHz=1;} 
 160   4                                                                                              
 161   4                                      TMPA=(unsigned long)f;
 162   4                                      BCD_CHANGE();
 163   4                                      display();
 164   4                              }
 165   3                      /*      else if(keynum==3)
 166   3                              {       if(period0!=0)
 167   3                                      {
 168   3                                              p=period1*1800./period0;
 169   3                                              //p=2663;
 170   3                                      //      TMPA=(unsigned long)p;
 171   3                                      //      BCD_CHANGE();
 172   3                                              display();
 173   3                                      }
 174   3                              }
 175   3                              display();*/
 176   3                      }
 177   2              }       
 178   1      }
 179          void mDelay(unsigned int Delay) 
C51 COMPILER V8.08   51瞋频瞋相C                                                           03/20/2009 21:54:12 PAGE 4   

 180          {       unsigned int i;
 181   1              for(;Delay>0;Delay--)
 182   1              {       for(i=0;i<124;i++)
 183   2                      {;}
 184   2              }
 185   1      }
 186          void BCD_CHANGE(void)
 187          {
 188   1              DISPBUF1=TMPA/1000;
 189   1              DISPBUF2=TMPA%1000/100;
 190   1              DISPBUF3=TMPA%100/10;
 191   1              DISPBUF4=TMPA%10;
 192   1      }
 193          ///////////////////////////////////
 194          //数码管显示程序
 195          void display(void)
 196          {
 197   1        DPTR=(DISPBUF1|0X70);
 198   1        mDelay(1);
 199   1        DPTR=(DISPBUF2|0Xb0);
 200   1        mDelay(1);
 201   1        DPTR=(DISPBUF3|0Xd0);
 202   1        mDelay(1);
 203   1        DPTR=(DISPBUF4|0Xe0);
 204   1        mDelay(1);
 205   1        DPTR=0Xf0;
 206   1        mDelay(1);
 207   1      }
 208          void display1(void)
 209          {
 210   1        DPTR=(DISPBUF1|0X70);
 211   1        DPTR=(DISPBUF2|0Xb0);
 212   1        DPTR=(DISPBUF3|0Xd0);
 213   1        DPTR=(DISPBUF4|0Xe0);
 214   1        DPTR=0Xf0;
 215   1      }
 216          unsigned char keyscan(void)
 217          { unsigned char test,tmp;
 218   1        P1=0xf0;
 219   1        if((P1&0xf0)!=0xf0)
 220   1        {     mDelay(1);
 221   2          if((P1&0xf0)!=0xf0)
 222   2              { test=0xfe;
 223   3                while((test&0x10)!=0)
 224   3                {     P1=test;
 225   4                  if((P1&0xf0)!=0xf0)
 226   4                      { tmp=(P1&0xf0)|0x0f;
 227   5                        return(~(test)+~(tmp));
 228   5                      }
 229   4              else test=(test<<1)|0x01;
 230   4                }
 231   3              }
 232   2        }
 233   1        return(0);
 234   1      }
 235          void readkey(unsigned char date)
 236           { switch(date)
 237   1        {     case 0X11: keynum=1;break;
 238   2          case 0X21: keynum=2;break;
 239   2              case 0X41: keynum=3;break;
 240   2              case 0X81: keynum=4;break;
 241   2              case 0X12: keynum=5;break;
C51 COMPILER V8.08   51瞋频瞋相C                                                           03/20/2009 21:54:12 PAGE 5   

 242   2              case 0X22: keynum=6;break;
 243   2              case 0X42: keynum=7;break;
 244   2              case 0x82: keynum=8;break;
 245   2              case 0x14: keynum=9;break;
 246   2              case 0x24: keynum=10;break;
 247   2              case 0x44: keynum=11;break;
 248   2              case 0x84: keynum=12;break;
 249   2              case 0x18: keynum=13;break;
 250   2              case 0x28: keynum=14;break;
 251   2              case 0x48: keynum=15;break;
 252   2              case 0x88: keynum=16;break;
 253   2      //      case 0x00: keynum=0;break;
 254   2        }
 255   1       }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1285    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     26       8
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      8    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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