?? main.lst
字號:
222 1 IAP_CONTR = 0x80; //允許ISP/IAP操作
223 1 read_sensors(ad_datas_check);
224 1
225 1 IAP_ADDRL = 0;
226 1 IAP_CMD = 0x03; //擦除flash
227 1 IAP_TRIG = 0x5A;
228 1 IAP_TRIG = 0xA5; //啟動IAP操作
229 1 _nop_();
230 1
231 1 IAP_CMD = 0x10; //寫flash
232 1
233 1 for (i = 0; i < 8; i++) {
234 2 IAP_ADDRL = i;
235 2 IAP_DATA = ad_datas_check[i];
236 2 //com_putchar(IAP_DATA);
237 2 crc += ad_datas_check[i];
238 2 IAP_CMD = 0x02; //寫flash
239 2 IAP_TRIG = 0x5A;
240 2 IAP_TRIG = 0xA5; //啟動IAP操作
241 2 _nop_();
C51 COMPILER V7.50 MAIN 11/10/2010 15:11:26 PAGE 5
242 2 }
243 1
244 1 IAP_ADDRL = 8;
245 1 IAP_DATA = crc;
246 1 IAP_TRIG = 0x5A;
247 1 IAP_TRIG = 0xA5; //啟動IAP操作
248 1 _nop_();
249 1
250 1
251 1 IAP_CONTR = 0; //禁止IAP,防止誤操作
252 1 IAP_CMD = 0;
253 1 IAP_TRIG = 0;
254 1 IAP_ADDRH = 0xff;
255 1 IAP_ADDRL = 0xff;
256 1 }
257
258 void time0_isr() interrupt 1
259 {
260 1 tick++;
261 1 pwm38k++;
262 1 if (pwm38k == 0)
263 1 {
264 2 front_signal = 0;
265 2 back_signal = 0;
266 2 left_signal = 0;
267 2 right_signal = 0;
268 2 } else if (pwm38k == TEST_PERIOD)
269 1 {
270 2 //com_putchar(check);
271 2 if (front_signal >= IR_VALID_THROLD)
272 2 {
273 3 front_obj = 1;
274 3 } else
275 2 front_obj = 0;
276 2
277 2 if (back_signal >= IR_VALID_THROLD)
278 2 {
279 3 back_obj = 1;
280 3 } else
281 2 back_obj = 0;
282 2
283 2 if (left_signal >= IR_VALID_THROLD)
284 2 {
285 3 left_obj = 1;
286 3 } else
287 2 left_obj = 0;
288 2
289 2 if (right_signal >= IR_VALID_THROLD)
290 2 {
291 3 right_obj = 1;
292 3 } else
293 2 right_obj = 0;
294 2
295 2 pwm38k = 0xFFFF;
296 2 return;
297 2 }
298 1
299 1 if (pwm38k == 0)
300 1 {
301 2 IR_OUT = 1;
302 2 test = 0;
303 2 } else if (pwm38k == IR_SINGAL_PERIOD)
C51 COMPILER V7.50 MAIN 11/10/2010 15:11:26 PAGE 6
304 1 {
305 2 IR_OUT = 0;
306 2 }
307 1
308 1 // if (!test && !IR_FRONT) //調試接收管的延遲
309 1 // {
310 1 // test = 1;
311 1 // com_putchar(tick);
312 1 // }
313 1
314 1 if (pwm38k >= IR_SINGAL_DELAY && pwm38k < IR_SINGAL_DELAY + IR_SINGAL_PERIOD)
315 1 {
316 2 if (!IR_FRONT)
317 2 front_signal++;
318 2 else
319 2 {
320 3 if (front_signal)
321 3 front_signal--;
322 3 }
323 2
324 2 if (!IR_BACK)
325 2 back_signal++;
326 2 else
327 2 {
328 3 if (back_signal)
329 3 back_signal--;
330 3 }
331 2
332 2 if (!IR_LEFT)
333 2 left_signal++;
334 2 else
335 2 {
336 3 if (left_signal)
337 3 left_signal--;
338 3 }
339 2
340 2 if (!IR_RIGHT)
341 2 right_signal++;
342 2 else
343 2 {
344 3 if (right_signal)
345 3 right_signal--;
346 3 }
347 2 }
348 1
349 1 if (pwm_moto == 0)
350 1 {
351 2 if (pwm_moto_left > 0)
352 2 {
353 3 if (moto_left_forward)
354 3 MOTO_IN_A2 = 1;
355 3 else
356 3 MOTO_IN_A1 = 1;
357 3 } else
358 2 {
359 3 MOTO_IN_A1 = 0;
360 3 MOTO_IN_A2 = 0;
361 3 }
362 2 if (pwm_moto_right > 0)
363 2 {
364 3 if (moto_right_forward)
365 3 MOTO_IN_B2 = 1;
C51 COMPILER V7.50 MAIN 11/10/2010 15:11:26 PAGE 7
366 3 else
367 3 MOTO_IN_B1 = 1;
368 3 } else
369 2 {
370 3 MOTO_IN_B1 = 0;
371 3 MOTO_IN_B2 = 0;
372 3 }
373 2 } else
374 1 {
375 2 if (pwm_moto == pwm_moto_left)
376 2 {
377 3 MOTO_IN_A1 = 0;
378 3 MOTO_IN_A2 = 0;
379 3 }
380 2 if (pwm_moto == pwm_moto_right)
381 2 {
382 3 MOTO_IN_B1 = 0;
383 3 MOTO_IN_B2 = 0;
384 3 }
385 2 }
386 1 pwm_moto++;
387 1 }
388
389 void time0_initialize(void)
390 {
391 1 TMOD &= ~0x0F; /* clear timer 0 mode bits */
392 1 TMOD |= 0x02; /* put timer 0 into MODE 2 */
393 1 AUXR |= 0x80; // timer0工作在1T模式
394 1 TH0 = 256 - XTAL / 2L / 38400L; // 256 - XTAL/T1_12/f, f=輸出時鐘頻率
395 1 TL0 = 0x0;
396 1
397 1 WAKE_CLKO = 0x01; // T0在P3.4上輸出時鐘.
398 1
399 1 PT0 = 1; /* 時鐘0中斷高優先級 */
400 1 TR0 = 1; //
401 1 ET0 = 1;
402 1 }
403
404 static void wakeup (void) interrupt 2
405 {
406 1
407 1 }
408
409
410 static void pca_isr (void) interrupt 6
411 {
412 1 unsigned char i, j;
413 1
414 1 if (CCF0) {
415 2 CCF0 = 0; //清PCA1中斷標志
416 2 LED1 = IR_BACK;
417 2 if (!pca_int_count) { //第一次收到信號
418 3 if (!IR_BACK) {
419 4 ccap1 = pca_tick * 256 + CCAP0H;
420 4 pca_int_count++;
421 4 }
422 3 } else { //已經收到一些信號
423 3 period = pca_tick * 256 + CCAP0H - ccap1;
424 3 ccap1 = pca_tick * 256 + CCAP0H;
425 3 //com_putchar(period / 256);
426 3 //com_putchar(period % 256);
427 3
C51 COMPILER V7.50 MAIN 11/10/2010 15:11:26 PAGE 8
428 3 if (pca_int_count == 1) {
429 4 if (period < MIN9MS || period > MAX9MS) { //9ms
430 5 pca_int_count = 0;
431 5 frame_dog = 0;
432 5 } else
433 4 pca_int_count++;
434 4 } else if (pca_int_count == 2) {
435 4 if (period > MIN225MS && period < MAX225MS) { //2.25ms
436 5 pca_int_total = 3;
437 5 pca_int_count++;
438 5 } else if (period > MIN45MS && period < MAX45MS) { //4.5ms
439 5 pca_int_total = 67;
440 5 pca_int_count++;
441 5 } else {
442 5 pca_int_count = 0;
443 5 frame_dog = 0;
444 5 }
445 4 } else {
446 4 if (IR_BACK) {
447 5 if (period > MIN056MS && period < MAX056MS) { //0.56ms
448 6 if (pca_int_count >= pca_int_total) { //幀接收完畢,下面進行有效性分析.
449 7 if (pca_int_total == 67) { //完整信號,含有引導信號,設備碼8bit,設備反碼8bit,命
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -