Blame | Last modification | View Log | Download
CCS PCM C Compiler, Version 3.221, 27853 18-VI-05 13:30Filename: D:\KAKLIK\programy\PIC_C\roboti\merkur\PIC16F88\MerkurU\tank.LSTROM used: 1441 words (35%)Largest free fragment is 2048RAM used: 27 (15%) at main() level34 (19%) worst caseStack: 4 worst case (3 in main + 1 for interrupts)*0000: MOVLW 000001: MOVWF 0A0002: GOTO 2D10003: 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.................... // Program pro predvadeni schopnosti robota Merkur.................... //------------------------------------------------........................................ #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 3C,F0044: BTFSS 03.00045: GOTO 0540046: MOVLW 3C0047: 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*0073: MOVLW 370074: MOVWF 040075: MOVF 00,W0076: BTFSC 03.20077: GOTO 0870078: MOVLW 010079: MOVWF 78007A: CLRF 77007B: DECFSZ 77,F007C: GOTO 07B007D: DECFSZ 78,F007E: GOTO 07A007F: MOVLW 4A0080: MOVWF 770081: DECFSZ 77,F0082: GOTO 0810083: NOP0084: NOP0085: DECFSZ 00,F0086: GOTO 0780087: 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; // pocitadlo, po kolika akcich se ma delat cirkus.................... int1 BW; // urcuje, jestli je cara cerno/bila nebo.................... // bilo/cerna (true = bila cara, cerny podklad)........................................ // 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 // rozhodovaci uroven cidla na prekazku........................................ //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 (BW != C2OUT) // Senzory na caru.................... #define LSENSOR (BW != C1OUT).................... #define BUMPER sAN2 // Senzor na cihlu........................................ #define DIAG_SERVO PIN_B3 // Propojka pro diagnosticky mod.................... #define DIAG_SENSORS PIN_B2 // Propojka pro diagnosticky mod.................... #define BARVY PIN_B1 // Propojka pro nastaveni barvy cary........................................ #define SPEAKER PIN_B0 // vystup pro pipak........................................ #define LED1 PIN_A4 // LEDky.................... #define LED2 PIN_A3.................... #define LED3 PIN_A7.................... #define LED4 PIN_A6........................................ // makro pro PWM.................... #define GO(motor, direction, power) if(get_timer0()<=power) \.................... {direction##motor;} else {stop##motor;}........................................ #int_TIMER2.................... void TIMER2_isr() // obsluha zrychlovani.................... {.................... 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 39,W0056: MOVWF 3B0057: MOVF 38,W0058: MOVWF 3A0059: MOVF 3A,F005A: BTFSS 03.2005B: GOTO 05F005C: MOVF 3B,F005D: BTFSC 03.2005E: GOTO 072.................... {.................... output_high(SPEAKER);005F: BSF 03.50060: BCF 06.00061: BCF 03.50062: BSF 06.0.................... delay_us(period);0063: MOVF 36,W0064: MOVWF 3C0065: CALL 042.................... output_low(SPEAKER);0066: BSF 03.50067: BCF 06.00068: BCF 03.50069: BCF 06.0.................... delay_us(period);006A: MOVF 36,W006B: MOVWF 3C006C: CALL 042.................... }006D: MOVF 3A,W006E: BTFSC 03.2006F: DECF 3B,F0070: DECF 3A,F0071: GOTO 059.................... }0072: RETLW 00.................... /******************************************************************************/.................... void diagnostika().................... {.................... unsigned int16 n;........................................ while (input(DIAG_SERVO)) // Propojka, ktera spousti diagnostiku.................... {*0088: BSF 03.50089: BSF 06.3008A: BCF 03.5008B: BTFSS 06.3008C: GOTO 1B3.................... for (n=500; n<800; n+=100)008D: MOVLW 01008E: MOVWF 35008F: MOVLW F40090: MOVWF 340091: MOVF 35,W0092: SUBLW 030093: BTFSS 03.00094: GOTO 0A90095: BTFSS 03.20096: GOTO 09B0097: MOVF 34,W0098: SUBLW 1F0099: BTFSS 03.0009A: GOTO 0A9.................... {.................... beep(n,n); //beep UP009B: MOVF 35,W009C: MOVWF 37009D: MOVF 34,W009E: MOVWF 36009F: MOVF 35,W00A0: MOVWF 3900A1: MOVF 34,W00A2: MOVWF 3800A3: CALL 055.................... };00A4: MOVLW 6400A5: ADDWF 34,F00A6: BTFSC 03.000A7: INCF 35,F00A8: GOTO 091.................... Delay_ms(1000);00A9: MOVLW 0400AA: MOVWF 3600AB: MOVLW FA00AC: MOVWF 3700AD: CALL 07300AE: DECFSZ 36,F00AF: GOTO 0AB.................... //zastav vse.................... STOPL; STOPR;00B0: BSF 03.500B1: BCF 06.600B2: BCF 03.500B3: BCF 06.600B4: BSF 03.500B5: BCF 06.700B6: BCF 03.500B7: BCF 06.700B8: BSF 03.500B9: BCF 06.400BA: BCF 03.500BB: BCF 06.400BC: BSF 03.500BD: BCF 06.500BE: BCF 03.500BF: BCF 06.5.................... //pravy pas.................... FR; Delay_ms(1000); STOPR; Delay_ms(1000);00C0: BSF 03.500C1: BCF 06.500C2: BCF 03.500C3: BCF 06.500C4: BSF 03.500C5: BCF 06.400C6: BCF 03.500C7: BSF 06.400C8: MOVLW 0400C9: MOVWF 3600CA: MOVLW FA00CB: MOVWF 3700CC: CALL 07300CD: DECFSZ 36,F00CE: GOTO 0CA00CF: BSF 03.500D0: BCF 06.400D1: BCF 03.500D2: BCF 06.400D3: BSF 03.500D4: BCF 06.500D5: BCF 03.500D6: BCF 06.500D7: MOVLW 0400D8: MOVWF 3600D9: MOVLW FA00DA: MOVWF 3700DB: CALL 07300DC: DECFSZ 36,F00DD: GOTO 0D9.................... BR; Delay_ms(1000); STOPR; Delay_ms(1000);00DE: BSF 03.500DF: BCF 06.400E0: BCF 03.500E1: BCF 06.400E2: BSF 03.500E3: BCF 06.500E4: BCF 03.500E5: BSF 06.500E6: MOVLW 0400E7: MOVWF 3600E8: MOVLW FA00E9: MOVWF 3700EA: CALL 07300EB: DECFSZ 36,F00EC: GOTO 0E800ED: BSF 03.500EE: BCF 06.400EF: BCF 03.500F0: BCF 06.400F1: BSF 03.500F2: BCF 06.500F3: BCF 03.500F4: BCF 06.500F5: MOVLW 0400F6: MOVWF 3600F7: MOVLW FA00F8: MOVWF 3700F9: CALL 07300FA: DECFSZ 36,F00FB: GOTO 0F7.................... Beep(880,100); Delay_ms(1000);00FC: MOVLW 0300FD: MOVWF 3700FE: MOVLW 7000FF: MOVWF 360100: CLRF 390101: MOVLW 640102: MOVWF 380103: CALL 0550104: MOVLW 040105: MOVWF 360106: MOVLW FA0107: MOVWF 370108: CALL 0730109: DECFSZ 36,F010A: GOTO 106.................... //levy pas.................... FL; Delay_ms(1000); STOPL; Delay_ms(1000);010B: BSF 03.5010C: BCF 06.7010D: BCF 03.5010E: BCF 06.7010F: BSF 03.50110: BCF 06.60111: BCF 03.50112: BSF 06.60113: MOVLW 040114: MOVWF 360115: MOVLW FA0116: MOVWF 370117: CALL 0730118: DECFSZ 36,F0119: GOTO 115011A: BSF 03.5011B: BCF 06.6011C: BCF 03.5011D: BCF 06.6011E: BSF 03.5011F: BCF 06.70120: BCF 03.50121: BCF 06.70122: MOVLW 040123: MOVWF 360124: MOVLW FA0125: MOVWF 370126: CALL 0730127: DECFSZ 36,F0128: GOTO 124.................... BL; Delay_ms(1000); STOPL; Delay_ms(1000);0129: BSF 03.5012A: BCF 06.6012B: BCF 03.5012C: BCF 06.6012D: BSF 03.5012E: BCF 06.7012F: BCF 03.50130: BSF 06.70131: MOVLW 040132: MOVWF 360133: MOVLW FA0134: MOVWF 370135: CALL 0730136: DECFSZ 36,F0137: GOTO 1330138: BSF 03.50139: BCF 06.6013A: BCF 03.5013B: BCF 06.6013C: BSF 03.5013D: BCF 06.7013E: BCF 03.5013F: BCF 06.70140: MOVLW 040141: MOVWF 360142: MOVLW FA0143: MOVWF 370144: CALL 0730145: DECFSZ 36,F0146: GOTO 142.................... Beep(880,100); Delay_ms(1000);0147: MOVLW 030148: MOVWF 370149: MOVLW 70014A: MOVWF 36014B: CLRF 39014C: MOVLW 64014D: MOVWF 38014E: CALL 055014F: MOVLW 040150: MOVWF 360151: MOVLW FA0152: MOVWF 370153: CALL 0730154: DECFSZ 36,F0155: GOTO 151.................... //oba pasy.................... FL; FR; Delay_ms(1000); STOPL; STOPR; Delay_ms(1000);0156: BSF 03.50157: BCF 06.70158: BCF 03.50159: BCF 06.7015A: BSF 03.5015B: BCF 06.6015C: BCF 03.5015D: BSF 06.6015E: BSF 03.5015F: BCF 06.50160: BCF 03.50161: BCF 06.50162: BSF 03.50163: BCF 06.40164: BCF 03.50165: BSF 06.40166: MOVLW 040167: MOVWF 360168: MOVLW FA0169: MOVWF 37016A: CALL 073016B: DECFSZ 36,F016C: GOTO 168016D: BSF 03.5016E: BCF 06.6016F: BCF 03.50170: BCF 06.60171: BSF 03.50172: BCF 06.70173: BCF 03.50174: BCF 06.70175: BSF 03.50176: BCF 06.40177: BCF 03.50178: BCF 06.40179: BSF 03.5017A: BCF 06.5017B: BCF 03.5017C: BCF 06.5017D: MOVLW 04017E: MOVWF 36017F: MOVLW FA0180: MOVWF 370181: CALL 0730182: DECFSZ 36,F0183: GOTO 17F.................... BL; BR; Delay_ms(1000); STOPL; STOPR; Delay_ms(1000);0184: BSF 03.50185: BCF 06.60186: BCF 03.50187: BCF 06.60188: BSF 03.50189: BCF 06.7018A: BCF 03.5018B: BSF 06.7018C: BSF 03.5018D: BCF 06.4018E: BCF 03.5018F: BCF 06.40190: BSF 03.50191: BCF 06.50192: BCF 03.50193: BSF 06.50194: MOVLW 040195: MOVWF 360196: MOVLW FA0197: MOVWF 370198: CALL 0730199: DECFSZ 36,F019A: GOTO 196019B: BSF 03.5019C: BCF 06.6019D: BCF 03.5019E: BCF 06.6019F: BSF 03.501A0: BCF 06.701A1: BCF 03.501A2: BCF 06.701A3: BSF 03.501A4: BCF 06.401A5: BCF 03.501A6: BCF 06.401A7: BSF 03.501A8: BCF 06.501A9: BCF 03.501AA: BCF 06.501AB: MOVLW 0401AC: MOVWF 3601AD: MOVLW FA01AE: MOVWF 3701AF: CALL 07301B0: DECFSZ 36,F01B1: GOTO 1AD.................... };01B2: GOTO 088.................... while (input(DIAG_SENSORS)) // spusteni diagnostiky cidel.................... {01B3: BSF 03.501B4: BSF 06.201B5: BCF 03.501B6: BTFSS 06.201B7: GOTO 1F6.................... if (RSENSOR) beep(1000,200);01B8: CLRF 7701B9: BSF 03.501BA: BTFSC 1C.701BB: BSF 77.001BC: BCF 03.501BD: MOVF 2F,W01BE: XORWF 77,W01BF: ANDLW 0101C0: BTFSC 03.201C1: GOTO 1CA01C2: MOVLW 0301C3: MOVWF 3701C4: MOVLW E801C5: MOVWF 3601C6: CLRF 3901C7: MOVLW C801C8: MOVWF 3801C9: CALL 055.................... Delay_ms(200);01CA: MOVLW C801CB: MOVWF 3701CC: CALL 073.................... if (LSENSOR) beep(2000,300);01CD: CLRF 7701CE: BSF 03.501CF: BTFSC 1C.601D0: BSF 77.001D1: BCF 03.501D2: MOVF 2F,W01D3: XORWF 77,W01D4: ANDLW 0101D5: BTFSC 03.201D6: GOTO 1E001D7: MOVLW 0701D8: MOVWF 3701D9: MOVLW D001DA: MOVWF 3601DB: MOVLW 0101DC: MOVWF 3901DD: MOVLW 2C01DE: MOVWF 3801DF: CALL 055.................... Delay_ms(200);01E0: MOVLW C801E1: MOVWF 3701E2: CALL 073.................... if ((read_adc(ADC_READ_ONLY)<BUMPER_TRESHOLD)) beep(3000,400);01E3: BTFSC 1F.201E4: GOTO 1E301E5: MOVF 1E,W01E6: SUBLW 7F01E7: BTFSS 03.001E8: GOTO 1F201E9: MOVLW 0B01EA: MOVWF 3701EB: MOVLW B801EC: MOVWF 3601ED: MOVLW 0101EE: MOVWF 3901EF: MOVLW 9001F0: MOVWF 3801F1: CALL 055.................... Delay_ms(200);01F2: MOVLW C801F3: MOVWF 3701F4: CALL 073.................... };01F5: GOTO 1B3.................... }01F6: BCF 0A.301F7: GOTO 378 (RETURN).................... ///////////////////////////////////////////////////////////////////////////////.................... void OtocSe() // otoci se zpet, kdyz je prekazka.................... {.................... unsigned int16 n;........................................ BL; BR; // cukni zpatky01F8: BSF 03.501F9: BCF 06.601FA: BCF 03.501FB: BCF 06.601FC: BSF 03.501FD: BCF 06.701FE: BCF 03.501FF: BSF 06.70200: BSF 03.50201: BCF 06.40202: BCF 03.50203: BCF 06.40204: BSF 03.50205: BCF 06.50206: BCF 03.50207: BSF 06.5.................... Delay_ms(200);0208: MOVLW C80209: MOVWF 37020A: CALL 073.................... STOPR;STOPL;020B: BSF 03.5020C: BCF 06.4020D: BCF 03.5020E: BCF 06.4020F: BSF 03.50210: BCF 06.50211: BCF 03.50212: BCF 06.50213: BSF 03.50214: BCF 06.60215: BCF 03.50216: BCF 06.60217: BSF 03.50218: BCF 06.70219: BCF 03.5021A: BCF 06.7.................... beep(800,400);021B: MOVLW 03021C: MOVWF 37021D: MOVLW 20021E: MOVWF 36021F: MOVLW 010220: MOVWF 390221: MOVLW 900222: MOVWF 380223: CALL 055.................... beep(2000,1000);0224: MOVLW 070225: MOVWF 370226: MOVLW D00227: MOVWF 360228: MOVLW 030229: MOVWF 39022A: MOVLW E8022B: MOVWF 38022C: CALL 055.................... output_low(LED4);022D: BSF 03.5022E: BCF 05.6022F: BCF 03.50230: BCF 05.6.................... beep(900,400);0231: MOVLW 030232: MOVWF 370233: MOVLW 840234: MOVWF 360235: MOVLW 010236: MOVWF 390237: MOVLW 900238: MOVWF 380239: CALL 055.................... output_low(LED1);023A: BSF 03.5023B: BCF 05.4023C: BCF 03.5023D: BCF 05.4........................................ BR; FL; Delay_ms(100); // otoc se 30° do prava023E: BSF 03.5023F: BCF 06.40240: BCF 03.50241: BCF 06.40242: BSF 03.50243: BCF 06.50244: BCF 03.50245: BSF 06.50246: BSF 03.50247: BCF 06.70248: BCF 03.50249: BCF 06.7024A: BSF 03.5024B: BCF 06.6024C: BCF 03.5024D: BSF 06.6024E: MOVLW 64024F: MOVWF 370250: CALL 073.................... STOPL; STOPR;0251: BSF 03.50252: BCF 06.60253: BCF 03.50254: BCF 06.60255: BSF 03.50256: BCF 06.70257: BCF 03.50258: BCF 06.70259: BSF 03.5025A: BCF 06.4025B: BCF 03.5025C: BCF 06.4025D: BSF 03.5025E: BCF 06.5025F: BCF 03.50260: BCF 06.5.................... beep(1000,1000);0261: MOVLW 030262: MOVWF 370263: MOVLW E80264: MOVWF 360265: MOVLW 030266: MOVWF 390267: MOVLW E80268: MOVWF 380269: CALL 055.................... output_low(LED3);026A: BSF 03.5026B: BCF 05.7026C: BCF 03.5026D: BCF 05.7........................................ BR; FL;026E: BSF 03.5026F: BCF 06.40270: BCF 03.50271: BCF 06.40272: BSF 03.50273: BCF 06.50274: BCF 03.50275: BSF 06.50276: BSF 03.50277: BCF 06.70278: BCF 03.50279: BCF 06.7027A: BSF 03.5027B: BCF 06.6027C: BCF 03.5027D: BSF 06.6.................... for(n=40000;n>0;n--) // toc se, dokud nenarazis na caru027E: MOVLW 9C027F: MOVWF 350280: MOVLW 400281: MOVWF 340282: MOVF 34,F0283: BTFSS 03.20284: GOTO 2880285: MOVF 35,F0286: BTFSC 03.20287: GOTO 2B0.................... {.................... line = RSENSOR; // cteni senzoru na caru0288: CLRF 770289: BSF 03.5028A: BTFSC 1C.7028B: BSF 77.0028C: BCF 03.5028D: MOVF 2F,W028E: XORWF 77,W028F: ANDLW 010290: BTFSS 03.20291: GOTO 2940292: MOVLW 000293: GOTO 2950294: MOVLW 010295: MOVWF 2A.................... line |= LSENSOR << 1;0296: CLRF 770297: BSF 03.50298: BTFSC 1C.60299: BSF 77.0029A: BCF 03.5029B: MOVF 2F,W029C: XORWF 77,W029D: ANDLW 01029E: BTFSS 03.2029F: GOTO 2A202A0: MOVLW 0002A1: GOTO 2A302A2: MOVLW 0102A3: MOVWF 7702A4: BCF 03.002A5: RLF 77,F02A6: MOVF 77,W02A7: IORWF 2A,F.................... if (line!=0) break;02A8: MOVF 2A,F02A9: BTFSS 03.202AA: GOTO 2B0.................... }02AB: MOVF 34,W02AC: BTFSC 03.202AD: DECF 35,F02AE: DECF 34,F02AF: GOTO 282.................... STOPR; STOPL;02B0: BSF 03.502B1: BCF 06.402B2: BCF 03.502B3: BCF 06.402B4: BSF 03.502B5: BCF 06.502B6: BCF 03.502B7: BCF 06.502B8: BSF 03.502B9: BCF 06.602BA: BCF 03.502BB: BCF 06.602BC: BSF 03.502BD: BCF 06.702BE: BCF 03.502BF: BCF 06.7.................... output_high(LED1); output_high(LED3); output_high(LED4);02C0: BSF 03.502C1: BCF 05.402C2: BCF 03.502C3: BSF 05.402C4: BSF 03.502C5: BCF 05.702C6: BCF 03.502C7: BSF 05.702C8: BSF 03.502C9: BCF 05.602CA: BCF 03.502CB: BSF 05.6........................................ line=L; // caru jsme prejeli, tak je vlevo02CC: MOVLW 0202CD: MOVWF 2A.................... cirkus=0;02CE: CLRF 2E.................... }02CF: BCF 0A.302D0: GOTO 3F1 (RETURN)............................................................ void main().................... {02D1: CLRF 0402D2: MOVLW 1F02D3: ANDWF 03,F02D4: BSF 03.502D5: BCF 1F.402D6: BCF 1F.502D7: MOVF 1B,W02D8: ANDLW 8002D9: MOVWF 1B02DA: MOVLW 0702DB: MOVWF 1C02DC: MOVF 1C,W02DD: BCF 03.502DE: BCF 0D.602DF: MOVLW 6002E0: BSF 03.502E1: MOVWF 0F.................... unsigned int16 n; // pro FOR.................... unsigned int16 i;........................................ STOPL; STOPR; // prepne vystupy na ovladani motoru na output a zastavi02E2: BCF 06.602E3: BCF 03.502E4: BCF 06.602E5: BSF 03.502E6: BCF 06.702E7: BCF 03.502E8: BCF 06.702E9: BSF 03.502EA: BCF 06.402EB: BCF 03.502EC: BCF 06.402ED: BSF 03.502EE: BCF 06.502EF: BCF 03.502F0: BCF 06.5........................................ setup_oscillator(OSC_4MHZ|OSC_INTRC); // 4 MHz interni RC oscilator02F1: MOVLW 6202F2: BSF 03.502F3: MOVWF 0F........................................ port_b_pullups(TRUE); // pullups pro piano na diagnostiku02F4: BCF 01.7.................... setup_spi(FALSE);02F5: BCF 03.502F6: BCF 14.502F7: BSF 03.502F8: BCF 06.202F9: BSF 06.102FA: BCF 06.402FB: MOVLW 0002FC: BCF 03.502FD: MOVWF 1402FE: BSF 03.502FF: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Casovac pro PWM0300: MOVF 01,W0301: ANDLW C70302: IORLW 080303: MOVWF 01........................................ setup_timer_2(T2_DIV_BY_4,255,10); // Casovac pro regulaci0304: MOVLW 480305: MOVWF 780306: IORLW 050307: BCF 03.50308: MOVWF 120309: MOVLW FF030A: BSF 03.5030B: MOVWF 12.................... // preruseni kazdych 10ms.................... setup_adc_ports(BUMPER|VSS_VDD); // nastaveni A/D prevodniku pro naraznik030C: BCF 1F.4030D: BCF 1F.5030E: MOVF 1B,W030F: ANDLW 800310: IORLW 040311: MOVWF 1B.................... setup_adc(ADC_CLOCK_INTERNAL);0312: BCF 1F.60313: BCF 03.50314: BSF 1F.60315: BSF 1F.70316: BSF 03.50317: BCF 1F.70318: BCF 03.50319: BSF 1F.0.................... set_adc_channel(2);031A: MOVLW 10031B: MOVWF 78031C: MOVF 1F,W031D: ANDLW C7031E: IORWF 78,W031F: MOVWF 1F.................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); // Casovac pro naraznik0320: MOVLW 850321: MOVWF 10.................... setup_ccp1(CCP_COMPARE_RESET_TIMER);0322: BSF 03.50323: BSF 06.30324: MOVLW 0B0325: BCF 03.50326: MOVWF 17.................... CCP_1=(2^10)-1; // prevod kazdou 1ms0327: CLRF 160328: MOVLW 070329: MOVWF 15........................................ output_low(LED1); output_low(LED2); output_low(LED3); output_low(LED4);032A: BSF 03.5032B: BCF 05.4032C: BCF 03.5032D: BCF 05.4032E: BSF 03.5032F: BCF 05.30330: BCF 03.50331: BCF 05.30332: BSF 03.50333: BCF 05.70334: BCF 03.50335: BCF 05.70336: BSF 03.50337: BCF 05.60338: BCF 03.50339: BCF 05.6........................................ setup_comparator(A0_VR_A1_VR); // inicializace komparatoru pro cidla cary033A: MOVLW 02033B: BSF 03.5033C: MOVWF 1C033D: MOVF 05,W033E: IORLW 03033F: MOVWF 050340: MOVLW 030341: MOVWF 770342: DECFSZ 77,F0343: GOTO 3420344: MOVF 1C,W0345: BCF 03.50346: BCF 0D.6.................... setup_vref(VREF_HIGH|TRESHOLD); // 32 kroku od 0.25 do 0.75 Vdd0347: MOVLW 8F0348: BSF 03.50349: MOVWF 1D........................................ Beep(1000,200); //double beep034A: MOVLW 03034B: BCF 03.5034C: MOVWF 37034D: MOVLW E8034E: MOVWF 36034F: CLRF 390350: MOVLW C80351: MOVWF 380352: CALL 055.................... Delay_ms(50);0353: MOVLW 320354: MOVWF 370355: CALL 073.................... Beep(1000,200);0356: MOVLW 030357: MOVWF 370358: MOVLW E80359: MOVWF 36035A: CLRF 39035B: MOVLW C8035C: MOVWF 38035D: CALL 055.................... Delay_ms(1000); // 1s035E: MOVLW 04035F: MOVWF 340360: MOVLW FA0361: MOVWF 370362: CALL 0730363: DECFSZ 34,F0364: GOTO 360........................................ // povoleni rizeni rychlosti zataceni pres preruseni.................... enable_interrupts(INT_TIMER2);0365: BSF 03.50366: BSF 0C.1.................... enable_interrupts(GLOBAL);0367: MOVLW C00368: BCF 03.50369: IORWF 0B,F........................................ /*---------------------------------------------------------------------------*/.................... sensors=S;036A: MOVLW 03036B: MOVWF 29.................... line=S;036C: MOVWF 2A.................... last=S;036D: MOVWF 2C.................... cirkus=0;036E: CLRF 2E.................... // movement=S;.................... speed=FW_POMALU;036F: MOVLW AA0370: MOVWF 2B........................................ BW=input(BARVY); // Jaka ma byt barva cary?0371: BSF 03.50372: BSF 06.10373: BCF 03.50374: BCF 2F.00375: BTFSC 06.10376: BSF 2F.0.................... diagnostika(); // Zkus, jestli nekdo nechce, diagnostiku0377: GOTO 088.................... Delay_ms(500);0378: MOVLW 020379: MOVWF 34037A: MOVLW FA037B: MOVWF 37037C: CALL 073037D: DECFSZ 34,F037E: GOTO 37A........................................ output_high(LED1); Beep(1000,200); Delay_ms(500);037F: BSF 03.50380: BCF 05.40381: BCF 03.50382: BSF 05.40383: MOVLW 030384: MOVWF 370385: MOVLW E80386: MOVWF 360387: CLRF 390388: MOVLW C80389: MOVWF 38038A: CALL 055038B: MOVLW 02038C: MOVWF 34038D: MOVLW FA038E: MOVWF 37038F: CALL 0730390: DECFSZ 34,F0391: GOTO 38D.................... output_high(LED2); Beep(1000,200); Delay_ms(500);0392: BSF 03.50393: BCF 05.30394: BCF 03.50395: BSF 05.30396: MOVLW 030397: MOVWF 370398: MOVLW E80399: MOVWF 36039A: CLRF 39039B: MOVLW C8039C: MOVWF 38039D: CALL 055039E: MOVLW 02039F: MOVWF 3403A0: MOVLW FA03A1: MOVWF 3703A2: CALL 07303A3: DECFSZ 34,F03A4: GOTO 3A0.................... output_high(LED3); Beep(1000,200); Delay_ms(500);03A5: BSF 03.503A6: BCF 05.703A7: BCF 03.503A8: BSF 05.703A9: MOVLW 0303AA: MOVWF 3703AB: MOVLW E803AC: MOVWF 3603AD: CLRF 3903AE: MOVLW C803AF: MOVWF 3803B0: CALL 05503B1: MOVLW 0203B2: MOVWF 3403B3: MOVLW FA03B4: MOVWF 3703B5: CALL 07303B6: DECFSZ 34,F03B7: GOTO 3B3.................... output_high(LED4); Beep(1000,200); Delay_ms(500);03B8: BSF 03.503B9: BCF 05.603BA: BCF 03.503BB: BSF 05.603BC: MOVLW 0303BD: MOVWF 3703BE: MOVLW E803BF: MOVWF 3603C0: CLRF 3903C1: MOVLW C803C2: MOVWF 3803C3: CALL 05503C4: MOVLW 0203C5: MOVWF 3403C6: MOVLW FA03C7: MOVWF 3703C8: CALL 07303C9: DECFSZ 34,F03CA: GOTO 3C6........................................ while(true) // hlavni smycka (jizda podle cary).................... {.................... sensors = RSENSOR; // cteni senzoru na caru03CB: CLRF 7703CC: BSF 03.503CD: BTFSC 1C.703CE: BSF 77.003CF: BCF 03.503D0: MOVF 2F,W03D1: XORWF 77,W03D2: ANDLW 0103D3: BTFSS 03.203D4: GOTO 3D703D5: MOVLW 0003D6: GOTO 3D803D7: MOVLW 0103D8: MOVWF 29.................... sensors |= LSENSOR << 1;03D9: CLRF 7703DA: BSF 03.503DB: BTFSC 1C.603DC: BSF 77.003DD: BCF 03.503DE: MOVF 2F,W03DF: XORWF 77,W03E0: ANDLW 0103E1: BTFSS 03.203E2: GOTO 3E503E3: MOVLW 0003E4: GOTO 3E603E5: MOVLW 0103E6: MOVWF 7703E7: BCF 03.003E8: RLF 77,F03E9: MOVF 77,W03EA: IORWF 29,F........................................ if (read_adc(ADC_READ_ONLY)<BUMPER_TRESHOLD) OtocSe();03EB: BTFSC 1F.203EC: GOTO 3EB03ED: MOVF 1E,W03EE: SUBLW 7F03EF: BTFSC 03.003F0: GOTO 1F8........................................ switch (sensors) // zatacej podle toho, kde vidis caru.................... {03F1: MOVF 29,W03F2: XORLW 0303F3: BTFSC 03.203F4: GOTO 3FC03F5: XORLW 0103F6: BTFSC 03.203F7: GOTO 43103F8: XORLW 0303F9: BTFSC 03.203FA: GOTO 46803FB: GOTO 49F.................... case S: // rovne.................... GO(L, F, FW_STREDNE+rovinka); GO(R, F, FW_STREDNE+rovinka);03FC: MOVF 01,W03FD: MOVWF 3403FE: MOVLW BE03FF: ADDWF 2D,W0400: SUBWF 34,W0401: BTFSC 03.20402: GOTO 4050403: BTFSC 03.00404: GOTO 40E0405: BSF 03.50406: BCF 06.70407: BCF 03.50408: BCF 06.70409: BSF 03.5040A: BCF 06.6040B: BCF 03.5040C: BSF 06.6040D: GOTO 416040E: BSF 03.5040F: BCF 06.60410: BCF 03.50411: BCF 06.60412: BSF 03.50413: BCF 06.70414: BCF 03.50415: BCF 06.70416: MOVF 01,W0417: MOVWF 340418: MOVLW BE0419: ADDWF 2D,W041A: SUBWF 34,W041B: BTFSC 03.2041C: GOTO 41F041D: BTFSC 03.0041E: GOTO 428041F: BSF 03.50420: BCF 06.50421: BCF 03.50422: BCF 06.50423: BSF 03.50424: BCF 06.40425: BCF 03.50426: BSF 06.40427: GOTO 4300428: BSF 03.50429: BCF 06.4042A: BCF 03.5042B: BCF 06.4042C: BSF 03.5042D: BCF 06.5042E: BCF 03.5042F: BCF 06.5.................... continue;0430: GOTO 3CB.................... case L: // trochu vlevo.................... GO(L, F, FW_POMALU+rovinka); GO(R, F, FW_STREDNE+rovinka);0431: MOVF 01,W0432: MOVWF 340433: MOVLW AA0434: ADDWF 2D,W0435: SUBWF 34,W0436: BTFSC 03.20437: GOTO 43A0438: BTFSC 03.00439: GOTO 443043A: BSF 03.5043B: BCF 06.7043C: BCF 03.5043D: BCF 06.7043E: BSF 03.5043F: BCF 06.60440: BCF 03.50441: BSF 06.60442: GOTO 44B0443: BSF 03.50444: BCF 06.60445: BCF 03.50446: BCF 06.60447: BSF 03.50448: BCF 06.70449: BCF 03.5044A: BCF 06.7044B: MOVF 01,W044C: MOVWF 34044D: MOVLW BE044E: ADDWF 2D,W044F: SUBWF 34,W0450: BTFSC 03.20451: GOTO 4540452: BTFSC 03.00453: GOTO 45D0454: BSF 03.50455: BCF 06.50456: BCF 03.50457: BCF 06.50458: BSF 03.50459: BCF 06.4045A: BCF 03.5045B: BSF 06.4045C: GOTO 465045D: BSF 03.5045E: BCF 06.4045F: BCF 03.50460: BCF 06.40461: BSF 03.50462: BCF 06.50463: BCF 03.50464: BCF 06.5.................... line=L;0465: MOVLW 020466: MOVWF 2A.................... continue;0467: GOTO 3CB.................... case R: // trochu vpravo.................... GO(R, F, FW_POMALU+rovinka); GO(L, F, FW_STREDNE+rovinka);0468: MOVF 01,W0469: MOVWF 34046A: MOVLW AA046B: ADDWF 2D,W046C: SUBWF 34,W046D: BTFSC 03.2046E: GOTO 471046F: BTFSC 03.00470: GOTO 47A0471: BSF 03.50472: BCF 06.50473: BCF 03.50474: BCF 06.50475: BSF 03.50476: BCF 06.40477: BCF 03.50478: BSF 06.40479: GOTO 482047A: BSF 03.5047B: BCF 06.4047C: BCF 03.5047D: BCF 06.4047E: BSF 03.5047F: BCF 06.50480: BCF 03.50481: BCF 06.50482: MOVF 01,W0483: MOVWF 340484: MOVLW BE0485: ADDWF 2D,W0486: SUBWF 34,W0487: BTFSC 03.20488: GOTO 48B0489: BTFSC 03.0048A: GOTO 494048B: BSF 03.5048C: BCF 06.7048D: BCF 03.5048E: BCF 06.7048F: BSF 03.50490: BCF 06.60491: BCF 03.50492: BSF 06.60493: GOTO 49C0494: BSF 03.50495: BCF 06.60496: BCF 03.50497: BCF 06.60498: BSF 03.50499: BCF 06.7049A: BCF 03.5049B: BCF 06.7.................... line=R;049C: MOVLW 01049D: MOVWF 2A.................... continue;049E: GOTO 3CB.................... default: // kdyz jsou obe cidla mimo caru, tak pokracuj dal.................... };.................... rovinka=0;049F: CLRF 2D........................................ if (last!=line) // pokud si prejel caru z jedne strany na druhou stranu,04A0: MOVF 2A,W04A1: SUBWF 2C,W04A2: BTFSC 03.204A3: GOTO 560.................... // tak zabrzdi.................... {.................... output_bit(LED1, !input(LED1));04A4: BSF 03.504A5: BSF 05.404A6: BCF 03.504A7: BTFSS 05.404A8: GOTO 4AB04A9: BCF 05.404AA: GOTO 4AC04AB: BSF 05.404AC: BSF 03.504AD: BCF 05.4.................... last=line;04AE: BCF 03.504AF: MOVF 2A,W04B0: MOVWF 2C.................... speed=FW_ZATACKA;04B1: MOVLW C804B2: MOVWF 2B.................... cirkus++;04B3: INCF 2E,F.................... if (cirkus>8)04B4: MOVF 2E,W04B5: SUBLW 0804B6: BTFSC 03.004B7: GOTO 560.................... {.................... STOPL; STOPR;04B8: BSF 03.504B9: BCF 06.604BA: BCF 03.504BB: BCF 06.604BC: BSF 03.504BD: BCF 06.704BE: BCF 03.504BF: BCF 06.704C0: BSF 03.504C1: BCF 06.404C2: BCF 03.504C3: BCF 06.404C4: BSF 03.504C5: BCF 06.504C6: BCF 03.504C7: BCF 06.5.................... cirkus=0;04C8: CLRF 2E.................... disable_interrupts(GLOBAL);04C9: BCF 0B.604CA: BCF 0B.704CB: BTFSC 0B.704CC: GOTO 4CA.................... beep(1000,400);04CD: MOVLW 0304CE: MOVWF 3704CF: MOVLW E804D0: MOVWF 3604D1: MOVLW 0104D2: MOVWF 3904D3: MOVLW 9004D4: MOVWF 3804D5: CALL 055.................... for(n=3000; n>3950; n--) beep(n,10);04D6: MOVLW 0B04D7: MOVWF 3104D8: MOVLW B804D9: MOVWF 3004DA: MOVF 31,W04DB: SUBLW 0E04DC: BTFSC 03.004DD: GOTO 4F204DE: XORLW FF04DF: BTFSS 03.204E0: GOTO 4E504E1: MOVF 30,W04E2: SUBLW 6E04E3: BTFSC 03.004E4: GOTO 4F204E5: MOVF 31,W04E6: MOVWF 3704E7: MOVF 30,W04E8: MOVWF 3604E9: CLRF 3904EA: MOVLW 0A04EB: MOVWF 3804EC: CALL 05504ED: MOVF 30,W04EE: BTFSC 03.204EF: DECF 31,F04F0: DECF 30,F04F1: GOTO 4DA.................... output_low(LED1);04F2: BSF 03.504F3: BCF 05.404F4: BCF 03.504F5: BCF 05.4.................... beep(2000,200);04F6: MOVLW 0704F7: MOVWF 3704F8: MOVLW D004F9: MOVWF 3604FA: CLRF 3904FB: MOVLW C804FC: MOVWF 3804FD: CALL 055.................... beep(900,400);04FE: MOVLW 0304FF: MOVWF 370500: MOVLW 840501: MOVWF 360502: MOVLW 010503: MOVWF 390504: MOVLW 900505: MOVWF 380506: CALL 055.................... for(n=2950; n<3000; n++) beep(n,10);0507: MOVLW 0B0508: MOVWF 310509: MOVLW 86050A: MOVWF 30050B: MOVF 31,W050C: SUBLW 0B050D: BTFSS 03.0050E: GOTO 521050F: BTFSS 03.20510: GOTO 5150511: MOVF 30,W0512: SUBLW B70513: BTFSS 03.00514: GOTO 5210515: MOVF 31,W0516: MOVWF 370517: MOVF 30,W0518: MOVWF 360519: CLRF 39051A: MOVLW 0A051B: MOVWF 38051C: CALL 055051D: INCF 30,F051E: BTFSC 03.2051F: INCF 31,F0520: GOTO 50B.................... output_low(LED2);0521: BSF 03.50522: BCF 05.30523: BCF 03.50524: BCF 05.3.................... output_high(LED1);0525: BSF 03.50526: BCF 05.40527: BCF 03.50528: BSF 05.4.................... beep(4000,400);0529: MOVLW 0F052A: MOVWF 37052B: MOVLW A0052C: MOVWF 36052D: MOVLW 01052E: MOVWF 39052F: MOVLW 900530: MOVWF 380531: CALL 055.................... beep(1000,100);0532: MOVLW 030533: MOVWF 370534: MOVLW E80535: MOVWF 360536: CLRF 390537: MOVLW 640538: MOVWF 380539: CALL 055.................... output_low(LED3);053A: BSF 03.5053B: BCF 05.7053C: BCF 03.5053D: BCF 05.7.................... beep(3000,400);053E: MOVLW 0B053F: MOVWF 370540: MOVLW B80541: MOVWF 360542: MOVLW 010543: MOVWF 390544: MOVLW 900545: MOVWF 380546: CALL 055.................... Delay_ms(1000);0547: MOVLW 040548: MOVWF 340549: MOVLW FA054A: MOVWF 37054B: CALL 073054C: DECFSZ 34,F054D: GOTO 549.................... output_high(LED1); output_high(LED2);054E: BSF 03.5054F: BCF 05.40550: BCF 03.50551: BSF 05.40552: BSF 03.50553: BCF 05.30554: BCF 03.50555: BSF 05.3.................... output_high(LED3); output_high(LED4);0556: BSF 03.50557: BCF 05.70558: BCF 03.50559: BSF 05.7055A: BSF 03.5055B: BCF 05.6055C: BCF 03.5055D: BSF 05.6.................... enable_interrupts(GLOBAL);055E: MOVLW C0055F: IORWF 0B,F.................... }.................... };........................................ if (L==line) // kdyz jsou obe cidla mimo caru, zatoc na caru0560: MOVF 2A,W0561: SUBLW 020562: BTFSS 03.20563: GOTO 582.................... {.................... STOPL;0564: BSF 03.50565: BCF 06.60566: BCF 03.50567: BCF 06.60568: BSF 03.50569: BCF 06.7056A: BCF 03.5056B: BCF 06.7.................... GO(R, F, speed);056C: MOVF 01,W056D: SUBWF 2B,W056E: BTFSS 03.0056F: GOTO 5790570: BSF 03.50571: BCF 06.50572: BCF 03.50573: BCF 06.50574: BSF 03.50575: BCF 06.40576: BCF 03.50577: BSF 06.40578: GOTO 5810579: BSF 03.5057A: BCF 06.4057B: BCF 03.5057C: BCF 06.4057D: BSF 03.5057E: BCF 06.5057F: BCF 03.50580: BCF 06.5.................... }.................... else0581: GOTO 59F.................... {.................... STOPR;0582: BSF 03.50583: BCF 06.40584: BCF 03.50585: BCF 06.40586: BSF 03.50587: BCF 06.50588: BCF 03.50589: BCF 06.5.................... GO(L, F, speed);058A: MOVF 01,W058B: SUBWF 2B,W058C: BTFSS 03.0058D: GOTO 597058E: BSF 03.5058F: BCF 06.70590: BCF 03.50591: BCF 06.70592: BSF 03.50593: BCF 06.60594: BCF 03.50595: BSF 06.60596: GOTO 59F0597: BSF 03.50598: BCF 06.60599: BCF 03.5059A: BCF 06.6059B: BSF 03.5059C: BCF 06.7059D: BCF 03.5059E: BCF 06.7.................... }........................................ } // while(true)059F: GOTO 3CB.................... }........................................05A0: SLEEPConfiguration Fuses:Word 1: 3F38 NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT INTRC_IOWord 2: 3FFC NOFCMEN NOIESO