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

📄 anglesensor.lst

📁 一个通过方向判别芯片进行角度计算的程序
💻 LST
字号:
C51 COMPILER V8.05a   ANGLESENSOR                                                          02/04/2007 13:32:01 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE ANGLESENSOR
OBJECT MODULE PLACED IN AngleSensor.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE AngleSensor.C ROM(SMALL) DEBUG OBJECTEXTEND

line level    source

   1          
   2          /********************************************************************************************************
   3          **
   4          **                                                             AngleSensor
   5          **
   6          **                                                V2.0
   7          **
   8          **--------------文件信息--------------------------------------------------------------------------------
   9          **文   件   名: AngleSensor.c
  10          **创   建   人: 吕江波
  11          **最后修改日期: 2006年12月25日
  12          **描        述: 角度传感器源代码。
  13          **
  14          **--------------历史版本信息----------------------------------------------------------------------------
  15          ** 创建人: 吕江波
  16          ** 版  本: V1.0
  17          ** 日 期: 2006年11月2日
  18          ** 描 述: 配套助推机芯(I/O中断控制)
  19          **
  20          **------------------------------------------------------------------------------------------------------
  21          ** 创建人: 吕江波
  22          ** 版  本: V2.0
  23          ** 日 期: 2006年12月22日
  24          ** 描 述: 配套电动机芯(I/O中断控制)
  25          **
  26          **------------------------------------------------------------------------------------------------------
  27          ********************************************************************************************************/
  28          
  29          #include "config.h"
  30          
  31          #include <STC12C2052AD.H>
  32          #include <INTRINS.H>
  33          
  34          /********** Port define ***********/
  35          
  36                  #define DIR     P3_7
  37          
  38                  #define NUM2    P1_7    
  39                  #define NUM1    P1_6
  40                  #define NUM0    P1_5
  41                  #define IRQ     P1_4    
  42          
  43                  #define LEFT    0x55
  44                  #define RIGHT   0xaa
  45                  #define RESET   0x5a
  46                  
  47                  #define STATE1  2
  48                  #define STATE2  3
  49                  #define STATE3  10
  50          
  51                  #define OTHER   4
  52                  #define ZERO    0
  53                  #define ERROR1  2
  54                  #define ERROR2  3
  55                  #define WARN1   254
