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

📄 key.lst

📁 8051单片机的运放测试仪电子大赛程序。
💻 LST
字号:
C51 COMPILER V8.08   KEY                                                                   08/13/2007 11:03:18 PAGE 1   


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

line level    source

   1          //#include<reg51.h>
   2          #include<yh.h>
   3          #include<absacc.h>
   4          #include<math.h>
   5          //按键响应函数 
   6          float V0,VI0;              // 电压比较值,失调电压值   
   7          float VL0,VL1;             // K1,K2闭合或断开时测得的辅助运放的输出电压 
   8          float II0;                 // 失调电流值 
   9          float AVD;                                      // 测试交流差模开环电压增益AVD 
  10          float KCMR;                         //交流共模抑制比KCMR
  11          uint VIB;                   //电压采集测量值 
  12          uchar sw,gw,xsw1,xsw2;
  13          extern uchar key_value ;   //外部中断返回键值  
  14          xdata  float ad_buf[50];
  15          
  16          //AD0809转换函数 
  17          
  18          void ad_tran(void)  
  19          {
  20   1        adbusy=1;              
  21   1        AD0809=0;                                 // 启动A/D转换 
  22   1        while(adbusy==1);                        // 待转换结束 
  23   1        delay(10);
  24   1        VIB=AD0809;    
  25   1      //   VIB=0xaa   ;                          
  26   1        V0=(float)((float)VIB/0xff)*5  ;        //    十进制转换      成比较值 
  27   1      
  28   1      // VI0=(float)((float)VIB/0xff)*5  ;    //  测 试   
  29   1      
  30   1      }
  31           
  32          //输出数值转换
  33          void in_tran(float tt)  
  34          {
  35   1        
  36   1        sw=(uchar)tt/10;                        //转换得出十位的值 
  37   1        gw=(uchar)tt%10;                        //转换得出个位的值 
  38   1        xsw1=(uchar)(tt*10)%10;         //转换得出小数点后第一位的值   
  39   1        xsw2=(uchar)(tt*100)%10;        //转换得出小数点后第二位的值   
  40   1      }
  41          
  42           //led显示错误 EFF 
  43          void led_showEFF(void)  
  44          {
  45   1        COM8279=0x87;                    // 写显示器RAM       000H 
  46   1        DAT8279=table[15];       // 显示 F  
  47   1        COM8279=0x86;                    //  001H 
  48   1        DAT8279=table[15];       // 显示 F 
  49   1        COM8279=0x85;                    //  002H 
  50   1        DAT8279=table[14];       // 显示 E  
  51   1      }
  52          
  53          //led显示         
  54          void led_show(void)
  55          {
C51 COMPILER V8.08   KEY                                                                   08/13/2007 11:03:18 PAGE 2   

  56   1        COM8279=0X87;
  57   1        DAT8279=table[xsw2];
  58   1        COM8279=0x86;                    // 写显示器RAM       000H 
  59   1        DAT8279=table[xsw1];     // 显示小数位
  60   1        COM8279=0x85;                    //  001H 
  61   1        DAT8279=table[gw]|0x80;  // 显示各位并小数点   
  62   1        COM8279=0x84;                    //  002H 
  63   1        DAT8279=table[sw];       // 显示十位
  64   1      }
  65          /*
  66          //取采样出来的最大值 
  67          void cy_max(void)
  68          {
  69             uchar i;
  70             for(i=0;i<50;i++)
  71                   {
  72                     ad_tran();              //   ad采样 50次 
  73                     ad_buf[i]=V0;           //  把计算完后的比较值送给数组 
  74                     delay(10);              //   延时10ms 
  75               }
  76             for(i=1;i<50;i++)
  77                     if(ad_buf[0]<ad_buf[i])
  78                         ad_buf[0]=ad_buf[i];     //取采样出来的最大值 
  79             V0=ad_buf[0];        
  80          }
  81           */
  82          //取采样平均值 
  83          void cy_ary(void)
  84          {
  85   1         uchar i;
  86   1         for(i=0;i<50;i++)
  87   1               {
  88   2                 ad_tran();              //   ad采样 50次 
  89   2                 ad_buf[i]=V0;           //  把计算完后的比较值送给数组 
  90   2                 delay(10);              //   延时10ms 
  91   2           }
  92   1         for(i=0;i<50;i++)
  93   1         {
  94   2           V0=V0+ad_buf[i];
  95   2         }
  96   1         V0=V0/50;
  97   1      }
  98          
  99          
 100          //测试失调电压VI0                 
 101          void key0(void)    
 102          {
 103   1          PA8255=0x00;//相应的继电器设置     1000     
 104   1              delay(1000);                        //延时 100ms
 105   1              cy_ary();                               //取出采样50次的最大值 
 106   1              VI0=V0;         //计算出失调电压 
 107   1              /*
 108   1              if(VI0>4)                                       //如果大于4则再一次进行采样 
 109   1              {
 110   1                      PA8255=0x40;//相应的继电器设置           100    
 111   1                  delay(100);                 //延时 
 112   1              cy_ary();
 113   1                      VI0=V0*10;
 114   1                      if(VI0>40)
 115   1                      { 
 116   1                              PA8255=0x00;//关闭所有继电器 
 117   1                              delay(100);
C51 COMPILER V8.08   KEY                                                                   08/13/2007 11:03:18 PAGE 3   

 118   1                              led_showEFF();
 119   1                              goto loop0;
 120   1                      }
 121   1      
 122   1          }   
 123   1              */
 124   1              in_tran(VI0);
 125   1              led_show();
 126   1      //loop0:
 127   1              COM8279=0x80;
 128   1              DAT8279=table[1];       
 129   1              //      PC8255=;                  //显示单位LED灯   mV   
 130   1      //        VI0=(float)23.22;               //     测试 
 131   1      //    ad_tran();                                  //    测试    
 132   1      
 133   1      }
 134          
 135          //测试失调电流  II0
 136          void key1(void)
 137          {
 138   1        //while(!){
 139   1              PA8255=0x00;//0~0.4uA的继电器设置 
 140   1              delay(1000);
 141   1              cy_ary();
 142   1              VL0=V0;
 143   1              PA8255=0x30;//0~0.4uA的继电器的设置 
 144   1              delay(1000);
 145   1              cy_ary();
 146   1              VL1=V0;
 147   1              II0=VL1-VL0;           //uA      0uA~0.4uA 
 148   1              /*
 149   1              if(II0>0.4)
 150   1              {
 151   1                  PA8255=0x40;//0.4uA~4uA的继电器设置 
 152   1                  delay(100);
 153   1                  cy_ary();
 154   1                      VL0=V0;
 155   1                      PA8255=0x70;//0.4uA~4uA的继电器的设置 
 156   1                      delay(100);
 157   1                      cy_ary();
 158   1                      VL1=V0;
 159   1                      II0=VL1-VL0;        // uA  0.4uA~4uA
 160   1                      if(II0>4)
 161   1                      {
 162   1                        PA8255=0x00;//关闭所有继电器 
 163   1                        delay(100);
 164   1                        led_showEFF();
 165   1                        goto loop1;
 166   1      
 167   1                      }
 168   1                      
 169   1              }       
 170   1              */
 171   1               in_tran(II0);
 172   1           led_show();
 173   1      //loop1:
 174   1               COM8279=0x80;
 175   1               DAT8279=table[2];
 176   1                              //      PC8255=;                  //显示单位LED灯        uA
 177   1                              
 178   1      }
 179          
