?? anglesensor.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 + -