Rev Author Line No. Line
503 kaklik 1 CCS PCM C Compiler, Version 3.221, 27853 18-VI-05 13:30
2  
3 Filename: D:\KAKLIK\programy\PIC_C\roboti\merkur\PIC16F88\MerkurU\tank.LST
4  
5 ROM used: 1441 words (35%)
6 Largest free fragment is 2048
7 RAM used: 27 (15%) at main() level
8 34 (19%) worst case
9 Stack: 4 worst case (3 in main + 1 for interrupts)
10  
11 *
12 0000: MOVLW 00
13 0001: MOVWF 0A
14 0002: GOTO 2D1
15 0003: NOP
16 0004: MOVWF 7F
17 0005: SWAPF 03,W
18 0006: CLRF 03
19 0007: MOVWF 21
20 0008: MOVF 7F,W
21 0009: MOVWF 20
22 000A: MOVF 0A,W
23 000B: MOVWF 28
24 000C: CLRF 0A
25 000D: SWAPF 20,F
26 000E: MOVF 04,W
27 000F: MOVWF 22
28 0010: MOVF 77,W
29 0011: MOVWF 23
30 0012: MOVF 78,W
31 0013: MOVWF 24
32 0014: MOVF 79,W
33 0015: MOVWF 25
34 0016: MOVF 7A,W
35 0017: MOVWF 26
36 0018: MOVF 7B,W
37 0019: MOVWF 27
38 001A: BCF 03.7
39 001B: BCF 03.5
40 001C: MOVLW 8C
41 001D: MOVWF 04
42 001E: BTFSS 00.1
43 001F: GOTO 022
44 0020: BTFSC 0C.1
45 0021: GOTO 035
46 0022: MOVF 22,W
47 0023: MOVWF 04
48 0024: MOVF 23,W
49 0025: MOVWF 77
50 0026: MOVF 24,W
51 0027: MOVWF 78
52 0028: MOVF 25,W
53 0029: MOVWF 79
54 002A: MOVF 26,W
55 002B: MOVWF 7A
56 002C: MOVF 27,W
57 002D: MOVWF 7B
58 002E: MOVF 28,W
59 002F: MOVWF 0A
60 0030: SWAPF 21,W
61 0031: MOVWF 03
62 0032: SWAPF 7F,F
63 0033: SWAPF 7F,W
64 0034: RETFIE
65 0035: BCF 0A.3
66 0036: GOTO 037
67 .................... // Program pro predvadeni schopnosti robota Merkur
68 .................... //------------------------------------------------
69 ....................
70 .................... #include "tank.h"
71 .................... #include <16F88.h>
72 .................... //////// Standard Header file for the PIC16F88 device ////////////////
73 .................... #device PIC16F88
74 .................... #list
75 ....................
76 .................... #device adc=8
77 .................... #fuses NOWDT,INTRC_IO, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, NOFCMEN, NOIESO
78 .................... #use delay(clock=4000000)
79 *
80 0042: MOVLW 12
81 0043: SUBWF 3C,F
82 0044: BTFSS 03.0
83 0045: GOTO 054
84 0046: MOVLW 3C
85 0047: MOVWF 04
86 0048: MOVLW FC
87 0049: ANDWF 00,F
88 004A: BCF 03.0
89 004B: RRF 00,F
90 004C: RRF 00,F
91 004D: MOVF 00,W
92 004E: BTFSC 03.2
93 004F: GOTO 054
94 0050: GOTO 052
95 0051: NOP
96 0052: DECFSZ 00,F
97 0053: GOTO 051
98 0054: RETLW 00
99 *
100 0073: MOVLW 37
101 0074: MOVWF 04
102 0075: MOVF 00,W
103 0076: BTFSC 03.2
104 0077: GOTO 087
105 0078: MOVLW 01
106 0079: MOVWF 78
107 007A: CLRF 77
108 007B: DECFSZ 77,F
109 007C: GOTO 07B
110 007D: DECFSZ 78,F
111 007E: GOTO 07A
112 007F: MOVLW 4A
113 0080: MOVWF 77
114 0081: DECFSZ 77,F
115 0082: GOTO 081
116 0083: NOP
117 0084: NOP
118 0085: DECFSZ 00,F
119 0086: GOTO 078
120 0087: RETLW 00
121 ....................
122 ....................
123 ....................
124 .................... unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru
125 .................... unsigned int8 line; // na ktere strane byla detekovana cara
126 .................... unsigned int8 speed; // rychlost zataceni
127 .................... unsigned int8 last; // kde byla cara, kdyz byly minule cidla mimo
128 .................... unsigned int8 rovinka; // pocitadlo pro zjisteni rovneho useku
129 .................... int cirkus; // pocitadlo, po kolika akcich se ma delat cirkus
130 .................... int1 BW; // urcuje, jestli je cara cerno/bila nebo
131 .................... // bilo/cerna (true = bila cara, cerny podklad)
132 ....................
133 .................... // Konstanty pro dynamiku pohybu
134 .................... #define T_DIRA 120 // po jakem case zataceni se detekuje dira
135 .................... #define FW_POMALU 170 // trochu mimo caru vnitrni pas
136 .................... #define FW_ZATACKA 200 // rychlost vnejsiho kola pri zataceni
137 .................... #define FW_STREDNE 190 // trochu mimo caru vnejsi pas
138 .................... #define COUVANI 750 // couvnuti zpet na caru, po detekci diry
139 .................... #define MAX_ROVINKA (255-FW_STREDNE)
140 .................... #define TRESHOLD 15 // rozhodovaci uroven komparatoru, 0xF = 0.75*Vdd
141 .................... #define BUMPER_TRESHOLD 128 // rozhodovaci uroven cidla na prekazku
142 ....................
143 .................... //motory //Napred vypnout potom zapnout!
144 .................... #define FR output_low(PIN_B5); output_high(PIN_B4) // Vpred
145 .................... #define FL output_low(PIN_B7); output_high(PIN_B6)
146 .................... #define BR output_low(PIN_B4); output_high(PIN_B5) // Vzad
147 .................... #define BL output_low(PIN_B6); output_high(PIN_B7)
148 .................... #define STOPR output_low(PIN_B4);output_low(PIN_B5) // Zastav
149 .................... #define STOPL output_low(PIN_B6);output_low(PIN_B7)
150 ....................
151 .................... #define L 0b10 // left
152 .................... #define R 0b01 // right
153 .................... #define S 0b11 // straight
154 ....................
155 .................... //cidla
156 .................... #define RSENSOR (BW != C2OUT) // Senzory na caru
157 .................... #define LSENSOR (BW != C1OUT)
158 .................... #define BUMPER sAN2 // Senzor na cihlu
159 ....................
160 .................... #define DIAG_SERVO PIN_B3 // Propojka pro diagnosticky mod
161 .................... #define DIAG_SENSORS PIN_B2 // Propojka pro diagnosticky mod
162 .................... #define BARVY PIN_B1 // Propojka pro nastaveni barvy cary
163 ....................
164 .................... #define SPEAKER PIN_B0 // vystup pro pipak
165 ....................
166 .................... #define LED1 PIN_A4 // LEDky
167 .................... #define LED2 PIN_A3
168 .................... #define LED3 PIN_A7
169 .................... #define LED4 PIN_A6
170 ....................
171 .................... // makro pro PWM
172 .................... #define GO(motor, direction, power) if(get_timer0()<=power) \
173 .................... {direction##motor;} else {stop##motor;}
174 ....................
175 .................... #int_TIMER2
176 .................... void TIMER2_isr() // obsluha zrychlovani
177 .................... {
178 .................... if (speed<255) speed++;
179 *
180 0037: INCFSZ 2B,W
181 0038: GOTO 03A
182 0039: GOTO 03B
183 003A: INCF 2B,F
184 .................... if (rovinka<MAX_ROVINKA) rovinka++;
185 003B: MOVF 2D,W
186 003C: SUBLW 40
187 003D: BTFSC 03.0
188 003E: INCF 2D,F
189 .................... }
190 ....................
191 .................... // Primitivni Pipani
192 003F: BCF 0C.1
193 0040: BCF 0A.3
194 0041: GOTO 022
195 .................... void beep(unsigned int16 period, unsigned int16 length)
196 .................... {
197 .................... unsigned int16 nn;
198 ....................
199 .................... for(nn=length; nn>0; nn--)
200 *
201 0055: MOVF 39,W
202 0056: MOVWF 3B
203 0057: MOVF 38,W
204 0058: MOVWF 3A
205 0059: MOVF 3A,F
206 005A: BTFSS 03.2
207 005B: GOTO 05F
208 005C: MOVF 3B,F
209 005D: BTFSC 03.2
210 005E: GOTO 072
211 .................... {
212 .................... output_high(SPEAKER);
213 005F: BSF 03.5
214 0060: BCF 06.0
215 0061: BCF 03.5
216 0062: BSF 06.0
217 .................... delay_us(period);
218 0063: MOVF 36,W
219 0064: MOVWF 3C
220 0065: CALL 042
221 .................... output_low(SPEAKER);
222 0066: BSF 03.5
223 0067: BCF 06.0
224 0068: BCF 03.5
225 0069: BCF 06.0
226 .................... delay_us(period);
227 006A: MOVF 36,W
228 006B: MOVWF 3C
229 006C: CALL 042
230 .................... }
231 006D: MOVF 3A,W
232 006E: BTFSC 03.2
233 006F: DECF 3B,F
234 0070: DECF 3A,F
235 0071: GOTO 059
236 .................... }
237 0072: RETLW 00
238 .................... /******************************************************************************/
239 .................... void diagnostika()
240 .................... {
241 .................... unsigned int16 n;
242 ....................
243 .................... while (input(DIAG_SERVO)) // Propojka, ktera spousti diagnostiku
244 .................... {
245 *
246 0088: BSF 03.5
247 0089: BSF 06.3
248 008A: BCF 03.5
249 008B: BTFSS 06.3
250 008C: GOTO 1B3
251 .................... for (n=500; n<800; n+=100)
252 008D: MOVLW 01
253 008E: MOVWF 35
254 008F: MOVLW F4
255 0090: MOVWF 34
256 0091: MOVF 35,W
257 0092: SUBLW 03
258 0093: BTFSS 03.0
259 0094: GOTO 0A9
260 0095: BTFSS 03.2
261 0096: GOTO 09B
262 0097: MOVF 34,W
263 0098: SUBLW 1F
264 0099: BTFSS 03.0
265 009A: GOTO 0A9
266 .................... {
267 .................... beep(n,n); //beep UP
268 009B: MOVF 35,W
269 009C: MOVWF 37
270 009D: MOVF 34,W
271 009E: MOVWF 36
272 009F: MOVF 35,W
273 00A0: MOVWF 39
274 00A1: MOVF 34,W
275 00A2: MOVWF 38
276 00A3: CALL 055
277 .................... };
278 00A4: MOVLW 64
279 00A5: ADDWF 34,F
280 00A6: BTFSC 03.0
281 00A7: INCF 35,F
282 00A8: GOTO 091
283 .................... Delay_ms(1000);
284 00A9: MOVLW 04
285 00AA: MOVWF 36
286 00AB: MOVLW FA
287 00AC: MOVWF 37
288 00AD: CALL 073
289 00AE: DECFSZ 36,F
290 00AF: GOTO 0AB
291 .................... //zastav vse
292 .................... STOPL; STOPR;
293 00B0: BSF 03.5
294 00B1: BCF 06.6
295 00B2: BCF 03.5
296 00B3: BCF 06.6
297 00B4: BSF 03.5
298 00B5: BCF 06.7
299 00B6: BCF 03.5
300 00B7: BCF 06.7
301 00B8: BSF 03.5
302 00B9: BCF 06.4
303 00BA: BCF 03.5
304 00BB: BCF 06.4
305 00BC: BSF 03.5
306 00BD: BCF 06.5
307 00BE: BCF 03.5
308 00BF: BCF 06.5
309 .................... //pravy pas
310 .................... FR; Delay_ms(1000); STOPR; Delay_ms(1000);
311 00C0: BSF 03.5
312 00C1: BCF 06.5
313 00C2: BCF 03.5
314 00C3: BCF 06.5
315 00C4: BSF 03.5
316 00C5: BCF 06.4
317 00C6: BCF 03.5
318 00C7: BSF 06.4
319 00C8: MOVLW 04
320 00C9: MOVWF 36
321 00CA: MOVLW FA
322 00CB: MOVWF 37
323 00CC: CALL 073
324 00CD: DECFSZ 36,F
325 00CE: GOTO 0CA
326 00CF: BSF 03.5
327 00D0: BCF 06.4
328 00D1: BCF 03.5
329 00D2: BCF 06.4
330 00D3: BSF 03.5
331 00D4: BCF 06.5
332 00D5: BCF 03.5
333 00D6: BCF 06.5
334 00D7: MOVLW 04
335 00D8: MOVWF 36
336 00D9: MOVLW FA
337 00DA: MOVWF 37
338 00DB: CALL 073
339 00DC: DECFSZ 36,F
340 00DD: GOTO 0D9
341 .................... BR; Delay_ms(1000); STOPR; Delay_ms(1000);
342 00DE: BSF 03.5
343 00DF: BCF 06.4
344 00E0: BCF 03.5
345 00E1: BCF 06.4
346 00E2: BSF 03.5
347 00E3: BCF 06.5
348 00E4: BCF 03.5
349 00E5: BSF 06.5
350 00E6: MOVLW 04
351 00E7: MOVWF 36
352 00E8: MOVLW FA
353 00E9: MOVWF 37
354 00EA: CALL 073
355 00EB: DECFSZ 36,F
356 00EC: GOTO 0E8
357 00ED: BSF 03.5
358 00EE: BCF 06.4
359 00EF: BCF 03.5
360 00F0: BCF 06.4
361 00F1: BSF 03.5
362 00F2: BCF 06.5
363 00F3: BCF 03.5
364 00F4: BCF 06.5
365 00F5: MOVLW 04
366 00F6: MOVWF 36
367 00F7: MOVLW FA
368 00F8: MOVWF 37
369 00F9: CALL 073
370 00FA: DECFSZ 36,F
371 00FB: GOTO 0F7
372 .................... Beep(880,100); Delay_ms(1000);
373 00FC: MOVLW 03
374 00FD: MOVWF 37
375 00FE: MOVLW 70
376 00FF: MOVWF 36
377 0100: CLRF 39
378 0101: MOVLW 64
379 0102: MOVWF 38
380 0103: CALL 055
381 0104: MOVLW 04
382 0105: MOVWF 36
383 0106: MOVLW FA
384 0107: MOVWF 37
385 0108: CALL 073
386 0109: DECFSZ 36,F
387 010A: GOTO 106
388 .................... //levy pas
389 .................... FL; Delay_ms(1000); STOPL; Delay_ms(1000);
390 010B: BSF 03.5
391 010C: BCF 06.7
392 010D: BCF 03.5
393 010E: BCF 06.7
394 010F: BSF 03.5
395 0110: BCF 06.6
396 0111: BCF 03.5
397 0112: BSF 06.6
398 0113: MOVLW 04
399 0114: MOVWF 36
400 0115: MOVLW FA
401 0116: MOVWF 37
402 0117: CALL 073
403 0118: DECFSZ 36,F
404 0119: GOTO 115
405 011A: BSF 03.5
406 011B: BCF 06.6
407 011C: BCF 03.5
408 011D: BCF 06.6
409 011E: BSF 03.5
410 011F: BCF 06.7
411 0120: BCF 03.5
412 0121: BCF 06.7
413 0122: MOVLW 04
414 0123: MOVWF 36
415 0124: MOVLW FA
416 0125: MOVWF 37
417 0126: CALL 073
418 0127: DECFSZ 36,F
419 0128: GOTO 124
420 .................... BL; Delay_ms(1000); STOPL; Delay_ms(1000);
421 0129: BSF 03.5
422 012A: BCF 06.6
423 012B: BCF 03.5
424 012C: BCF 06.6
425 012D: BSF 03.5
426 012E: BCF 06.7
427 012F: BCF 03.5
428 0130: BSF 06.7
429 0131: MOVLW 04
430 0132: MOVWF 36
431 0133: MOVLW FA
432 0134: MOVWF 37
433 0135: CALL 073
434 0136: DECFSZ 36,F
435 0137: GOTO 133
436 0138: BSF 03.5
437 0139: BCF 06.6
438 013A: BCF 03.5
439 013B: BCF 06.6
440 013C: BSF 03.5
441 013D: BCF 06.7
442 013E: BCF 03.5
443 013F: BCF 06.7
444 0140: MOVLW 04
445 0141: MOVWF 36
446 0142: MOVLW FA
447 0143: MOVWF 37
448 0144: CALL 073
449 0145: DECFSZ 36,F
450 0146: GOTO 142
451 .................... Beep(880,100); Delay_ms(1000);
452 0147: MOVLW 03
453 0148: MOVWF 37
454 0149: MOVLW 70
455 014A: MOVWF 36
456 014B: CLRF 39
457 014C: MOVLW 64
458 014D: MOVWF 38
459 014E: CALL 055
460 014F: MOVLW 04
461 0150: MOVWF 36
462 0151: MOVLW FA
463 0152: MOVWF 37
464 0153: CALL 073
465 0154: DECFSZ 36,F
466 0155: GOTO 151
467 .................... //oba pasy
468 .................... FL; FR; Delay_ms(1000); STOPL; STOPR; Delay_ms(1000);
469 0156: BSF 03.5
470 0157: BCF 06.7
471 0158: BCF 03.5
472 0159: BCF 06.7
473 015A: BSF 03.5
474 015B: BCF 06.6
475 015C: BCF 03.5
476 015D: BSF 06.6
477 015E: BSF 03.5
478 015F: BCF 06.5
479 0160: BCF 03.5
480 0161: BCF 06.5
481 0162: BSF 03.5
482 0163: BCF 06.4
483 0164: BCF 03.5
484 0165: BSF 06.4
485 0166: MOVLW 04
486 0167: MOVWF 36
487 0168: MOVLW FA
488 0169: MOVWF 37
489 016A: CALL 073
490 016B: DECFSZ 36,F
491 016C: GOTO 168
492 016D: BSF 03.5
493 016E: BCF 06.6
494 016F: BCF 03.5
495 0170: BCF 06.6
496 0171: BSF 03.5
497 0172: BCF 06.7
498 0173: BCF 03.5
499 0174: BCF 06.7
500 0175: BSF 03.5
501 0176: BCF 06.4
502 0177: BCF 03.5
503 0178: BCF 06.4
504 0179: BSF 03.5
505 017A: BCF 06.5
506 017B: BCF 03.5
507 017C: BCF 06.5
508 017D: MOVLW 04
509 017E: MOVWF 36
510 017F: MOVLW FA
511 0180: MOVWF 37
512 0181: CALL 073
513 0182: DECFSZ 36,F
514 0183: GOTO 17F
515 .................... BL; BR; Delay_ms(1000); STOPL; STOPR; Delay_ms(1000);
516 0184: BSF 03.5
517 0185: BCF 06.6
518 0186: BCF 03.5
519 0187: BCF 06.6
520 0188: BSF 03.5
521 0189: BCF 06.7
522 018A: BCF 03.5
523 018B: BSF 06.7
524 018C: BSF 03.5
525 018D: BCF 06.4
526 018E: BCF 03.5
527 018F: BCF 06.4
528 0190: BSF 03.5
529 0191: BCF 06.5
530 0192: BCF 03.5
531 0193: BSF 06.5
532 0194: MOVLW 04
533 0195: MOVWF 36
534 0196: MOVLW FA
535 0197: MOVWF 37
536 0198: CALL 073
537 0199: DECFSZ 36,F
538 019A: GOTO 196
539 019B: BSF 03.5
540 019C: BCF 06.6
541 019D: BCF 03.5
542 019E: BCF 06.6
543 019F: BSF 03.5
544 01A0: BCF 06.7
545 01A1: BCF 03.5
546 01A2: BCF 06.7
547 01A3: BSF 03.5
548 01A4: BCF 06.4
549 01A5: BCF 03.5
550 01A6: BCF 06.4
551 01A7: BSF 03.5
552 01A8: BCF 06.5
553 01A9: BCF 03.5
554 01AA: BCF 06.5
555 01AB: MOVLW 04
556 01AC: MOVWF 36
557 01AD: MOVLW FA
558 01AE: MOVWF 37
559 01AF: CALL 073
560 01B0: DECFSZ 36,F
561 01B1: GOTO 1AD
562 .................... };
563 01B2: GOTO 088
564 .................... while (input(DIAG_SENSORS)) // spusteni diagnostiky cidel
565 .................... {
566 01B3: BSF 03.5
567 01B4: BSF 06.2
568 01B5: BCF 03.5
569 01B6: BTFSS 06.2
570 01B7: GOTO 1F6
571 .................... if (RSENSOR) beep(1000,200);
572 01B8: CLRF 77
573 01B9: BSF 03.5
574 01BA: BTFSC 1C.7
575 01BB: BSF 77.0
576 01BC: BCF 03.5
577 01BD: MOVF 2F,W
578 01BE: XORWF 77,W
579 01BF: ANDLW 01
580 01C0: BTFSC 03.2
581 01C1: GOTO 1CA
582 01C2: MOVLW 03
583 01C3: MOVWF 37
584 01C4: MOVLW E8
585 01C5: MOVWF 36
586 01C6: CLRF 39
587 01C7: MOVLW C8
588 01C8: MOVWF 38
589 01C9: CALL 055
590 .................... Delay_ms(200);
591 01CA: MOVLW C8
592 01CB: MOVWF 37
593 01CC: CALL 073
594 .................... if (LSENSOR) beep(2000,300);
595 01CD: CLRF 77
596 01CE: BSF 03.5
597 01CF: BTFSC 1C.6
598 01D0: BSF 77.0
599 01D1: BCF 03.5
600 01D2: MOVF 2F,W
601 01D3: XORWF 77,W
602 01D4: ANDLW 01
603 01D5: BTFSC 03.2
604 01D6: GOTO 1E0
605 01D7: MOVLW 07
606 01D8: MOVWF 37
607 01D9: MOVLW D0
608 01DA: MOVWF 36
609 01DB: MOVLW 01
610 01DC: MOVWF 39
611 01DD: MOVLW 2C
612 01DE: MOVWF 38
613 01DF: CALL 055
614 .................... Delay_ms(200);
615 01E0: MOVLW C8
616 01E1: MOVWF 37
617 01E2: CALL 073
618 .................... if ((read_adc(ADC_READ_ONLY)<BUMPER_TRESHOLD)) beep(3000,400);
619 01E3: BTFSC 1F.2
620 01E4: GOTO 1E3
621 01E5: MOVF 1E,W
622 01E6: SUBLW 7F
623 01E7: BTFSS 03.0
624 01E8: GOTO 1F2
625 01E9: MOVLW 0B
626 01EA: MOVWF 37
627 01EB: MOVLW B8
628 01EC: MOVWF 36
629 01ED: MOVLW 01
630 01EE: MOVWF 39
631 01EF: MOVLW 90
632 01F0: MOVWF 38
633 01F1: CALL 055
634 .................... Delay_ms(200);
635 01F2: MOVLW C8
636 01F3: MOVWF 37
637 01F4: CALL 073
638 .................... };
639 01F5: GOTO 1B3
640 .................... }
641 01F6: BCF 0A.3
642 01F7: GOTO 378 (RETURN)
643 .................... ///////////////////////////////////////////////////////////////////////////////
644 .................... void OtocSe() // otoci se zpet, kdyz je prekazka
645 .................... {
646 .................... unsigned int16 n;
647 ....................
648 .................... BL; BR; // cukni zpatky
649 01F8: BSF 03.5
650 01F9: BCF 06.6
651 01FA: BCF 03.5
652 01FB: BCF 06.6
653 01FC: BSF 03.5
654 01FD: BCF 06.7
655 01FE: BCF 03.5
656 01FF: BSF 06.7
657 0200: BSF 03.5
658 0201: BCF 06.4
659 0202: BCF 03.5
660 0203: BCF 06.4
661 0204: BSF 03.5
662 0205: BCF 06.5
663 0206: BCF 03.5
664 0207: BSF 06.5
665 .................... Delay_ms(200);
666 0208: MOVLW C8
667 0209: MOVWF 37
668 020A: CALL 073
669 .................... STOPR;STOPL;
670 020B: BSF 03.5
671 020C: BCF 06.4
672 020D: BCF 03.5
673 020E: BCF 06.4
674 020F: BSF 03.5
675 0210: BCF 06.5
676 0211: BCF 03.5
677 0212: BCF 06.5
678 0213: BSF 03.5
679 0214: BCF 06.6
680 0215: BCF 03.5
681 0216: BCF 06.6
682 0217: BSF 03.5
683 0218: BCF 06.7
684 0219: BCF 03.5
685 021A: BCF 06.7
686 .................... beep(800,400);
687 021B: MOVLW 03
688 021C: MOVWF 37
689 021D: MOVLW 20
690 021E: MOVWF 36
691 021F: MOVLW 01
692 0220: MOVWF 39
693 0221: MOVLW 90
694 0222: MOVWF 38
695 0223: CALL 055
696 .................... beep(2000,1000);
697 0224: MOVLW 07
698 0225: MOVWF 37
699 0226: MOVLW D0
700 0227: MOVWF 36
701 0228: MOVLW 03
702 0229: MOVWF 39
703 022A: MOVLW E8
704 022B: MOVWF 38
705 022C: CALL 055
706 .................... output_low(LED4);
707 022D: BSF 03.5
708 022E: BCF 05.6
709 022F: BCF 03.5
710 0230: BCF 05.6
711 .................... beep(900,400);
712 0231: MOVLW 03
713 0232: MOVWF 37
714 0233: MOVLW 84
715 0234: MOVWF 36
716 0235: MOVLW 01
717 0236: MOVWF 39
718 0237: MOVLW 90
719 0238: MOVWF 38
720 0239: CALL 055
721 .................... output_low(LED1);
722 023A: BSF 03.5
723 023B: BCF 05.4
724 023C: BCF 03.5
725 023D: BCF 05.4
726 ....................
727 .................... BR; FL; Delay_ms(100); // otoc se 30° do prava
728 023E: BSF 03.5
729 023F: BCF 06.4
730 0240: BCF 03.5
731 0241: BCF 06.4
732 0242: BSF 03.5
733 0243: BCF 06.5
734 0244: BCF 03.5
735 0245: BSF 06.5
736 0246: BSF 03.5
737 0247: BCF 06.7
738 0248: BCF 03.5
739 0249: BCF 06.7
740 024A: BSF 03.5
741 024B: BCF 06.6
742 024C: BCF 03.5
743 024D: BSF 06.6
744 024E: MOVLW 64
745 024F: MOVWF 37
746 0250: CALL 073
747 .................... STOPL; STOPR;
748 0251: BSF 03.5
749 0252: BCF 06.6
750 0253: BCF 03.5
751 0254: BCF 06.6
752 0255: BSF 03.5
753 0256: BCF 06.7
754 0257: BCF 03.5
755 0258: BCF 06.7
756 0259: BSF 03.5
757 025A: BCF 06.4
758 025B: BCF 03.5
759 025C: BCF 06.4
760 025D: BSF 03.5
761 025E: BCF 06.5
762 025F: BCF 03.5
763 0260: BCF 06.5
764 .................... beep(1000,1000);
765 0261: MOVLW 03
766 0262: MOVWF 37
767 0263: MOVLW E8
768 0264: MOVWF 36
769 0265: MOVLW 03
770 0266: MOVWF 39
771 0267: MOVLW E8
772 0268: MOVWF 38
773 0269: CALL 055
774 .................... output_low(LED3);
775 026A: BSF 03.5
776 026B: BCF 05.7
777 026C: BCF 03.5
778 026D: BCF 05.7
779 ....................
780 .................... BR; FL;
781 026E: BSF 03.5
782 026F: BCF 06.4
783 0270: BCF 03.5
784 0271: BCF 06.4
785 0272: BSF 03.5
786 0273: BCF 06.5
787 0274: BCF 03.5
788 0275: BSF 06.5
789 0276: BSF 03.5
790 0277: BCF 06.7
791 0278: BCF 03.5
792 0279: BCF 06.7
793 027A: BSF 03.5
794 027B: BCF 06.6
795 027C: BCF 03.5
796 027D: BSF 06.6
797 .................... for(n=40000;n>0;n--) // toc se, dokud nenarazis na caru
798 027E: MOVLW 9C
799 027F: MOVWF 35
800 0280: MOVLW 40
801 0281: MOVWF 34
802 0282: MOVF 34,F
803 0283: BTFSS 03.2
804 0284: GOTO 288
805 0285: MOVF 35,F
806 0286: BTFSC 03.2
807 0287: GOTO 2B0
808 .................... {
809 .................... line = RSENSOR; // cteni senzoru na caru
810 0288: CLRF 77
811 0289: BSF 03.5
812 028A: BTFSC 1C.7
813 028B: BSF 77.0
814 028C: BCF 03.5
815 028D: MOVF 2F,W
816 028E: XORWF 77,W
817 028F: ANDLW 01
818 0290: BTFSS 03.2
819 0291: GOTO 294
820 0292: MOVLW 00
821 0293: GOTO 295
822 0294: MOVLW 01
823 0295: MOVWF 2A
824 .................... line |= LSENSOR << 1;
825 0296: CLRF 77
826 0297: BSF 03.5
827 0298: BTFSC 1C.6
828 0299: BSF 77.0
829 029A: BCF 03.5
830 029B: MOVF 2F,W
831 029C: XORWF 77,W
832 029D: ANDLW 01
833 029E: BTFSS 03.2
834 029F: GOTO 2A2
835 02A0: MOVLW 00
836 02A1: GOTO 2A3
837 02A2: MOVLW 01
838 02A3: MOVWF 77
839 02A4: BCF 03.0
840 02A5: RLF 77,F
841 02A6: MOVF 77,W
842 02A7: IORWF 2A,F
843 .................... if (line!=0) break;
844 02A8: MOVF 2A,F
845 02A9: BTFSS 03.2
846 02AA: GOTO 2B0
847 .................... }
848 02AB: MOVF 34,W
849 02AC: BTFSC 03.2
850 02AD: DECF 35,F
851 02AE: DECF 34,F
852 02AF: GOTO 282
853 .................... STOPR; STOPL;
854 02B0: BSF 03.5
855 02B1: BCF 06.4
856 02B2: BCF 03.5
857 02B3: BCF 06.4
858 02B4: BSF 03.5
859 02B5: BCF 06.5
860 02B6: BCF 03.5
861 02B7: BCF 06.5
862 02B8: BSF 03.5
863 02B9: BCF 06.6
864 02BA: BCF 03.5
865 02BB: BCF 06.6
866 02BC: BSF 03.5
867 02BD: BCF 06.7
868 02BE: BCF 03.5
869 02BF: BCF 06.7
870 .................... output_high(LED1); output_high(LED3); output_high(LED4);
871 02C0: BSF 03.5
872 02C1: BCF 05.4
873 02C2: BCF 03.5
874 02C3: BSF 05.4
875 02C4: BSF 03.5
876 02C5: BCF 05.7
877 02C6: BCF 03.5
878 02C7: BSF 05.7
879 02C8: BSF 03.5
880 02C9: BCF 05.6
881 02CA: BCF 03.5
882 02CB: BSF 05.6
883 ....................
884 .................... line=L; // caru jsme prejeli, tak je vlevo
885 02CC: MOVLW 02
886 02CD: MOVWF 2A
887 .................... cirkus=0;
888 02CE: CLRF 2E
889 .................... }
890 02CF: BCF 0A.3
891 02D0: GOTO 3F1 (RETURN)
892 ....................
893 ....................
894 .................... void main()
895 .................... {
896 02D1: CLRF 04
897 02D2: MOVLW 1F
898 02D3: ANDWF 03,F
899 02D4: BSF 03.5
900 02D5: BCF 1F.4
901 02D6: BCF 1F.5
902 02D7: MOVF 1B,W
903 02D8: ANDLW 80
904 02D9: MOVWF 1B
905 02DA: MOVLW 07
906 02DB: MOVWF 1C
907 02DC: MOVF 1C,W
908 02DD: BCF 03.5
909 02DE: BCF 0D.6
910 02DF: MOVLW 60
911 02E0: BSF 03.5
912 02E1: MOVWF 0F
913 .................... unsigned int16 n; // pro FOR
914 .................... unsigned int16 i;
915 ....................
916 .................... STOPL; STOPR; // prepne vystupy na ovladani motoru na output a zastavi
917 02E2: BCF 06.6
918 02E3: BCF 03.5
919 02E4: BCF 06.6
920 02E5: BSF 03.5
921 02E6: BCF 06.7
922 02E7: BCF 03.5
923 02E8: BCF 06.7
924 02E9: BSF 03.5
925 02EA: BCF 06.4
926 02EB: BCF 03.5
927 02EC: BCF 06.4
928 02ED: BSF 03.5
929 02EE: BCF 06.5
930 02EF: BCF 03.5
931 02F0: BCF 06.5
932 ....................
933 .................... setup_oscillator(OSC_4MHZ|OSC_INTRC); // 4 MHz interni RC oscilator
934 02F1: MOVLW 62
935 02F2: BSF 03.5
936 02F3: MOVWF 0F
937 ....................
938 .................... port_b_pullups(TRUE); // pullups pro piano na diagnostiku
939 02F4: BCF 01.7
940 .................... setup_spi(FALSE);
941 02F5: BCF 03.5
942 02F6: BCF 14.5
943 02F7: BSF 03.5
944 02F8: BCF 06.2
945 02F9: BSF 06.1
946 02FA: BCF 06.4
947 02FB: MOVLW 00
948 02FC: BCF 03.5
949 02FD: MOVWF 14
950 02FE: BSF 03.5
951 02FF: MOVWF 14
952 .................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Casovac pro PWM
953 0300: MOVF 01,W
954 0301: ANDLW C7
955 0302: IORLW 08
956 0303: MOVWF 01
957 ....................
958 .................... setup_timer_2(T2_DIV_BY_4,255,10); // Casovac pro regulaci
959 0304: MOVLW 48
960 0305: MOVWF 78
961 0306: IORLW 05
962 0307: BCF 03.5
963 0308: MOVWF 12
964 0309: MOVLW FF
965 030A: BSF 03.5
966 030B: MOVWF 12
967 .................... // preruseni kazdych 10ms
968 .................... setup_adc_ports(BUMPER|VSS_VDD); // nastaveni A/D prevodniku pro naraznik
969 030C: BCF 1F.4
970 030D: BCF 1F.5
971 030E: MOVF 1B,W
972 030F: ANDLW 80
973 0310: IORLW 04
974 0311: MOVWF 1B
975 .................... setup_adc(ADC_CLOCK_INTERNAL);
976 0312: BCF 1F.6
977 0313: BCF 03.5
978 0314: BSF 1F.6
979 0315: BSF 1F.7
980 0316: BSF 03.5
981 0317: BCF 1F.7
982 0318: BCF 03.5
983 0319: BSF 1F.0
984 .................... set_adc_channel(2);
985 031A: MOVLW 10
986 031B: MOVWF 78
987 031C: MOVF 1F,W
988 031D: ANDLW C7
989 031E: IORWF 78,W
990 031F: MOVWF 1F
991 .................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); // Casovac pro naraznik
992 0320: MOVLW 85
993 0321: MOVWF 10
994 .................... setup_ccp1(CCP_COMPARE_RESET_TIMER);
995 0322: BSF 03.5
996 0323: BSF 06.3
997 0324: MOVLW 0B
998 0325: BCF 03.5
999 0326: MOVWF 17
1000 .................... CCP_1=(2^10)-1; // prevod kazdou 1ms
1001 0327: CLRF 16
1002 0328: MOVLW 07
1003 0329: MOVWF 15
1004 ....................
1005 .................... output_low(LED1); output_low(LED2); output_low(LED3); output_low(LED4);
1006 032A: BSF 03.5
1007 032B: BCF 05.4
1008 032C: BCF 03.5
1009 032D: BCF 05.4
1010 032E: BSF 03.5
1011 032F: BCF 05.3
1012 0330: BCF 03.5
1013 0331: BCF 05.3
1014 0332: BSF 03.5
1015 0333: BCF 05.7
1016 0334: BCF 03.5
1017 0335: BCF 05.7
1018 0336: BSF 03.5
1019 0337: BCF 05.6
1020 0338: BCF 03.5
1021 0339: BCF 05.6
1022 ....................
1023 .................... setup_comparator(A0_VR_A1_VR); // inicializace komparatoru pro cidla cary
1024 033A: MOVLW 02
1025 033B: BSF 03.5
1026 033C: MOVWF 1C
1027 033D: MOVF 05,W
1028 033E: IORLW 03
1029 033F: MOVWF 05
1030 0340: MOVLW 03
1031 0341: MOVWF 77
1032 0342: DECFSZ 77,F
1033 0343: GOTO 342
1034 0344: MOVF 1C,W
1035 0345: BCF 03.5
1036 0346: BCF 0D.6
1037 .................... setup_vref(VREF_HIGH|TRESHOLD); // 32 kroku od 0.25 do 0.75 Vdd
1038 0347: MOVLW 8F
1039 0348: BSF 03.5
1040 0349: MOVWF 1D
1041 ....................
1042 .................... Beep(1000,200); //double beep
1043 034A: MOVLW 03
1044 034B: BCF 03.5
1045 034C: MOVWF 37
1046 034D: MOVLW E8
1047 034E: MOVWF 36
1048 034F: CLRF 39
1049 0350: MOVLW C8
1050 0351: MOVWF 38
1051 0352: CALL 055
1052 .................... Delay_ms(50);
1053 0353: MOVLW 32
1054 0354: MOVWF 37
1055 0355: CALL 073
1056 .................... Beep(1000,200);
1057 0356: MOVLW 03
1058 0357: MOVWF 37
1059 0358: MOVLW E8
1060 0359: MOVWF 36
1061 035A: CLRF 39
1062 035B: MOVLW C8
1063 035C: MOVWF 38
1064 035D: CALL 055
1065 .................... Delay_ms(1000); // 1s
1066 035E: MOVLW 04
1067 035F: MOVWF 34
1068 0360: MOVLW FA
1069 0361: MOVWF 37
1070 0362: CALL 073
1071 0363: DECFSZ 34,F
1072 0364: GOTO 360
1073 ....................
1074 .................... // povoleni rizeni rychlosti zataceni pres preruseni
1075 .................... enable_interrupts(INT_TIMER2);
1076 0365: BSF 03.5
1077 0366: BSF 0C.1
1078 .................... enable_interrupts(GLOBAL);
1079 0367: MOVLW C0
1080 0368: BCF 03.5
1081 0369: IORWF 0B,F
1082 ....................
1083 .................... /*---------------------------------------------------------------------------*/
1084 .................... sensors=S;
1085 036A: MOVLW 03
1086 036B: MOVWF 29
1087 .................... line=S;
1088 036C: MOVWF 2A
1089 .................... last=S;
1090 036D: MOVWF 2C
1091 .................... cirkus=0;
1092 036E: CLRF 2E
1093 .................... // movement=S;
1094 .................... speed=FW_POMALU;
1095 036F: MOVLW AA
1096 0370: MOVWF 2B
1097 ....................
1098 .................... BW=input(BARVY); // Jaka ma byt barva cary?
1099 0371: BSF 03.5
1100 0372: BSF 06.1
1101 0373: BCF 03.5
1102 0374: BCF 2F.0
1103 0375: BTFSC 06.1
1104 0376: BSF 2F.0
1105 .................... diagnostika(); // Zkus, jestli nekdo nechce, diagnostiku
1106 0377: GOTO 088
1107 .................... Delay_ms(500);
1108 0378: MOVLW 02
1109 0379: MOVWF 34
1110 037A: MOVLW FA
1111 037B: MOVWF 37
1112 037C: CALL 073
1113 037D: DECFSZ 34,F
1114 037E: GOTO 37A
1115 ....................
1116 .................... output_high(LED1); Beep(1000,200); Delay_ms(500);
1117 037F: BSF 03.5
1118 0380: BCF 05.4
1119 0381: BCF 03.5
1120 0382: BSF 05.4
1121 0383: MOVLW 03
1122 0384: MOVWF 37
1123 0385: MOVLW E8
1124 0386: MOVWF 36
1125 0387: CLRF 39
1126 0388: MOVLW C8
1127 0389: MOVWF 38
1128 038A: CALL 055
1129 038B: MOVLW 02
1130 038C: MOVWF 34
1131 038D: MOVLW FA
1132 038E: MOVWF 37
1133 038F: CALL 073
1134 0390: DECFSZ 34,F
1135 0391: GOTO 38D
1136 .................... output_high(LED2); Beep(1000,200); Delay_ms(500);
1137 0392: BSF 03.5
1138 0393: BCF 05.3
1139 0394: BCF 03.5
1140 0395: BSF 05.3
1141 0396: MOVLW 03
1142 0397: MOVWF 37
1143 0398: MOVLW E8
1144 0399: MOVWF 36
1145 039A: CLRF 39
1146 039B: MOVLW C8
1147 039C: MOVWF 38
1148 039D: CALL 055
1149 039E: MOVLW 02
1150 039F: MOVWF 34
1151 03A0: MOVLW FA
1152 03A1: MOVWF 37
1153 03A2: CALL 073
1154 03A3: DECFSZ 34,F
1155 03A4: GOTO 3A0
1156 .................... output_high(LED3); Beep(1000,200); Delay_ms(500);
1157 03A5: BSF 03.5
1158 03A6: BCF 05.7
1159 03A7: BCF 03.5
1160 03A8: BSF 05.7
1161 03A9: MOVLW 03
1162 03AA: MOVWF 37
1163 03AB: MOVLW E8
1164 03AC: MOVWF 36
1165 03AD: CLRF 39
1166 03AE: MOVLW C8
1167 03AF: MOVWF 38
1168 03B0: CALL 055
1169 03B1: MOVLW 02
1170 03B2: MOVWF 34
1171 03B3: MOVLW FA
1172 03B4: MOVWF 37
1173 03B5: CALL 073
1174 03B6: DECFSZ 34,F
1175 03B7: GOTO 3B3
1176 .................... output_high(LED4); Beep(1000,200); Delay_ms(500);
1177 03B8: BSF 03.5
1178 03B9: BCF 05.6
1179 03BA: BCF 03.5
1180 03BB: BSF 05.6
1181 03BC: MOVLW 03
1182 03BD: MOVWF 37
1183 03BE: MOVLW E8
1184 03BF: MOVWF 36
1185 03C0: CLRF 39
1186 03C1: MOVLW C8
1187 03C2: MOVWF 38
1188 03C3: CALL 055
1189 03C4: MOVLW 02
1190 03C5: MOVWF 34
1191 03C6: MOVLW FA
1192 03C7: MOVWF 37
1193 03C8: CALL 073
1194 03C9: DECFSZ 34,F
1195 03CA: GOTO 3C6
1196 ....................
1197 .................... while(true) // hlavni smycka (jizda podle cary)
1198 .................... {
1199 .................... sensors = RSENSOR; // cteni senzoru na caru
1200 03CB: CLRF 77
1201 03CC: BSF 03.5
1202 03CD: BTFSC 1C.7
1203 03CE: BSF 77.0
1204 03CF: BCF 03.5
1205 03D0: MOVF 2F,W
1206 03D1: XORWF 77,W
1207 03D2: ANDLW 01
1208 03D3: BTFSS 03.2
1209 03D4: GOTO 3D7
1210 03D5: MOVLW 00
1211 03D6: GOTO 3D8
1212 03D7: MOVLW 01
1213 03D8: MOVWF 29
1214 .................... sensors |= LSENSOR << 1;
1215 03D9: CLRF 77
1216 03DA: BSF 03.5
1217 03DB: BTFSC 1C.6
1218 03DC: BSF 77.0
1219 03DD: BCF 03.5
1220 03DE: MOVF 2F,W
1221 03DF: XORWF 77,W
1222 03E0: ANDLW 01
1223 03E1: BTFSS 03.2
1224 03E2: GOTO 3E5
1225 03E3: MOVLW 00
1226 03E4: GOTO 3E6
1227 03E5: MOVLW 01
1228 03E6: MOVWF 77
1229 03E7: BCF 03.0
1230 03E8: RLF 77,F
1231 03E9: MOVF 77,W
1232 03EA: IORWF 29,F
1233 ....................
1234 .................... if (read_adc(ADC_READ_ONLY)<BUMPER_TRESHOLD) OtocSe();
1235 03EB: BTFSC 1F.2
1236 03EC: GOTO 3EB
1237 03ED: MOVF 1E,W
1238 03EE: SUBLW 7F
1239 03EF: BTFSC 03.0
1240 03F0: GOTO 1F8
1241 ....................
1242 .................... switch (sensors) // zatacej podle toho, kde vidis caru
1243 .................... {
1244 03F1: MOVF 29,W
1245 03F2: XORLW 03
1246 03F3: BTFSC 03.2
1247 03F4: GOTO 3FC
1248 03F5: XORLW 01
1249 03F6: BTFSC 03.2
1250 03F7: GOTO 431
1251 03F8: XORLW 03
1252 03F9: BTFSC 03.2
1253 03FA: GOTO 468
1254 03FB: GOTO 49F
1255 .................... case S: // rovne
1256 .................... GO(L, F, FW_STREDNE+rovinka); GO(R, F, FW_STREDNE+rovinka);
1257 03FC: MOVF 01,W
1258 03FD: MOVWF 34
1259 03FE: MOVLW BE
1260 03FF: ADDWF 2D,W
1261 0400: SUBWF 34,W
1262 0401: BTFSC 03.2
1263 0402: GOTO 405
1264 0403: BTFSC 03.0
1265 0404: GOTO 40E
1266 0405: BSF 03.5
1267 0406: BCF 06.7
1268 0407: BCF 03.5
1269 0408: BCF 06.7
1270 0409: BSF 03.5
1271 040A: BCF 06.6
1272 040B: BCF 03.5
1273 040C: BSF 06.6
1274 040D: GOTO 416
1275 040E: BSF 03.5
1276 040F: BCF 06.6
1277 0410: BCF 03.5
1278 0411: BCF 06.6
1279 0412: BSF 03.5
1280 0413: BCF 06.7
1281 0414: BCF 03.5
1282 0415: BCF 06.7
1283 0416: MOVF 01,W
1284 0417: MOVWF 34
1285 0418: MOVLW BE
1286 0419: ADDWF 2D,W
1287 041A: SUBWF 34,W
1288 041B: BTFSC 03.2
1289 041C: GOTO 41F
1290 041D: BTFSC 03.0
1291 041E: GOTO 428
1292 041F: BSF 03.5
1293 0420: BCF 06.5
1294 0421: BCF 03.5
1295 0422: BCF 06.5
1296 0423: BSF 03.5
1297 0424: BCF 06.4
1298 0425: BCF 03.5
1299 0426: BSF 06.4
1300 0427: GOTO 430
1301 0428: BSF 03.5
1302 0429: BCF 06.4
1303 042A: BCF 03.5
1304 042B: BCF 06.4
1305 042C: BSF 03.5
1306 042D: BCF 06.5
1307 042E: BCF 03.5
1308 042F: BCF 06.5
1309 .................... continue;
1310 0430: GOTO 3CB
1311 .................... case L: // trochu vlevo
1312 .................... GO(L, F, FW_POMALU+rovinka); GO(R, F, FW_STREDNE+rovinka);
1313 0431: MOVF 01,W
1314 0432: MOVWF 34
1315 0433: MOVLW AA
1316 0434: ADDWF 2D,W
1317 0435: SUBWF 34,W
1318 0436: BTFSC 03.2
1319 0437: GOTO 43A
1320 0438: BTFSC 03.0
1321 0439: GOTO 443
1322 043A: BSF 03.5
1323 043B: BCF 06.7
1324 043C: BCF 03.5
1325 043D: BCF 06.7
1326 043E: BSF 03.5
1327 043F: BCF 06.6
1328 0440: BCF 03.5
1329 0441: BSF 06.6
1330 0442: GOTO 44B
1331 0443: BSF 03.5
1332 0444: BCF 06.6
1333 0445: BCF 03.5
1334 0446: BCF 06.6
1335 0447: BSF 03.5
1336 0448: BCF 06.7
1337 0449: BCF 03.5
1338 044A: BCF 06.7
1339 044B: MOVF 01,W
1340 044C: MOVWF 34
1341 044D: MOVLW BE
1342 044E: ADDWF 2D,W
1343 044F: SUBWF 34,W
1344 0450: BTFSC 03.2
1345 0451: GOTO 454
1346 0452: BTFSC 03.0
1347 0453: GOTO 45D
1348 0454: BSF 03.5
1349 0455: BCF 06.5
1350 0456: BCF 03.5
1351 0457: BCF 06.5
1352 0458: BSF 03.5
1353 0459: BCF 06.4
1354 045A: BCF 03.5
1355 045B: BSF 06.4
1356 045C: GOTO 465
1357 045D: BSF 03.5
1358 045E: BCF 06.4
1359 045F: BCF 03.5
1360 0460: BCF 06.4
1361 0461: BSF 03.5
1362 0462: BCF 06.5
1363 0463: BCF 03.5
1364 0464: BCF 06.5
1365 .................... line=L;
1366 0465: MOVLW 02
1367 0466: MOVWF 2A
1368 .................... continue;
1369 0467: GOTO 3CB
1370 .................... case R: // trochu vpravo
1371 .................... GO(R, F, FW_POMALU+rovinka); GO(L, F, FW_STREDNE+rovinka);
1372 0468: MOVF 01,W
1373 0469: MOVWF 34
1374 046A: MOVLW AA
1375 046B: ADDWF 2D,W
1376 046C: SUBWF 34,W
1377 046D: BTFSC 03.2
1378 046E: GOTO 471
1379 046F: BTFSC 03.0
1380 0470: GOTO 47A
1381 0471: BSF 03.5
1382 0472: BCF 06.5
1383 0473: BCF 03.5
1384 0474: BCF 06.5
1385 0475: BSF 03.5
1386 0476: BCF 06.4
1387 0477: BCF 03.5
1388 0478: BSF 06.4
1389 0479: GOTO 482
1390 047A: BSF 03.5
1391 047B: BCF 06.4
1392 047C: BCF 03.5
1393 047D: BCF 06.4
1394 047E: BSF 03.5
1395 047F: BCF 06.5
1396 0480: BCF 03.5
1397 0481: BCF 06.5
1398 0482: MOVF 01,W
1399 0483: MOVWF 34
1400 0484: MOVLW BE
1401 0485: ADDWF 2D,W
1402 0486: SUBWF 34,W
1403 0487: BTFSC 03.2
1404 0488: GOTO 48B
1405 0489: BTFSC 03.0
1406 048A: GOTO 494
1407 048B: BSF 03.5
1408 048C: BCF 06.7
1409 048D: BCF 03.5
1410 048E: BCF 06.7
1411 048F: BSF 03.5
1412 0490: BCF 06.6
1413 0491: BCF 03.5
1414 0492: BSF 06.6
1415 0493: GOTO 49C
1416 0494: BSF 03.5
1417 0495: BCF 06.6
1418 0496: BCF 03.5
1419 0497: BCF 06.6
1420 0498: BSF 03.5
1421 0499: BCF 06.7
1422 049A: BCF 03.5
1423 049B: BCF 06.7
1424 .................... line=R;
1425 049C: MOVLW 01
1426 049D: MOVWF 2A
1427 .................... continue;
1428 049E: GOTO 3CB
1429 .................... default: // kdyz jsou obe cidla mimo caru, tak pokracuj dal
1430 .................... };
1431 .................... rovinka=0;
1432 049F: CLRF 2D
1433 ....................
1434 .................... if (last!=line) // pokud si prejel caru z jedne strany na druhou stranu,
1435 04A0: MOVF 2A,W
1436 04A1: SUBWF 2C,W
1437 04A2: BTFSC 03.2
1438 04A3: GOTO 560
1439 .................... // tak zabrzdi
1440 .................... {
1441 .................... output_bit(LED1, !input(LED1));
1442 04A4: BSF 03.5
1443 04A5: BSF 05.4
1444 04A6: BCF 03.5
1445 04A7: BTFSS 05.4
1446 04A8: GOTO 4AB
1447 04A9: BCF 05.4
1448 04AA: GOTO 4AC
1449 04AB: BSF 05.4
1450 04AC: BSF 03.5
1451 04AD: BCF 05.4
1452 .................... last=line;
1453 04AE: BCF 03.5
1454 04AF: MOVF 2A,W
1455 04B0: MOVWF 2C
1456 .................... speed=FW_ZATACKA;
1457 04B1: MOVLW C8
1458 04B2: MOVWF 2B
1459 .................... cirkus++;
1460 04B3: INCF 2E,F
1461 .................... if (cirkus>8)
1462 04B4: MOVF 2E,W
1463 04B5: SUBLW 08
1464 04B6: BTFSC 03.0
1465 04B7: GOTO 560
1466 .................... {
1467 .................... STOPL; STOPR;
1468 04B8: BSF 03.5
1469 04B9: BCF 06.6
1470 04BA: BCF 03.5
1471 04BB: BCF 06.6
1472 04BC: BSF 03.5
1473 04BD: BCF 06.7
1474 04BE: BCF 03.5
1475 04BF: BCF 06.7
1476 04C0: BSF 03.5
1477 04C1: BCF 06.4
1478 04C2: BCF 03.5
1479 04C3: BCF 06.4
1480 04C4: BSF 03.5
1481 04C5: BCF 06.5
1482 04C6: BCF 03.5
1483 04C7: BCF 06.5
1484 .................... cirkus=0;
1485 04C8: CLRF 2E
1486 .................... disable_interrupts(GLOBAL);
1487 04C9: BCF 0B.6
1488 04CA: BCF 0B.7
1489 04CB: BTFSC 0B.7
1490 04CC: GOTO 4CA
1491 .................... beep(1000,400);
1492 04CD: MOVLW 03
1493 04CE: MOVWF 37
1494 04CF: MOVLW E8
1495 04D0: MOVWF 36
1496 04D1: MOVLW 01
1497 04D2: MOVWF 39
1498 04D3: MOVLW 90
1499 04D4: MOVWF 38
1500 04D5: CALL 055
1501 .................... for(n=3000; n>3950; n--) beep(n,10);
1502 04D6: MOVLW 0B
1503 04D7: MOVWF 31
1504 04D8: MOVLW B8
1505 04D9: MOVWF 30
1506 04DA: MOVF 31,W
1507 04DB: SUBLW 0E
1508 04DC: BTFSC 03.0
1509 04DD: GOTO 4F2
1510 04DE: XORLW FF
1511 04DF: BTFSS 03.2
1512 04E0: GOTO 4E5
1513 04E1: MOVF 30,W
1514 04E2: SUBLW 6E
1515 04E3: BTFSC 03.0
1516 04E4: GOTO 4F2
1517 04E5: MOVF 31,W
1518 04E6: MOVWF 37
1519 04E7: MOVF 30,W
1520 04E8: MOVWF 36
1521 04E9: CLRF 39
1522 04EA: MOVLW 0A
1523 04EB: MOVWF 38
1524 04EC: CALL 055
1525 04ED: MOVF 30,W
1526 04EE: BTFSC 03.2
1527 04EF: DECF 31,F
1528 04F0: DECF 30,F
1529 04F1: GOTO 4DA
1530 .................... output_low(LED1);
1531 04F2: BSF 03.5
1532 04F3: BCF 05.4
1533 04F4: BCF 03.5
1534 04F5: BCF 05.4
1535 .................... beep(2000,200);
1536 04F6: MOVLW 07
1537 04F7: MOVWF 37
1538 04F8: MOVLW D0
1539 04F9: MOVWF 36
1540 04FA: CLRF 39
1541 04FB: MOVLW C8
1542 04FC: MOVWF 38
1543 04FD: CALL 055
1544 .................... beep(900,400);
1545 04FE: MOVLW 03
1546 04FF: MOVWF 37
1547 0500: MOVLW 84
1548 0501: MOVWF 36
1549 0502: MOVLW 01
1550 0503: MOVWF 39
1551 0504: MOVLW 90
1552 0505: MOVWF 38
1553 0506: CALL 055
1554 .................... for(n=2950; n<3000; n++) beep(n,10);
1555 0507: MOVLW 0B
1556 0508: MOVWF 31
1557 0509: MOVLW 86
1558 050A: MOVWF 30
1559 050B: MOVF 31,W
1560 050C: SUBLW 0B
1561 050D: BTFSS 03.0
1562 050E: GOTO 521
1563 050F: BTFSS 03.2
1564 0510: GOTO 515
1565 0511: MOVF 30,W
1566 0512: SUBLW B7
1567 0513: BTFSS 03.0
1568 0514: GOTO 521
1569 0515: MOVF 31,W
1570 0516: MOVWF 37
1571 0517: MOVF 30,W
1572 0518: MOVWF 36
1573 0519: CLRF 39
1574 051A: MOVLW 0A
1575 051B: MOVWF 38
1576 051C: CALL 055
1577 051D: INCF 30,F
1578 051E: BTFSC 03.2
1579 051F: INCF 31,F
1580 0520: GOTO 50B
1581 .................... output_low(LED2);
1582 0521: BSF 03.5
1583 0522: BCF 05.3
1584 0523: BCF 03.5
1585 0524: BCF 05.3
1586 .................... output_high(LED1);
1587 0525: BSF 03.5
1588 0526: BCF 05.4
1589 0527: BCF 03.5
1590 0528: BSF 05.4
1591 .................... beep(4000,400);
1592 0529: MOVLW 0F
1593 052A: MOVWF 37
1594 052B: MOVLW A0
1595 052C: MOVWF 36
1596 052D: MOVLW 01
1597 052E: MOVWF 39
1598 052F: MOVLW 90
1599 0530: MOVWF 38
1600 0531: CALL 055
1601 .................... beep(1000,100);
1602 0532: MOVLW 03
1603 0533: MOVWF 37
1604 0534: MOVLW E8
1605 0535: MOVWF 36
1606 0536: CLRF 39
1607 0537: MOVLW 64
1608 0538: MOVWF 38
1609 0539: CALL 055
1610 .................... output_low(LED3);
1611 053A: BSF 03.5
1612 053B: BCF 05.7
1613 053C: BCF 03.5
1614 053D: BCF 05.7
1615 .................... beep(3000,400);
1616 053E: MOVLW 0B
1617 053F: MOVWF 37
1618 0540: MOVLW B8
1619 0541: MOVWF 36
1620 0542: MOVLW 01
1621 0543: MOVWF 39
1622 0544: MOVLW 90
1623 0545: MOVWF 38
1624 0546: CALL 055
1625 .................... Delay_ms(1000);
1626 0547: MOVLW 04
1627 0548: MOVWF 34
1628 0549: MOVLW FA
1629 054A: MOVWF 37
1630 054B: CALL 073
1631 054C: DECFSZ 34,F
1632 054D: GOTO 549
1633 .................... output_high(LED1); output_high(LED2);
1634 054E: BSF 03.5
1635 054F: BCF 05.4
1636 0550: BCF 03.5
1637 0551: BSF 05.4
1638 0552: BSF 03.5
1639 0553: BCF 05.3
1640 0554: BCF 03.5
1641 0555: BSF 05.3
1642 .................... output_high(LED3); output_high(LED4);
1643 0556: BSF 03.5
1644 0557: BCF 05.7
1645 0558: BCF 03.5
1646 0559: BSF 05.7
1647 055A: BSF 03.5
1648 055B: BCF 05.6
1649 055C: BCF 03.5
1650 055D: BSF 05.6
1651 .................... enable_interrupts(GLOBAL);
1652 055E: MOVLW C0
1653 055F: IORWF 0B,F
1654 .................... }
1655 .................... };
1656 ....................
1657 .................... if (L==line) // kdyz jsou obe cidla mimo caru, zatoc na caru
1658 0560: MOVF 2A,W
1659 0561: SUBLW 02
1660 0562: BTFSS 03.2
1661 0563: GOTO 582
1662 .................... {
1663 .................... STOPL;
1664 0564: BSF 03.5
1665 0565: BCF 06.6
1666 0566: BCF 03.5
1667 0567: BCF 06.6
1668 0568: BSF 03.5
1669 0569: BCF 06.7
1670 056A: BCF 03.5
1671 056B: BCF 06.7
1672 .................... GO(R, F, speed);
1673 056C: MOVF 01,W
1674 056D: SUBWF 2B,W
1675 056E: BTFSS 03.0
1676 056F: GOTO 579
1677 0570: BSF 03.5
1678 0571: BCF 06.5
1679 0572: BCF 03.5
1680 0573: BCF 06.5
1681 0574: BSF 03.5
1682 0575: BCF 06.4
1683 0576: BCF 03.5
1684 0577: BSF 06.4
1685 0578: GOTO 581
1686 0579: BSF 03.5
1687 057A: BCF 06.4
1688 057B: BCF 03.5
1689 057C: BCF 06.4
1690 057D: BSF 03.5
1691 057E: BCF 06.5
1692 057F: BCF 03.5
1693 0580: BCF 06.5
1694 .................... }
1695 .................... else
1696 0581: GOTO 59F
1697 .................... {
1698 .................... STOPR;
1699 0582: BSF 03.5
1700 0583: BCF 06.4
1701 0584: BCF 03.5
1702 0585: BCF 06.4
1703 0586: BSF 03.5
1704 0587: BCF 06.5
1705 0588: BCF 03.5
1706 0589: BCF 06.5
1707 .................... GO(L, F, speed);
1708 058A: MOVF 01,W
1709 058B: SUBWF 2B,W
1710 058C: BTFSS 03.0
1711 058D: GOTO 597
1712 058E: BSF 03.5
1713 058F: BCF 06.7
1714 0590: BCF 03.5
1715 0591: BCF 06.7
1716 0592: BSF 03.5
1717 0593: BCF 06.6
1718 0594: BCF 03.5
1719 0595: BSF 06.6
1720 0596: GOTO 59F
1721 0597: BSF 03.5
1722 0598: BCF 06.6
1723 0599: BCF 03.5
1724 059A: BCF 06.6
1725 059B: BSF 03.5
1726 059C: BCF 06.7
1727 059D: BCF 03.5
1728 059E: BCF 06.7
1729 .................... }
1730 ....................
1731 .................... } // while(true)
1732 059F: GOTO 3CB
1733 .................... }
1734 ....................
1735 ....................
1736 05A0: SLEEP
1737  
1738 Configuration Fuses:
1739 Word 1: 3F38 NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT INTRC_IO
1740 Word 2: 3FFC NOFCMEN NOIESO