C51 COMPILER V8.05a   ANGLESENSOR                                                          02/04/2007 13:32:01 PAGE 2   

  56                  #define WARN2   253
  57          
  58          /********** Common variable **********/
  59          
  60                  uint8 OS_Q_MEM_SEL angleSet [ 32 ] ;
  61                  uint8 OS_Q_MEM_SEL angleOut [ 32 ] ; 
  62          
  63          /*************************************/
  64          
  65          void AppInit ( void ) ;
  66          
  67          void AngleSet_task ( void ) ;
  68          void AngleOut_task ( void ) ;
  69          
  70          void main(void)
  71          {
  72   1          OSInit() ;
  73   1      
  74   1              OSQCreate ( angleSet , 32 ) ;
  75   1              OSQCreate ( angleOut , 32 ) ;   
  76   1      
  77   1          OSTaskCreate ( AngleSet_task , NULL , 0 ) ;
  78   1              OSTaskCreate ( AngleOut_task , NULL     , 1 ) ;
  79   1      
  80   1              AppInit () ;
  81   1      
  82   1          while(1)
  83   1              {
  84   2                      WDT_CONTR |= 0x10 ;
  85   2              }
  86   1      }
  87          
  88          //ID : 0
  89          
  90          void AngleSet_task( void ) 
  91          {
  92   1              static uint8 angleValue = 0 ;
  93   1              uint8 setData ;
  94   1      
  95   1              while (1)
  96   1          {
  97   2                      OSQPend ( &setData , angleSet , 0 ) ;
  98   2      
  99   2                      switch ( setData )
 100   2                      {
 101   3                              case LEFT :
 102   3      
 103   3                                      angleValue++ ;
 104   3                                      break ;
 105   3      
 106   3                              case RIGHT :
 107   3      
 108   3                                      angleValue-- ;
 109   3                                      break ;
 110   3                              
 111   3                              case RESET :
 112   3      
 113   3                                      angleValue = 0 ;
 114   3                                      OSQPost ( angleOut , ZERO ) ;
 115   3                                      break ;
 116   3      
 117   3                              default :
C51 COMPILER V8.05a   ANGLESENSOR                                                          02/04/2007 13:32:01 PAGE 3   

 118   3                                      
 119   3                                      continue ;
 120   3                                      break ;
 121   3                      }
 122   2                      
 123   2                      switch ( angleValue )
 124   2                      {
 125   3      /*
 126   3                              case ZERO        :
 127   3      
 128   3                                      OSQPost ( angleOut , ZERO ) ;
 129   3                                      break ;
 130   3      */
 131   3                              case STATE1 :
 132   3      
 133   3                                      OSQPost ( angleOut , STATE1 ) ;
 134   3                                      break ;
 135   3                              
 136   3                              case STATE2 :
 137   3      
 138   3                                      OSQPost ( angleOut , STATE2 ) ;
 139   3                                      break ;
 140   3                              
 141   3                              case STATE3 :
 142   3      
 143   3                                      OSQPost ( angleOut , STATE3 ) ;
 144   3                                      break ;
 145   3      
 146   3                              case WARN1 :
 147   3      
 148   3                                      OSQPost ( angleOut , WARN1 ) ;
 149   3                                      break ;
 150   3      
 151   3                              case WARN2 :
 152   3      
 153   3                                      OSQPost ( angleOut , WARN2 ) ;
 154   3                                      break ;
 155   3      
 156   3                              case OTHER :
 157   3      
 158   3                                      OSQPost ( angleOut , OTHER ) ;
 159   3                                      break ;
 160   3      
 161   3                              default :
 162   3                                      break ;
 163   3                      }                                       
 164   2          }
 165   1              
 166   1              return ; 
 167   1      }
 168          
 169          //ID : 1
 170          
 171          void AngleOut_task ( void )
 172          {
 173   1              uint8 outData ;
 174   1      
 175   1              while ( 1 )
 176   1              {
 177   2                      OSQPend ( &outData , angleOut , 0 ) ;
 178   2                      
 179   2                      switch ( outData )
C51 COMPILER V8.05a   ANGLESENSOR                                                          02/04/2007 13:32:01 PAGE 4   

 180   2                      {
 181   3                              case ZERO :
 182   3      
 183   3                                      NUM2 = 0 ; NUM1 = 0 ; NUM0 = 0 ;
 184   3                                      break ;
 185   3      
 186   3                              case STATE1 :
 187   3              
 188   3                                      NUM2 = 0 ; NUM1 = 0 ; NUM0 = 1 ;
 189   3                                      break ;
 190   3                              
 191   3                              case STATE2 :
 192   3      
 193   3                                      NUM2 = 0 ; NUM1 = 1 ; NUM0 = 0 ;
 194   3                                      break ;
 195   3      
 196   3                              case WARN1 :
 197   3      
 198   3                                      NUM2 = 0 ; NUM1 = 1 ; NUM0 = 1 ;
 199   3                                      break ;
 200   3      
 201   3                              case WARN2 :
 202   3      
 203   3                                      NUM2 = 1 ; NUM1 = 0 ; NUM0 = 0 ;
 204   3                                      break ;
 205   3      
 206   3                              case OTHER :
 207   3      
 208   3                                      NUM2 = 1 ; NUM1 = 0 ; NUM0 = 1 ;
 209   3                                      break ;
 210   3      
 211   3                              case STATE3 :
 212   3      
 213   3                                      NUM2 = 1 ; NUM1 = 1 ; NUM0 = 0 ;
 214   3                                      break ;
 215   3      
 216   3                              default :
 217   3                                      
 218   3                                      continue ;
 219   3                                      break ;
 220   3                      }
 221   2      
 222   2                      _nop_() ; _nop_() ; _nop_() ; _nop_() ; _nop_() ; _nop_() ;
 223   2                      IRQ = 0 ;               
 224   2                      _nop_() ; _nop_() ; _nop_() ; _nop_() ; _nop_() ; _nop_() ;
 225   2                      IRQ = 1 ;
 226   2              }
 227   1      
 228   1              return ;
 229   1      }                       
 230          
 231          /******** System initialize *********/
 232          
 233          void AppInit ( void )
 234          {
 235   1      /* ========== IO define =========== */
 236   1      
 237   1              P3M1 = 0x42 ; P3M0 = 0xBD ;
 238   1              P1M1 = 0xff ; P1M0 = 0x00 ;
 239   1      
 240   1              IRQ = 1 ;
 241   1              NUM2 = 0 ; NUM1 = 0 ; NUM0 = 0 ;
C51 COMPILER V8.05a   ANGLESENSOR                                                          02/04/2007 13:32:01 PAGE 5   

 242   1      
 243   1      /* ========== WDT define ========== */
 244   1      
 245   1              AUXR = 0x00 ;
 246   1      
 247   1      /* ========== SIO define ========== */
 248   1      
 249   1              SCON = 0x50 ;
 250   1              ES = 0 ;
 251   1      
 252   1      /* ========== INT define ========== */
 253   1      
 254   1              IT0 = 1 ; 
 255   1              EX0 = 1 ;
 256   1      
 257   1              IT1 = 1 ;
 258   1              EX1 = 1 ;
 259   1      
 260   1      /* ========= TIMER define ========= */
 261   1      
 262   1              TMOD = 0x21 ;
 263   1      
 264   1              TH1 = 0xfa ; TL1 = 0xfa ;
 265   1              TR1 = 1 ;
 266   1              ET1 = 0 ;
 267   1      
 268   1              TH0 = 0x70 ; TL0 = 0x00 ; 
 269   1              TR0 = 1;
 270   1              ET0 = 1;
 271   1      
 272   1      /* ======== GLOBAL define ========= */
 273   1              
 274   1              IPH = 0x05 ; IP = 0x03 ;
 275   1              EA = 1 ;
 276   1      
 277   1      /* ========== WDT define ========== */
 278   1      
 279   1              WDT_CONTR = 0x25 ;
 280   1              
 281   1              return ;
 282   1      }       
 283          
 284          /******** Interrupt server *********/
 285          
 286          #pragma disable
 287          void AngleChange ( void ) interrupt IE0_VECTOR
 288          {
 289   1          OS_INT_ENTER() ;
 290   1      
 291   1              //ISR
 292   1              
 293   1              if ( DIR == 1 ) 
 294   1                      OSQIntPost ( angleSet , LEFT ) ;
 295   1              else if ( DIR == 0 )
 296   1                      OSQIntPost ( angleSet , RIGHT ) ;
 297   1      
 298   1              OSIntExit() ;   
 299   1      
 300   1              return ;
 301   1      }
 302          
 303          #pragma disable