C51 COMPILER V8.08   KEY                                                                   08/13/2007 11:03:18 PAGE 4   

 180          //测试交流差模开环电压增益AVD 
 181          void key2(void)
 182          {
 183   1              //相应继电器的设置 
 184   1              delay(100);
 185   1              cy_ary();//采样最大值 
 186   1              VL0=2*V0*0.707;//求出有效值 
 187   1              if(VL0>4)//VL0大于4V则错误 
 188   1              {
 189   2               //关闭所有继电器 
 190   2               delay(100);
 191   2               led_showEFF();
 192   2               goto loop2;
 193   2              }
 194   1      
 195   1                AVD=20*log((4/VL0)*1000);
 196   1                in_tran(AVD);
 197   1            led_show();
 198   1      loop2:    
 199   1                COM8279=0x80;
 200   1                DAT8279=table[3];
 201   1                //    PC8255=;        
 202   1      
 203   1      
 204   1      }
 205          
 206          //交流共模抑制比KCMR     
 207          void key3(void)
 208          { 
 209   1      /*      //相应继电器的设置 
 210   1              delay(100);
 211   1              cy_ary();//采样最大值 
 212   1              VL0=2*V0*0.707;//求出有效值 
 213   1              if(VL0>4)//VL0大于4V则错误 
 214   1              {
 215   1               //关闭所有继电器 
 216   1               delay(100);
 217   1               led_showEFF();
 218   1               goto  loop3;
 219   1              }
 220   1      
 221   1              
 222   1                KCMR=20*log((4/VL0)*1000);
 223   1                in_tran(KCMR);
 224   1            led_show();
 225   1      loop3:             
 226   1                COM8279=0x80;
 227   1                DAT8279=table[4];
 228   1                //    PC8255=;        
 229   1      */      
 230   1               while(1)
 231   1              {
 232   2              cy_ary();
 233   2              //V0=V0-1.06;
 234   2              in_tran(V0);
 235   2              led_show();
 236   2              delay(100);
 237   2              }
 238   1      }
 239          
 240          //测试单位增益带宽BWG
 241          void key4(void)
