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

📄 main.lst

📁 基于陀螺仪原理的惯性导航程序 用于测量量角速度
💻 LST
📖 第 1 页 / 共 4 页
字号:
ARM COMPILER V2.53,  main                                                                  22/09/07  23:08:04  PAGE 1   


ARM COMPILER V2.53, COMPILATION OF MODULE main
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Keil\ARM\BIN\CA.exe main.c ARM BROWSE DEBUG TABS(4) 

stmt  level    source

    1          /**********************************************************************************************
    2          main.c file
    3          作者:lig
    4          建立日期:2006-4-25
    5          修改日期:2006-4-25
    6          版本:V1.0
    7          **********************************************************************************************/
    8          
    9          
   10          #include <ADuC7020.H>
   11          #include "my_type.h"
   12          #include "LED.H"
   13          #include "interrupt.h"
   14          #include "Timer.h"
   15          #include "UART.H"
   16          #include "ADC.h"
   17          #include "others.h"
   18          #include "math.h"
   19          #include "slave.h"
   20          
   21          
   22          
   23          /*********************************************************************************************/
   24          ////////////////////////////////////////////////
   25          extern  uint8 pdata;
   26          extern  uint8 pmax;
   27          extern  uint8 pmin;
   28          extern  uint16 datas[6];
   29          ////////////////////////////
   30          uint16  AD_value[3];      //最近的3次AD采样值
   31          
   32          uint16  A_value[2];
   33          uint16  A_S_value[2][32];
   34          
   35          sint32  Z_w_value;
   36          double  Z_w_result;  //固定坐标系下角度
   37          uint8   temp1;
   38          uint16 count1=0;//test
   39          
   40          unsigned char Z_Hbit,Z_Lbit,Z_Sbit;//Z 的高位 低位 符号位
   41          int ZERO_V=4523; //若度数向下飘,增大ZERO_V
   42          unsigned char zus=0;
   43          unsigned int x,z_time=0;
   44          sint32 z_temp,z_temp1;
   45          ////////////////////////////////////////////////
   46          void demarcate(unsigned char flag_demarcate)
   47          {
   48   1          unsigned char z_i = 4,z_j = 5;
   49   1      //  sint32        z_max_error[11],z_w_value_min,z_w_value_max;
   50   1      
   51   1          if(!flag_demarcate)
   52   1          {
   53   2              x = 0;
   54   2          }
   55   1          else
   56   1          {
   57   2              x = 51;
   58   2          }
   59   1          z_temp = 0;
ARM COMPILER V2.53,  main                                                                  22/09/07  23:08:04  PAGE 2   

   60   1          zus=0;
   61   1          z_time=0;
   62   1          count1=0;
   63   1          temp1=0;
   64   1          do
   65   1          {
   66   2              do
   67   2              {
   68   3                  if(zus)
   69   3                 {
   70   4                      z_temp=z_temp+Z_w_value ;   
   71   4                      z_time++;
   72   4                      zus = 0;        
   73   4                  }
   74   3      
   75   3      
   76   3      
   77   3              }while(z_time<z_i);
   78   2      
   79   2              z_temp=z_temp/z_i;
   80   2              if(x<50)
   81   2              {
   82   3                  ZERO_V=ZERO_V-(int)((z_temp1-z_temp)/z_j);
   83   3              }
   84   2              else
   85   2              {
   86   3                  if((z_temp-30)>z_temp1)
   87   3                  {
   88   4                      ZERO_V++;
   89   4                  }
   90   3                  if((z_temp+30)<z_temp1)
   91   3                  {
   92   4                      ZERO_V--;
   93   4                  }
   94   3              }
   95   2              z_temp1 = z_temp;
   96   2              z_temp = 0;
   97   2              z_time = 0; 
   98   2              x++;
   99   2      //          print_Z_w();
  100   2              if(x>30)
  101   2              {   
  102   3                  z_i=7;
  103   3                  z_j=30;
  104   3              }
  105   2              if(x>50)
  106   2              {
  107   3                  z_i=150;
  108   3              }
  109   2      
  110   2          }
  111   1          while(x<(57+6*flag_demarcate))  ;
  112   1          
  113   1      
  114   1      
  115   1      }
  116          
  117          void SysClkInit(void)
  118          {
  119   1           PLLKEY1=0xAA;
  120   1           PLLCON=0x01;   //PLL配置  
  121   1           PLLKEY2=0x55;
  122   1           POWKEY1=0x01;
  123   1           POWCON=0x00;  //CPU时钟配置为41.78MHz
  124   1           POWKEY2=0xF4;
  125   1      // while(!(PLLSTA & 0x01));
ARM COMPILER V2.53,  main                                                                  22/09/07  23:08:04  PAGE 3   

  126   1      }
  127          
  128          ///////////////////////////////////////////////////////////////////////////////////////////////
  129          
  130          
  131          /*********************************************************************************************/
  132          void FIQ_Handler(void) __fiq   //FIQ中断服务程序
  133          { 
  134   1          int i=0;
  135   1          WatchDog();
  136   1      
  137   1          if(FIQSTA & TIMER0)    //读取FIQ中断状态,判断FIQ中断源
  138   1          {                        //Timer0中断      1/128秒
  139   2              T0CLRI=0;                //清Timer0中断
  140   2              AD_value[0]=AD_value[1];
  141   2              AD_value[1]=AD_value[2];
  142   2      
  143   2              AD_value[2]=read_ADC(2); //根据通道号读ADC的值
  144   2              AD_value[2]=szlb(AD_value[2]);  //滤波
  145   2              WatchDog();
  146   2      ///////////////////////////////////////积分//////////////////////////////////////////////////////
  147   2      
  148   2              if(count1==3)                                                                                    
  149   2              {  
  150   3                 Z_w_value=Z_w_value+(AD_value[2]+AD_value[0]-ZERO_V);//3310             //注意RS150 零点不一定是2.5V
  151   3          //     Z_w_result=(Z_w_value>>8)*0.122;   //变换为度    2.5V*1000/(5mV*4096)  RS300 clockwise 为正  
  152   3          //     Z_w_result=Z_w_value*0.00095/2.0;       //0.122/128                     // RS300
  153   3                 Z_w_result=-Z_w_value*0.00152;   //19-38 ->128Hz //  152->32Hz        2.5*1000/(128*2*12.5mv*4096)  RS150      
             - du
  154   3               count1=0;
  155   3               zus++;
  156   3               }
  157   2              else
  158   2               {count1++;}
  159   2      
  160   2          return;
  161   2          }
  162   1          if(FIQSTA & UART)    
  163   1          {   
  164   2      /*     temp1=COMRX;
  165   2             if(temp1=='o')
  166   2             {
  167   2             send_a_byte('o');
  168   2             }
  169   2             else{send_a_byte('a');} 
  170   2             */
  171   2             ON_LED42();
  172   2             UART_R_ISR();
  173   2             return;
  174   2           }
  175   1          if(FIQSTA & TIMER3)    //读取IRQ中断状态,判断IRQ中断源
  176   1            {                        //Timer3中断
  177   2             double temp;
  178   2             temp=Z_w_result;       // Watchdog interrupt allows saving...
  179   2                                     //... data before reset if necessary
  180   2             T3CLRI=0;
  181   2             T3LD = 0x1000;       // 0x1000/32768 = 125ms
  182   2          
  183   2             RSTSTA = 0x4;            // Software reset 
  184   2             Z_w_result=temp;
  185   2             return;
  186   2            }
  187   1        
  188   1      }
  189          ///////////////////////////////////////////////////////////////////////////////////////////////
  190          
