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