C51 COMPILER V8.08   KEY                                                                   08/13/2007 11:03:18 PAGE 5   

 242          { 
 243   1        
 244   1         uchar i,a,b,c;
 245   1              PC8255=0x00;
 246   1              a=0x00;
 247   1              b=0x87;
 248   1              
 249   1              for(i=0;i<8;i++)
 250   1              { 
 251   2                c=a&0x01;
 252   2                COM8279=b;
 253   2                DAT8279=table[a];
 254   2                a=a>>1;
 255   2                b--;
 256   2              }
 257   1      
 258   1      
 259   1                      
 260   1      /*      uchar i,a,b,c;
 261   1              a=0xff;
 262   1              b=0x87;
 263   1              for(i=0;i<8;i++)
 264   1              { 
 265   1                c=a&0x01;
 266   1                COM8279=b;
 267   1                DAT8279=table[c];
 268   1            a=a>>1;
 269   1                b--;
 270   1                }       */
 271   1      
 272   1                
 273   1      }
 274          
 275          
 276          //用于测试采集的信号 
 277          void key5(void)
 278          { /*
 279   1              while(1)
 280   1              {
 281   1              cy_ary();
 282   1              V0=V0-1.06;
 283   1              in_tran(V0);
 284   1              led_show();
 285   1              delay(100);
 286   1          }      */
 287   1         while(1){
 288   2              //测试8255;
 289   2              uchar i,a,b,c;
 290   2              PC8255=0xff;
 291   2      /*      delay(500);
 292   2              PA8255=0x00;
 293   2              delay(500);
 294   2              */
 295   2              a=0xff;
 296   2              b=0x87;
 297   2              for(i=0;i<8;i++)
 298   2              { 
 299   3                c=a&0x01;
 300   3                COM8279=b;
 301   3                DAT8279=table[c];
 302   3            a=a>>1;
 303   3                b--;
C51 COMPILER V8.08   KEY                                                                   08/13/2007 11:03:18 PAGE 6   

 304   3              }
 305   2               } 
 306   1      /*      while(1)
 307   1              {
 308   1              ad_tran();
 309   1              in_tran(V0);
 310   1              led_show();
 311   1              COM8279=0x80;
 312   1              DAT8279=table[6];
 313   1              delay(100);
 314   1              }
 315   1              */
 316   1      }
 317          
 318          //大概延时1ms
 319          void delay(uchar x)
 320          {
 321   1        uchar i;
 322   1        while(x--)
 323   1        {     
 324   2          for(i=0;i<53;i++)
 325   2              {}
 326   2        }
 327   1      }        


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    786    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =    200    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     34      10
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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