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

📄 0.lst

📁 C8051F350控制器
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V7.20   0                                                                     08/20/2007 10:05:09 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE 0
OBJECT MODULE PLACED IN 0.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 0.c ROM(COMPACT) REGFILE(.\power.ORC) BROWSE DEBUG OBJECTEXTEND CODE

line level    source

   1          /************************************************************************************
   2          *  Copyright (c) 2007,Hangzhou Fenghe Shiyou Electronics Co.,Ltd
   3          *            All rights reserved.
   4          * name: MAIN.C
   5          * applicable component:  C8051F350
   6          * author:                caixinlin
   7          * edition:               C
   8          * amend data:            2007年8月18日
   9          * complete data:         2007年月日
  10          * 程序运行效果: 浅侧向调试,屏蔽深侧向 模拟电阻率0.2 1.0 2.0 5.0 10 20 50 100 200 1000,无穷大 
  11                                     都控制在3.536-3.746
  12                                           深侧向调试,屏蔽深侧向 模拟电阻率0.2 1.0 2.0 5.0 10 20 50 100 200 1000,无穷大 
  13                                     都控制在3.487-3.556
  14                           输入波动太大,希望平滑上升或下降。控制速度比较慢
  15                                           解决:电阻率将为50时,电流值超过5V的情况
  16          *************************************************************************************/
  17                  #include "C8051F350.h"
  18                  #include "STDIO.h"
  19                  #include "math.h"
  20                  #include "string.h"
  21          
  22              /*全局常量定义*/
  23                  #define     uchar         unsigned char                                     
  24                  #define     uint          unsigned int
  25                  #define     ul            unsigned long 
  26                  #define     a             8                    
  27                  #define     N             8
  28          //      #define     k             89                   
  29          //      #define     k_lld         89                
  30          //      #define     k_lls         126                  
  31                  #define     c             300
  32                  #define     b             300   
  33                  #define     e_h_area      2440               
  34                  #define     e_l_area      6                
  35                  #define     i_h_area      2440                 
  36                  #define     i_l_area      6                  
  37          
  38              ul          data          ADC[4];           
  39              ul          data          ADt[4]; 
  40              ul          data              DATA_lld;     
  41              ul          data          DATA_lld_out;     
  42                  uchar           data              X;  
  43                  ul              data          DATA_lls;  
  44              ul          data          DATA_lls_out;      
  45              uint        data          ABSA;
  46              uint        data          ABSB;
  47                  
  48              bit         lab_d;    // lld 阈值 
  49              bit         lab_s;    // lls 阈值
  50              bit         XXD;      // lld dac current control (1:2.0mA 0:0.25mA)
  51              bit         XXS;      // lls dac current control (1:2.0mA 0:0.25mA)
  52          
  53                  void        DelayMs(uint n);             
  54                  void        SYSCLK_Init (void);         
  55                  void        PORT_Init (void);           // I/O端口初始化