ARM COMPILER V2.53,  main                                                                  22/09/07  23:08:04  PAGE 4   

  191          
  192          union 
  193          {
  194           uint32 TimeData;
  195           time_type Time;
  196          }RealTime;
  197           
  198           
  199          void main(void)
  200          {
  201   1      
  202   1           uint8 i,j;
  203   1          ///////////////数据初始化/////////////////////////
  204   1           uint16  temp;
  205   1           Z_COMMUNI_INIT();
  206   1      //   Z_COMMUNI_INIT
  207   1      
  208   1           pdata=0;
  209   1           pmax=0;
  210   1           pmin=0;
  211   1           for(i=0;i<6;i++)
  212   1             {datas[i]=1927;}
  213   1           for(i=0;i<3;i++)
  214   1             { AD_value[i]=1927; }
  215   1           
  216   1            Z_w_value=-90/0.00152;  
  217   1            Z_w_result=0;  //固定坐标系下位移
  218   1            temp1=0;
  219   1            z_temp= Z_w_value;
  220   1            ////////////////////
  221   1             A_value[0]=A_value[1]= 2096;
  222   1             for(i=0;i<2;i++)
  223   1                for(j=0;j<30;j++)
  224   1                   {A_S_value[i][j]= 2096;}
  225   1            ////////////////////
  226   1          ////////////////////////////////////////////////////
  227   1           SysClkInit();
  228   1            EN_TXD();
  229   1            EN_LED42();
  230   1            OFF_TXD();
  231   1            OFF_LED42();
  232   1           cls();
  233   1           ADC_init();
  234   1          
  235   1           WatchDog();
  236   1      
  237   1           Timer0Init();
  238   1           Timer3Init();
  239   1           UART_init();
  240   1           
  241   1      //   init();     
  242   1           WatchDog();
  243   1            print_Z_w();
  244   1      //   send_a_byte('b');
  245   1      //   send_a_byte('c');
  246   1      //   send_a_byte('d');
  247   1       ON_LED42();
  248   1      zus=0;
  249   1      
  250   1      //ON_TXD();
  251   1      //while(1)
  252   1      //{
  253   1      //Z_TXD(0xdd);
  254   1      //}
  255   1      //自动标定
  256   1      demarcate(0);
ARM COMPILER V2.53,  main                                                                  22/09/07  23:08:04  PAGE 5   

  257   1           
  258   1      //Delay_X_ms(1000);
  259   1        
  260   1       z_time = 0;
  261   1      
  262   1      
  263   1      
  264   1           Z_w_value=-90/0.00152; 
  265   1           ON_LED42();
  266   1      //自动标定完后闪烁  
  267   1           zus=0;
  268   1         do{
  269   2               ON_LED42();
  270   2               for(z_time=0;z_time<65000;z_time++)
  271   2               {
  272   3               ;
  273   3               }
  274   2               OFF_LED42();
  275   2               for(z_time=0;z_time<65000;z_time++)
  276   2               {
  277   3               ;
  278   3               }
  279   2               zus++;
  280   2           }while(zus<30);
  281   1      //   ON_TXD();
  282   1      //     print_Z_w();
  283   1       //***********************************
  284   1       //  Z_COMMUNI_INIT();
  285   1      //   while(1);
  286   1           while(1)
  287   1           {
  288   2      
  289   2            //  ON_TXD();
  290   2              
  291   2      /*       if (z_temp>Z_w_value)
  292   2                {
  293   2                   ZERO_V--;
  294   2                }
  295   2                else
  296   2                {
  297   2                   ZERO_V++;
  298   2                }
  299   2                z_temp=Z_w_value ;
  300   2              
  301   2       */
  302   2              z_flag_newins = Z_GETYOU();
  303   2              if(z_flag_newins)   //                              //接收中断,处理

⌨️ 快捷键说明

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