C51 COMPILER V8.05a   ANGLESENSOR                                                          02/04/2007 13:32:01 PAGE 6   

 304          void AngleReset ( void ) interrupt IE1_VECTOR
 305          {
 306   1          OS_INT_ENTER() ;
 307   1      
 308   1              //ISR
 309   1      
 310   1              OSQIntPost ( angleSet , RESET ) ;
 311   1      //      angleValue = 0 ;
 312   1      //      OSQIntPost ( angleOut , ZERO ) ;
 313   1      
 314   1              OSIntExit() ;   
 315   1      
 316   1              return ;
 317   1      }
 318          /*
 319          #pragma disable
 320          void ErrorISR_SIO ( void ) interrupt SIO_VECTOR
 321          {
 322                  _nop_() ;
 323                  _nop_() ;
 324                  
 325                  ES = 0 ;        
 326          
 327                  return ;
 328          }
 329          */
 330          /*
 331          #pragma disable
 332          void ErrorISR_T1 ( void ) interrupt TF1_VECTOR
 333          {
 334                  _nop_() ;
 335                  _nop_() ;
 336          
 337                  ET1 = 0 ;
 338          
 339                  return ;
 340          }
 341          */
 342          /********* Timer 0 reset **********/
 343          
 344          void UserTickTimer ( void ) 
 345          {
 346   1              TH0 = 0x70 ; TL0 = 0x00;        
 347   1      
 348   1              return ;
 349   1      }       
 350          
 351          /**************************************************************************************
 352                                                                                  End Of File
 353          **************************************************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    481    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       2
   IDATA SIZE       =     64    ----
   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 + -