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

📄 dinosaur.lst

📁 Embedded C 这本书的范例光碟程式
💻 LST
字号:
C51 COMPILER V6.21  DINOSAUR                                                               01/23/2002 17:58:29 PAGE 1   


C51 COMPILER V6.21, COMPILATION OF MODULE DINOSAUR
OBJECT MODULE PLACED IN Dinosaur.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE Dinosaur.c OPTIMIZE(6,SPEED) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*------------------------------------------------------------------*-
   2          
   3             Dinosaur.C (v1.00)
   4          
   5            ------------------------------------------------------------------
   6             
   7             Demonstration of multi-state (timed) architecture:
   8             Dinosaur control system.
   9          
  10             COPYRIGHT
  11             ---------
  12          
  13             This code is associated with the book:
  14          
  15             EMBEDDED C by Michael J. Pont 
  16             [Pearson Education, 2002: ISBN: 0-201-79523-X].
  17          
  18             This code is copyright (c) 2001 by Michael J. Pont.
  19           
  20             See book for copyright details and other information.
  21          
  22          -*------------------------------------------------------------------*/
  23          
  24          #include "Main.h"
  25          #include "Port.h"
  26          
  27          #include "Dinosaur.h"
  28          
  29          // ------ Private data type declarations ---------------------------
  30          // Possible system states
  31          typedef 
  32          enum {SLEEPING, WAKING, GROWLING, ATTACKING} eDinosaur_State;
  33          
  34          // ------ Private function prototypes ------------------------------
  35          void DINOSAUR_Perform_Sleep_Movements(void);
  36          void DINOSAUR_Perform_Waking_Movements(void);
  37          void DINOSAUR_Growl(void);
  38          void DINOSAUR_Perform_Attack_Movements(void);
  39          
  40          // ------ Private constants ----------------------------------------
  41          // Times in each of the (four) possible states
  42          // (Times are in seconds)
  43          #define SLEEPING_DURATION 255
  44          #define WAKING_DURATION 60
  45          #define GROWLING_DURATION 40 
  46          #define ATTACKING_DURATION 120
  47          
  48          // ------ Private variables ----------------------------------------
  49          // The current state of the system
  50          static eDinosaur_State Dinosaur_state_G;
  51          
  52          // The time in the state
  53          static tByte Time_in_state_G;
  54          
  55          // Used by sEOS
C51 COMPILER V6.21  DINOSAUR                                                               01/23/2002 17:58:29 PAGE 2   

  56          static tByte Call_count_G = 0;
  57          
  58          /*------------------------------------------------------------------*-
  59          
  60            DINOSAUR_Init()
  61          
  62            Prepare for the dinosaur activity.
  63          
  64          -*------------------------------------------------------------------*/
  65          void DINOSAUR_Init(void)
  66             {
  67   1         // Initial dinosaur state
  68   1         Dinosaur_state_G = SLEEPING;  
  69   1         }
  70          
  71          
  72          /*------------------------------------------------------------------*-
  73          
  74            DINOSAUR_Update()
  75          
  76            Must be called once per second.
  77          
  78          -*------------------------------------------------------------------*/
  79          void DINOSAUR_Update(void)
  80             {
  81   1         switch (Dinosaur_state_G)
  82   1            {
  83   2            case SLEEPING: 
  84   2               {
  85   3                       // Call relevant function
  86   3                       DINOSAUR_Perform_Sleep_Movements();
  87   3      
  88   3               if (++Time_in_state_G == SLEEPING_DURATION)
  89   3                  {
  90   4                  Dinosaur_state_G = WAKING;
  91   4                  Time_in_state_G = 0;
  92   4                  }
  93   3      
  94   3               break;
  95   3               }
  96   2      
  97   2            case WAKING: 
  98   2               {
  99   3                       // Call relevant function
 100   3                       DINOSAUR_Perform_Waking_Movements();
 101   3      
 102   3               if (++Time_in_state_G == WAKING_DURATION)
 103   3                  {
 104   4                  Dinosaur_state_G = GROWLING;
 105   4                  Time_in_state_G = 0;
 106   4                  }
 107   3      
 108   3               break;
 109   3               }
 110   2      
 111   2            case GROWLING: 
 112   2               {
 113   3                       // Call relevant function
 114   3                       DINOSAUR_Growl();
 115   3      
 116   3               if (++Time_in_state_G == GROWLING_DURATION)
 117   3                  {
C51 COMPILER V6.21  DINOSAUR                                                               01/23/2002 17:58:29 PAGE 3   

 118   4                  Dinosaur_state_G = ATTACKING;
 119   4                  Time_in_state_G = 0;
 120   4                  }
 121   3      
 122   3               break;
 123   3               }
 124   2      
 125   2            case ATTACKING: 
 126   2               {
 127   3                       // Call relevant function
 128   3                       DINOSAUR_Perform_Attack_Movements();
 129   3      
 130   3               if (++Time_in_state_G == ATTACKING_DURATION)
 131   3                  {
 132   4                  Dinosaur_state_G = SLEEPING;
 133   4                  Time_in_state_G = 0;
 134   4                  }
 135   3      
 136   3               break;
 137   3               }
 138   2            }
 139   1         }
 140          
 141          /*------------------------------------------------------------------*/
 142          void DINOSAUR_Perform_Sleep_Movements(void)
 143             {
 144   1         // Demo only...
 145   1         P1 = (tByte) Dinosaur_state_G;
 146   1         P2 = Time_in_state_G; 
 147   1         }
 148          
 149          /*------------------------------------------------------------------*/
 150          void DINOSAUR_Perform_Waking_Movements(void)
 151             {
 152   1         // Demo only...
 153   1         P1 = (tByte) Dinosaur_state_G;
 154   1         P2 = Time_in_state_G; 
 155   1         }
 156          
 157          /*------------------------------------------------------------------*/
 158          void DINOSAUR_Growl(void)
 159             {
 160   1         // Demo only...
 161   1         P1 = (tByte) Dinosaur_state_G;
 162   1         P2 = Time_in_state_G; 
 163   1         }
 164          
 165          /*------------------------------------------------------------------*/
 166          void DINOSAUR_Perform_Attack_Movements(void)
 167             {
 168   1         // Demo only...
 169   1         P1 = (tByte) Dinosaur_state_G;
 170   1         P2 = Time_in_state_G; 
 171   1         }
 172          
 173          /*------------------------------------------------------------------*-
 174            ---- END OF FILE -------------------------------------------------
 175          -*------------------------------------------------------------------*/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    113    ----
C51 COMPILER V6.21  DINOSAUR                                                               01/23/2002 17:58:29 PAGE 4   

   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3    ----
   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 + -