CCS PCM C Compiler, Version 3.221, 27853 20-V-05 13:52Filename: D:\KAKLIK\programy\PIC_C\roboti\merkur\PIC16F88\vystava\tank.LSTROM used: 1232 words (30%)Largest free fragment is 2048RAM used: 65 (37%) at main() level73 (42%) worst caseStack: 4 worst case (3 in main + 1 for interrupts)*0000: MOVLW 000001: MOVWF 0A0002: GOTO 28E0003: NOP0004: MOVWF 7F0005: SWAPF 03,W0006: CLRF 030007: MOVWF 210008: MOVF 7F,W0009: MOVWF 20000A: MOVF 0A,W000B: MOVWF 28000C: CLRF 0A000D: SWAPF 20,F000E: MOVF 04,W000F: MOVWF 220010: MOVF 77,W0011: MOVWF 230012: MOVF 78,W0013: MOVWF 240014: MOVF 79,W0015: MOVWF 250016: MOVF 7A,W0017: MOVWF 260018: MOVF 7B,W0019: MOVWF 27001A: BCF 03.7001B: BCF 03.5001C: MOVLW 8C001D: MOVWF 04001E: BTFSS 00.1001F: GOTO 0220020: BTFSC 0C.10021: GOTO 0350022: MOVF 22,W0023: MOVWF 040024: MOVF 23,W0025: MOVWF 770026: MOVF 24,W0027: MOVWF 780028: MOVF 25,W0029: MOVWF 79002A: MOVF 26,W002B: MOVWF 7A002C: MOVF 27,W002D: MOVWF 7B002E: MOVF 28,W002F: MOVWF 0A0030: SWAPF 21,W0031: MOVWF 030032: SWAPF 7F,F0033: SWAPF 7F,W0034: RETFIE0035: BCF 0A.30036: 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)*0042: MOVLW 120043: SUBWF 63,F0044: BTFSS 03.00045: GOTO 0540046: MOVLW 630047: MOVWF 040048: MOVLW FC0049: ANDWF 00,F004A: BCF 03.0004B: RRF 00,F004C: RRF 00,F004D: MOVF 00,W004E: BTFSC 03.2004F: GOTO 0540050: GOTO 0520051: NOP0052: DECFSZ 00,F0053: GOTO 0510054: RETLW 00*007B: MOVLW 5E007C: MOVWF 04007D: MOVF 00,W007E: BTFSC 03.2007F: GOTO 08F0080: MOVLW 010081: MOVWF 780082: CLRF 770083: DECFSZ 77,F0084: GOTO 0830085: DECFSZ 78,F0086: GOTO 0820087: MOVLW 4A0088: MOVWF 770089: DECFSZ 77,F008A: GOTO 089008B: NOP008C: NOP008D: DECFSZ 00,F008E: GOTO 080008F: RETLW 00................................................................................ 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 last; // kde byla cara, kdyz byly minule cidla mimo.................... unsigned int8 rovinka; // pocitadlo pro zjisteni rovneho useku.................... int cirkus;........................................ // Konstanty pro dynamiku pohybu.................... #define T_DIRA 120 // po jakem case zataceni se detekuje dira.................... #define FW_POMALU 170 // trochu mimo caru vnitrni pas.................... #define FW_ZATACKA 200 // rychlost vnejsiho kola pri zataceni.................... #define FW_STREDNE 190 // trochu mimo caru vnejsi pas.................... #define COUVANI 750 // couvnuti zpet na caru, po detekci diry.................... #define MAX_ROVINKA (255-FW_STREDNE).................... #define TRESHOLD 15 // rozhodovaci uroven komparatoru, 0xF = 0.75*Vdd.................... #define BUMPER_TRESHOLD 128........................................ //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++;*0037: INCFSZ 2B,W0038: GOTO 03A0039: GOTO 03B003A: INCF 2B,F.................... if (rovinka<MAX_ROVINKA) rovinka++;003B: MOVF 2D,W003C: SUBLW 40003D: BTFSC 03.0003E: INCF 2D,F.................... }.................... // Primitivni Pipani003F: BCF 0C.10040: BCF 0A.30041: GOTO 022.................... void beep(unsigned int16 period, unsigned int16 length).................... {.................... unsigned int16 nn;........................................ for(nn=length; nn>0; nn--)*0055: MOVF 60,W0056: MOVWF 620057: MOVF 5F,W0058: MOVWF 610059: MOVF 61,F005A: BTFSS 03.2005B: GOTO 05F005C: MOVF 62,F005D: BTFSC 03.2005E: GOTO 07A.................... {.................... output_high(SOUND_HI);output_low(SOUND_LO);005F: BSF 03.50060: BCF 05.60061: BCF 03.50062: BSF 05.60063: BSF 03.50064: BCF 05.70065: BCF 03.50066: BCF 05.7.................... delay_us(period);0067: MOVF 5D,W0068: MOVWF 630069: CALL 042.................... output_high(SOUND_LO);output_low(SOUND_HI);006A: BSF 03.5006B: BCF 05.7006C: BCF 03.5006D: BSF 05.7006E: BSF 03.5006F: BCF 05.60070: BCF 03.50071: BCF 05.6.................... delay_us(period);0072: MOVF 5D,W0073: MOVWF 630074: CALL 042.................... }0075: MOVF 61,W0076: BTFSC 03.20077: DECF 62,F0078: DECF 61,F0079: GOTO 059.................... }007A: RETLW 00.................... /******************************************************************************/.................... void diagnostika().................... {.................... unsigned int16 n;........................................ while (input(DIAG_SERVO)) // Propojka, ktera spousti diagnostiku.................... {*0090: BSF 03.50091: BSF 06.30092: BCF 03.50093: BTFSS 06.30094: GOTO 1BB.................... for (n=500; n<800; n+=100)0095: MOVLW 010096: MOVWF 5C0097: MOVLW F40098: MOVWF 5B0099: MOVF 5C,W009A: SUBLW 03009B: BTFSS 03.0009C: GOTO 0B1009D: BTFSS 03.2009E: GOTO 0A3009F: MOVF 5B,W00A0: SUBLW 1F00A1: BTFSS 03.000A2: GOTO 0B1.................... {.................... beep(n,n); //beep UP00A3: MOVF 5C,W00A4: MOVWF 5E00A5: MOVF 5B,W00A6: MOVWF 5D00A7: MOVF 5C,W00A8: MOVWF 6000A9: MOVF 5B,W00AA: MOVWF 5F00AB: CALL 055.................... };00AC: MOVLW 6400AD: ADDWF 5B,F00AE: BTFSC 03.000AF: INCF 5C,F00B0: GOTO 099.................... Delay_ms(1000);00B1: MOVLW 0400B2: MOVWF 5D00B3: MOVLW FA00B4: MOVWF 5E00B5: CALL 07B00B6: DECFSZ 5D,F00B7: GOTO 0B3.................... //zastav vse.................... STOPL; STOPR;00B8: BSF 03.500B9: BCF 06.600BA: BCF 03.500BB: BCF 06.600BC: BSF 03.500BD: BCF 06.700BE: BCF 03.500BF: BCF 06.700C0: BSF 03.500C1: BCF 06.400C2: BCF 03.500C3: BCF 06.400C4: BSF 03.500C5: BCF 06.500C6: BCF 03.500C7: BCF 06.5.................... //pravy pas.................... FR; Delay_ms(1000); STOPR; Delay_ms(1000);00C8: BSF 03.500C9: BCF 06.500CA: BCF 03.500CB: BCF 06.500CC: BSF 03.500CD: BCF 06.400CE: BCF 03.500CF: BSF 06.400D0: MOVLW 0400D1: MOVWF 5D00D2: MOVLW FA00D3: MOVWF 5E00D4: CALL 07B00D5: DECFSZ 5D,F00D6: GOTO 0D200D7: BSF 03.500D8: BCF 06.400D9: BCF 03.500DA: BCF 06.400DB: BSF 03.500DC: BCF 06.500DD: BCF 03.500DE: BCF 06.500DF: MOVLW 0400E0: MOVWF 5D00E1: MOVLW FA00E2: MOVWF 5E00E3: CALL 07B00E4: DECFSZ 5D,F00E5: GOTO 0E1.................... BR; Delay_ms(1000); STOPR; Delay_ms(1000);00E6: BSF 03.500E7: BCF 06.400E8: BCF 03.500E9: BCF 06.400EA: BSF 03.500EB: BCF 06.500EC: BCF 03.500ED: BSF 06.500EE: MOVLW 0400EF: MOVWF 5D00F0: MOVLW FA00F1: MOVWF 5E00F2: CALL 07B00F3: DECFSZ 5D,F00F4: GOTO 0F000F5: BSF 03.500F6: BCF 06.400F7: BCF 03.500F8: BCF 06.400F9: BSF 03.500FA: BCF 06.500FB: BCF 03.500FC: BCF 06.500FD: MOVLW 0400FE: MOVWF 5D00FF: MOVLW FA0100: MOVWF 5E0101: CALL 07B0102: DECFSZ 5D,F0103: GOTO 0FF.................... Beep(880,100); Delay_ms(1000);0104: MOVLW 030105: MOVWF 5E0106: MOVLW 700107: MOVWF 5D0108: CLRF 600109: MOVLW 64010A: MOVWF 5F010B: CALL 055010C: MOVLW 04010D: MOVWF 5D010E: MOVLW FA010F: MOVWF 5E0110: CALL 07B0111: DECFSZ 5D,F0112: GOTO 10E.................... //levy pas.................... FL; Delay_ms(1000); STOPL; Delay_ms(1000);0113: BSF 03.50114: BCF 06.70115: BCF 03.50116: BCF 06.70117: BSF 03.50118: BCF 06.60119: BCF 03.5011A: BSF 06.6011B: MOVLW 04011C: MOVWF 5D011D: MOVLW FA011E: MOVWF 5E011F: CALL 07B0120: DECFSZ 5D,F0121: GOTO 11D0122: BSF 03.50123: BCF 06.60124: BCF 03.50125: BCF 06.60126: BSF 03.50127: BCF 06.70128: BCF 03.50129: BCF 06.7012A: MOVLW 04012B: MOVWF 5D012C: MOVLW FA012D: MOVWF 5E012E: CALL 07B012F: DECFSZ 5D,F0130: GOTO 12C.................... BL; Delay_ms(1000); STOPL; Delay_ms(1000);0131: BSF 03.50132: BCF 06.60133: BCF 03.50134: BCF 06.60135: BSF 03.50136: BCF 06.70137: BCF 03.50138: BSF 06.70139: MOVLW 04013A: MOVWF 5D013B: MOVLW FA013C: MOVWF 5E013D: CALL 07B013E: DECFSZ 5D,F013F: GOTO 13B0140: BSF 03.50141: BCF 06.60142: BCF 03.50143: BCF 06.60144: BSF 03.50145: BCF 06.70146: BCF 03.50147: BCF 06.70148: MOVLW 040149: MOVWF 5D014A: MOVLW FA014B: MOVWF 5E014C: CALL 07B014D: DECFSZ 5D,F014E: GOTO 14A.................... Beep(880,100); Delay_ms(1000);014F: MOVLW 030150: MOVWF 5E0151: MOVLW 700152: MOVWF 5D0153: CLRF 600154: MOVLW 640155: MOVWF 5F0156: CALL 0550157: MOVLW 040158: MOVWF 5D0159: MOVLW FA015A: MOVWF 5E015B: CALL 07B015C: DECFSZ 5D,F015D: GOTO 159.................... //oba pasy.................... FL; FR; Delay_ms(1000); STOPL; STOPR; Delay_ms(1000);015E: BSF 03.5015F: BCF 06.70160: BCF 03.50161: BCF 06.70162: BSF 03.50163: BCF 06.60164: BCF 03.50165: BSF 06.60166: BSF 03.50167: BCF 06.50168: BCF 03.50169: BCF 06.5016A: BSF 03.5016B: BCF 06.4016C: BCF 03.5016D: BSF 06.4016E: MOVLW 04016F: MOVWF 5D0170: MOVLW FA0171: MOVWF 5E0172: CALL 07B0173: DECFSZ 5D,F0174: GOTO 1700175: BSF 03.50176: BCF 06.60177: BCF 03.50178: BCF 06.60179: BSF 03.5017A: BCF 06.7017B: BCF 03.5017C: BCF 06.7017D: BSF 03.5017E: BCF 06.4017F: BCF 03.50180: BCF 06.40181: BSF 03.50182: BCF 06.50183: BCF 03.50184: BCF 06.50185: MOVLW 040186: MOVWF 5D0187: MOVLW FA0188: MOVWF 5E0189: CALL 07B018A: DECFSZ 5D,F018B: GOTO 187.................... BL; BR; Delay_ms(1000); STOPL; STOPR; Delay_ms(1000);018C: BSF 03.5018D: BCF 06.6018E: BCF 03.5018F: BCF 06.60190: BSF 03.50191: BCF 06.70192: BCF 03.50193: BSF 06.70194: BSF 03.50195: BCF 06.40196: BCF 03.50197: BCF 06.40198: BSF 03.50199: BCF 06.5019A: BCF 03.5019B: BSF 06.5019C: MOVLW 04019D: MOVWF 5D019E: MOVLW FA019F: MOVWF 5E01A0: CALL 07B01A1: DECFSZ 5D,F01A2: GOTO 19E01A3: BSF 03.501A4: BCF 06.601A5: BCF 03.501A6: BCF 06.601A7: BSF 03.501A8: BCF 06.701A9: BCF 03.501AA: BCF 06.701AB: BSF 03.501AC: BCF 06.401AD: BCF 03.501AE: BCF 06.401AF: BSF 03.501B0: BCF 06.501B1: BCF 03.501B2: BCF 06.501B3: MOVLW 0401B4: MOVWF 5D01B5: MOVLW FA01B6: MOVWF 5E01B7: CALL 07B01B8: DECFSZ 5D,F01B9: GOTO 1B5.................... };01BA: GOTO 090.................... while (input(DIAG_SENSORS)) // spusteni diagnostiky cidel.................... {01BB: BSF 03.501BC: BSF 06.201BD: BCF 03.501BE: BTFSS 06.201BF: GOTO 1EE.................... if (RSENSOR) beep(1000,1000);01C0: BSF 03.501C1: BTFSC 1C.701C2: GOTO 1CE01C3: MOVLW 0301C4: BCF 03.501C5: MOVWF 5E01C6: MOVLW E801C7: MOVWF 5D01C8: MOVLW 0301C9: MOVWF 6001CA: MOVLW E801CB: MOVWF 5F01CC: CALL 05501CD: BSF 03.5.................... if (LSENSOR) beep(2000,2000);01CE: BTFSC 1C.601CF: GOTO 1DB01D0: MOVLW 0701D1: BCF 03.501D2: MOVWF 5E01D3: MOVLW D001D4: MOVWF 5D01D5: MOVLW 0701D6: MOVWF 6001D7: MOVLW D001D8: MOVWF 5F01D9: CALL 05501DA: BSF 03.5.................... if ((read_adc(ADC_READ_ONLY)<BUMPER_TRESHOLD)) beep(3000,3000);01DB: BCF 03.501DC: BTFSS 1F.201DD: GOTO 1E001DE: BSF 03.501DF: GOTO 1DB01E0: MOVF 1E,W01E1: SUBLW 7F01E2: BTFSS 03.001E3: GOTO 1ED01E4: MOVLW 0B01E5: MOVWF 5E01E6: MOVLW B801E7: MOVWF 5D01E8: MOVLW 0B01E9: MOVWF 6001EA: MOVLW B801EB: MOVWF 5F01EC: CALL 055.................... };01ED: GOTO 1BB.................... }01EE: BCF 0A.301EF: GOTO 31F (RETURN).................... ///////////////////////////////////////////////////////////////////////////////.................... void OtocSe() // otoci se zpet, kdyz je prekazka.................... {.................... unsigned int16 n;........................................ BR;BL;01F0: BSF 03.501F1: BCF 06.401F2: BCF 03.501F3: BCF 06.401F4: BSF 03.501F5: BCF 06.501F6: BCF 03.501F7: BSF 06.501F8: BSF 03.501F9: BCF 06.601FA: BCF 03.501FB: BCF 06.601FC: BSF 03.501FD: BCF 06.701FE: BCF 03.501FF: BSF 06.7.................... beep(800,400);0200: MOVLW 030201: MOVWF 5E0202: MOVLW 200203: MOVWF 5D0204: MOVLW 010205: MOVWF 600206: MOVLW 900207: MOVWF 5F0208: CALL 055.................... beep(2000,1000);0209: MOVLW 07020A: MOVWF 5E020B: MOVLW D0020C: MOVWF 5D020D: MOVLW 03020E: MOVWF 60020F: MOVLW E80210: MOVWF 5F0211: CALL 055.................... beep(900,400);0212: MOVLW 030213: MOVWF 5E0214: MOVLW 840215: MOVWF 5D0216: MOVLW 010217: MOVWF 600218: MOVLW 900219: MOVWF 5F021A: CALL 055........................................ BR; FL; Delay_ms(50); // otoc se 30° do prava021B: BSF 03.5021C: BCF 06.4021D: BCF 03.5021E: BCF 06.4021F: BSF 03.50220: BCF 06.50221: BCF 03.50222: BSF 06.50223: BSF 03.50224: BCF 06.70225: BCF 03.50226: BCF 06.70227: BSF 03.50228: BCF 06.60229: BCF 03.5022A: BSF 06.6022B: MOVLW 32022C: MOVWF 5E022D: CALL 07B.................... STOPL; STOPR;022E: BSF 03.5022F: BCF 06.60230: BCF 03.50231: BCF 06.60232: BSF 03.50233: BCF 06.70234: BCF 03.50235: BCF 06.70236: BSF 03.50237: BCF 06.40238: BCF 03.50239: BCF 06.4023A: BSF 03.5023B: BCF 06.5023C: BCF 03.5023D: BCF 06.5.................... beep(1000,1000);023E: MOVLW 03023F: MOVWF 5E0240: MOVLW E80241: MOVWF 5D0242: MOVLW 030243: MOVWF 600244: MOVLW E80245: MOVWF 5F0246: CALL 055........................................ BR; FL;0247: BSF 03.50248: BCF 06.40249: BCF 03.5024A: BCF 06.4024B: BSF 03.5024C: BCF 06.5024D: BCF 03.5024E: BSF 06.5024F: BSF 03.50250: BCF 06.70251: BCF 03.50252: BCF 06.70253: BSF 03.50254: BCF 06.60255: BCF 03.50256: BSF 06.6.................... for(n=40000;n>0;n--) // toc se, dokud nenarazis na caru0257: MOVLW 9C0258: MOVWF 5C0259: MOVLW 40025A: MOVWF 5B025B: MOVF 5B,F025C: BTFSS 03.2025D: GOTO 261025E: MOVF 5C,F025F: BTFSC 03.20260: GOTO 279.................... {.................... line = RSENSOR; // cteni senzoru na caru0261: CLRF 2A0262: BSF 03.50263: BTFSC 1C.70264: GOTO 2680265: BCF 03.50266: INCF 2A,F0267: BSF 03.5.................... line |= LSENSOR << 1;0268: MOVLW 000269: BTFSS 1C.6026A: MOVLW 01026B: MOVWF 77026C: BCF 03.0026D: RLF 77,F026E: MOVF 77,W026F: BCF 03.50270: IORWF 2A,F.................... if (line!=0) break;0271: MOVF 2A,F0272: BTFSS 03.20273: GOTO 279.................... }0274: MOVF 5B,W0275: BTFSC 03.20276: DECF 5C,F0277: DECF 5B,F0278: GOTO 25B.................... STOPR; STOPL;0279: BSF 03.5027A: BCF 06.4027B: BCF 03.5027C: BCF 06.4027D: BSF 03.5027E: BCF 06.5027F: BCF 03.50280: BCF 06.50281: BSF 03.50282: BCF 06.60283: BCF 03.50284: BCF 06.60285: BSF 03.50286: BCF 06.70287: BCF 03.50288: BCF 06.7........................................ line=L; // caru jsme prejeli, tak je vlevo0289: MOVLW 02028A: MOVWF 2A.................... cirkus=0;028B: CLRF 2E.................... }028C: BCF 0A.3028D: GOTO 34B (RETURN)............................................................ void main().................... {028E: CLRF 04028F: MOVLW 1F0290: ANDWF 03,F0291: BSF 03.50292: BCF 1F.40293: BCF 1F.50294: MOVF 1B,W0295: ANDLW 800296: MOVWF 1B0297: MOVLW 070298: MOVWF 1C0299: MOVF 1C,W029A: BCF 03.5029B: BCF 0D.6029C: MOVLW 60029D: BSF 03.5029E: MOVWF 0F.................... unsigned int16 n; // pro FOR.................... unsigned int16 i;........................................ STOPL; STOPR; // prepne vystupy na ovladani motoru na output a zastavi029F: BCF 06.602A0: BCF 03.502A1: BCF 06.602A2: BSF 03.502A3: BCF 06.702A4: BCF 03.502A5: BCF 06.702A6: BSF 03.502A7: BCF 06.402A8: BCF 03.502A9: BCF 06.402AA: BSF 03.502AB: BCF 06.502AC: BCF 03.502AD: BCF 06.5........................................ setup_oscillator(OSC_4MHZ|OSC_INTRC); // 4 MHz interni RC oscilator02AE: MOVLW 6202AF: BSF 03.502B0: MOVWF 0F........................................ port_b_pullups(TRUE); // pullups pro piano na diagnostiku02B1: BCF 01.7.................... setup_spi(FALSE);02B2: BCF 03.502B3: BCF 14.502B4: BSF 03.502B5: BCF 06.202B6: BSF 06.102B7: BCF 06.402B8: MOVLW 0002B9: BCF 03.502BA: MOVWF 1402BB: BSF 03.502BC: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Casovac pro PWM02BD: MOVF 01,W02BE: ANDLW C702BF: IORLW 0802C0: MOVWF 01........................................ setup_timer_2(T2_DIV_BY_4,255,10); // Casovac pro regulaci02C1: MOVLW 4802C2: MOVWF 7802C3: IORLW 0502C4: BCF 03.502C5: MOVWF 1202C6: MOVLW FF02C7: BSF 03.502C8: MOVWF 12.................... // preruseni kazdych 10ms.................... setup_adc_ports(sAN2|VSS_VDD); // nastaveni A/D prevodniku pro naraznik02C9: BCF 1F.402CA: BCF 1F.502CB: MOVF 1B,W02CC: ANDLW 8002CD: IORLW 0402CE: MOVWF 1B.................... setup_adc(ADC_CLOCK_INTERNAL);02CF: BCF 1F.602D0: BCF 03.502D1: BSF 1F.602D2: BSF 1F.702D3: BSF 03.502D4: BCF 1F.702D5: BCF 03.502D6: BSF 1F.0.................... set_adc_channel(2);02D7: MOVLW 1002D8: MOVWF 7802D9: MOVF 1F,W02DA: ANDLW C702DB: IORWF 78,W02DC: MOVWF 1F.................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); // Casovac pro naraznik02DD: MOVLW 8502DE: MOVWF 10.................... setup_ccp1(CCP_COMPARE_RESET_TIMER);02DF: BSF 03.502E0: BSF 06.302E1: MOVLW 0B02E2: BCF 03.502E3: MOVWF 17.................... CCP_1=(2^10)-1; // prevod kazdou 1ms02E4: CLRF 1602E5: MOVLW 0702E6: MOVWF 15........................................ setup_comparator(A0_VR_A1_VR); // inicializace komparatoru pro cidla cary02E7: MOVLW 0202E8: BSF 03.502E9: MOVWF 1C02EA: MOVF 05,W02EB: IORLW 0302EC: MOVWF 0502ED: MOVLW 0302EE: MOVWF 7702EF: DECFSZ 77,F02F0: GOTO 2EF02F1: MOVF 1C,W02F2: BCF 03.502F3: BCF 0D.6.................... setup_vref(VREF_HIGH|TRESHOLD); // 32 kroku od 0.25 do 0.75 Vdd02F4: MOVLW 8F02F5: BSF 03.502F6: MOVWF 1D........................................ Beep(1000,200); //double beep02F7: MOVLW 0302F8: BCF 03.502F9: MOVWF 5E02FA: MOVLW E802FB: MOVWF 5D02FC: CLRF 6002FD: MOVLW C802FE: MOVWF 5F02FF: CALL 055.................... Delay_ms(50);0300: MOVLW 320301: MOVWF 5E0302: CALL 07B.................... Beep(1000,200);0303: MOVLW 030304: MOVWF 5E0305: MOVLW E80306: MOVWF 5D0307: CLRF 600308: MOVLW C80309: MOVWF 5F030A: CALL 055.................... Delay_ms(1000); // 1s030B: MOVLW 04030C: MOVWF 5B030D: MOVLW FA030E: MOVWF 5E030F: CALL 07B0310: DECFSZ 5B,F0311: GOTO 30D........................................ // povoleni rizeni rychlosti zataceni pres preruseni.................... enable_interrupts(INT_TIMER2);0312: BSF 03.50313: BSF 0C.1.................... enable_interrupts(GLOBAL);0314: MOVLW C00315: BCF 03.50316: IORWF 0B,F........................................ /*---------------------------------------------------------------------------*/.................... sensors=S;0317: MOVLW 030318: MOVWF 29.................... line=S;0319: MOVWF 2A.................... last=S;031A: MOVWF 2C.................... cirkus=0;031B: CLRF 2E.................... // movement=S;.................... speed=FW_POMALU;031C: MOVLW AA031D: MOVWF 2B........................................ diagnostika();031E: GOTO 090.................... Delay_ms(500);031F: MOVLW 020320: MOVWF 5B0321: MOVLW FA0322: MOVWF 5E0323: CALL 07B0324: DECFSZ 5B,F0325: GOTO 321.................... Beep(1000,200);0326: MOVLW 030327: MOVWF 5E0328: MOVLW E80329: MOVWF 5D032A: CLRF 60032B: MOVLW C8032C: MOVWF 5F032D: CALL 055.................... Delay_ms(500);032E: MOVLW 02032F: MOVWF 5B0330: MOVLW FA0331: MOVWF 5E0332: CALL 07B0333: DECFSZ 5B,F0334: GOTO 330........................................ while(true) // hlavni smycka (jizda podle cary).................... {.................... sensors = RSENSOR; // cteni senzoru na caru0335: CLRF 290336: BSF 03.50337: BTFSC 1C.70338: GOTO 33C0339: BCF 03.5033A: INCF 29,F033B: BSF 03.5.................... sensors |= LSENSOR << 1;033C: MOVLW 00033D: BTFSS 1C.6033E: MOVLW 01033F: MOVWF 770340: BCF 03.00341: RLF 77,F0342: MOVF 77,W0343: BCF 03.50344: IORWF 29,F........................................ if (read_adc(ADC_READ_ONLY)<BUMPER_TRESHOLD) OtocSe();0345: BTFSC 1F.20346: GOTO 3450347: MOVF 1E,W0348: SUBLW 7F0349: BTFSC 03.0034A: GOTO 1F0........................................ switch (sensors) // zatacej podle toho, kde vidis caru.................... {034B: MOVF 29,W034C: XORLW 03034D: BTFSC 03.2034E: GOTO 356034F: XORLW 010350: BTFSC 03.20351: GOTO 38B0352: XORLW 030353: BTFSC 03.20354: GOTO 3C20355: GOTO 3F9.................... case S: // rovne.................... GO(L, F, FW_STREDNE+rovinka); GO(R, F, FW_STREDNE+rovinka);0356: MOVF 01,W0357: MOVWF 5B0358: MOVLW BE0359: ADDWF 2D,W035A: SUBWF 5B,W035B: BTFSC 03.2035C: GOTO 35F035D: BTFSC 03.0035E: GOTO 368035F: BSF 03.50360: BCF 06.70361: BCF 03.50362: BCF 06.70363: BSF 03.50364: BCF 06.60365: BCF 03.50366: BSF 06.60367: GOTO 3700368: BSF 03.50369: BCF 06.6036A: BCF 03.5036B: BCF 06.6036C: BSF 03.5036D: BCF 06.7036E: BCF 03.5036F: BCF 06.70370: MOVF 01,W0371: MOVWF 5B0372: MOVLW BE0373: ADDWF 2D,W0374: SUBWF 5B,W0375: BTFSC 03.20376: GOTO 3790377: BTFSC 03.00378: GOTO 3820379: BSF 03.5037A: BCF 06.5037B: BCF 03.5037C: BCF 06.5037D: BSF 03.5037E: BCF 06.4037F: BCF 03.50380: BSF 06.40381: GOTO 38A0382: BSF 03.50383: BCF 06.40384: BCF 03.50385: BCF 06.40386: BSF 03.50387: BCF 06.50388: BCF 03.50389: BCF 06.5.................... continue;038A: GOTO 335.................... case L: // trochu vlevo.................... GO(L, F, FW_POMALU+rovinka); GO(R, F, FW_STREDNE+rovinka);038B: MOVF 01,W038C: MOVWF 5B038D: MOVLW AA038E: ADDWF 2D,W038F: SUBWF 5B,W0390: BTFSC 03.20391: GOTO 3940392: BTFSC 03.00393: GOTO 39D0394: BSF 03.50395: BCF 06.70396: BCF 03.50397: BCF 06.70398: BSF 03.50399: BCF 06.6039A: BCF 03.5039B: BSF 06.6039C: GOTO 3A5039D: BSF 03.5039E: BCF 06.6039F: BCF 03.503A0: BCF 06.603A1: BSF 03.503A2: BCF 06.703A3: BCF 03.503A4: BCF 06.703A5: MOVF 01,W03A6: MOVWF 5B03A7: MOVLW BE03A8: ADDWF 2D,W03A9: SUBWF 5B,W03AA: BTFSC 03.203AB: GOTO 3AE03AC: BTFSC 03.003AD: GOTO 3B703AE: BSF 03.503AF: BCF 06.503B0: BCF 03.503B1: BCF 06.503B2: BSF 03.503B3: BCF 06.403B4: BCF 03.503B5: BSF 06.403B6: GOTO 3BF03B7: BSF 03.503B8: BCF 06.403B9: BCF 03.503BA: BCF 06.403BB: BSF 03.503BC: BCF 06.503BD: BCF 03.503BE: BCF 06.5.................... line=L;03BF: MOVLW 0203C0: MOVWF 2A.................... continue;03C1: GOTO 335.................... case R: // trochu vpravo.................... GO(R, F, FW_POMALU+rovinka); GO(L, F, FW_STREDNE+rovinka);03C2: MOVF 01,W03C3: MOVWF 5B03C4: MOVLW AA03C5: ADDWF 2D,W03C6: SUBWF 5B,W03C7: BTFSC 03.203C8: GOTO 3CB03C9: BTFSC 03.003CA: GOTO 3D403CB: BSF 03.503CC: BCF 06.503CD: BCF 03.503CE: BCF 06.503CF: BSF 03.503D0: BCF 06.403D1: BCF 03.503D2: BSF 06.403D3: GOTO 3DC03D4: BSF 03.503D5: BCF 06.403D6: BCF 03.503D7: BCF 06.403D8: BSF 03.503D9: BCF 06.503DA: BCF 03.503DB: BCF 06.503DC: MOVF 01,W03DD: MOVWF 5B03DE: MOVLW BE03DF: ADDWF 2D,W03E0: SUBWF 5B,W03E1: BTFSC 03.203E2: GOTO 3E503E3: BTFSC 03.003E4: GOTO 3EE03E5: BSF 03.503E6: BCF 06.703E7: BCF 03.503E8: BCF 06.703E9: BSF 03.503EA: BCF 06.603EB: BCF 03.503EC: BSF 06.603ED: GOTO 3F603EE: BSF 03.503EF: BCF 06.603F0: BCF 03.503F1: BCF 06.603F2: BSF 03.503F3: BCF 06.703F4: BCF 03.503F5: BCF 06.7.................... line=R;03F6: MOVLW 0103F7: MOVWF 2A.................... continue;03F8: GOTO 335.................... default: // kdyz jsou obe cidla mimo caru, tak pokracuj dal.................... };.................... rovinka=0;03F9: CLRF 2D........................................ if (last!=line) // pokud si prejel caru z jedne strany na druhou stranu, tak zabrzdi03FA: MOVF 2A,W03FB: SUBWF 2C,W03FC: BTFSC 03.203FD: GOTO 48F.................... {.................... last=line;03FE: MOVF 2A,W03FF: MOVWF 2C.................... speed=FW_ZATACKA;0400: MOVLW C80401: MOVWF 2B.................... cirkus++;0402: INCF 2E,F.................... if (cirkus>10)0403: MOVF 2E,W0404: SUBLW 0A0405: BTFSC 03.00406: GOTO 48F.................... {.................... STOPL; STOPR;0407: BSF 03.50408: BCF 06.60409: BCF 03.5040A: BCF 06.6040B: BSF 03.5040C: BCF 06.7040D: BCF 03.5040E: BCF 06.7040F: BSF 03.50410: BCF 06.40411: BCF 03.50412: BCF 06.40413: BSF 03.50414: BCF 06.50415: BCF 03.50416: BCF 06.5.................... cirkus=0;0417: CLRF 2E.................... disable_interrupts(GLOBAL);0418: BCF 0B.60419: BCF 0B.7041A: BTFSC 0B.7041B: GOTO 419.................... beep(1000,400);041C: MOVLW 03041D: MOVWF 5E041E: MOVLW E8041F: MOVWF 5D0420: MOVLW 010421: MOVWF 600422: MOVLW 900423: MOVWF 5F0424: CALL 055.................... for(n=3000; n>3950; n--) beep(n,10);0425: MOVLW 0B0426: MOVWF 580427: MOVLW B80428: MOVWF 570429: MOVF 58,W042A: SUBLW 0E042B: BTFSC 03.0042C: GOTO 441042D: XORLW FF042E: BTFSS 03.2042F: GOTO 4340430: MOVF 57,W0431: SUBLW 6E0432: BTFSC 03.00433: GOTO 4410434: MOVF 58,W0435: MOVWF 5E0436: MOVF 57,W0437: MOVWF 5D0438: CLRF 600439: MOVLW 0A043A: MOVWF 5F043B: CALL 055043C: MOVF 57,W043D: BTFSC 03.2043E: DECF 58,F043F: DECF 57,F0440: GOTO 429.................... beep(2000,200);0441: MOVLW 070442: MOVWF 5E0443: MOVLW D00444: MOVWF 5D0445: CLRF 600446: MOVLW C80447: MOVWF 5F0448: CALL 055.................... beep(900,400);0449: MOVLW 03044A: MOVWF 5E044B: MOVLW 84044C: MOVWF 5D044D: MOVLW 01044E: MOVWF 60044F: MOVLW 900450: MOVWF 5F0451: CALL 055.................... for(n=2950; n<3000; n++) beep(n,10);0452: MOVLW 0B0453: MOVWF 580454: MOVLW 860455: MOVWF 570456: MOVF 58,W0457: SUBLW 0B0458: BTFSS 03.00459: GOTO 46C045A: BTFSS 03.2045B: GOTO 460045C: MOVF 57,W045D: SUBLW B7045E: BTFSS 03.0045F: GOTO 46C0460: MOVF 58,W0461: MOVWF 5E0462: MOVF 57,W0463: MOVWF 5D0464: CLRF 600465: MOVLW 0A0466: MOVWF 5F0467: CALL 0550468: INCF 57,F0469: BTFSC 03.2046A: INCF 58,F046B: GOTO 456.................... beep(4000,400);046C: MOVLW 0F046D: MOVWF 5E046E: MOVLW A0046F: MOVWF 5D0470: MOVLW 010471: MOVWF 600472: MOVLW 900473: MOVWF 5F0474: CALL 055.................... beep(1000,100);0475: MOVLW 030476: MOVWF 5E0477: MOVLW E80478: MOVWF 5D0479: CLRF 60047A: MOVLW 64047B: MOVWF 5F047C: CALL 055.................... beep(3000,400);047D: MOVLW 0B047E: MOVWF 5E047F: MOVLW B80480: MOVWF 5D0481: MOVLW 010482: MOVWF 600483: MOVLW 900484: MOVWF 5F0485: CALL 055.................... Delay_ms(1000);0486: MOVLW 040487: MOVWF 5B0488: MOVLW FA0489: MOVWF 5E048A: CALL 07B048B: DECFSZ 5B,F048C: GOTO 488.................... enable_interrupts(GLOBAL);048D: MOVLW C0048E: IORWF 0B,F.................... }.................... };........................................ if (L==line) // kdyz jsou obe cidla mimo caru, zatoc na caru048F: MOVF 2A,W0490: SUBLW 020491: BTFSS 03.20492: GOTO 4B1.................... {.................... STOPL;0493: BSF 03.50494: BCF 06.60495: BCF 03.50496: BCF 06.60497: BSF 03.50498: BCF 06.70499: BCF 03.5049A: BCF 06.7.................... GO(R, F, speed);049B: MOVF 01,W049C: SUBWF 2B,W049D: BTFSS 03.0049E: GOTO 4A8049F: BSF 03.504A0: BCF 06.504A1: BCF 03.504A2: BCF 06.504A3: BSF 03.504A4: BCF 06.404A5: BCF 03.504A6: BSF 06.404A7: GOTO 4B004A8: BSF 03.504A9: BCF 06.404AA: BCF 03.504AB: BCF 06.404AC: BSF 03.504AD: BCF 06.504AE: BCF 03.504AF: BCF 06.5.................... }.................... else04B0: GOTO 4CE.................... {.................... STOPR;04B1: BSF 03.504B2: BCF 06.404B3: BCF 03.504B4: BCF 06.404B5: BSF 03.504B6: BCF 06.504B7: BCF 03.504B8: BCF 06.5.................... GO(L, F, speed);04B9: MOVF 01,W04BA: SUBWF 2B,W04BB: BTFSS 03.004BC: GOTO 4C604BD: BSF 03.504BE: BCF 06.704BF: BCF 03.504C0: BCF 06.704C1: BSF 03.504C2: BCF 06.604C3: BCF 03.504C4: BSF 06.604C5: GOTO 4CE04C6: BSF 03.504C7: BCF 06.604C8: BCF 03.504C9: BCF 06.604CA: BSF 03.504CB: BCF 06.704CC: BCF 03.504CD: BCF 06.7.................... }.................... } // while(true)04CE: GOTO 335.................... }....................04CF: SLEEPConfiguration Fuses:Word 1: 3F38 NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT INTRC_IOWord 2: 3FFC NOFCMEN NOIESO