📄 dinosaur.lst
字号:
C51 COMPILER V6.21 DINOSAUR 03/28/2006 17:44:39 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 //#include <reg52.h>
30
31
32 // ------ Private data type declarations ---------------------------
33 // Possible system states
34 typedef
35 enum {SLEEPING, WAKING, GROWLING, ATTACKING} eDinosaur_State;
36
37 // ------ Private function prototypes ------------------------------
38 void DINOSAUR_Perform_Sleep_Movements(void);
39 void DINOSAUR_Perform_Waking_Movements(void);
40 void DINOSAUR_Growl(void);
41 void DINOSAUR_Perform_Attack_Movements(void);
42
43 // ------ Private constants ----------------------------------------
44 // Times in each of the (four) possible states
45 // (Times are in seconds)
46 #define SLEEPING_DURATION 255
47 #define WAKING_DURATION 60
48 #define GROWLING_DURATION 40
49 #define ATTACKING_DURATION 120
50
51 // ------ Private variables ----------------------------------------
52 // The current state of the system
53 static eDinosaur_State Dinosaur_state_G;
54
55 // The time in the state
C51 COMPILER V6.21 DINOSAUR 03/28/2006 17:44:39 PAGE 2
56 static tByte Time_in_state_G;
57
58 // Used by sEOS
59 static tByte Call_count_G = 0;
60
61 /*------------------------------------------------------------------*-
62
63 DINOSAUR_Init()
64
65 Prepare for the dinosaur activity.
66
67 -*------------------------------------------------------------------*/
68 void DINOSAUR_Init(void)
69 {
70 1 // Initial dinosaur state
71 1 Dinosaur_state_G = SLEEPING;
72 1 }
73
74
75 /*------------------------------------------------------------------*-
76
77 DINOSAUR_Update()
78
79 Must be called once per second.
80
81 -*------------------------------------------------------------------*/
82 void DINOSAUR_Update(void)
83 {
84 1 switch (Dinosaur_state_G)
85 1 {
86 2 case SLEEPING:
87 2 {
88 3 // Call relevant function
89 3 DINOSAUR_Perform_Sleep_Movements();
90 3
91 3 if (++Time_in_state_G == SLEEPING_DURATION)
92 3 {
93 4 Dinosaur_state_G = WAKING;
94 4 Time_in_state_G = 0;
95 4 }
96 3
97 3 break;
98 3 }
99 2
100 2 case WAKING:
101 2 {
102 3 // Call relevant function
103 3 DINOSAUR_Perform_Waking_Movements();
104 3
105 3 if (++Time_in_state_G == WAKING_DURATION)
106 3 {
107 4 Dinosaur_state_G = GROWLING;
108 4 Time_in_state_G = 0;
109 4 }
110 3
111 3 break;
112 3 }
113 2
114 2 case GROWLING:
115 2 {
116 3 // Call relevant function
117 3 DINOSAUR_Growl();
C51 COMPILER V6.21 DINOSAUR 03/28/2006 17:44:39 PAGE 3
118 3
119 3 if (++Time_in_state_G == GROWLING_DURATION)
120 3 {
121 4 Dinosaur_state_G = ATTACKING;
122 4 Time_in_state_G = 0;
123 4 }
124 3
125 3 break;
126 3 }
127 2
128 2 case ATTACKING:
129 2 {
130 3 // Call relevant function
131 3 DINOSAUR_Perform_Attack_Movements();
132 3
133 3 if (++Time_in_state_G == ATTACKING_DURATION)
134 3 {
135 4 Dinosaur_state_G = SLEEPING;
136 4 Time_in_state_G = 0;
137 4 }
138 3
139 3 break;
140 3 }
141 2 }
142 1 }
143
144 /*------------------------------------------------------------------*/
145 void DINOSAUR_Perform_Sleep_Movements(void)
146 {
147 1 // Demo only...
148 1 P1 = (tByte) Dinosaur_state_G;//change data type
149 1 P2 = Time_in_state_G;
150 1
151 1
152 1 }
153
154
155 /*------------------------------------------------------------------*/
156 void DINOSAUR_Perform_Waking_Movements(void)
157 {
158 1 // Demo only...
159 1 P1 = (tByte) Dinosaur_state_G;
160 1 P2 = Time_in_state_G;
161 1 }
162
163 /*------------------------------------------------------------------*/
164 void DINOSAUR_Growl(void)
165 {
166 1 // Demo only...
167 1 P1 = (tByte) Dinosaur_state_G;
168 1 P2 = Time_in_state_G;
169 1 }
170
171 /*------------------------------------------------------------------*/
172 void DINOSAUR_Perform_Attack_Movements(void)
173 {
174 1 // Demo only...
175 1 P1 = (tByte) Dinosaur_state_G;
176 1 P2 = Time_in_state_G;
177 1 }
178
179 /*------------------------------------------------------------------*-
C51 COMPILER V6.21 DINOSAUR 03/28/2006 17:44:39 PAGE 4
180 ---- END OF FILE -------------------------------------------------
181 -*------------------------------------------------------------------*/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 113 ----
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 + -