📄 dinosaur.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 + -