/Designs/ROBOTS/Merkur/SW/turn_L/tank.LST
0,0 → 1,2051
CCS PCM C Compiler, Version 3.221, 27853 26-IV-05 21:32
 
Filename: D:\KAKLIK\programy\PIC_C\roboti\merkur\PIC16F88\turn_L\tank.LST
 
ROM used: 1705 words (42%)
Largest free fragment is 2048
RAM used: 87 (50%) at main() level
98 (56%) worst case
Stack: 4 worst case (3 in main + 1 for interrupts)
 
*
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 4E8
0003: NOP
0004: MOVWF 7F
0005: SWAPF 03,W
0006: CLRF 03
0007: MOVWF 21
0008: MOVF 7F,W
0009: MOVWF 20
000A: MOVF 0A,W
000B: MOVWF 28
000C: CLRF 0A
000D: SWAPF 20,F
000E: MOVF 04,W
000F: MOVWF 22
0010: MOVF 77,W
0011: MOVWF 23
0012: MOVF 78,W
0013: MOVWF 24
0014: MOVF 79,W
0015: MOVWF 25
0016: MOVF 7A,W
0017: MOVWF 26
0018: MOVF 7B,W
0019: MOVWF 27
001A: BCF 03.7
001B: BCF 03.5
001C: MOVLW 8C
001D: MOVWF 04
001E: BTFSS 00.1
001F: GOTO 022
0020: BTFSC 0C.1
0021: GOTO 035
0022: MOVF 22,W
0023: MOVWF 04
0024: MOVF 23,W
0025: MOVWF 77
0026: MOVF 24,W
0027: MOVWF 78
0028: MOVF 25,W
0029: MOVWF 79
002A: MOVF 26,W
002B: MOVWF 7A
002C: MOVF 27,W
002D: MOVWF 7B
002E: MOVF 28,W
002F: MOVWF 0A
0030: SWAPF 21,W
0031: MOVWF 03
0032: SWAPF 7F,F
0033: SWAPF 7F,W
0034: RETFIE
0035: BCF 0A.3
0036: GOTO 037
.................... #include "tank.h"
.................... #include <16F88.h>
.................... //////// Standard Header file for the PIC16F88 device ////////////////
.................... #device PIC16F88
.................... #list
....................
.................... #device adc=8
.................... #fuses NOWDT,INTRC_IO, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, NOFCMEN, NOIESO
.................... #use delay(clock=4000000)
*
0047: MOVLW 12
0048: BSF 03.5
0049: SUBWF 22,F
004A: BTFSS 03.0
004B: GOTO 05A
004C: MOVLW A2
004D: MOVWF 04
004E: MOVLW FC
004F: ANDWF 00,F
0050: BCF 03.0
0051: RRF 00,F
0052: RRF 00,F
0053: MOVF 00,W
0054: BTFSC 03.2
0055: GOTO 05A
0056: GOTO 058
0057: NOP
0058: DECFSZ 00,F
0059: GOTO 057
005A: BCF 03.5
005B: RETLW 00
*
0088: MOVLW 75
0089: MOVWF 04
008A: MOVF 00,W
008B: BTFSC 03.2
008C: GOTO 09C
008D: MOVLW 01
008E: MOVWF 78
008F: CLRF 77
0090: DECFSZ 77,F
0091: GOTO 090
0092: DECFSZ 78,F
0093: GOTO 08F
0094: MOVLW 4A
0095: MOVWF 77
0096: DECFSZ 77,F
0097: GOTO 096
0098: NOP
0099: NOP
009A: DECFSZ 00,F
009B: GOTO 08D
009C: RETLW 00
....................
....................
....................
.................... #define DEBUG
....................
.................... #define TXo PIN_A3 // To the transmitter modulator
.................... #include "AX25.c" // podprogram pro prenos telemetrie
.................... #list
....................
....................
.................... unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru
.................... unsigned int8 line; // na ktere strane byla detekovana cara
.................... unsigned int8 speed; // rychlost zataceni
.................... unsigned int8 rovinka; // pocitadlo pro zjisteni rovneho useku
.................... unsigned int8 last; // kde byla cara, kdyz byly minule cidla mimo
.................... unsigned int8 movement; // obsahuje aktualni smer zataceni
.................... unsigned int8 dira; // pocita dobu po kterou je ztracena cara
....................
.................... // Konstanty pro dynamiku pohybu
.................... #define T_DIRA 87 // po jakem case zataceni se detekuje dira
.................... #define INC_SPEED 1 // prirustek rychlosti v jednom kroku
.................... #define FW_POMALU 230 // trochu mimo caru vnitrni pas
.................... #define FW_ZATACKA 200 // rychlost vnejsiho kola pri zataceni
.................... #define FW_STREDNE 240 // trochu mimo caru vnejsi pas
.................... #define COUVANI 600 // couvnuti zpet na caru, po detekci diry
.................... #define PRES_DIRU 250
.................... #define MAX_ROVINKA (255-FW_STREDNE)
.................... #define TRESHOLD 10 // rozhodovaci uroven komparatoru, 0xF = 0.75*Vdd
.................... #define BUMPER_TRESHOLD 128
.................... #define CIK_CAK 30000
.................... #define T_CIHLA 50 // perioda detekce cihly
....................
.................... //motory //Napred vypnout potom zapnout!
.................... #define FR output_low(PIN_B5); output_high(PIN_B4) // Vpred
.................... #define FL output_low(PIN_B7); output_high(PIN_B6)
.................... #define BR output_low(PIN_B4); output_high(PIN_B5) // Vzad
.................... #define BL output_low(PIN_B6); output_high(PIN_B7)
.................... #define STOPR output_low(PIN_B4);output_low(PIN_B5) // Zastav
.................... #define STOPL output_low(PIN_B6);output_low(PIN_B7)
....................
.................... #define L 0b10 // left
.................... #define R 0b01 // right
.................... #define S 0b11 // straight
....................
.................... //cidla
.................... #define RSENSOR C2OUT // Senzory na caru
.................... #define LSENSOR C1OUT
.................... #define BUMPER PIN_A4 // Senzor na cihlu
....................
.................... #define DIAG_SERVO PIN_B3 // Propojka pro diagnosticky mod
.................... #define DIAG_SENSORS PIN_B2 // Propojka pro diagnosticky mod
....................
.................... #DEFINE SOUND_HI PIN_A6 // komplementarni vystupy pro piezo pipak
.................... #DEFINE SOUND_LO PIN_A7
....................
.................... char AXstring[40]; // Buffer pro prenos telemetrie
....................
.................... // makro pro PWM
.................... #define GO(motor, direction, power) if(get_timer0()<=power) \
.................... {direction##motor;} else {stop##motor;}
....................
.................... #int_TIMER2
.................... void TIMER2_isr()
.................... {
.................... if (speed<255) speed+=INC_SPEED;
*
0037: INCFSZ 42,W
0038: GOTO 03A
0039: GOTO 03C
003A: MOVLW 01
003B: ADDWF 42,F
.................... if (rovinka<MAX_ROVINKA) rovinka++;
003C: MOVF 43,W
003D: SUBLW 0E
003E: BTFSC 03.0
003F: INCF 43,F
.................... if (dira<=T_DIRA) dira++;
0040: MOVF 46,W
0041: SUBLW 57
0042: BTFSC 03.0
0043: INCF 46,F
.................... }
.................... // Primitivni Pipani
0044: BCF 0C.1
0045: BCF 0A.3
0046: GOTO 022
.................... void beep(unsigned int16 period, unsigned int16 length)
.................... {
.................... unsigned int16 nn;
....................
.................... for(nn=length; nn>0; nn--)
*
005C: MOVF 7D,W
005D: BSF 03.5
005E: MOVWF 21
005F: MOVF 7C,W
0060: MOVWF 20
0061: MOVF 20,F
0062: BTFSS 03.2
0063: GOTO 067
0064: MOVF 21,F
0065: BTFSC 03.2
0066: GOTO 086
.................... {
.................... output_high(SOUND_HI);output_low(SOUND_LO);
0067: BCF 05.6
0068: BCF 03.5
0069: BSF 05.6
006A: BSF 03.5
006B: BCF 05.7
006C: BCF 03.5
006D: BCF 05.7
.................... delay_us(period);
006E: MOVF 74,W
006F: BSF 03.5
0070: MOVWF 22
0071: BCF 03.5
0072: CALL 047
.................... output_high(SOUND_LO);output_low(SOUND_HI);
0073: BSF 03.5
0074: BCF 05.7
0075: BCF 03.5
0076: BSF 05.7
0077: BSF 03.5
0078: BCF 05.6
0079: BCF 03.5
007A: BCF 05.6
.................... delay_us(period);
007B: MOVF 74,W
007C: BSF 03.5
007D: MOVWF 22
007E: BCF 03.5
007F: CALL 047
.................... }
0080: BSF 03.5
0081: MOVF 20,W
0082: BTFSC 03.2
0083: DECF 21,F
0084: DECF 20,F
0085: GOTO 061
.................... }
0086: BCF 03.5
0087: RETLW 00
.................... /******************************************************************************/
.................... void diagnostika()
.................... {
.................... unsigned int16 n;
....................
.................... while (input(DIAG_SERVO)) // Propojka, ktera spousti diagnostiku
.................... {
*
009D: BSF 03.5
009E: BSF 06.3
009F: BCF 03.5
00A0: BTFSS 06.3
00A1: GOTO 1C8
.................... for (n=500; n<800; n+=100)
00A2: MOVLW 01
00A3: MOVWF 72
00A4: MOVLW F4
00A5: MOVWF 71
00A6: MOVF 72,W
00A7: SUBLW 03
00A8: BTFSS 03.0
00A9: GOTO 0BE
00AA: BTFSS 03.2
00AB: GOTO 0B0
00AC: MOVF 71,W
00AD: SUBLW 1F
00AE: BTFSS 03.0
00AF: GOTO 0BE
.................... {
.................... beep(n,n); //beep UP
00B0: MOVF 72,W
00B1: MOVWF 75
00B2: MOVF 71,W
00B3: MOVWF 74
00B4: MOVF 72,W
00B5: MOVWF 7D
00B6: MOVF 71,W
00B7: MOVWF 7C
00B8: CALL 05C
.................... };
00B9: MOVLW 64
00BA: ADDWF 71,F
00BB: BTFSC 03.0
00BC: INCF 72,F
00BD: GOTO 0A6
.................... Delay_ms(1000);
00BE: MOVLW 04
00BF: MOVWF 73
00C0: MOVLW FA
00C1: MOVWF 75
00C2: CALL 088
00C3: DECFSZ 73,F
00C4: GOTO 0C0
.................... //zastav vse
.................... STOPL; STOPR;
00C5: BSF 03.5
00C6: BCF 06.6
00C7: BCF 03.5
00C8: BCF 06.6
00C9: BSF 03.5
00CA: BCF 06.7
00CB: BCF 03.5
00CC: BCF 06.7
00CD: BSF 03.5
00CE: BCF 06.4
00CF: BCF 03.5
00D0: BCF 06.4
00D1: BSF 03.5
00D2: BCF 06.5
00D3: BCF 03.5
00D4: BCF 06.5
.................... //pravy pas
.................... FR; Delay_ms(1000); STOPR; Delay_ms(1000);
00D5: BSF 03.5
00D6: BCF 06.5
00D7: BCF 03.5
00D8: BCF 06.5
00D9: BSF 03.5
00DA: BCF 06.4
00DB: BCF 03.5
00DC: BSF 06.4
00DD: MOVLW 04
00DE: MOVWF 73
00DF: MOVLW FA
00E0: MOVWF 75
00E1: CALL 088
00E2: DECFSZ 73,F
00E3: GOTO 0DF
00E4: BSF 03.5
00E5: BCF 06.4
00E6: BCF 03.5
00E7: BCF 06.4
00E8: BSF 03.5
00E9: BCF 06.5
00EA: BCF 03.5
00EB: BCF 06.5
00EC: MOVLW 04
00ED: MOVWF 73
00EE: MOVLW FA
00EF: MOVWF 75
00F0: CALL 088
00F1: DECFSZ 73,F
00F2: GOTO 0EE
.................... BR; Delay_ms(1000); STOPR; Delay_ms(1000);
00F3: BSF 03.5
00F4: BCF 06.4
00F5: BCF 03.5
00F6: BCF 06.4
00F7: BSF 03.5
00F8: BCF 06.5
00F9: BCF 03.5
00FA: BSF 06.5
00FB: MOVLW 04
00FC: MOVWF 73
00FD: MOVLW FA
00FE: MOVWF 75
00FF: CALL 088
0100: DECFSZ 73,F
0101: GOTO 0FD
0102: BSF 03.5
0103: BCF 06.4
0104: BCF 03.5
0105: BCF 06.4
0106: BSF 03.5
0107: BCF 06.5
0108: BCF 03.5
0109: BCF 06.5
010A: MOVLW 04
010B: MOVWF 73
010C: MOVLW FA
010D: MOVWF 75
010E: CALL 088
010F: DECFSZ 73,F
0110: GOTO 10C
.................... Beep(880,100); Delay_ms(1000);
0111: MOVLW 03
0112: MOVWF 75
0113: MOVLW 70
0114: MOVWF 74
0115: CLRF 7D
0116: MOVLW 64
0117: MOVWF 7C
0118: CALL 05C
0119: MOVLW 04
011A: MOVWF 73
011B: MOVLW FA
011C: MOVWF 75
011D: CALL 088
011E: DECFSZ 73,F
011F: GOTO 11B
.................... //levy pas
.................... FL; Delay_ms(1000); STOPL; Delay_ms(1000);
0120: BSF 03.5
0121: BCF 06.7
0122: BCF 03.5
0123: BCF 06.7
0124: BSF 03.5
0125: BCF 06.6
0126: BCF 03.5
0127: BSF 06.6
0128: MOVLW 04
0129: MOVWF 73
012A: MOVLW FA
012B: MOVWF 75
012C: CALL 088
012D: DECFSZ 73,F
012E: GOTO 12A
012F: BSF 03.5
0130: BCF 06.6
0131: BCF 03.5
0132: BCF 06.6
0133: BSF 03.5
0134: BCF 06.7
0135: BCF 03.5
0136: BCF 06.7
0137: MOVLW 04
0138: MOVWF 73
0139: MOVLW FA
013A: MOVWF 75
013B: CALL 088
013C: DECFSZ 73,F
013D: GOTO 139
.................... BL; Delay_ms(1000); STOPL; Delay_ms(1000);
013E: BSF 03.5
013F: BCF 06.6
0140: BCF 03.5
0141: BCF 06.6
0142: BSF 03.5
0143: BCF 06.7
0144: BCF 03.5
0145: BSF 06.7
0146: MOVLW 04
0147: MOVWF 73
0148: MOVLW FA
0149: MOVWF 75
014A: CALL 088
014B: DECFSZ 73,F
014C: GOTO 148
014D: BSF 03.5
014E: BCF 06.6
014F: BCF 03.5
0150: BCF 06.6
0151: BSF 03.5
0152: BCF 06.7
0153: BCF 03.5
0154: BCF 06.7
0155: MOVLW 04
0156: MOVWF 73
0157: MOVLW FA
0158: MOVWF 75
0159: CALL 088
015A: DECFSZ 73,F
015B: GOTO 157
.................... Beep(880,100); Delay_ms(1000);
015C: MOVLW 03
015D: MOVWF 75
015E: MOVLW 70
015F: MOVWF 74
0160: CLRF 7D
0161: MOVLW 64
0162: MOVWF 7C
0163: CALL 05C
0164: MOVLW 04
0165: MOVWF 73
0166: MOVLW FA
0167: MOVWF 75
0168: CALL 088
0169: DECFSZ 73,F
016A: GOTO 166
.................... //oba pasy
.................... FL; FR; Delay_ms(1000); STOPL; STOPR; Delay_ms(1000);
016B: BSF 03.5
016C: BCF 06.7
016D: BCF 03.5
016E: BCF 06.7
016F: BSF 03.5
0170: BCF 06.6
0171: BCF 03.5
0172: BSF 06.6
0173: BSF 03.5
0174: BCF 06.5
0175: BCF 03.5
0176: BCF 06.5
0177: BSF 03.5
0178: BCF 06.4
0179: BCF 03.5
017A: BSF 06.4
017B: MOVLW 04
017C: MOVWF 73
017D: MOVLW FA
017E: MOVWF 75
017F: CALL 088
0180: DECFSZ 73,F
0181: GOTO 17D
0182: BSF 03.5
0183: BCF 06.6
0184: BCF 03.5
0185: BCF 06.6
0186: BSF 03.5
0187: BCF 06.7
0188: BCF 03.5
0189: BCF 06.7
018A: BSF 03.5
018B: BCF 06.4
018C: BCF 03.5
018D: BCF 06.4
018E: BSF 03.5
018F: BCF 06.5
0190: BCF 03.5
0191: BCF 06.5
0192: MOVLW 04
0193: MOVWF 73
0194: MOVLW FA
0195: MOVWF 75
0196: CALL 088
0197: DECFSZ 73,F
0198: GOTO 194
.................... BL; BR; Delay_ms(1000); STOPL; STOPR; Delay_ms(1000);
0199: BSF 03.5
019A: BCF 06.6
019B: BCF 03.5
019C: BCF 06.6
019D: BSF 03.5
019E: BCF 06.7
019F: BCF 03.5
01A0: BSF 06.7
01A1: BSF 03.5
01A2: BCF 06.4
01A3: BCF 03.5
01A4: BCF 06.4
01A5: BSF 03.5
01A6: BCF 06.5
01A7: BCF 03.5
01A8: BSF 06.5
01A9: MOVLW 04
01AA: MOVWF 73
01AB: MOVLW FA
01AC: MOVWF 75
01AD: CALL 088
01AE: DECFSZ 73,F
01AF: GOTO 1AB
01B0: BSF 03.5
01B1: BCF 06.6
01B2: BCF 03.5
01B3: BCF 06.6
01B4: BSF 03.5
01B5: BCF 06.7
01B6: BCF 03.5
01B7: BCF 06.7
01B8: BSF 03.5
01B9: BCF 06.4
01BA: BCF 03.5
01BB: BCF 06.4
01BC: BSF 03.5
01BD: BCF 06.5
01BE: BCF 03.5
01BF: BCF 06.5
01C0: MOVLW 04
01C1: MOVWF 73
01C2: MOVLW FA
01C3: MOVWF 75
01C4: CALL 088
01C5: DECFSZ 73,F
01C6: GOTO 1C2
.................... };
01C7: GOTO 09D
.................... while (input(DIAG_SENSORS))
.................... {
01C8: BSF 03.5
01C9: BSF 06.2
01CA: BCF 03.5
01CB: BTFSS 06.2
01CC: GOTO 1FB
.................... if (RSENSOR) beep(900,500);
01CD: BSF 03.5
01CE: BTFSS 1C.7
01CF: GOTO 1DB
01D0: MOVLW 03
01D1: MOVWF 75
01D2: MOVLW 84
01D3: MOVWF 74
01D4: MOVLW 01
01D5: MOVWF 7D
01D6: MOVLW F4
01D7: MOVWF 7C
01D8: BCF 03.5
01D9: CALL 05C
01DA: BSF 03.5
.................... if (LSENSOR) beep(800,500);
01DB: BTFSS 1C.6
01DC: GOTO 1E8
01DD: MOVLW 03
01DE: MOVWF 75
01DF: MOVLW 20
01E0: MOVWF 74
01E1: MOVLW 01
01E2: MOVWF 7D
01E3: MOVLW F4
01E4: MOVWF 7C
01E5: BCF 03.5
01E6: CALL 05C
01E7: BSF 03.5
.................... if ((read_adc(ADC_READ_ONLY)<BUMPER_TRESHOLD)) beep(1000,500);
01E8: BCF 03.5
01E9: BTFSS 1F.2
01EA: GOTO 1ED
01EB: BSF 03.5
01EC: GOTO 1E8
01ED: MOVF 1E,W
01EE: SUBLW 7F
01EF: BTFSS 03.0
01F0: GOTO 1FA
01F1: MOVLW 03
01F2: MOVWF 75
01F3: MOVLW E8
01F4: MOVWF 74
01F5: MOVLW 01
01F6: MOVWF 7D
01F7: MOVLW F4
01F8: MOVWF 7C
01F9: CALL 05C
.................... };
01FA: GOTO 1C8
.................... }
01FB: BCF 0A.3
01FC: GOTO 596 (RETURN)
.................... ///////////////////////////////////////////////////////////////////////////////
.................... void cikcak()
.................... {
.................... unsigned int16 n;
.................... sem1:
.................... n=CIK_CAK;
01FD: MOVLW 75
01FE: MOVWF 75
01FF: MOVLW 30
0200: MOVWF 74
.................... while (0==RSENSOR||LSENSOR) // zkontroluj caru
.................... {
0201: MOVLW 00
0202: BSF 03.5
0203: BTFSC 1C.7
0204: MOVLW 01
0205: XORLW 00
0206: BTFSC 03.2
0207: GOTO 20A
0208: BTFSS 1C.6
0209: GOTO 264
.................... if (n==CIK_CAK) // zmen smer zataceni
020A: MOVF 74,W
020B: SUBLW 30
020C: BTFSS 03.2
020D: GOTO 25E
020E: MOVF 75,W
020F: SUBLW 75
0210: BTFSS 03.2
0211: GOTO 25E
.................... {
.................... n=0;
0212: CLRF 75
0213: CLRF 74
.................... switch(movement)
.................... {
0214: BCF 03.5
0215: MOVF 45,W
0216: XORLW 02
0217: BTFSC 03.2
0218: GOTO 220
0219: XORLW 03
021A: BTFSC 03.2
021B: GOTO 233
021C: XORLW 02
021D: BTFSC 03.2
021E: GOTO 246
021F: GOTO 25D
.................... case L:
.................... FL;BR;
0220: BSF 03.5
0221: BCF 06.7
0222: BCF 03.5
0223: BCF 06.7
0224: BSF 03.5
0225: BCF 06.6
0226: BCF 03.5
0227: BSF 06.6
0228: BSF 03.5
0229: BCF 06.4
022A: BCF 03.5
022B: BCF 06.4
022C: BSF 03.5
022D: BCF 06.5
022E: BCF 03.5
022F: BSF 06.5
.................... movement=R;
0230: MOVLW 01
0231: MOVWF 45
.................... break;
0232: GOTO 25D
.................... case R:
.................... FR;BL;
0233: BSF 03.5
0234: BCF 06.5
0235: BCF 03.5
0236: BCF 06.5
0237: BSF 03.5
0238: BCF 06.4
0239: BCF 03.5
023A: BSF 06.4
023B: BSF 03.5
023C: BCF 06.6
023D: BCF 03.5
023E: BCF 06.6
023F: BSF 03.5
0240: BCF 06.7
0241: BCF 03.5
0242: BSF 06.7
.................... movement=L;
0243: MOVLW 02
0244: MOVWF 45
.................... break;
0245: GOTO 25D
.................... case S:
.................... FL;BR;
0246: BSF 03.5
0247: BCF 06.7
0248: BCF 03.5
0249: BCF 06.7
024A: BSF 03.5
024B: BCF 06.6
024C: BCF 03.5
024D: BSF 06.6
024E: BSF 03.5
024F: BCF 06.4
0250: BCF 03.5
0251: BCF 06.4
0252: BSF 03.5
0253: BCF 06.5
0254: BCF 03.5
0255: BSF 06.5
.................... movement=R;
0256: MOVLW 01
0257: MOVWF 45
.................... n=CIK_CAK/2;
0258: MOVLW 3A
0259: MOVWF 75
025A: MOVLW 98
025B: MOVWF 74
.................... break;
025C: GOTO 25D
025D: BSF 03.5
.................... }
.................... }
.................... n++;
025E: INCF 74,F
025F: BTFSC 03.2
0260: INCF 75,F
.................... }
0261: BCF 03.5
0262: GOTO 201
0263: BSF 03.5
.................... STOPL;STOPR;
0264: BCF 06.6
0265: BCF 03.5
0266: BCF 06.6
0267: BSF 03.5
0268: BCF 06.7
0269: BCF 03.5
026A: BCF 06.7
026B: BSF 03.5
026C: BCF 06.4
026D: BCF 03.5
026E: BCF 06.4
026F: BSF 03.5
0270: BCF 06.5
0271: BCF 03.5
0272: BCF 06.5
.................... line = RSENSOR; // cteni senzoru na caru
0273: CLRF 41
0274: BSF 03.5
0275: BTFSS 1C.7
0276: GOTO 27A
0277: BCF 03.5
0278: INCF 41,F
0279: BSF 03.5
.................... line |= LSENSOR << 1;
027A: MOVLW 00
027B: BTFSC 1C.6
027C: MOVLW 01
027D: MOVWF 77
027E: BCF 03.0
027F: RLF 77,F
0280: MOVF 77,W
0281: BCF 03.5
0282: IORWF 41,F
.................... if (line==0) goto sem1;
0283: MOVF 41,F
0284: BTFSC 03.2
0285: GOTO 1FD
.................... // nasli jsme caru
.................... line=S;
0286: MOVLW 03
0287: MOVWF 41
.................... }
0288: RETLW 00
.................... ///////////////////////////////////////////////////////////////////////////////
.................... void objizdka() // objede cihlu
.................... {
.................... unsigned int16 n;
....................
.................... BL;BR;Delay_ms(200);
0289: BSF 03.5
028A: BCF 06.6
028B: BCF 03.5
028C: BCF 06.6
028D: BSF 03.5
028E: BCF 06.7
028F: BCF 03.5
0290: BSF 06.7
0291: BSF 03.5
0292: BCF 06.4
0293: BCF 03.5
0294: BCF 06.4
0295: BSF 03.5
0296: BCF 06.5
0297: BCF 03.5
0298: BSF 06.5
0299: MOVLW C8
029A: MOVWF 75
029B: CALL 088
.................... STOPR;STOPL;
029C: BSF 03.5
029D: BCF 06.4
029E: BCF 03.5
029F: BCF 06.4
02A0: BSF 03.5
02A1: BCF 06.5
02A2: BCF 03.5
02A3: BCF 06.5
02A4: BSF 03.5
02A5: BCF 06.6
02A6: BCF 03.5
02A7: BCF 06.6
02A8: BSF 03.5
02A9: BCF 06.7
02AA: BCF 03.5
02AB: BCF 06.7
.................... beep(900,1000);
02AC: MOVLW 03
02AD: MOVWF 75
02AE: MOVLW 84
02AF: MOVWF 74
02B0: MOVLW 03
02B1: MOVWF 7D
02B2: MOVLW E8
02B3: MOVWF 7C
02B4: CALL 05C
.................... // movement=S;
.................... //cikcak();
....................
.................... BL; FR; Delay_ms(215); // otoc se 70° do leva
02B5: BSF 03.5
02B6: BCF 06.6
02B7: BCF 03.5
02B8: BCF 06.6
02B9: BSF 03.5
02BA: BCF 06.7
02BB: BCF 03.5
02BC: BSF 06.7
02BD: BSF 03.5
02BE: BCF 06.5
02BF: BCF 03.5
02C0: BCF 06.5
02C1: BSF 03.5
02C2: BCF 06.4
02C3: BCF 03.5
02C4: BSF 06.4
02C5: MOVLW D7
02C6: MOVWF 75
02C7: CALL 088
....................
.................... FR; FL; Delay_ms(600); // popojed rovne
02C8: BSF 03.5
02C9: BCF 06.5
02CA: BCF 03.5
02CB: BCF 06.5
02CC: BSF 03.5
02CD: BCF 06.4
02CE: BCF 03.5
02CF: BSF 06.4
02D0: BSF 03.5
02D1: BCF 06.7
02D2: BCF 03.5
02D3: BCF 06.7
02D4: BSF 03.5
02D5: BCF 06.6
02D6: BCF 03.5
02D7: BSF 06.6
02D8: MOVLW 03
02D9: MOVWF 73
02DA: MOVLW C8
02DB: MOVWF 75
02DC: CALL 088
02DD: DECFSZ 73,F
02DE: GOTO 2DA
....................
.................... BR; Delay_ms(50); // otoc se 90° do prava
02DF: BSF 03.5
02E0: BCF 06.4
02E1: BCF 03.5
02E2: BCF 06.4
02E3: BSF 03.5
02E4: BCF 06.5
02E5: BCF 03.5
02E6: BSF 06.5
02E7: MOVLW 32
02E8: MOVWF 75
02E9: CALL 088
.................... STOPR; FL; Delay_ms(600);
02EA: BSF 03.5
02EB: BCF 06.4
02EC: BCF 03.5
02ED: BCF 06.4
02EE: BSF 03.5
02EF: BCF 06.5
02F0: BCF 03.5
02F1: BCF 06.5
02F2: BSF 03.5
02F3: BCF 06.7
02F4: BCF 03.5
02F5: BCF 06.7
02F6: BSF 03.5
02F7: BCF 06.6
02F8: BCF 03.5
02F9: BSF 06.6
02FA: MOVLW 03
02FB: MOVWF 73
02FC: MOVLW C8
02FD: MOVWF 75
02FE: CALL 088
02FF: DECFSZ 73,F
0300: GOTO 2FC
....................
.................... FR; FL; Delay_ms(100); // popojed rovne na slepo
0301: BSF 03.5
0302: BCF 06.5
0303: BCF 03.5
0304: BCF 06.5
0305: BSF 03.5
0306: BCF 06.4
0307: BCF 03.5
0308: BSF 06.4
0309: BSF 03.5
030A: BCF 06.7
030B: BCF 03.5
030C: BCF 06.7
030D: BSF 03.5
030E: BCF 06.6
030F: BCF 03.5
0310: BSF 06.6
0311: MOVLW 64
0312: MOVWF 75
0313: CALL 088
.................... for(n=600;n>0;n--) // popojed rovne ale kontroluj caru
0314: MOVLW 02
0315: MOVWF 72
0316: MOVLW 58
0317: MOVWF 71
0318: MOVF 71,F
0319: BTFSS 03.2
031A: GOTO 31E
031B: MOVF 72,F
031C: BTFSC 03.2
031D: GOTO 33D
.................... {
.................... line = RSENSOR; // cteni senzoru na caru
031E: CLRF 41
031F: BSF 03.5
0320: BTFSS 1C.7
0321: GOTO 325
0322: BCF 03.5
0323: INCF 41,F
0324: BSF 03.5
.................... line |= LSENSOR << 1;
0325: MOVLW 00
0326: BTFSC 1C.6
0327: MOVLW 01
0328: MOVWF 77
0329: BCF 03.0
032A: RLF 77,F
032B: MOVF 77,W
032C: BCF 03.5
032D: IORWF 41,F
.................... if (line!=0) {Delay_ms(50); break;} // kdyz narazis na caru, za chvili zastav
032E: MOVF 41,F
032F: BTFSC 03.2
0330: GOTO 335
0331: MOVLW 32
0332: MOVWF 75
0333: CALL 088
0334: GOTO 33D
.................... Delay_ms(1);
0335: MOVLW 01
0336: MOVWF 75
0337: CALL 088
.................... }
0338: MOVF 71,W
0339: BTFSC 03.2
033A: DECF 72,F
033B: DECF 71,F
033C: GOTO 318
....................
.................... BL; // otoc se 60° do leva
033D: BSF 03.5
033E: BCF 06.6
033F: BCF 03.5
0340: BCF 06.6
0341: BSF 03.5
0342: BCF 06.7
0343: BCF 03.5
0344: BSF 06.7
.................... for(n=600;n>0;n--)
0345: MOVLW 02
0346: MOVWF 72
0347: MOVLW 58
0348: MOVWF 71
0349: MOVF 71,F
034A: BTFSS 03.2
034B: GOTO 34F
034C: MOVF 72,F
034D: BTFSC 03.2
034E: GOTO 36A
.................... {
.................... line = RSENSOR; // cteni senzoru na caru
034F: CLRF 41
0350: BSF 03.5
0351: BTFSS 1C.7
0352: GOTO 356
0353: BCF 03.5
0354: INCF 41,F
0355: BSF 03.5
.................... line |= LSENSOR << 1;
0356: MOVLW 00
0357: BTFSC 1C.6
0358: MOVLW 01
0359: MOVWF 77
035A: BCF 03.0
035B: RLF 77,F
035C: MOVF 77,W
035D: BCF 03.5
035E: IORWF 41,F
.................... if (line!=0) break;
035F: MOVF 41,F
0360: BTFSS 03.2
0361: GOTO 36A
.................... Delay_ms(1);
0362: MOVLW 01
0363: MOVWF 75
0364: CALL 088
.................... }
0365: MOVF 71,W
0366: BTFSC 03.2
0367: DECF 72,F
0368: DECF 71,F
0369: GOTO 349
.................... STOPR; STOPL;
036A: BSF 03.5
036B: BCF 06.4
036C: BCF 03.5
036D: BCF 06.4
036E: BSF 03.5
036F: BCF 06.5
0370: BCF 03.5
0371: BCF 06.5
0372: BSF 03.5
0373: BCF 06.6
0374: BCF 03.5
0375: BCF 06.6
0376: BSF 03.5
0377: BCF 06.7
0378: BCF 03.5
0379: BCF 06.7
....................
.................... movement=R;
037A: MOVLW 01
037B: MOVWF 45
.................... cikcak();
037C: CALL 1FD
.................... dira=0;
037D: CLRF 46
.................... }
037E: BCF 0A.3
037F: GOTO 5C6 (RETURN)
.................... ///////////////////////////////////////////////////////////////////////////////
.................... void prejeddiru() // vyresi diru
.................... {
.................... unsigned int16 n;
.................... unsigned int8 speed_dira;
....................
.................... STOPL;STOPR;
0380: BSF 03.5
0381: BCF 06.6
0382: BCF 03.5
0383: BCF 06.6
0384: BSF 03.5
0385: BCF 06.7
0386: BCF 03.5
0387: BCF 06.7
0388: BSF 03.5
0389: BCF 06.4
038A: BCF 03.5
038B: BCF 06.4
038C: BSF 03.5
038D: BCF 06.5
038E: BCF 03.5
038F: BCF 06.5
.................... speed_dira=speed;
0390: MOVF 42,W
0391: MOVWF 73
.................... beep(1000,500);
0392: MOVLW 03
0393: MOVWF 75
0394: MOVLW E8
0395: MOVWF 74
0396: MOVLW 01
0397: MOVWF 7D
0398: MOVLW F4
0399: MOVWF 7C
039A: CALL 05C
.................... switch (movement) //vrat se zpet na caru
.................... {
039B: MOVF 45,W
039C: XORLW 02
039D: BTFSC 03.2
039E: GOTO 3A6
039F: XORLW 03
03A0: BTFSC 03.2
03A1: GOTO 3DE
03A2: XORLW 02
03A3: BTFSC 03.2
03A4: GOTO 416
03A5: GOTO 418
.................... case L:
.................... for (n=COUVANI;n>0;n--) {GO(R,B,speed_dira); Delay_ms(1);}
03A6: MOVLW 02
03A7: MOVWF 72
03A8: MOVLW 58
03A9: MOVWF 71
03AA: MOVF 71,F
03AB: BTFSS 03.2
03AC: GOTO 3B0
03AD: MOVF 72,F
03AE: BTFSC 03.2
03AF: GOTO 3CD
03B0: MOVF 01,W
03B1: SUBWF 73,W
03B2: BTFSS 03.0
03B3: GOTO 3BD
03B4: BSF 03.5
03B5: BCF 06.4
03B6: BCF 03.5
03B7: BCF 06.4
03B8: BSF 03.5
03B9: BCF 06.5
03BA: BCF 03.5
03BB: BSF 06.5
03BC: GOTO 3C5
03BD: BSF 03.5
03BE: BCF 06.4
03BF: BCF 03.5
03C0: BCF 06.4
03C1: BSF 03.5
03C2: BCF 06.5
03C3: BCF 03.5
03C4: BCF 06.5
03C5: MOVLW 01
03C6: MOVWF 75
03C7: CALL 088
03C8: MOVF 71,W
03C9: BTFSC 03.2
03CA: DECF 72,F
03CB: DECF 71,F
03CC: GOTO 3AA
.................... STOPL;STOPR;
03CD: BSF 03.5
03CE: BCF 06.6
03CF: BCF 03.5
03D0: BCF 06.6
03D1: BSF 03.5
03D2: BCF 06.7
03D3: BCF 03.5
03D4: BCF 06.7
03D5: BSF 03.5
03D6: BCF 06.4
03D7: BCF 03.5
03D8: BCF 06.4
03D9: BSF 03.5
03DA: BCF 06.5
03DB: BCF 03.5
03DC: BCF 06.5
.................... break;
03DD: GOTO 418
.................... case R:
.................... for (n=COUVANI;n>0;n--) {GO(L,B,speed_dira); Delay_ms(1);}
03DE: MOVLW 02
03DF: MOVWF 72
03E0: MOVLW 58
03E1: MOVWF 71
03E2: MOVF 71,F
03E3: BTFSS 03.2
03E4: GOTO 3E8
03E5: MOVF 72,F
03E6: BTFSC 03.2
03E7: GOTO 405
03E8: MOVF 01,W
03E9: SUBWF 73,W
03EA: BTFSS 03.0
03EB: GOTO 3F5
03EC: BSF 03.5
03ED: BCF 06.6
03EE: BCF 03.5
03EF: BCF 06.6
03F0: BSF 03.5
03F1: BCF 06.7
03F2: BCF 03.5
03F3: BSF 06.7
03F4: GOTO 3FD
03F5: BSF 03.5
03F6: BCF 06.6
03F7: BCF 03.5
03F8: BCF 06.6
03F9: BSF 03.5
03FA: BCF 06.7
03FB: BCF 03.5
03FC: BCF 06.7
03FD: MOVLW 01
03FE: MOVWF 75
03FF: CALL 088
0400: MOVF 71,W
0401: BTFSC 03.2
0402: DECF 72,F
0403: DECF 71,F
0404: GOTO 3E2
.................... STOPL;STOPR;
0405: BSF 03.5
0406: BCF 06.6
0407: BCF 03.5
0408: BCF 06.6
0409: BSF 03.5
040A: BCF 06.7
040B: BCF 03.5
040C: BCF 06.7
040D: BSF 03.5
040E: BCF 06.4
040F: BCF 03.5
0410: BCF 06.4
0411: BSF 03.5
0412: BCF 06.5
0413: BCF 03.5
0414: BCF 06.5
.................... break;
0415: GOTO 418
.................... case S:
.................... goto sem;
0416: GOTO 4D2
.................... break;
0417: GOTO 418
.................... }
.................... beep(800,500);
0418: MOVLW 03
0419: MOVWF 75
041A: MOVLW 20
041B: MOVWF 74
041C: MOVLW 01
041D: MOVWF 7D
041E: MOVLW F4
041F: MOVWF 7C
0420: CALL 05C
....................
.................... line=0;
0421: CLRF 41
.................... FR; BL; Delay_ms(300); // otoc se na caru
0422: BSF 03.5
0423: BCF 06.5
0424: BCF 03.5
0425: BCF 06.5
0426: BSF 03.5
0427: BCF 06.4
0428: BCF 03.5
0429: BSF 06.4
042A: BSF 03.5
042B: BCF 06.6
042C: BCF 03.5
042D: BCF 06.6
042E: BSF 03.5
042F: BCF 06.7
0430: BCF 03.5
0431: BSF 06.7
0432: MOVLW 02
0433: MOVWF 74
0434: MOVLW 96
0435: MOVWF 75
0436: CALL 088
0437: DECFSZ 74,F
0438: GOTO 434
.................... while(line==0)
.................... {
0439: MOVF 41,F
043A: BTFSS 03.2
043B: GOTO 44D
.................... line = RSENSOR; // cteni senzoru na caru
043C: CLRF 41
043D: BSF 03.5
043E: BTFSS 1C.7
043F: GOTO 443
0440: BCF 03.5
0441: INCF 41,F
0442: BSF 03.5
.................... line |= LSENSOR << 1;
0443: MOVLW 00
0444: BTFSC 1C.6
0445: MOVLW 01
0446: MOVWF 77
0447: BCF 03.0
0448: RLF 77,F
0449: MOVF 77,W
044A: BCF 03.5
044B: IORWF 41,F
.................... }
044C: GOTO 439
.................... FL;BR; Delay_ms(60);
044D: BSF 03.5
044E: BCF 06.7
044F: BCF 03.5
0450: BCF 06.7
0451: BSF 03.5
0452: BCF 06.6
0453: BCF 03.5
0454: BSF 06.6
0455: BSF 03.5
0456: BCF 06.4
0457: BCF 03.5
0458: BCF 06.4
0459: BSF 03.5
045A: BCF 06.5
045B: BCF 03.5
045C: BSF 06.5
045D: MOVLW 3C
045E: MOVWF 75
045F: CALL 088
.................... STOPL; STOPR;
0460: BSF 03.5
0461: BCF 06.6
0462: BCF 03.5
0463: BCF 06.6
0464: BSF 03.5
0465: BCF 06.7
0466: BCF 03.5
0467: BCF 06.7
0468: BSF 03.5
0469: BCF 06.4
046A: BCF 03.5
046B: BCF 06.4
046C: BSF 03.5
046D: BCF 06.5
046E: BCF 03.5
046F: BCF 06.5
....................
.................... FL; BR; Delay_ms(500);
0470: BSF 03.5
0471: BCF 06.7
0472: BCF 03.5
0473: BCF 06.7
0474: BSF 03.5
0475: BCF 06.6
0476: BCF 03.5
0477: BSF 06.6
0478: BSF 03.5
0479: BCF 06.4
047A: BCF 03.5
047B: BCF 06.4
047C: BSF 03.5
047D: BCF 06.5
047E: BCF 03.5
047F: BSF 06.5
0480: MOVLW 02
0481: MOVWF 74
0482: MOVLW FA
0483: MOVWF 75
0484: CALL 088
0485: DECFSZ 74,F
0486: GOTO 482
.................... STOPL; STOPR;
0487: BSF 03.5
0488: BCF 06.6
0489: BCF 03.5
048A: BCF 06.6
048B: BSF 03.5
048C: BCF 06.7
048D: BCF 03.5
048E: BCF 06.7
048F: BSF 03.5
0490: BCF 06.4
0491: BCF 03.5
0492: BCF 06.4
0493: BSF 03.5
0494: BCF 06.5
0495: BCF 03.5
0496: BCF 06.5
....................
.................... Delay_ms(1000);
0497: MOVLW 04
0498: MOVWF 74
0499: MOVLW FA
049A: MOVWF 75
049B: CALL 088
049C: DECFSZ 74,F
049D: GOTO 499
....................
.................... FR;FL; //popojed rovne
049E: BSF 03.5
049F: BCF 06.5
04A0: BCF 03.5
04A1: BCF 06.5
04A2: BSF 03.5
04A3: BCF 06.4
04A4: BCF 03.5
04A5: BSF 06.4
04A6: BSF 03.5
04A7: BCF 06.7
04A8: BCF 03.5
04A9: BCF 06.7
04AA: BSF 03.5
04AB: BCF 06.6
04AC: BCF 03.5
04AD: BSF 06.6
.................... for(n=PRES_DIRU;n>0;n--)
04AE: CLRF 72
04AF: MOVLW FA
04B0: MOVWF 71
04B1: MOVF 71,F
04B2: BTFSS 03.2
04B3: GOTO 4B7
04B4: MOVF 72,F
04B5: BTFSC 03.2
04B6: GOTO 4D2
.................... {
.................... line = RSENSOR; // cteni senzoru na caru
04B7: CLRF 41
04B8: BSF 03.5
04B9: BTFSS 1C.7
04BA: GOTO 4BE
04BB: BCF 03.5
04BC: INCF 41,F
04BD: BSF 03.5
.................... line |= LSENSOR << 1;
04BE: MOVLW 00
04BF: BTFSC 1C.6
04C0: MOVLW 01
04C1: MOVWF 77
04C2: BCF 03.0
04C3: RLF 77,F
04C4: MOVF 77,W
04C5: BCF 03.5
04C6: IORWF 41,F
.................... if (line!=0) break;
04C7: MOVF 41,F
04C8: BTFSS 03.2
04C9: GOTO 4D2
.................... Delay_ms(1);
04CA: MOVLW 01
04CB: MOVWF 75
04CC: CALL 088
.................... }
04CD: MOVF 71,W
04CE: BTFSC 03.2
04CF: DECF 72,F
04D0: DECF 71,F
04D1: GOTO 4B1
.................... sem:
.................... STOPL; STOPR;
04D2: BSF 03.5
04D3: BCF 06.6
04D4: BCF 03.5
04D5: BCF 06.6
04D6: BSF 03.5
04D7: BCF 06.7
04D8: BCF 03.5
04D9: BCF 06.7
04DA: BSF 03.5
04DB: BCF 06.4
04DC: BCF 03.5
04DD: BCF 06.4
04DE: BSF 03.5
04DF: BCF 06.5
04E0: BCF 03.5
04E1: BCF 06.5
.................... movement=S;
04E2: MOVLW 03
04E3: MOVWF 45
.................... cikcak(); // najdi caru
04E4: CALL 1FD
.................... dira=0;
04E5: CLRF 46
.................... }
04E6: BCF 0A.3
04E7: GOTO 65C (RETURN)
.................... ///////////////////////////////////////////////////////////////////////////////
.................... void main()
.................... {
04E8: CLRF 04
04E9: MOVLW 1F
04EA: ANDWF 03,F
04EB: BSF 03.5
04EC: BCF 1F.4
04ED: BCF 1F.5
04EE: MOVF 1B,W
04EF: ANDLW 80
04F0: MOVWF 1B
04F1: MOVLW 07
04F2: MOVWF 1C
04F3: MOVF 1C,W
04F4: BCF 03.5
04F5: BCF 0D.6
04F6: MOVLW 60
04F7: BSF 03.5
04F8: MOVWF 0F
.................... unsigned int16 n; // pro FOR
....................
.................... STOPL; STOPR; // prepne vystupy na ovladani motoru na output a zastavi
*
0515: BSF 03.5
0516: BCF 06.6
0517: BCF 03.5
0518: BCF 06.6
0519: BSF 03.5
051A: BCF 06.7
051B: BCF 03.5
051C: BCF 06.7
051D: BSF 03.5
051E: BCF 06.4
051F: BCF 03.5
0520: BCF 06.4
0521: BSF 03.5
0522: BCF 06.5
0523: BCF 03.5
0524: BCF 06.5
....................
.................... setup_oscillator(OSC_4MHZ|OSC_INTRC); // 4 MHz interni RC oscilator
0525: MOVLW 62
0526: BSF 03.5
0527: MOVWF 0F
....................
.................... port_b_pullups(TRUE); // pullups pro piano na diagnostiku
0528: BCF 01.7
.................... setup_spi(FALSE);
0529: BCF 03.5
052A: BCF 14.5
052B: BSF 03.5
052C: BCF 06.2
052D: BSF 06.1
052E: BCF 06.4
052F: MOVLW 00
0530: BCF 03.5
0531: MOVWF 14
0532: BSF 03.5
0533: MOVWF 14
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Casovac pro PWM
0534: MOVF 01,W
0535: ANDLW C7
0536: IORLW 08
0537: MOVWF 01
....................
.................... setup_timer_2(T2_DIV_BY_4,255,10); // Casovac pro regulaci
0538: MOVLW 48
0539: MOVWF 78
053A: IORLW 05
053B: BCF 03.5
053C: MOVWF 12
053D: MOVLW FF
053E: BSF 03.5
053F: MOVWF 12
.................... // preruseni kazdych 10ms
.................... setup_adc_ports(sAN2|VSS_VDD); // nastaveni A/D prevodniku pro naraznik
0540: BCF 1F.4
0541: BCF 1F.5
0542: MOVF 1B,W
0543: ANDLW 80
0544: IORLW 04
0545: MOVWF 1B
.................... setup_adc(ADC_CLOCK_INTERNAL);
0546: BCF 1F.6
0547: BCF 03.5
0548: BSF 1F.6
0549: BSF 1F.7
054A: BSF 03.5
054B: BCF 1F.7
054C: BCF 03.5
054D: BSF 1F.0
.................... set_adc_channel(2);
054E: MOVLW 10
054F: MOVWF 78
0550: MOVF 1F,W
0551: ANDLW C7
0552: IORWF 78,W
0553: MOVWF 1F
.................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); // Casovac pro naraznik
0554: MOVLW 85
0555: MOVWF 10
.................... setup_ccp1(CCP_COMPARE_RESET_TIMER);
0556: BSF 03.5
0557: BSF 06.3
0558: MOVLW 0B
0559: BCF 03.5
055A: MOVWF 17
.................... CCP_1=(2^10)-1; // prevod kazdou 1ms
055B: CLRF 16
055C: MOVLW 07
055D: MOVWF 15
....................
.................... setup_comparator(A0_VR_A1_VR); // inicializace komparatoru pro cidla cary
055E: MOVLW 02
055F: BSF 03.5
0560: MOVWF 1C
0561: MOVF 05,W
0562: IORLW 03
0563: MOVWF 05
0564: MOVLW 03
0565: MOVWF 77
0566: DECFSZ 77,F
0567: GOTO 566
0568: MOVF 1C,W
0569: BCF 03.5
056A: BCF 0D.6
.................... setup_vref(VREF_HIGH|TRESHOLD); // 32 kroku od 0.25 do 0.75 Vdd
056B: MOVLW 8A
056C: BSF 03.5
056D: MOVWF 1D
....................
.................... Beep(1000,200); //double beep
056E: MOVLW 03
056F: MOVWF 75
0570: MOVLW E8
0571: MOVWF 74
0572: CLRF 7D
0573: MOVLW C8
0574: MOVWF 7C
0575: BCF 03.5
0576: CALL 05C
.................... Delay_ms(50);
0577: MOVLW 32
0578: MOVWF 75
0579: CALL 088
.................... Beep(1000,200);
057A: MOVLW 03
057B: MOVWF 75
057C: MOVLW E8
057D: MOVWF 74
057E: CLRF 7D
057F: MOVLW C8
0580: MOVWF 7C
0581: CALL 05C
.................... Delay_ms(1000); // 1s
0582: MOVLW 04
0583: MOVWF 71
0584: MOVLW FA
0585: MOVWF 75
0586: CALL 088
0587: DECFSZ 71,F
0588: GOTO 584
....................
.................... // povoleni rizeni rychlosti zataceni pres preruseni
.................... enable_interrupts(INT_TIMER2);
0589: BSF 03.5
058A: BSF 0C.1
.................... enable_interrupts(GLOBAL);
058B: MOVLW C0
058C: BCF 03.5
058D: IORWF 0B,F
....................
.................... /*---------------------------------------------------------------------------*/
.................... sensors=S;
058E: MOVLW 03
058F: MOVWF 40
.................... line=S;
0590: MOVWF 41
.................... last=S;
0591: MOVWF 44
.................... movement=S;
0592: MOVWF 45
.................... speed=FW_POMALU;
0593: MOVLW E6
0594: MOVWF 42
....................
.................... diagnostika();
0595: GOTO 09D
.................... // cikcak(); // toc se, abys nasel caru
.................... Delay_ms(500);
0596: MOVLW 02
0597: MOVWF 71
0598: MOVLW FA
0599: MOVWF 75
059A: CALL 088
059B: DECFSZ 71,F
059C: GOTO 598
.................... Beep(1000,200);
059D: MOVLW 03
059E: MOVWF 75
059F: MOVLW E8
05A0: MOVWF 74
05A1: CLRF 7D
05A2: MOVLW C8
05A3: MOVWF 7C
05A4: CALL 05C
.................... Delay_ms(500);
05A5: MOVLW 02
05A6: MOVWF 71
05A7: MOVLW FA
05A8: MOVWF 75
05A9: CALL 088
05AA: DECFSZ 71,F
05AB: GOTO 5A7
....................
.................... while(true) // hlavni smycka (jizda podle cary)
.................... {
.................... sensors = RSENSOR; // cteni senzoru na caru
05AC: CLRF 40
05AD: BSF 03.5
05AE: BTFSS 1C.7
05AF: GOTO 5B3
05B0: BCF 03.5
05B1: INCF 40,F
05B2: BSF 03.5
.................... sensors |= LSENSOR << 1;
05B3: MOVLW 00
05B4: BTFSC 1C.6
05B5: MOVLW 01
05B6: MOVWF 77
05B7: BCF 03.0
05B8: RLF 77,F
05B9: MOVF 77,W
05BA: BCF 03.5
05BB: IORWF 40,F
....................
.................... if ((read_adc(ADC_READ_ONLY)<BUMPER_TRESHOLD) && (dira<=T_CIHLA)) objizdka();
05BC: BTFSC 1F.2
05BD: GOTO 5BC
05BE: MOVF 1E,W
05BF: SUBLW 7F
05C0: BTFSS 03.0
05C1: GOTO 5C6
05C2: MOVF 46,W
05C3: SUBLW 32
05C4: BTFSC 03.0
05C5: GOTO 289
....................
.................... switch (sensors) // zatacej podle toho, kde vidis caru
.................... {
05C6: MOVF 40,W
05C7: XORLW 03
05C8: BTFSC 03.2
05C9: GOTO 5D1
05CA: XORLW 01
05CB: BTFSC 03.2
05CC: GOTO 5E5
05CD: XORLW 03
05CE: BTFSC 03.2
05CF: GOTO 61E
05D0: GOTO 657
.................... case S: // rovne
.................... FL; FR; // pokud se jede dlouho rovne, tak pridej
05D1: BSF 03.5
05D2: BCF 06.7
05D3: BCF 03.5
05D4: BCF 06.7
05D5: BSF 03.5
05D6: BCF 06.6
05D7: BCF 03.5
05D8: BSF 06.6
05D9: BSF 03.5
05DA: BCF 06.5
05DB: BCF 03.5
05DC: BCF 06.5
05DD: BSF 03.5
05DE: BCF 06.4
05DF: BCF 03.5
05E0: BSF 06.4
.................... dira=0;
05E1: CLRF 46
.................... movement=S;
05E2: MOVLW 03
05E3: MOVWF 45
.................... continue;
05E4: GOTO 5AC
.................... case L: // trochu vlevo
.................... GO(L, F, FW_POMALU+rovinka); GO(R, F, FW_STREDNE+rovinka);
05E5: MOVF 01,W
05E6: MOVWF 71
05E7: MOVLW E6
05E8: ADDWF 43,W
05E9: SUBWF 71,W
05EA: BTFSC 03.2
05EB: GOTO 5EE
05EC: BTFSC 03.0
05ED: GOTO 5F7
05EE: BSF 03.5
05EF: BCF 06.7
05F0: BCF 03.5
05F1: BCF 06.7
05F2: BSF 03.5
05F3: BCF 06.6
05F4: BCF 03.5
05F5: BSF 06.6
05F6: GOTO 5FF
05F7: BSF 03.5
05F8: BCF 06.6
05F9: BCF 03.5
05FA: BCF 06.6
05FB: BSF 03.5
05FC: BCF 06.7
05FD: BCF 03.5
05FE: BCF 06.7
05FF: MOVF 01,W
0600: MOVWF 71
0601: MOVLW F0
0602: ADDWF 43,W
0603: SUBWF 71,W
0604: BTFSC 03.2
0605: GOTO 608
0606: BTFSC 03.0
0607: GOTO 611
0608: BSF 03.5
0609: BCF 06.5
060A: BCF 03.5
060B: BCF 06.5
060C: BSF 03.5
060D: BCF 06.4
060E: BCF 03.5
060F: BSF 06.4
0610: GOTO 619
0611: BSF 03.5
0612: BCF 06.4
0613: BCF 03.5
0614: BCF 06.4
0615: BSF 03.5
0616: BCF 06.5
0617: BCF 03.5
0618: BCF 06.5
.................... line=L;
0619: MOVLW 02
061A: MOVWF 41
.................... dira=0;
061B: CLRF 46
.................... movement=L;
061C: MOVWF 45
.................... continue;
061D: GOTO 5AC
.................... case R: // trochu vpravo
.................... GO(R, F, FW_POMALU+rovinka); GO(L, F, FW_STREDNE+rovinka);
061E: MOVF 01,W
061F: MOVWF 71
0620: MOVLW E6
0621: ADDWF 43,W
0622: SUBWF 71,W
0623: BTFSC 03.2
0624: GOTO 627
0625: BTFSC 03.0
0626: GOTO 630
0627: BSF 03.5
0628: BCF 06.5
0629: BCF 03.5
062A: BCF 06.5
062B: BSF 03.5
062C: BCF 06.4
062D: BCF 03.5
062E: BSF 06.4
062F: GOTO 638
0630: BSF 03.5
0631: BCF 06.4
0632: BCF 03.5
0633: BCF 06.4
0634: BSF 03.5
0635: BCF 06.5
0636: BCF 03.5
0637: BCF 06.5
0638: MOVF 01,W
0639: MOVWF 71
063A: MOVLW F0
063B: ADDWF 43,W
063C: SUBWF 71,W
063D: BTFSC 03.2
063E: GOTO 641
063F: BTFSC 03.0
0640: GOTO 64A
0641: BSF 03.5
0642: BCF 06.7
0643: BCF 03.5
0644: BCF 06.7
0645: BSF 03.5
0646: BCF 06.6
0647: BCF 03.5
0648: BSF 06.6
0649: GOTO 652
064A: BSF 03.5
064B: BCF 06.6
064C: BCF 03.5
064D: BCF 06.6
064E: BSF 03.5
064F: BCF 06.7
0650: BCF 03.5
0651: BCF 06.7
.................... line=R;
0652: MOVLW 01
0653: MOVWF 41
.................... dira=0;
0654: CLRF 46
.................... movement=R;
0655: MOVWF 45
.................... continue;
0656: GOTO 5AC
.................... default: // kdyz jsou obe cidla mimo caru, tak pokracuj dal
.................... }
.................... rovinka=0;
0657: CLRF 43
.................... if (dira>=T_DIRA) prejeddiru();
0658: MOVF 46,W
0659: SUBLW 56
065A: BTFSS 03.0
065B: GOTO 380
.................... if (last!=line) // pokud si prejel caru z jedne strany na druhou stranu, tak zabrzdi
065C: MOVF 41,W
065D: SUBWF 44,W
065E: BTFSC 03.2
065F: GOTO 664
.................... {
.................... last=line;
0660: MOVF 41,W
0661: MOVWF 44
.................... speed=FW_ZATACKA;
0662: MOVLW C8
0663: MOVWF 42
.................... }
.................... if (L==line) // kdyz jsou obe cidla mimo caru, zatoc na caru
0664: MOVF 41,W
0665: SUBLW 02
0666: BTFSS 03.2
0667: GOTO 688
.................... {
.................... STOPL;
0668: BSF 03.5
0669: BCF 06.6
066A: BCF 03.5
066B: BCF 06.6
066C: BSF 03.5
066D: BCF 06.7
066E: BCF 03.5
066F: BCF 06.7
.................... GO(R, F, speed);
0670: MOVF 01,W
0671: SUBWF 42,W
0672: BTFSS 03.0
0673: GOTO 67D
0674: BSF 03.5
0675: BCF 06.5
0676: BCF 03.5
0677: BCF 06.5
0678: BSF 03.5
0679: BCF 06.4
067A: BCF 03.5
067B: BSF 06.4
067C: GOTO 685
067D: BSF 03.5
067E: BCF 06.4
067F: BCF 03.5
0680: BCF 06.4
0681: BSF 03.5
0682: BCF 06.5
0683: BCF 03.5
0684: BCF 06.5
.................... movement=L;
0685: MOVLW 02
0686: MOVWF 45
.................... }
.................... else
0687: GOTO 6A7
.................... {
.................... STOPR;
0688: BSF 03.5
0689: BCF 06.4
068A: BCF 03.5
068B: BCF 06.4
068C: BSF 03.5
068D: BCF 06.5
068E: BCF 03.5
068F: BCF 06.5
.................... GO(L, F, speed);
0690: MOVF 01,W
0691: SUBWF 42,W
0692: BTFSS 03.0
0693: GOTO 69D
0694: BSF 03.5
0695: BCF 06.7
0696: BCF 03.5
0697: BCF 06.7
0698: BSF 03.5
0699: BCF 06.6
069A: BCF 03.5
069B: BSF 06.6
069C: GOTO 6A5
069D: BSF 03.5
069E: BCF 06.6
069F: BCF 03.5
06A0: BCF 06.6
06A1: BSF 03.5
06A2: BCF 06.7
06A3: BCF 03.5
06A4: BCF 06.7
.................... movement=R;
06A5: MOVLW 01
06A6: MOVWF 45
.................... }
.................... } // while(true)
06A7: GOTO 5AC
.................... }
....................
....................
06A8: SLEEP
 
Configuration Fuses:
Word 1: 3F38 NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT INTRC_IO
Word 2: 3FFC NOFCMEN NOIESO