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

📄 main.lst

📁 绝对好东西!aduc812AD转换代码,望对大家学习有所帮助!
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.10   MAIN                                                                  05/22/2006 14:37:00 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1           /***********************************************************************
   2                      IRIS05B SOFT 3.3    2005/11/04    BY GAOJIAN
   3                                  此程序下的脉冲驱动方式为脉冲
   4                                  宽度调制,脉冲周期不变,占空比
   5                                  随采样值与目标值的差来确定,
   6                                  差值越大,占空比越大。
   7                                  此程序试用电路版本 V2.1
   8                                              3.3版修改了光圈电机不能时时转动的问题
   9                                  2005-11-08 NDFilter, Iris初始化
  10          
  11          ***********************************************************************/
  12          #include <ADUC812.H>
  13          #include <math.h>
  14          
  15          
  16          sbit IRIS_RUN=P2^4;
  17          sbit IRIS_DIR=P2^5;
  18          sbit FILTER_RUN=P2^6;
  19          sbit FILTER_DIR=P2^7;
  20          sbit V_IRIS=P1^3;
  21          sbit V_ABS=P1^2;
  22          sbit ND_INVAL=P3^2;
  23          sbit ND_VAL=P3^3;
  24          
  25          #define    uchar       unsigned char
  26          #define    RUN         0
  27          #define    STOP        1
  28          #define    L_DIR       0
  29          #define    R_DIR       1
  30          #define    ADIN_V_ABS      0x02
  31          #define    ADIN_V_IRIS     0x03
  32          #define    unWidth             255
  33          #define    unMinPulse      35
  34          
  35          unsigned  int   IRIS_TgtPos;   //光圈目标位置 
  36          unsigned  int   IRIS_CurPos;   //光圈当前位置
  37          unsigned  char  Filter_TgtPos; //滤光片目标位置
  38          unsigned  char  L_IRIS_Run_Flag; //光圈电机向左转动标志位 0xFF有效 其他值无效
  39          unsigned  char  R_IRIS_Run_Flag; //光圈电机向右转动标志位 0xFF有效 其他值无效
  40          unsigned  char  Filter_ND_INVAL_Flag;
  41          unsigned  char  Filter_ND_VAL_Flag;       //滤光片目标位置标志位
  42          unsigned  char  V_ABS_L,V_ABS_H;          
  43          unsigned  char  V_AEC_L,V_AEC_H;
  44          unsigned  char  Counter_Time;
  45          unsigned  int   Cnt;               //电机转动定时变量
  46          unsigned  int      Y;
  47          unsigned  char     ABS_M;                                         //ABS输出计算参数
  48          unsigned  int      ABS_N;
  49          unsigned  char     AEC_M;
  50          unsigned  int      AEC_N;
  51          
  52          unsigned  char unPulseHigh;
  53          unsigned  char unPulseLow;
  54          
  55          unsigned  int unDelPos;
C51 COMPILER V7.10   MAIN                                                                  05/22/2006 14:37:00 PAGE 2   

  56          unsigned  int unDelPos1;
  57          unsigned  int unDelPos2;
  58          
  59          
  60                                                     
  61          void SystemInit();
  62          void UpdataCurPos(); 
  63          unsigned int GetADC(unsigned char  Channel);
  64          void Delay(unsigned int  D_time);
  65          //void PutDAC(uchar DA0_H,uchar DA0_L,uchar DA1_H,uchar DA1_L);
  66          void Serial_Port_Trans(unsigned int  Trans_Data);
  67          void Serial_Port();
  68          void IRIS_Moto_Run();
  69          void Filter_Run_L();
  70          void Filter_Run_R();
  71          void Initial_Filter_Moto();
  72          void ABS_Account();
  73          void AEC_Account();
  74          void Put_ABS(uchar  DA0_H,uchar  DA0_L);
  75          void Put_AEC(uchar  DA1_H,uchar  DA1_L);
  76          void R_Reverse();
  77          void L_Reverse();
  78          void Delay(unsigned int  D_time);
  79          void Time0();
  80          
  81          void InitIris();        //2005-11-08,光圈位置初始化
  82          
  83          main()
  84          {
  85   1              SystemInit();
  86   1              UpdataCurPos();
  87   1              //-------------------------------------------//
  88   1              //2005-11-08 NDFilter, Iris初始化                //
  89   1          //-------------------------------------------//
  90   1              //Initial_Filter_Moto();                // ND Filter 初始化
  91   1              //InitIris();                                   // 光圈位置初始化
  92   1              //-----------------     --------------------------//
  93   1      
  94   1              while(1)
  95   1              {       
  96   2                /*UpdataCurPos();                                
  97   2                Serial_Port_Trans(IRIS_CurPos);
  98   2                Delay(10000);*/
  99   2                  if((R_IRIS_Run_Flag!=0xFF)&&(L_IRIS_Run_Flag!=0xFF))
 100   2              { 
 101   3                      //ABS_Account(); 
 102   3                      AEC_Account();
 103   3                      }
 104   2                                
 105   2                      while((R_IRIS_Run_Flag==0xFF)||(L_IRIS_Run_Flag==0xFF))  
 106   2              {       
 107   3                              IRIS_Moto_Run();
 108   3      
 109   3                              //Serial_Port_Trans(IRIS_CurPos); //此处上传的值为停止时刻的IRIS_CurPos数值
 110   3                              //Delay(30000); 
 111   3                              //UpdataCurPos();                                  //注意:调试使使用的,最终产品要去掉延时和串口返回
 112   3                      //Serial_Port_Trans(IRIS_CurPos);
 113   3                              //IRIS_CurPos=IRIS_TgtPos;
 114   3                      }
 115   2                      
 116   2              }       
 117   1      }
