Rev Author Line No. Line
504 kaklik 1 CCS PCM C Compiler, Version 3.245, 27853 30-IV-06 21:17
2  
3 Filename: D:\KAKLIK\programy\PIC_C\roboti\3Orbis\main.lst
4  
5 ROM used: 1154 words (28%)
6 Largest free fragment is 2048
7 RAM used: 32 (18%) at main() level
8 35 (20%) worst case
9 Stack: 5 worst case (3 in main + 2 for interrupts)
10  
11 *
12 0000: MOVLW 00
13 0001: MOVWF 0A
14 0002: GOTO 26C
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 047
67 .................... #include ".\main.h"
68 .................... #include <16F88.h>
69 .................... //////// Standard Header file for the PIC16F88 device ////////////////
70 .................... #device PIC16F88
71 .................... #list
72 ....................
73 .................... #device adc=8
74 ....................
75 .................... #FUSES NOWDT //No Watch Dog Timer
76 .................... #FUSES INTRC_IO
77 .................... #FUSES NOPUT //No Power Up Timer
78 .................... #FUSES MCLR //Master Clear pin enabled
79 .................... #FUSES NOBROWNOUT //Reset when brownout detected
80 .................... #FUSES NOLVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
81 .................... #FUSES NOCPD //No EE protection
82 .................... #FUSES NOWRT //Program memory not write protected
83 .................... #FUSES NODEBUG //No Debug mode for ICD
84 .................... #FUSES NOPROTECT //Code not protected from reading
85 .................... #FUSES NOFCMEN //Fail-safe clock monitor enabled
86 .................... #FUSES NOIESO //Internal External Switch Over mode enabled
87 ....................
88 .................... #use delay(clock=8000000,RESTART_WDT)
89 0037: MOVLW 08
90 0038: SUBWF 3D,F
91 0039: BTFSS 03.0
92 003A: GOTO 046
93 003B: MOVLW 3D
94 003C: MOVWF 04
95 003D: BCF 03.0
96 003E: RRF 00,F
97 003F: MOVF 00,W
98 0040: BTFSC 03.2
99 0041: GOTO 046
100 0042: GOTO 044
101 0043: CLRWDT
102 0044: DECFSZ 00,F
103 0045: GOTO 043
104 0046: RETLW 00
105 *
106 0065: MOVLW 3A
107 0066: MOVWF 04
108 0067: MOVF 00,W
109 0068: BTFSC 03.2
110 0069: GOTO 07C
111 006A: MOVLW 02
112 006B: MOVWF 78
113 006C: MOVLW BF
114 006D: MOVWF 77
115 006E: CLRWDT
116 006F: DECFSZ 77,F
117 0070: GOTO 06E
118 0071: DECFSZ 78,F
119 0072: GOTO 06C
120 0073: MOVLW 96
121 0074: MOVWF 77
122 0075: DECFSZ 77,F
123 0076: GOTO 075
124 0077: NOP
125 0078: NOP
126 0079: CLRWDT
127 007A: DECFSZ 00,F
128 007B: GOTO 06A
129 007C: RETLW 00
130 ....................
131 ....................
132 ....................
133 .................... #define KOLMO1 225 // predni kolecko sroubem dopredu
134 .................... #define KOLMO2 30 // predni kolecko je hlavou sroubu dozadu
135 .................... #define STRED 128 // sredni poloha zataceciho kolecka
136 .................... #define BEAR1 10//10 // 3 stupne zataceni
137 .................... #define BEAR2 25//25
138 .................... #define BEAR3 45//45
139 .................... #define R 100 // Rozumna rychlost
140 .................... #define R17 200 // X nasobek rozumne rychlosti
141 .................... #define PRED_CIHLOU 100 // rychlost pri dalkove detekci cihly
142 .................... //#define L1 1 // cara vlevo
143 .................... #define L2 2 // cara vlevo
144 .................... #define L3 3 // cara vlevo
145 .................... #define S 0 // cara mezi sensory
146 .................... //#define R1 -1 // cara vpravo
147 .................... #define R2 -2 // cara vpravo
148 .................... #define R3 -3 // cara vpravo
149 ....................
150 .................... // servo
151 .................... #define SERVO PIN_B5
152 ....................
153 .................... // kroutitka
154 .................... #define CERVENA 4 // AN4
155 .................... //#define CERNA 5 // AN5
156 .................... //#define ZELENA 6 // AN6
157 .................... #define MODRA 2 // AN2
158 ....................
159 .................... // IR
160 .................... #define IRTX PIN_B2
161 .................... #define CIHLA PIN_A3
162 ....................
163 .................... //motory
164 .................... #define FR output_low(PIN_A7); output_high(PIN_A6) // Vpred
165 .................... #define FL output_low(PIN_A1); output_high(PIN_A0)
166 .................... #define BR output_low(PIN_A6); output_high(PIN_A7) // Vzad
167 .................... #define BL output_low(PIN_A0); output_high(PIN_A1)
168 .................... #define STOPR output_low(PIN_A6);output_low(PIN_A7)
169 .................... #define STOPL output_low(PIN_A0);output_low(PIN_A1)
170 ....................
171 .................... //HID
172 .................... #define LED1 PIN_B1 //oranzova
173 .................... #define LED2 PIN_B2 //zluta
174 ....................
175 .................... #define STROBE PIN_B0
176 .................... //#define SW1 PIN_A2 // Motory On/off
177 ....................
178 .................... unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru
179 .................... signed int8 line = S; // na ktere strane byla detekovana cara
180 *
181 0279: BCF 03.5
182 027A: CLRF 2B
183 .................... //unsigned int8 dira; // pocita dobu po kterou je ztracena cara
184 .................... unsigned int8 uhel; // urcuje aktualni uhel zataceni
185 .................... unsigned int8 speed; // maximalni povolena rychlost
186 .................... unsigned int8 turn; // rychlost toceni
187 .................... unsigned int8 rovinka; // pocitadlo na zjisteni rovinky
188 ....................
189 .................... signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem
190 .................... signed int16 Rmotor; // a pravem motoru
191 ....................
192 .................... // makro pro PWM pro motory
193 .................... #define GO(motor, direction, power) if(get_timer0()<=power) \
194 .................... {direction##motor;} else {stop##motor;}
195 .................... ////////////////////////////////////////////////////////////////////////////////
196 .................... #int_TIMER2
197 .................... TIMER2_isr() // ovladani serva
198 .................... {
199 .................... unsigned int8 n;
200 ....................
201 .................... output_high(SERVO);
202 *
203 0047: BSF 03.5
204 0048: BCF 06.5
205 0049: BCF 03.5
206 004A: BSF 06.5
207 .................... delay_us(1000);
208 004B: CLRWDT
209 004C: MOVLW 09
210 004D: MOVWF 3C
211 004E: MOVLW 6D
212 004F: MOVWF 3D
213 0050: CALL 037
214 0051: DECFSZ 3C,F
215 0052: GOTO 04E
216 .................... for(n=uhel; n>0; n--) Delay_us(2);
217 0053: MOVF 2C,W
218 0054: MOVWF 3B
219 0055: MOVF 3B,F
220 0056: BTFSC 03.2
221 0057: GOTO 05E
222 0058: CLRWDT
223 0059: NOP
224 005A: NOP
225 005B: NOP
226 005C: DECF 3B,F
227 005D: GOTO 055
228 .................... output_low(SERVO);
229 005E: BSF 03.5
230 005F: BCF 06.5
231 0060: BCF 03.5
232 0061: BCF 06.5
233 .................... }
234 ....................
235 .................... ////////////////////////////////////////////////////////////////////////////////
236 0062: BCF 0C.1
237 0063: BCF 0A.3
238 0064: GOTO 022
239 .................... int8 IRcheck() // potvrdi detekci cihly
240 .................... {
241 .................... output_high(IRTX); // vypne vysilac IR
242 .................... delay_ms(10);
243 ....................
244 .................... output_low(STROBE);
245 .................... sensors = spi_read(0); // cteni senzoru
246 .................... sensors=~sensors;
247 .................... output_high(STROBE);
248 ....................
249 .................... if(bit_test(sensors,7)) // otestuje, jestli je stale detekovan IR signal
250 .................... {
251 .................... output_low(IRTX); // zapne vysilac IR
252 .................... delay_ms(10);
253 ....................
254 .................... output_low(STROBE);
255 .................... sensors = spi_read(0); // cteni senzoru
256 .................... sensors=~sensors;
257 .................... output_high(STROBE);
258 ....................
259 .................... if(!bit_test(sensors,7)) // otestuje, jestli je detekovana cihla
260 .................... {
261 .................... output_high(IRTX); // vypne vysilac IR
262 .................... delay_ms(10);
263 ....................
264 .................... output_low(STROBE);
265 .................... sensors = spi_read(0); // cteni senzoru
266 .................... sensors=~sensors;
267 .................... output_high(STROBE);
268 ....................
269 .................... output_low(IRTX); // zapne vysilac IR
270 ....................
271 .................... if(bit_test(sensors,7)) return 1; // vrat 1, kdyz je stale cihla
272 .................... }
273 .................... };
274 .................... output_low(IRTX); // zapne vysilac IR
275 .................... return 0; // vrat 0, kdyz je detekovano ruseni
276 .................... }
277 .................... ////////////////////////////////////////////////////////////////////////////////
278 .................... #include ".\objizdka_centrovani_R.c"
279 .................... #define DOLEVA 0
280 .................... #define DOPRAVA 1
281 ....................
282 .................... void cikcak()
283 .................... {
284 .................... unsigned int8 i=0;
285 *
286 007D: CLRF 39
287 ....................
288 .................... uhel=KOLMO1; // aby se dalo tocit na miste
289 007E: MOVLW E1
290 007F: MOVWF 2C
291 .................... Delay_ms(100);
292 0080: MOVLW 64
293 0081: MOVWF 3A
294 0082: CALL 065
295 ....................
296 .................... if (line==L2) line=L3; // poznamenej, kde byla cara pred brzdenim
297 0083: MOVF 2B,W
298 0084: SUBLW 02
299 0085: BTFSS 03.2
300 0086: GOTO 089
301 0087: MOVLW 03
302 0088: MOVWF 2B
303 .................... if (line==S) line=L3;
304 0089: MOVF 2B,F
305 008A: BTFSS 03.2
306 008B: GOTO 08E
307 008C: MOVLW 03
308 008D: MOVWF 2B
309 .................... if (line==R2) line=R3;
310 008E: MOVF 2B,W
311 008F: SUBLW FE
312 0090: BTFSS 03.2
313 0091: GOTO 094
314 0092: MOVLW FD
315 0093: MOVWF 2B
316 ....................
317 .................... Delay_ms(3); // prodleva na cteni senzoru pred prenosem
318 0094: MOVLW 03
319 0095: MOVWF 3A
320 0096: CALL 065
321 ....................
322 .................... output_low(STROBE); // zapni zobrazovani na posuvnem registru
323 0097: BSF 03.5
324 0098: BCF 06.0
325 0099: BCF 03.5
326 009A: BCF 06.0
327 .................... sensors = spi_read(0); // cteni senzoru
328 009B: MOVF 13,W
329 009C: CLRF 13
330 009D: BSF 03.5
331 009E: BTFSC 14.0
332 009F: GOTO 0A2
333 00A0: BCF 03.5
334 00A1: GOTO 09D
335 00A2: BCF 03.5
336 00A3: MOVF 13,W
337 00A4: MOVWF 2A
338 .................... sensors=~sensors;
339 00A5: COMF 2A,F
340 .................... output_high(STROBE); // vypni zobrazovani na posuvnem registru
341 00A6: BSF 03.5
342 00A7: BCF 06.0
343 00A8: BCF 03.5
344 00A9: BSF 06.0
345 ....................
346 .................... while(true)
347 .................... {
348 .................... Delay_ms(3);
349 00AA: MOVLW 03
350 00AB: MOVWF 3A
351 00AC: CALL 065
352 ....................
353 .................... if (line==L3)
354 00AD: MOVF 2B,W
355 00AE: SUBLW 03
356 00AF: BTFSS 03.2
357 00B0: GOTO 0DB
358 .................... {
359 .................... GO(L,B,160);GO(R,F,160);
360 00B1: MOVF 01,W
361 00B2: SUBLW A0
362 00B3: BTFSS 03.0
363 00B4: GOTO 0BE
364 00B5: BSF 03.5
365 00B6: BCF 05.0
366 00B7: BCF 03.5
367 00B8: BCF 05.0
368 00B9: BSF 03.5
369 00BA: BCF 05.1
370 00BB: BCF 03.5
371 00BC: BSF 05.1
372 00BD: GOTO 0C6
373 00BE: BSF 03.5
374 00BF: BCF 05.0
375 00C0: BCF 03.5
376 00C1: BCF 05.0
377 00C2: BSF 03.5
378 00C3: BCF 05.1
379 00C4: BCF 03.5
380 00C5: BCF 05.1
381 00C6: MOVF 01,W
382 00C7: SUBLW A0
383 00C8: BTFSS 03.0
384 00C9: GOTO 0D3
385 00CA: BSF 03.5
386 00CB: BCF 05.7
387 00CC: BCF 03.5
388 00CD: BCF 05.7
389 00CE: BSF 03.5
390 00CF: BCF 05.6
391 00D0: BCF 03.5
392 00D1: BSF 05.6
393 00D2: GOTO 0DB
394 00D3: BSF 03.5
395 00D4: BCF 05.6
396 00D5: BCF 03.5
397 00D6: BCF 05.6
398 00D7: BSF 03.5
399 00D8: BCF 05.7
400 00D9: BCF 03.5
401 00DA: BCF 05.7
402 .................... };
403 .................... if (line==R3)
404 00DB: MOVF 2B,W
405 00DC: SUBLW FD
406 00DD: BTFSS 03.2
407 00DE: GOTO 109
408 .................... {
409 .................... GO(R,B,160);GO(L,F,160);
410 00DF: MOVF 01,W
411 00E0: SUBLW A0
412 00E1: BTFSS 03.0
413 00E2: GOTO 0EC
414 00E3: BSF 03.5
415 00E4: BCF 05.6
416 00E5: BCF 03.5
417 00E6: BCF 05.6
418 00E7: BSF 03.5
419 00E8: BCF 05.7
420 00E9: BCF 03.5
421 00EA: BSF 05.7
422 00EB: GOTO 0F4
423 00EC: BSF 03.5
424 00ED: BCF 05.6
425 00EE: BCF 03.5
426 00EF: BCF 05.6
427 00F0: BSF 03.5
428 00F1: BCF 05.7
429 00F2: BCF 03.5
430 00F3: BCF 05.7
431 00F4: MOVF 01,W
432 00F5: SUBLW A0
433 00F6: BTFSS 03.0
434 00F7: GOTO 101
435 00F8: BSF 03.5
436 00F9: BCF 05.1
437 00FA: BCF 03.5
438 00FB: BCF 05.1
439 00FC: BSF 03.5
440 00FD: BCF 05.0
441 00FE: BCF 03.5
442 00FF: BSF 05.0
443 0100: GOTO 109
444 0101: BSF 03.5
445 0102: BCF 05.0
446 0103: BCF 03.5
447 0104: BCF 05.0
448 0105: BSF 03.5
449 0106: BCF 05.1
450 0107: BCF 03.5
451 0108: BCF 05.1
452 .................... };
453 .................... if (line==S) {STOPL;STOPR; i++;} else i=0;
454 0109: MOVF 2B,F
455 010A: BTFSS 03.2
456 010B: GOTO 11E
457 010C: BSF 03.5
458 010D: BCF 05.0
459 010E: BCF 03.5
460 010F: BCF 05.0
461 0110: BSF 03.5
462 0111: BCF 05.1
463 0112: BCF 03.5
464 0113: BCF 05.1
465 0114: BSF 03.5
466 0115: BCF 05.6
467 0116: BCF 03.5
468 0117: BCF 05.6
469 0118: BSF 03.5
470 0119: BCF 05.7
471 011A: BCF 03.5
472 011B: BCF 05.7
473 011C: INCF 39,F
474 011D: GOTO 11F
475 011E: CLRF 39
476 ....................
477 .................... if (i>=100) break; // pokud je dostatecne dlouho cara vprostred, vypadni
478 011F: MOVF 39,W
479 0120: SUBLW 63
480 0121: BTFSS 03.0
481 0122: GOTO 159
482 ....................
483 .................... output_low(STROBE); // zapni zobrazovani na posuvnem registru
484 0123: BSF 03.5
485 0124: BCF 06.0
486 0125: BCF 03.5
487 0126: BCF 06.0
488 .................... sensors = spi_read(0); // cteni senzoru
489 0127: MOVF 13,W
490 0128: CLRF 13
491 0129: BSF 03.5
492 012A: BTFSC 14.0
493 012B: GOTO 12E
494 012C: BCF 03.5
495 012D: GOTO 129
496 012E: BCF 03.5
497 012F: MOVF 13,W
498 0130: MOVWF 2A
499 .................... sensors=~sensors;
500 0131: COMF 2A,F
501 .................... output_high(STROBE); // vypni zobrazovani na posuvnem registru
502 0132: BSF 03.5
503 0133: BCF 06.0
504 0134: BCF 03.5
505 0135: BSF 06.0
506 ....................
507 .................... if(bit_test(sensors,3)) //...|...//
508 0136: BTFSS 2A.3
509 0137: GOTO 13A
510 .................... {
511 .................... line=S;
512 0138: CLRF 2B
513 .................... continue;
514 0139: GOTO 0AA
515 .................... }
516 ....................
517 .................... if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu
518 013A: BTFSS 2A.0
519 013B: GOTO 13F
520 .................... {
521 .................... line=L3;
522 013C: MOVLW 03
523 013D: MOVWF 2B
524 .................... continue;
525 013E: GOTO 0AA
526 .................... }
527 ....................
528 .................... if(bit_test(sensors,6)) //......|//
529 013F: BTFSS 2A.6
530 0140: GOTO 144
531 .................... {
532 .................... line=R3;
533 0141: MOVLW FD
534 0142: MOVWF 2B
535 .................... continue;
536 0143: GOTO 0AA
537 .................... }
538 ....................
539 .................... if(bit_test(sensors,1)) //.|.....//
540 0144: BTFSS 2A.1
541 0145: GOTO 149
542 .................... {
543 .................... line=L3;
544 0146: MOVLW 03
545 0147: MOVWF 2B
546 .................... continue;
547 0148: GOTO 0AA
548 .................... }
549 ....................
550 .................... if(bit_test(sensors,5)) //.....|.//
551 0149: BTFSS 2A.5
552 014A: GOTO 14E
553 .................... {
554 .................... line=R3;
555 014B: MOVLW FD
556 014C: MOVWF 2B
557 .................... continue;
558 014D: GOTO 0AA
559 .................... }
560 ....................
561 .................... if (bit_test(sensors,2)) //..|....//
562 014E: BTFSS 2A.2
563 014F: GOTO 153
564 .................... {
565 .................... line=L3;
566 0150: MOVLW 03
567 0151: MOVWF 2B
568 .................... continue;
569 0152: GOTO 0AA
570 .................... }
571 ....................
572 .................... if (bit_test(sensors,4)) //....|..//
573 0153: BTFSS 2A.4
574 0154: GOTO 158
575 .................... {
576 .................... line=R3;
577 0155: MOVLW FD
578 0156: MOVWF 2B
579 .................... continue;
580 0157: GOTO 0AA
581 .................... }
582 .................... }
583 0158: GOTO 0AA
584 .................... }
585 0159: RETLW 00
586 .................... ////////////////////////////////////////////////////////////////////////////////
587 .................... void objizdka()
588 .................... {
589 .................... FL;BR; // doprava 90
590 015A: BSF 03.5
591 015B: BCF 05.1
592 015C: BCF 03.5
593 015D: BCF 05.1
594 015E: BSF 03.5
595 015F: BCF 05.0
596 0160: BCF 03.5
597 0161: BSF 05.0
598 0162: BSF 03.5
599 0163: BCF 05.6
600 0164: BCF 03.5
601 0165: BCF 05.6
602 0166: BSF 03.5
603 0167: BCF 05.7
604 0168: BCF 03.5
605 0169: BSF 05.7
606 .................... Delay_ms(300);
607 016A: MOVLW 02
608 016B: MOVWF 39
609 016C: MOVLW 96
610 016D: MOVWF 3A
611 016E: CALL 065
612 016F: DECFSZ 39,F
613 0170: GOTO 16C
614 .................... BL;FR; // brzdi z toceni
615 0171: BSF 03.5
616 0172: BCF 05.0
617 0173: BCF 03.5
618 0174: BCF 05.0
619 0175: BSF 03.5
620 0176: BCF 05.1
621 0177: BCF 03.5
622 0178: BSF 05.1
623 0179: BSF 03.5
624 017A: BCF 05.7
625 017B: BCF 03.5
626 017C: BCF 05.7
627 017D: BSF 03.5
628 017E: BCF 05.6
629 017F: BCF 03.5
630 0180: BSF 05.6
631 .................... Delay_ms(100);
632 0181: MOVLW 64
633 0182: MOVWF 3A
634 0183: CALL 065
635 .................... STOPL;STOPR;
636 0184: BSF 03.5
637 0185: BCF 05.0
638 0186: BCF 03.5
639 0187: BCF 05.0
640 0188: BSF 03.5
641 0189: BCF 05.1
642 018A: BCF 03.5
643 018B: BCF 05.1
644 018C: BSF 03.5
645 018D: BCF 05.6
646 018E: BCF 03.5
647 018F: BCF 05.6
648 0190: BSF 03.5
649 0191: BCF 05.7
650 0192: BCF 03.5
651 0193: BCF 05.7
652 ....................
653 .................... uhel=STRED;
654 0194: MOVLW 80
655 0195: MOVWF 2C
656 .................... FL;FR;
657 0196: BSF 03.5
658 0197: BCF 05.1
659 0198: BCF 03.5
660 0199: BCF 05.1
661 019A: BSF 03.5
662 019B: BCF 05.0
663 019C: BCF 03.5
664 019D: BSF 05.0
665 019E: BSF 03.5
666 019F: BCF 05.7
667 01A0: BCF 03.5
668 01A1: BCF 05.7
669 01A2: BSF 03.5
670 01A3: BCF 05.6
671 01A4: BCF 03.5
672 01A5: BSF 05.6
673 .................... Delay_ms(380); // rovne
674 01A6: MOVLW 02
675 01A7: MOVWF 39
676 01A8: MOVLW BE
677 01A9: MOVWF 3A
678 01AA: CALL 065
679 01AB: DECFSZ 39,F
680 01AC: GOTO 1A8
681 ....................
682 .................... uhel=STRED-55;
683 01AD: MOVLW 49
684 01AE: MOVWF 2C
685 .................... STOPL;FR;
686 01AF: BSF 03.5
687 01B0: BCF 05.0
688 01B1: BCF 03.5
689 01B2: BCF 05.0
690 01B3: BSF 03.5
691 01B4: BCF 05.1
692 01B5: BCF 03.5
693 01B6: BCF 05.1
694 01B7: BSF 03.5
695 01B8: BCF 05.7
696 01B9: BCF 03.5
697 01BA: BCF 05.7
698 01BB: BSF 03.5
699 01BC: BCF 05.6
700 01BD: BCF 03.5
701 01BE: BSF 05.6
702 .................... Delay_ms(190); // doleva
703 01BF: MOVLW BE
704 01C0: MOVWF 3A
705 01C1: CALL 065
706 ....................
707 .................... uhel=STRED;
708 01C2: MOVLW 80
709 01C3: MOVWF 2C
710 .................... FR;FL;
711 01C4: BSF 03.5
712 01C5: BCF 05.7
713 01C6: BCF 03.5
714 01C7: BCF 05.7
715 01C8: BSF 03.5
716 01C9: BCF 05.6
717 01CA: BCF 03.5
718 01CB: BSF 05.6
719 01CC: BSF 03.5
720 01CD: BCF 05.1
721 01CE: BCF 03.5
722 01CF: BCF 05.1
723 01D0: BSF 03.5
724 01D1: BCF 05.0
725 01D2: BCF 03.5
726 01D3: BSF 05.0
727 .................... Delay_ms(300); // rovne
728 01D4: MOVLW 02
729 01D5: MOVWF 39
730 01D6: MOVLW 96
731 01D7: MOVWF 3A
732 01D8: CALL 065
733 01D9: DECFSZ 39,F
734 01DA: GOTO 1D6
735 ....................
736 .................... uhel=STRED-55;
737 01DB: MOVLW 49
738 01DC: MOVWF 2C
739 .................... FR;STOPL;
740 01DD: BSF 03.5
741 01DE: BCF 05.7
742 01DF: BCF 03.5
743 01E0: BCF 05.7
744 01E1: BSF 03.5
745 01E2: BCF 05.6
746 01E3: BCF 03.5
747 01E4: BSF 05.6
748 01E5: BSF 03.5
749 01E6: BCF 05.0
750 01E7: BCF 03.5
751 01E8: BCF 05.0
752 01E9: BSF 03.5
753 01EA: BCF 05.1
754 01EB: BCF 03.5
755 01EC: BCF 05.1
756 .................... Delay_ms(190); // doleva
757 01ED: MOVLW BE
758 01EE: MOVWF 3A
759 01EF: CALL 065
760 ....................
761 .................... uhel=STRED;
762 01F0: MOVLW 80
763 01F1: MOVWF 2C
764 .................... FR;FL;
765 01F2: BSF 03.5
766 01F3: BCF 05.7
767 01F4: BCF 03.5
768 01F5: BCF 05.7
769 01F6: BSF 03.5
770 01F7: BCF 05.6
771 01F8: BCF 03.5
772 01F9: BSF 05.6
773 01FA: BSF 03.5
774 01FB: BCF 05.1
775 01FC: BCF 03.5
776 01FD: BCF 05.1
777 01FE: BSF 03.5
778 01FF: BCF 05.0
779 0200: BCF 03.5
780 0201: BSF 05.0
781 .................... Delay_ms(100); // rovne
782 0202: MOVLW 64
783 0203: MOVWF 3A
784 0204: CALL 065
785 ....................
786 .................... While((sensors & 0b11111110)!=0) //dokud neni cara
787 .................... {
788 0205: MOVF 2A,W
789 0206: ANDLW FE
790 0207: BTFSC 03.2
791 0208: GOTO 218
792 .................... sensors = spi_read(0); // cteni senzoru
793 0209: MOVF 13,W
794 020A: CLRF 13
795 020B: BSF 03.5
796 020C: BTFSC 14.0
797 020D: GOTO 210
798 020E: BCF 03.5
799 020F: GOTO 20B
800 0210: BCF 03.5
801 0211: MOVF 13,W
802 0212: MOVWF 2A
803 .................... sensors=~sensors;
804 0213: COMF 2A,F
805 .................... Delay_ms(3); // cekani na SLAVE nez pripravi data od cidel
806 0214: MOVLW 03
807 0215: MOVWF 3A
808 0216: CALL 065
809 .................... }
810 0217: GOTO 205
811 .................... BL;BR; // zabrzdi
812 0218: BSF 03.5
813 0219: BCF 05.0
814 021A: BCF 03.5
815 021B: BCF 05.0
816 021C: BSF 03.5
817 021D: BCF 05.1
818 021E: BCF 03.5
819 021F: BSF 05.1
820 0220: BSF 03.5
821 0221: BCF 05.6
822 0222: BCF 03.5
823 0223: BCF 05.6
824 0224: BSF 03.5
825 0225: BCF 05.7
826 0226: BCF 03.5
827 0227: BSF 05.7
828 .................... Delay_ms(250);
829 0228: MOVLW FA
830 0229: MOVWF 3A
831 022A: CALL 065
832 ....................
833 .................... uhel=KOLMO1;
834 022B: MOVLW E1
835 022C: MOVWF 2C
836 .................... FL;BR; // doprava
837 022D: BSF 03.5
838 022E: BCF 05.1
839 022F: BCF 03.5
840 0230: BCF 05.1
841 0231: BSF 03.5
842 0232: BCF 05.0
843 0233: BCF 03.5
844 0234: BSF 05.0
845 0235: BSF 03.5
846 0236: BCF 05.6
847 0237: BCF 03.5
848 0238: BCF 05.6
849 0239: BSF 03.5
850 023A: BCF 05.7
851 023B: BCF 03.5
852 023C: BSF 05.7
853 .................... While((sensors & 0b11111110)!=0) //dokud neni cara
854 .................... {
855 023D: MOVF 2A,W
856 023E: ANDLW FE
857 023F: BTFSC 03.2
858 0240: GOTO 250
859 .................... sensors = spi_read(0); // cteni senzoru
860 0241: MOVF 13,W
861 0242: CLRF 13
862 0243: BSF 03.5
863 0244: BTFSC 14.0
864 0245: GOTO 248
865 0246: BCF 03.5
866 0247: GOTO 243
867 0248: BCF 03.5
868 0249: MOVF 13,W
869 024A: MOVWF 2A
870 .................... sensors=~sensors;
871 024B: COMF 2A,F
872 .................... Delay_ms(3); // cekani na SLAVE nez pripravi data od cidel
873 024C: MOVLW 03
874 024D: MOVWF 3A
875 024E: CALL 065
876 .................... }
877 024F: GOTO 23D
878 .................... STOPL;STOPR; // zabrzdi
879 0250: BSF 03.5
880 0251: BCF 05.0
881 0252: BCF 03.5
882 0253: BCF 05.0
883 0254: BSF 03.5
884 0255: BCF 05.1
885 0256: BCF 03.5
886 0257: BCF 05.1
887 0258: BSF 03.5
888 0259: BCF 05.6
889 025A: BCF 03.5
890 025B: BCF 05.6
891 025C: BSF 03.5
892 025D: BCF 05.7
893 025E: BCF 03.5
894 025F: BCF 05.7
895 .................... Delay_ms(300);
896 0260: MOVLW 02
897 0261: MOVWF 39
898 0262: MOVLW 96
899 0263: MOVWF 3A
900 0264: CALL 065
901 0265: DECFSZ 39,F
902 0266: GOTO 262
903 .................... // delay_ms(250);
904 ....................
905 .................... line=R3;
906 0267: MOVLW FD
907 0268: MOVWF 2B
908 .................... cikcak();
909 0269: CALL 07D
910 .................... }
911 026A: BCF 0A.3
912 026B: GOTO 3CF (RETURN)
913 ....................
914 ....................
915 .................... ////////////////////////////////////////////////////////////////////////////////
916 .................... void main()
917 .................... {
918 026C: CLRF 04
919 026D: MOVLW 1F
920 026E: ANDWF 03,F
921 026F: MOVLW 70
922 0270: BSF 03.5
923 0271: MOVWF 0F
924 0272: BCF 1F.4
925 0273: BCF 1F.5
926 0274: MOVF 1B,W
927 0275: ANDLW 80
928 0276: MOVWF 1B
929 0277: MOVLW 07
930 0278: MOVWF 1C
931 ....................
932 .................... unsigned int8 n;
933 .................... unsigned int8 i,j;
934 .................... unsigned int8 last_sensors;
935 .................... unsigned int8 RozumnaRychlost;
936 ....................
937 .................... setup_adc_ports(sAN5|sAN2|sAN4|sAN6|VSS_VDD); // AD pro kroutitka
938 *
939 027B: BSF 03.5
940 027C: BCF 1F.4
941 027D: BCF 1F.5
942 027E: MOVF 1B,W
943 027F: ANDLW 80
944 0280: IORLW 74
945 0281: MOVWF 1B
946 .................... setup_adc(ADC_CLOCK_INTERNAL);
947 0282: BCF 1F.6
948 0283: BCF 03.5
949 0284: BSF 1F.6
950 0285: BSF 1F.7
951 0286: BSF 03.5
952 0287: BCF 1F.7
953 0288: BCF 03.5
954 0289: BSF 1F.0
955 .................... setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_16);
956 028A: BCF 14.5
957 028B: BSF 03.5
958 028C: BCF 06.2
959 028D: BSF 06.1
960 028E: BCF 06.4
961 028F: MOVLW 31
962 0290: BCF 03.5
963 0291: MOVWF 14
964 0292: MOVLW 00
965 0293: BSF 03.5
966 0294: MOVWF 14
967 .................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
968 0295: MOVF 01,W
969 0296: ANDLW C7
970 0297: IORLW 08
971 0298: MOVWF 01
972 .................... setup_timer_1(T1_DISABLED|T1_DIV_BY_8);
973 0299: MOVLW 30
974 029A: BCF 03.5
975 029B: MOVWF 10
976 .................... setup_timer_2(T2_DIV_BY_16,140,16);
977 029C: MOVLW 78
978 029D: MOVWF 78
979 029E: IORLW 06
980 029F: MOVWF 12
981 02A0: MOVLW 8C
982 02A1: BSF 03.5
983 02A2: MOVWF 12
984 .................... setup_oscillator(OSC_8MHZ|OSC_INTRC);
985 02A3: MOVLW 72
986 02A4: MOVWF 0F
987 ....................
988 .................... STOPR; STOPL; // zastav motory
989 02A5: BCF 05.6
990 02A6: BCF 03.5
991 02A7: BCF 05.6
992 02A8: BSF 03.5
993 02A9: BCF 05.7
994 02AA: BCF 03.5
995 02AB: BCF 05.7
996 02AC: BSF 03.5
997 02AD: BCF 05.0
998 02AE: BCF 03.5
999 02AF: BCF 05.0
1000 02B0: BSF 03.5
1001 02B1: BCF 05.1
1002 02B2: BCF 03.5
1003 02B3: BCF 05.1
1004 .................... Lmotor=0;Rmotor=0;
1005 02B4: CLRF 31
1006 02B5: CLRF 30
1007 02B6: CLRF 33
1008 02B7: CLRF 32
1009 ....................
1010 .................... uhel = STRED; // nastav zadni kolecko na stred
1011 02B8: MOVLW 80
1012 02B9: MOVWF 2C
1013 .................... rovinka = 0;
1014 02BA: CLRF 2F
1015 ....................
1016 .................... enable_interrupts(INT_TIMER2);
1017 02BB: BSF 03.5
1018 02BC: BSF 0C.1
1019 .................... enable_interrupts(GLOBAL);
1020 02BD: MOVLW C0
1021 02BE: BCF 03.5
1022 02BF: IORWF 0B,F
1023 ....................
1024 .................... output_low(IRTX); // zapni IR vysilac
1025 02C0: BSF 03.5
1026 02C1: BCF 06.2
1027 02C2: BCF 03.5
1028 02C3: BCF 06.2
1029 ....................
1030 .................... delay_ms(2000); // musime pockat na diagnostiku slave CPU
1031 02C4: MOVLW 08
1032 02C5: MOVWF 39
1033 02C6: MOVLW FA
1034 02C7: MOVWF 3A
1035 02C8: CALL 065
1036 02C9: DECFSZ 39,F
1037 02CA: GOTO 2C6
1038 ....................
1039 .................... //nastaveni rychlosti
1040 .................... set_adc_channel(CERVENA);
1041 02CB: MOVLW 20
1042 02CC: MOVWF 78
1043 02CD: MOVF 1F,W
1044 02CE: ANDLW C7
1045 02CF: IORWF 78,W
1046 02D0: MOVWF 1F
1047 ....................
1048 .................... Delay_ms(1);
1049 02D1: MOVLW 01
1050 02D2: MOVWF 3A
1051 02D3: CALL 065
1052 .................... RozumnaRychlost=R+(read_adc()>>2); // rychlost rovne +63; kroutitko dava 0-63
1053 02D4: BSF 1F.2
1054 02D5: BTFSC 1F.2
1055 02D6: GOTO 2D5
1056 02D7: MOVF 1E,W
1057 02D8: MOVWF 77
1058 02D9: RRF 77,F
1059 02DA: RRF 77,F
1060 02DB: MOVLW 3F
1061 02DC: ANDWF 77,F
1062 02DD: MOVF 77,W
1063 02DE: ADDLW 64
1064 02DF: MOVWF 38
1065 .................... set_adc_channel(MODRA);
1066 02E0: MOVLW 10
1067 02E1: MOVWF 78
1068 02E2: MOVF 1F,W
1069 02E3: ANDLW C7
1070 02E4: IORWF 78,W
1071 02E5: MOVWF 1F
1072 .................... Delay_ms(1);
1073 02E6: MOVLW 01
1074 02E7: MOVWF 3A
1075 02E8: CALL 065
1076 .................... turn=speed-32+(read_adc()>>2); // rychlost toceni +-32; kroutitko dava 0-63
1077 02E9: MOVLW 20
1078 02EA: SUBWF 2D,W
1079 02EB: MOVWF 39
1080 02EC: BSF 1F.2
1081 02ED: BTFSC 1F.2
1082 02EE: GOTO 2ED
1083 02EF: MOVF 1E,W
1084 02F0: MOVWF 77
1085 02F1: RRF 77,F
1086 02F2: RRF 77,F
1087 02F3: MOVLW 3F
1088 02F4: ANDWF 77,F
1089 02F5: MOVF 77,W
1090 02F6: ADDWF 39,W
1091 02F7: MOVWF 2E
1092 ....................
1093 .................... speed=R17;
1094 02F8: MOVLW C8
1095 02F9: MOVWF 2D
1096 ....................
1097 .................... while(true)
1098 .................... {
1099 ....................
1100 .................... GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory PWM podle promenych Lmotor a Rmotor
1101 02FA: MOVF 01,W
1102 02FB: BTFSS 00.7
1103 02FC: GOTO 300
1104 02FD: BTFSS 31.7
1105 02FE: GOTO 308
1106 02FF: GOTO 302
1107 0300: BTFSC 31.7
1108 0301: GOTO 311
1109 0302: MOVF 31,F
1110 0303: BTFSS 03.2
1111 0304: GOTO 308
1112 0305: SUBWF 30,W
1113 0306: BTFSS 03.0
1114 0307: GOTO 311
1115 0308: BSF 03.5
1116 0309: BCF 05.1
1117 030A: BCF 03.5
1118 030B: BCF 05.1
1119 030C: BSF 03.5
1120 030D: BCF 05.0
1121 030E: BCF 03.5
1122 030F: BSF 05.0
1123 0310: GOTO 319
1124 0311: BSF 03.5
1125 0312: BCF 05.0
1126 0313: BCF 03.5
1127 0314: BCF 05.0
1128 0315: BSF 03.5
1129 0316: BCF 05.1
1130 0317: BCF 03.5
1131 0318: BCF 05.1
1132 0319: MOVF 01,W
1133 031A: BTFSS 00.7
1134 031B: GOTO 31F
1135 031C: BTFSS 33.7
1136 031D: GOTO 327
1137 031E: GOTO 321
1138 031F: BTFSC 33.7
1139 0320: GOTO 330
1140 0321: MOVF 33,F
1141 0322: BTFSS 03.2
1142 0323: GOTO 327
1143 0324: SUBWF 32,W
1144 0325: BTFSS 03.0
1145 0326: GOTO 330
1146 0327: BSF 03.5
1147 0328: BCF 05.7
1148 0329: BCF 03.5
1149 032A: BCF 05.7
1150 032B: BSF 03.5
1151 032C: BCF 05.6
1152 032D: BCF 03.5
1153 032E: BSF 05.6
1154 032F: GOTO 338
1155 0330: BSF 03.5
1156 0331: BCF 05.6
1157 0332: BCF 03.5
1158 0333: BCF 05.6
1159 0334: BSF 03.5
1160 0335: BCF 05.7
1161 0336: BCF 03.5
1162 0337: BCF 05.7
1163 ....................
1164 .................... delay_us(2000); // cekani na SLAVE, nez pripravi data od cidel
1165 0338: CLRWDT
1166 0339: MOVLW 01
1167 033A: MOVWF 3A
1168 033B: CALL 065
1169 033C: MOVLW 09
1170 033D: MOVWF 39
1171 033E: CLRF 29
1172 033F: BTFSC 0B.7
1173 0340: BSF 29.7
1174 0341: BCF 0B.7
1175 0342: MOVLW 6D
1176 0343: MOVWF 3D
1177 0344: CALL 037
1178 0345: BTFSC 29.7
1179 0346: BSF 0B.7
1180 0347: DECFSZ 39,F
1181 0348: GOTO 33E
1182 ....................
1183 .................... last_sensors=sensors;
1184 0349: MOVF 2A,W
1185 034A: MOVWF 37
1186 ....................
1187 .................... output_low(STROBE); // vypni zobrazovani na posuvnem registru
1188 034B: BSF 03.5
1189 034C: BCF 06.0
1190 034D: BCF 03.5
1191 034E: BCF 06.0
1192 .................... sensors = spi_read(0); // cteni senzoru
1193 034F: MOVF 13,W
1194 0350: CLRF 13
1195 0351: BSF 03.5
1196 0352: BTFSC 14.0
1197 0353: GOTO 356
1198 0354: BCF 03.5
1199 0355: GOTO 351
1200 0356: BCF 03.5
1201 0357: MOVF 13,W
1202 0358: MOVWF 2A
1203 .................... sensors=~sensors; // neguj prijata data
1204 0359: COMF 2A,F
1205 .................... output_high(STROBE); // zobraz data na posuvnem registru
1206 035A: BSF 03.5
1207 035B: BCF 06.0
1208 035C: BCF 03.5
1209 035D: BSF 06.0
1210 ....................
1211 .................... i=0; // havarijni kod
1212 035E: CLRF 35
1213 .................... for (n=0; n<=6; n++)
1214 035F: CLRF 34
1215 0360: MOVF 34,W
1216 0361: SUBLW 06
1217 0362: BTFSS 03.0
1218 0363: GOTO 372
1219 .................... {
1220 .................... if(bit_test(sensors,n)) i++;
1221 0364: MOVF 2A,W
1222 0365: MOVWF 77
1223 0366: MOVF 34,W
1224 0367: MOVWF 78
1225 0368: BTFSC 03.2
1226 0369: GOTO 36E
1227 036A: BCF 03.0
1228 036B: RRF 77,F
1229 036C: DECFSZ 78,F
1230 036D: GOTO 36A
1231 036E: BTFSC 77.0
1232 036F: INCF 35,F
1233 .................... }
1234 0370: INCF 34,F
1235 0371: GOTO 360
1236 .................... if (i>4) // zastavi, kdyz je cerno pod vice nez tremi cidly
1237 0372: MOVF 35,W
1238 0373: SUBLW 04
1239 0374: BTFSC 03.0
1240 0375: GOTO 39E
1241 .................... {
1242 .................... BL; BR;
1243 0376: BSF 03.5
1244 0377: BCF 05.0
1245 0378: BCF 03.5
1246 0379: BCF 05.0
1247 037A: BSF 03.5
1248 037B: BCF 05.1
1249 037C: BCF 03.5
1250 037D: BSF 05.1
1251 037E: BSF 03.5
1252 037F: BCF 05.6
1253 0380: BCF 03.5
1254 0381: BCF 05.6
1255 0382: BSF 03.5
1256 0383: BCF 05.7
1257 0384: BCF 03.5
1258 0385: BSF 05.7
1259 .................... delay_ms(300);
1260 0386: MOVLW 02
1261 0387: MOVWF 39
1262 0388: MOVLW 96
1263 0389: MOVWF 3A
1264 038A: CALL 065
1265 038B: DECFSZ 39,F
1266 038C: GOTO 388
1267 .................... STOPR; STOPL;
1268 038D: BSF 03.5
1269 038E: BCF 05.6
1270 038F: BCF 03.5
1271 0390: BCF 05.6
1272 0391: BSF 03.5
1273 0392: BCF 05.7
1274 0393: BCF 03.5
1275 0394: BCF 05.7
1276 0395: BSF 03.5
1277 0396: BCF 05.0
1278 0397: BCF 03.5
1279 0398: BCF 05.0
1280 0399: BSF 03.5
1281 039A: BCF 05.1
1282 039B: BCF 03.5
1283 039C: BCF 05.1
1284 .................... While(true);
1285 039D: GOTO 39D
1286 .................... };
1287 ....................
1288 .................... /*
1289 .................... if (!input(CIHLA)) // dalkova detekce cihly
1290 .................... {
1291 .................... speed=PRED_CIHLOU;
1292 .................... }
1293 .................... else
1294 .................... {
1295 .................... speed=RozumnaRychlost;
1296 .................... }
1297 .................... */
1298 .................... if (bit_test(sensors,7)) // detekce cihly
1299 039E: BTFSS 2A.7
1300 039F: GOTO 3CF
1301 .................... {
1302 .................... BR;BL;
1303 03A0: BSF 03.5
1304 03A1: BCF 05.6
1305 03A2: BCF 03.5
1306 03A3: BCF 05.6
1307 03A4: BSF 03.5
1308 03A5: BCF 05.7
1309 03A6: BCF 03.5
1310 03A7: BSF 05.7
1311 03A8: BSF 03.5
1312 03A9: BCF 05.0
1313 03AA: BCF 03.5
1314 03AB: BCF 05.0
1315 03AC: BSF 03.5
1316 03AD: BCF 05.1
1317 03AE: BCF 03.5
1318 03AF: BSF 05.1
1319 .................... Delay_ms(400);
1320 03B0: MOVLW 02
1321 03B1: MOVWF 39
1322 03B2: MOVLW C8
1323 03B3: MOVWF 3A
1324 03B4: CALL 065
1325 03B5: DECFSZ 39,F
1326 03B6: GOTO 3B2
1327 .................... STOPR;STOPL;
1328 03B7: BSF 03.5
1329 03B8: BCF 05.6
1330 03B9: BCF 03.5
1331 03BA: BCF 05.6
1332 03BB: BSF 03.5
1333 03BC: BCF 05.7
1334 03BD: BCF 03.5
1335 03BE: BCF 05.7
1336 03BF: BSF 03.5
1337 03C0: BCF 05.0
1338 03C1: BCF 03.5
1339 03C2: BCF 05.0
1340 03C3: BSF 03.5
1341 03C4: BCF 05.1
1342 03C5: BCF 03.5
1343 03C6: BCF 05.1
1344 .................... // if (1==IRcheck()) // kontrola, jestli nebylo rusene cidlo
1345 .................... {
1346 .................... Delay_ms(100);
1347 03C7: MOVLW 64
1348 03C8: MOVWF 3A
1349 03C9: CALL 065
1350 .................... cikcak();
1351 03CA: CALL 07D
1352 .................... delay_ms(100);
1353 03CB: MOVLW 64
1354 03CC: MOVWF 3A
1355 03CD: CALL 065
1356 .................... objizdka(); // objede cihlu
1357 03CE: GOTO 15A
1358 .................... }
1359 .................... }
1360 ....................
1361 .................... if (speed > RozumnaRychlost) speed--; // postupne zpomaleni na Roz. Rychl.
1362 03CF: MOVF 2D,W
1363 03D0: SUBWF 38,W
1364 03D1: BTFSS 03.0
1365 03D2: DECF 2D,F
1366 ....................
1367 .................... if(bit_test(sensors,3)) //...|...//
1368 03D3: BTFSS 2A.3
1369 03D4: GOTO 3E7
1370 .................... {
1371 .................... uhel=STRED;
1372 03D5: MOVLW 80
1373 03D6: MOVWF 2C
1374 .................... Lmotor=speed;
1375 03D7: CLRF 7A
1376 03D8: MOVF 2D,W
1377 03D9: MOVWF 30
1378 03DA: MOVF 7A,W
1379 03DB: MOVWF 31
1380 .................... Rmotor=speed;
1381 03DC: CLRF 7A
1382 03DD: MOVF 2D,W
1383 03DE: MOVWF 32
1384 03DF: MOVF 7A,W
1385 03E0: MOVWF 33
1386 .................... line=S;
1387 03E1: CLRF 2B
1388 .................... if (rovinka < 255) rovinka++;
1389 03E2: INCFSZ 2F,W
1390 03E3: GOTO 3E5
1391 03E4: GOTO 3E6
1392 03E5: INCF 2F,F
1393 .................... continue;
1394 03E6: GOTO 2FA
1395 .................... }
1396 ....................
1397 .................... if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu
1398 03E7: BTFSS 2A.0
1399 03E8: GOTO 3F5
1400 .................... {
1401 .................... uhel=STRED - BEAR3;
1402 03E9: MOVLW 53
1403 03EA: MOVWF 2C
1404 .................... Lmotor=0;
1405 03EB: CLRF 31
1406 03EC: CLRF 30
1407 .................... Rmotor=turn;
1408 03ED: CLRF 7A
1409 03EE: MOVF 2E,W
1410 03EF: MOVWF 32
1411 03F0: MOVF 7A,W
1412 03F1: MOVWF 33
1413 .................... line=L3;
1414 03F2: MOVLW 03
1415 03F3: MOVWF 2B
1416 .................... continue;
1417 03F4: GOTO 2FA
1418 .................... }
1419 ....................
1420 .................... if(bit_test(sensors,6)) //......|//
1421 03F5: BTFSS 2A.6
1422 03F6: GOTO 403
1423 .................... {
1424 .................... uhel=STRED + BEAR3;
1425 03F7: MOVLW AD
1426 03F8: MOVWF 2C
1427 .................... Rmotor=0;
1428 03F9: CLRF 33
1429 03FA: CLRF 32
1430 .................... Lmotor=turn;
1431 03FB: CLRF 7A
1432 03FC: MOVF 2E,W
1433 03FD: MOVWF 30
1434 03FE: MOVF 7A,W
1435 03FF: MOVWF 31
1436 .................... line=R3;
1437 0400: MOVLW FD
1438 0401: MOVWF 2B
1439 .................... continue;
1440 0402: GOTO 2FA
1441 .................... }
1442 ....................
1443 .................... if(bit_test(sensors,1)) //.|.....//
1444 0403: BTFSS 2A.1
1445 0404: GOTO 415
1446 .................... {
1447 .................... uhel=STRED - BEAR2;
1448 0405: MOVLW 67
1449 0406: MOVWF 2C
1450 .................... Lmotor=speed-70;
1451 0407: MOVLW 46
1452 0408: SUBWF 2D,W
1453 0409: CLRF 7A
1454 040A: MOVWF 30
1455 040B: MOVF 7A,W
1456 040C: MOVWF 31
1457 .................... Rmotor=speed;
1458 040D: CLRF 7A
1459 040E: MOVF 2D,W
1460 040F: MOVWF 32
1461 0410: MOVF 7A,W
1462 0411: MOVWF 33
1463 .................... line=L2;
1464 0412: MOVLW 02
1465 0413: MOVWF 2B
1466 .................... continue;
1467 0414: GOTO 2FA
1468 .................... }
1469 ....................
1470 .................... if(bit_test(sensors,5)) //.....|.//
1471 0415: BTFSS 2A.5
1472 0416: GOTO 427
1473 .................... {
1474 .................... uhel=STRED + BEAR2;
1475 0417: MOVLW 99
1476 0418: MOVWF 2C
1477 .................... Rmotor=speed-70;
1478 0419: MOVLW 46
1479 041A: SUBWF 2D,W
1480 041B: CLRF 7A
1481 041C: MOVWF 32
1482 041D: MOVF 7A,W
1483 041E: MOVWF 33
1484 .................... Lmotor=speed;
1485 041F: CLRF 7A
1486 0420: MOVF 2D,W
1487 0421: MOVWF 30
1488 0422: MOVF 7A,W
1489 0423: MOVWF 31
1490 .................... line=R2;
1491 0424: MOVLW FE
1492 0425: MOVWF 2B
1493 .................... continue;
1494 0426: GOTO 2FA
1495 .................... }
1496 ....................
1497 .................... if (bit_test(sensors,2)) //..|....//
1498 0427: BTFSS 2A.2
1499 0428: GOTO 43D
1500 .................... {
1501 .................... uhel=STRED - BEAR1;
1502 0429: MOVLW 76
1503 042A: MOVWF 2C
1504 .................... Lmotor=speed-20;
1505 042B: MOVLW 14
1506 042C: SUBWF 2D,W
1507 042D: CLRF 7A
1508 042E: MOVWF 30
1509 042F: MOVF 7A,W
1510 0430: MOVWF 31
1511 .................... Rmotor=speed;
1512 0431: CLRF 7A
1513 0432: MOVF 2D,W
1514 0433: MOVWF 32
1515 0434: MOVF 7A,W
1516 0435: MOVWF 33
1517 .................... line=L2;
1518 0436: MOVLW 02
1519 0437: MOVWF 2B
1520 .................... if (rovinka<255) rovinka++;
1521 0438: INCFSZ 2F,W
1522 0439: GOTO 43B
1523 043A: GOTO 43C
1524 043B: INCF 2F,F
1525 .................... continue;
1526 043C: GOTO 2FA
1527 .................... }
1528 ....................
1529 .................... if (bit_test(sensors,4)) //....|..//
1530 043D: BTFSS 2A.4
1531 043E: GOTO 453
1532 .................... {
1533 .................... uhel=STRED + BEAR1;
1534 043F: MOVLW 8A
1535 0440: MOVWF 2C
1536 .................... Rmotor=speed-20;
1537 0441: MOVLW 14
1538 0442: SUBWF 2D,W
1539 0443: CLRF 7A
1540 0444: MOVWF 32
1541 0445: MOVF 7A,W
1542 0446: MOVWF 33
1543 .................... Lmotor=speed;
1544 0447: CLRF 7A
1545 0448: MOVF 2D,W
1546 0449: MOVWF 30
1547 044A: MOVF 7A,W
1548 044B: MOVWF 31
1549 .................... line=L2;
1550 044C: MOVLW 02
1551 044D: MOVWF 2B
1552 .................... if (rovinka<255) rovinka++;
1553 044E: INCFSZ 2F,W
1554 044F: GOTO 451
1555 0450: GOTO 452
1556 0451: INCF 2F,F
1557 .................... continue;
1558 0452: GOTO 2FA
1559 .................... }
1560 ....................
1561 ....................
1562 .................... if ((L3==line) || (R3==line)) // Brzdeni pri vyjeti z trate
1563 0453: MOVF 2B,W
1564 0454: SUBLW 03
1565 0455: BTFSC 03.2
1566 0456: GOTO 45B
1567 0457: MOVF 2B,W
1568 0458: SUBLW FD
1569 0459: BTFSS 03.2
1570 045A: GOTO 480
1571 .................... {
1572 .................... if (rovinka>50)
1573 045B: MOVF 2F,W
1574 045C: SUBLW 32
1575 045D: BTFSC 03.0
1576 045E: GOTO 47D
1577 .................... {
1578 .................... BL; BR;
1579 045F: BSF 03.5
1580 0460: BCF 05.0
1581 0461: BCF 03.5
1582 0462: BCF 05.0
1583 0463: BSF 03.5
1584 0464: BCF 05.1
1585 0465: BCF 03.5
1586 0466: BSF 05.1
1587 0467: BSF 03.5
1588 0468: BCF 05.6
1589 0469: BCF 03.5
1590 046A: BCF 05.6
1591 046B: BSF 03.5
1592 046C: BCF 05.7
1593 046D: BCF 03.5
1594 046E: BSF 05.7
1595 .................... Delay_ms(100);
1596 046F: MOVLW 64
1597 0470: MOVWF 3A
1598 0471: CALL 065
1599 .................... if (rovinka > 250 || speed > 170) delay_ms(50);
1600 0472: MOVF 2F,W
1601 0473: SUBLW FA
1602 0474: BTFSS 03.0
1603 0475: GOTO 47A
1604 0476: MOVF 2D,W
1605 0477: SUBLW AA
1606 0478: BTFSC 03.0
1607 0479: GOTO 47D
1608 047A: MOVLW 32
1609 047B: MOVWF 3A
1610 047C: CALL 065
1611 .................... };
1612 .................... rovinka=0;
1613 047D: CLRF 2F
1614 .................... speed=R17;
1615 047E: MOVLW C8
1616 047F: MOVWF 2D
1617 .................... };
1618 .................... }
1619 0480: GOTO 2FA
1620 .................... }
1621 0481: SLEEP
1622  
1623 Configuration Fuses:
1624 Word 1: 3F38 NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT INTRC_IO
1625 Word 2: 3FFC NOFCMEN NOIESO