C51 COMPILER V7.20   0                                                                     08/20/2007 10:05:09 PAGE 2   

  56                  void        ADC0_Init (void);           // ADC0初始化
  57                  void        DAC_Init (void);            // DAC初始化
  58                  void        ADC0_Conver (void);         
  59                  void        DAC0_Out_mV(uint v);        
  60                  void        DAC1_Out_mV(uint v);        
  61              void        t0_ini();                 
  62              void        t0_rst();
  63          
  64          
  65          void DelayMs(uint n)     //delay
  66             {uint i;
  67   1              for(; n > 0; n--)
  68   1              {for(i = 400; i > 0; i--);}
  69   1          }
  70          
  71          void SysClk_Init(void)   // 配置系统时钟
  72             {OSCICN = 0x82;       // enable intosc   SYSCLK=12.25MHZ
  73   1          CLKSEL = 0x00;       // select intosc as sysclk source    
  74   1          }
  75          
  76          void System_Init (void)  // 配置系统时钟
  77            { VDM0CN = 0x81;       // enable VDD monitor   
  78   1          RSTSRC = 0x02;       // enable VDD monitor reset sources  
  79   1              ADC0CN = 0x00;       // 单极性 PGA=1
  80   1         }
  81          
  82           void PORT_Init (void)
  83            { P0MDIN  = 0x00;              // P0 全部设置为模拟输入P0MDIN= 0xF3;//P0.2 P0.3设置模拟输入
  84   1          P1MDIN  = 0x03;              // P1.6 P1.7设置模拟输入  P1.0 P1.1设置数字输入 
  85   1          P0MDOUT = 0x00;              // P0.4设置输出
  86   1          P1MDOUT = 0xC0;              // P1.6,P1.7设置为推挽方式(输出)P1MDOUT = 0x30;//P1.4 P1.5设置输出
  87   1          P0SKIP  = 0x0C;              // P0全部跳过      P0SKIP= 0x0C;//跳过P0.2 P0.3
  88   1          P1SKIP  = 0XC0;              // P1.6 P1.7跳过
  89   1          XBR0    = 0x00;              // UART TX0, RX0 连到端口引脚 P0.4 和 P0.5
  90   1          XBR1    = 0x00;              // T0连到端口引脚
  91   1         }
  92          
  93          //-----------------------------------------------------------------------------
  94          // ADC0_Init extVREF Unipolar AIN0.0-AIN0.3
  95          //-----------------------------------------------------------------------------
  96          // This function initializes the ADC to measure across AIN0.0 and AIN0.3
  97          // on the Target Board (Differential measurements, Unipolar codes)
  98           void ADC0_Init (void)
  99           { //EA=0;              
 100   1         ADC0MD |= 0x81;      // 全内部校准(偏移、斜率)
 101   1         while (!AD0CALC);    // 等待校准完成
 102   1         DelayMs(2);
 103   1         REF0CN |= 0x03;      // (enable internal vref) 内部振荡器偏压,内部基准偏压 被使能  |:位或
 104   1                              // 内部振荡器偏压使能位由内部振荡器使能位决定
 105   1         ADC0CN = 0x00;       // 单极性 PGA=1
 106   1         ADC0CF = 0x00;       // interrupts upon SINC3 filter output and uses internal VREF  ADC0CF:ADC0配置寄存
             -器
 107   1                              // SINC3滤波器  使能内部电压基准(2.5V)
 108   1         ADC0CLK= 4;          // MDCLK = SYSCLK / (ADC0CLK + 1)  MDCLK =2.4576MHZ
 109   1         ADC0MD = 0x80;       // 使能ADC0 ADC0=空闲模式  可以进行校准或转换
 110   1         ADC0MUX= 0x08;       // 选择AIN0作为ADC         
 111   1           
 112   1         ADC0DECL = 0X50;     // set slowest OWR
 113   1         ADC0DECH = 0X00;     // set slowest OWR
 114   1         ADC0STA = 0x00;      // 清ADC0状态寄存器
 115   1         EIE1 &= ~0x08;       // 禁止ADC0中断(查询采样时使用)
 116   1         // EA=1;
C51 COMPILER V7.20   0                                                                     08/20/2007 10:05:09 PAGE 3   

 117   1       }
 118          
 119           void DAC_Init(void)    // DAC初始化;
 120            { REF0CN = 0x03;      // 使用内部VREF发生器
 121   1              IDA0CN = 0xF3;      // 打开DAC0,设置模式 写IDA0触发DAC输出更新 满度输出电流2.0mA
 122   1          IDA1CN = 0xF3;      // 打开DAC1,设置模式,从VDD吸取的电流与IDA1输出字有关
 123   1         }
 124                   
 125           void ADC0_Conver (void)
 126            { ul temp;
 127   1          uchar i,j,n; 
 128   1          ul  voltage;
 129   1          for(j=0;j<N;j++)         
 130   1           { for(i=0;i<4;i++)
 131   2             {n = i<<4;
 132   3              n &= 0xf0;
 133   3              ADC0MUX  = 0x08;
 134   3              ADC0MUX |= n;    // 选择AINx作为ADC
 135   3                      DelayMs(8);
 136   3                      AD0INT = 0;      // 清除ADC转换完成标志 
 137   3                      ADC0MD = 0x82;   //  startup conversion
 138   3                      while (!AD0INT); //  wait conversion end
 139   3                      temp = ADC0H;
 140   3                      temp = (temp<<8) + ADC0M;
 141   3                      temp = (temp<<8) + ADC0L;
 142   3                      voltage = temp* 2450.0/16777215;
 143   3                  ADC[i]  = voltage;
 144   3              ADC[i]  = (a-1)*ADC[i] +voltage;
 145   3                      ADC[i]  = ADC[i]>>3;
 146   3                      }
 147   2           }
 148   1       }
 149          
 150          
 151           void DAC0_Out_mV(uint v)  
 152            { float x;
 153   1          x = v / 2000.0 * 255; 
 154   1              v = x;
 155   1          if(XXS==1) IDA0CN = 0xF3;
 156   1          if(XXS==0) IDA0CN = 0xF0;
 157   1          IDA0 = v;
 158   1         }
 159          
 160           void DAC1_Out_mV(uint v)     
 161            { float x;
 162   1          x = v / 2000.0 * 255;
 163   1              v = x; 
 164   1          if(XXD==1) IDA1CN = 0xF3;
 165   1          if(XXD==0) IDA1CN = 0xF0;
 166   1          IDA1 = v;
 167   1         }
 168          
 169          void main(void)
 170          {   DATA_lld=0;
 171   1          DATA_lls=0;
 172   1              PCA0MD &= ~0x40; // WDTE = 0 (clear watchdog timer  enable)
 173   1              SysClk_Init();   // 配置系统时钟 
 174   1              System_Init();   
 175   1              t0_ini();        
 176   1              PORT_Init();     
 177   1      
 178   1      //      P1=0;
C51 COMPILER V7.20   0                                                                     08/20/2007 10:05:09 PAGE 4   

 179   1          DAC_Init();   
 180   1          EA=0;
 181   1          ADC0_Init();  
 182   1              TF0=0;
 183   1              EA=1;
 184   1          t0_rst();  
 185   1         
 186   1              DATA_lld_out=0;
 187   1              DATA_lls_out=0;
 188   1              DATA_lld=0;
 189   1              DATA_lls=0;
 190   1              XXD=1;
 191   1              XXS=1;
 192   1      
 193   1              DATA_lls=b;
 194   1          DAC0_Out_mV(DATA_lls); 
 195   1          DATA_lls_out=b;
 196   1              DATA_lld=c;
 197   1          DAC1_Out_mV(DATA_lld);
 198   1          DATA_lld_out=c;
 199   1          DelayMs(1);            // delay 1ms
 200   1      
 201   1       while(1)  
 202   1        {     
 203   2              uchar i;
 204   2              EA=0;
 205   2              ADC0_Conver();    // ADC  conversion
 206   2                      TF0=0;
 207   2                      EA=0;
 208   2                  t0_rst();
 209   2                      ADC0MD = 0x00;    // ADC处于禁止状态
 210   2                      for(i=0;i<4;i++)  // 防止高温时,ADC输出不稳定值
 211   2              {if((ADC[i]<(ADt[i]-5))||(ADC[i]>(ADt[i]+5)))  
 212   3                    ADt[i]=ADC[i];}                              
 213   2               
 214   2              DelayMs(1);      // 延时1ms 330us
 215   2      //              P1=0xff;
 216   2      //              if((P1&0x03)==0x03)
 217   2              t0_rst();
 218   2      
 219   2                      // lld  control 
 220   2                      if((ADt[0]<=30)&&(ADt[1]<=30))
 221   2                       DATA_lld=150;
 222   2                  else
 223   2                   { if(ADt[0]>ADt[1])     // ed>id   low resistance rate
 224   3                        {ABSA=abs(ADt[0]-1750);
 225   4                         lab_d=0;
 226   4                         if(ABSA>=100)  DATA_lld=DATA_lld_out*1750/ADt[0];
 227   4                         }            
 228   3                    if(ADt[0]<=ADt[1])   // ed<id   high resistance rate
 229   3                        {ABSA=abs(ADt[1]-1750);
 230   4                         lab_d=1;
 231   4                         if(ABSA>=100) DATA_lld=DATA_lld_out*1750/ADt[1];
 232   4                         }
 233   3                         }
 234   2      
 235   2                       if(XXD==1)
 236   2                {if((XXD==1)&&(DATA_lld<=230))// 2.0MA--0.25MA 
 237   3                           {DATA_lld*=8;                 
 238   4      //            x = DATA_lld_out* 255/ 2000.0 ;
 239   4      //                    IDA1CN = 0xF0;
 240   4      //                    IDA1 = x; 
C51 COMPILER V7.20   0                                                                     08/20/2007 10:05:09 PAGE 5   

 241   4                    XXD=0;
 242   4                   }
 243   3                         if((XXD==1)&&(DATA_lld>240))   
 244   3                         {XXD=1;
 245   4      //              h = DATA_lld_out* 255/ 2000.0 ; 
 246   4      //                      IDA1CN = 0xF3;
 247   4      //                  IDA1 = h;
 248   4                          }
 249   3                              }
 250   2                       else
 251   2                        {if((XXD==0)&&(DATA_lld<=1840)) 
 252   3                           {
 253   4      //                        y = DATA_lld_out* 255/ 2000.0 ;
 254   4      //                        IDA1CN = 0xF0;
 255   4      //                    IDA1 = y; 
 256   4                                XXD=0; 
 257   4                                }     
 258   3                         if((XXD==0)&&(DATA_lld>1920))        // 0.25MA--2MA
 259   3                           {
 260   4                                DATA_lld/=8; 
 261   4      //                    z = DATA_lld_out* 255/ 2000.0 ;
 262   4      //                        IDA1CN = 0xF3;
 263   4      //                    IDA1 = z; 
 264   4                            XXD=1;
 265   4                            }
 266   3                              }
 267   2      
 268   2                      if(lab_d==1)   X=4;

⌨️ 快捷键说明

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