C51 COMPILER V7.10   MAIN                                                                  05/22/2006 14:37:00 PAGE 3   

 118          
 119          void SystemInit()               //系统初始化函数
 120            {
 121   1         Filter_ND_INVAL_Flag=0x00; 
 122   1         Filter_ND_VAL_Flag=0x00;
 123   1         L_IRIS_Run_Flag=0x00;
 124   1         R_IRIS_Run_Flag=0x00;
 125   1         IRIS_TgtPos=0x0700;
 126   1         Counter_Time=0x00;
 127   1        
 128   1         ABS_M=0x01;
 129   1         ABS_N=0x07F0;
 130   1         AEC_M=0x01;
 131   1         AEC_N=0x07F0;
 132   1         TL2=0xDC;
 133   1         TH2=0xFF;
 134   1         RCAP2L=0xDC;
 135   1         RCAP2H=0xFF;
 136   1         T2CON=0x30;       //set rate and start
 137   1         TR2=1;
 138   1         SCON=0x50;        //set serial port mode
 139   1         ADCCON1=0x7c;
 140   1         TMOD=0x01;            //定时器0工作在方式1
 141   1         TL0=0x00;
 142   1         TH0=0x00;         //设定定时器初值
 143   1      
 144   1         ES=1;                         //允许串口中断 
 145   1         EX1=1;
 146   1         EX0=1;                        //允许外部中断
 147   1         ET0=1;            //允许定时器0中断
 148   1         
 149   1         IT0=1;
 150   1         IT1=1;                       //设置外部中断为下降沿触发方式
 151   1                     
 152   1         PX1=1;
 153   1         PX0=1;            //设定外部中断优先位
 154   1         EA=1;                         
 155   1      
 156   1         }
 157          
 158          void UpdataCurPos()                // 更新当前的光圈位置 
 159          { 
 160   1              IRIS_CurPos=GetADC(ADIN_V_IRIS);
 161   1      
 162   1              if(IRIS_CurPos > IRIS_TgtPos)
 163   1              {       
 164   2                      unDelPos = (IRIS_CurPos - IRIS_TgtPos)/256;
 165   2                      if(IRIS_CurPos - IRIS_TgtPos>=0x0600)
 166   2                  {                                                                              //根据当前值与目标值的差值大小
 167   3                              unPulseHigh = unDelPos*12+ unMinPulse;  //设定相乘系数
 168   3                      
 169   3                      }
 170   2                      else if(IRIS_CurPos - IRIS_TgtPos>=0x0300)
 171   2                      {
 172   3                          unPulseHigh = unDelPos*8+ unMinPulse;
 173   3                      }
 174   2                      else if(IRIS_CurPos - IRIS_TgtPos>0x0180)
 175   2                  {
 176   3                          unPulseHigh = unDelPos*2+ unMinPulse;
 177   3                      }
 178   2                      else
 179   2                      {
C51 COMPILER V7.10   MAIN                                                                  05/22/2006 14:37:00 PAGE 4   

 180   3                          unPulseHigh = unDelPos+ unMinPulse;
 181   3                      }
 182   2              }
 183   1              else
 184   1              {
 185   2                      unDelPos = (IRIS_TgtPos - IRIS_CurPos)/256;
 186   2                      if(IRIS_TgtPos - IRIS_CurPos>=0x0600)
 187   2                      {
 188   3                         unPulseHigh = unDelPos*12+ unMinPulse; 
 189   3                      }
 190   2                      else if(IRIS_TgtPos - IRIS_CurPos>=0x0300)
 191   2                      {
 192   3                         unPulseHigh = unDelPos*8+ unMinPulse;
 193   3                      }
 194   2                      else if(IRIS_CurPos - IRIS_TgtPos>0x0180)
 195   2                  {
 196   3                          unPulseHigh = unDelPos*2+ unMinPulse;
 197   3                      }
 198   2                      else
 199   2                      {
 200   3                          unPulseHigh = unDelPos+ unMinPulse;
 201   3                      }
 202   2      
 203   2              }
 204   1                      unPulseLow = unWidth - unPulseHigh;     
 205   1                              IRIS_CurPos=IRIS_CurPos&0xFFF0;   //屏蔽ADC输入的低四位
 206   1              
 207   1      }
 208          //ADC function and choose ADC0---ADC7 by Channel
 209          unsigned int GetADC(unsigned char Channel)        
 210            { 
 211   1         unsigned char *p;
 212   1         unsigned char  variable;
 213   1         unsigned int  ADC_value;             //用指针将2个char类型数合并成一个int型数
 214   1         
 215   1         p=(unsigned char *)&ADC_value;
 216   1         ADCCON2=Channel;
 217   1       //  Delay(100);
 218   1         SCONV=1;
 219   1         while (SCONV)
 220   1               {       }
 221   1         SCONV=1;
 222   1         while (SCONV)
 223   1               {       }
 224   1         variable=0x0F&ADCDATAH;              //屏蔽ADC输入的通道标识符号
 225   1         *p=variable;
 226   1          p++;
 227   1         *p=ADCDATAL;
 228   1         
 229   1              //Serial_Port_Trans(ADC_value);
 230   1          return(ADC_value);
 231   1        }
 232          
 233          void Put_ABS(uchar DA0_H,uchar DA0_L)
 234          {
 235   1         
 236   1         DACCON=0x1F;
 237   1         DAC0H=DA0_H;
 238   1         DAC0L=DA0_L;

⌨️ 快捷键说明

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