Blame | Last modification | View Log | Download
CCS PCM C Compiler, Version 3.245, 27853 23-IV-06 20:13Filename: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lstROM used: 1012 words (25%)Largest free fragment is 2048RAM used: 32 (18%) at main() level38 (22%) worst caseStack: 4 worst case (2 in main + 2 for interrupts)*0000: MOVLW 000001: MOVWF 0A0002: GOTO 2120003: 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.0001F: GOTO 0220020: BTFSC 0C.00021: GOTO 03B0022: MOVLW 8C0023: MOVWF 040024: BTFSS 00.10025: GOTO 0280026: BTFSC 0C.10027: GOTO 03D0028: MOVF 22,W0029: MOVWF 04002A: MOVF 23,W002B: MOVWF 77002C: MOVF 24,W002D: MOVWF 78002E: MOVF 25,W002F: MOVWF 790030: MOVF 26,W0031: MOVWF 7A0032: MOVF 27,W0033: MOVWF 7B0034: MOVF 28,W0035: MOVWF 0A0036: SWAPF 21,W0037: MOVWF 030038: SWAPF 7F,F0039: SWAPF 7F,W003A: RETFIE003B: BCF 0A.3003C: GOTO 03F003D: BCF 0A.3003E: GOTO 053.................... #include ".\main.h".................... #include <16F88.h>.................... //////// Standard Header file for the PIC16F88 device ////////////////.................... #device PIC16F88.................... #list........................................ #device adc=8........................................ #FUSES NOWDT //No Watch Dog Timer.................... #FUSES INTRC_IO.................... #FUSES NOPUT //No Power Up Timer.................... #FUSES MCLR //Master Clear pin enabled.................... #FUSES NOBROWNOUT //Reset when brownout detected.................... #FUSES NOLVP //Low Voltage Programming on B3(PIC16) or B5(PIC18).................... #FUSES NOCPD //No EE protection.................... #FUSES NOWRT //Program memory not write protected.................... #FUSES NODEBUG //No Debug mode for ICD.................... #FUSES NOPROTECT //Code not protected from reading.................... #FUSES NOFCMEN //Fail-safe clock monitor enabled.................... #FUSES NOIESO //Internal External Switch Over mode enabled........................................ #use delay(clock=8000000,RESTART_WDT)*0043: MOVLW 080044: SUBWF 40,F0045: BTFSS 03.00046: GOTO 0520047: MOVLW 400048: MOVWF 040049: BCF 03.0004A: RRF 00,F004B: MOVF 00,W004C: BTFSC 03.2004D: GOTO 052004E: GOTO 050004F: CLRWDT0050: DECFSZ 00,F0051: GOTO 04F0052: RETLW 00*0071: MOVLW 3D0072: MOVWF 040073: MOVF 00,W0074: BTFSC 03.20075: GOTO 0880076: MOVLW 020077: MOVWF 780078: MOVLW BF0079: MOVWF 77007A: CLRWDT007B: DECFSZ 77,F007C: GOTO 07A007D: DECFSZ 78,F007E: GOTO 078007F: MOVLW 960080: MOVWF 770081: DECFSZ 77,F0082: GOTO 0810083: NOP0084: NOP0085: CLRWDT0086: DECFSZ 00,F0087: GOTO 0760088: RETLW 00................................................................................ #define KOLMO1 225 // predni kolecko sroubem dopredu.................... #define KOLMO2 30 // predni kolecko je hlavou sroubu dozadu.................... #define STRED 128 // sredni poloha zataceciho kolecka.................... #define BEAR1 10//10 // 3 stupne zataceni.................... #define BEAR2 25//27.................... #define BEAR3 45.................... #define R 100 // Rozumna rychlost.................... #define R17 255 // X nasobek rozumne rychlosti.................... #define DOZNIVANI 10.................... #define L1 1 // cara vlevo.................... #define L2 2 // cara vlevo.................... #define L3 3 // cara vlevo.................... #define S 0 // casa mezi sensory.................... #define R1 -1 // cara vpravo.................... #define R2 -2 // cara vpravo.................... #define R3 -3 // cara vpravo........................................ // servo.................... #define SERVO PIN_B5........................................ // kroutitka.................... #define CERVENA 5 // AN5.................... #define CERNA 2 // AN2.................... #define ZELENA 4 // AN4.................... #define MODRA 6 // AN6........................................ // IR.................... #define IRTX PIN_B2.................... #define CIHLA PIN_A3........................................ //motory.................... #define FR output_low(PIN_A7); output_high(PIN_A6) // Vpred.................... #define FL output_low(PIN_A1); output_high(PIN_A0).................... #define BR output_low(PIN_A6); output_high(PIN_A7) // Vzad.................... #define BL output_low(PIN_A0); output_high(PIN_A1).................... #define STOPR output_low(PIN_A6);output_low(PIN_A7).................... #define STOPL output_low(PIN_A0);output_low(PIN_A1)........................................ //HID.................... #define LED1 PIN_B1 //oranzova.................... #define LED2 PIN_B2 //zluta........................................ #define STROBE PIN_B0.................... //#define SW1 PIN_A2 // Motory On/off........................................ unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru.................... signed int8 line = S; // na ktere strane byla detekovana cara*021F: BCF 03.50220: CLRF 2B.................... //unsigned int8 dira; // pocita dobu po kterou je ztracena cara.................... unsigned int8 uhel; // urcuje aktualni uhel zataceni.................... unsigned int8 speed; // maximalni povolena rychlost.................... unsigned int8 turn; // rychlost toceni.................... unsigned int8 rovinka; // pocitadlo na zjisteni rovinky........................................ short int preteceni; // flag preteceni timeru1........................................ signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem.................... signed int16 Rmotor; // a pravem motoru........................................ // makro pro PWM pro motory.................... #define GO(motor, direction, power) if(get_timer0()<=power) \.................... {direction##motor;} else {stop##motor;}........................................ ////////////////////////////////////////////////////////////////////////////////.................... #int_TIMER1.................... TIMER1_isr().................... {.................... preteceni = true;*003F: BSF 30.0.................... }.................... ////////////////////////////////////////////////////////////////////////////////0040: BCF 0C.00041: BCF 0A.30042: GOTO 028.................... #int_TIMER2.................... TIMER2_isr() // ovladani serva.................... {.................... unsigned int8 n;........................................ output_high(SERVO);*0053: BSF 03.50054: BCF 06.50055: BCF 03.50056: BSF 06.5.................... delay_us(1000);0057: CLRWDT0058: MOVLW 090059: MOVWF 3F005A: MOVLW 6D005B: MOVWF 40005C: CALL 043005D: DECFSZ 3F,F005E: GOTO 05A.................... for(n=uhel; n>0; n--) Delay_us(2);005F: MOVF 2C,W0060: MOVWF 3E0061: MOVF 3E,F0062: BTFSC 03.20063: GOTO 06A0064: CLRWDT0065: NOP0066: NOP0067: NOP0068: DECF 3E,F0069: GOTO 061.................... output_low(SERVO);006A: BSF 03.5006B: BCF 06.5006C: BCF 03.5006D: BCF 06.5.................... }........................................ ////////////////////////////////////////////////////////////////////////////////006E: BCF 0C.1006F: BCF 0A.30070: GOTO 028.................... short int IRcheck() // potvrdi detekci cihly.................... {.................... output_high(IRTX); // vypne vysilac IR.................... delay_ms(100);........................................ output_low(STROBE);.................... sensors = spi_read(0); // cteni senzoru.................... sensors=~sensors;.................... output_high(STROBE);........................................ if(true==bit_test(sensors,7)) // otestuje, jestli je stale detekovan IR signal.................... {.................... output_low(IRTX); // zapne vysilac IR.................... delay_ms(100);........................................ output_low(STROBE);.................... sensors = spi_read(0); // cteni senzoru.................... sensors=~sensors;.................... output_high(STROBE);........................................ if(false==bit_test(sensors,7)) // otestuje, jestli je detekovana cihla.................... {.................... output_high(IRTX); // vypne vysilac IR.................... delay_ms(100);........................................ output_low(STROBE);.................... sensors = spi_read(0); // cteni senzoru.................... sensors=~sensors;.................... output_high(STROBE);........................................ output_low(IRTX); // zapne vysilac IR.................... if(bit_test(sensors,7)) return 1; // vrat 1, kdyz je stale cihla.................... }.................... };.................... output_low(IRTX); // zapne vysilac IR.................... return 0; // vrat 0, kdyz je detekovano ruseni.................... }.................... ////////////////////////////////////////////////////////////////////////////////.................... void objizdka().................... {.................... int8 shure=0;*0089: CLRF 39.................... unsigned int16 n;........................................ BR;BL;008A: BSF 03.5008B: BCF 05.6008C: BCF 03.5008D: BCF 05.6008E: BSF 03.5008F: BCF 05.70090: BCF 03.50091: BSF 05.70092: BSF 03.50093: BCF 05.00094: BCF 03.50095: BCF 05.00096: BSF 03.50097: BCF 05.10098: BCF 03.50099: BSF 05.1.................... Delay_ms(400);009A: MOVLW 02009B: MOVWF 3C009C: MOVLW C8009D: MOVWF 3D009E: CALL 071009F: DECFSZ 3C,F00A0: GOTO 09C.................... STOPR;STOPL;00A1: BSF 03.500A2: BCF 05.600A3: BCF 03.500A4: BCF 05.600A5: BSF 03.500A6: BCF 05.700A7: BCF 03.500A8: BCF 05.700A9: BSF 03.500AA: BCF 05.000AB: BCF 03.500AC: BCF 05.000AD: BSF 03.500AE: BCF 05.100AF: BCF 03.500B0: BCF 05.1........................................ // toceni na miste dokud nezmizi cihla.................... //------------------------------------.................... uhel=KOLMO1; // nastav zataceci kolecko kolmo na osu robota00B1: MOVLW E100B2: MOVWF 2C.................... Delay_ms(100);00B3: MOVLW 6400B4: MOVWF 3D00B5: CALL 071.................... BL;FR;00B6: BSF 03.500B7: BCF 05.000B8: BCF 03.500B9: BCF 05.000BA: BSF 03.500BB: BCF 05.100BC: BCF 03.500BD: BSF 05.100BE: BSF 03.500BF: BCF 05.700C0: BCF 03.500C1: BCF 05.700C2: BSF 03.500C3: BCF 05.600C4: BCF 03.500C5: BSF 05.6.................... Delay_ms(200); // minimalni toceni, kdyby se zastavilo sikmo k cihle00C6: MOVLW C800C7: MOVWF 3D00C8: CALL 071........................................ While(bit_test(sensors,7)) // toc, dokud neni cihla z primeho senzoru.................... {00C9: BTFSS 2A.700CA: GOTO 0DA.................... sensors = spi_read(0); // cteni senzoru00CB: MOVF 13,W00CC: CLRF 1300CD: BSF 03.500CE: BTFSC 14.000CF: GOTO 0D200D0: BCF 03.500D1: GOTO 0CD00D2: BCF 03.500D3: MOVF 13,W00D4: MOVWF 2A.................... sensors=~sensors;00D5: COMF 2A,F.................... Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel00D6: MOVLW 0400D7: MOVWF 3D00D8: CALL 071.................... }00D9: GOTO 0C9.................... STOPL; STOPR;00DA: BSF 03.500DB: BCF 05.000DC: BCF 03.500DD: BCF 05.000DE: BSF 03.500DF: BCF 05.100E0: BCF 03.500E1: BCF 05.100E2: BSF 03.500E3: BCF 05.600E4: BCF 03.500E5: BCF 05.600E6: BSF 03.500E7: BCF 05.700E8: BCF 03.500E9: BCF 05.7........................................ for (n=0;n<1000;n++) // vystred se na hranu cihly00EA: CLRF 3B00EB: CLRF 3A00EC: MOVF 3B,W00ED: SUBLW 0300EE: BTFSS 03.000EF: GOTO 15700F0: BTFSS 03.200F1: GOTO 0F600F2: MOVF 3A,W00F3: SUBLW E700F4: BTFSS 03.000F5: GOTO 157.................... {.................... if(!input(CIHLA))00F6: BSF 03.500F7: BSF 05.300F8: BCF 03.500F9: BTFSC 05.300FA: GOTO 126.................... {.................... GO(L,B,180);GO(R,F,160); // zapni motory PWM podle promenych Lmotor a Rmotor00FB: MOVF 01,W00FC: SUBLW B400FD: BTFSS 03.000FE: GOTO 10800FF: BSF 03.50100: BCF 05.00101: BCF 03.50102: BCF 05.00103: BSF 03.50104: BCF 05.10105: BCF 03.50106: BSF 05.10107: GOTO 1100108: BSF 03.50109: BCF 05.0010A: BCF 03.5010B: BCF 05.0010C: BSF 03.5010D: BCF 05.1010E: BCF 03.5010F: BCF 05.10110: MOVF 01,W0111: SUBLW A00112: BTFSS 03.00113: GOTO 11D0114: BSF 03.50115: BCF 05.70116: BCF 03.50117: BCF 05.70118: BSF 03.50119: BCF 05.6011A: BCF 03.5011B: BSF 05.6011C: GOTO 125011D: BSF 03.5011E: BCF 05.6011F: BCF 03.50120: BCF 05.60121: BSF 03.50122: BCF 05.70123: BCF 03.50124: BCF 05.7.................... } else0125: GOTO 150.................... {.................... GO(L,F,180);GO(R,B,160); // zapni motory PWM podle promenych Lmotor a Rmotor0126: MOVF 01,W0127: SUBLW B40128: BTFSS 03.00129: GOTO 133012A: BSF 03.5012B: BCF 05.1012C: BCF 03.5012D: BCF 05.1012E: BSF 03.5012F: BCF 05.00130: BCF 03.50131: BSF 05.00132: GOTO 13B0133: BSF 03.50134: BCF 05.00135: BCF 03.50136: BCF 05.00137: BSF 03.50138: BCF 05.10139: BCF 03.5013A: BCF 05.1013B: MOVF 01,W013C: SUBLW A0013D: BTFSS 03.0013E: GOTO 148013F: BSF 03.50140: BCF 05.60141: BCF 03.50142: BCF 05.60143: BSF 03.50144: BCF 05.70145: BCF 03.50146: BSF 05.70147: GOTO 1500148: BSF 03.50149: BCF 05.6014A: BCF 03.5014B: BCF 05.6014C: BSF 03.5014D: BCF 05.7014E: BCF 03.5014F: BCF 05.7.................... };.................... delay_ms(1);0150: MOVLW 010151: MOVWF 3D0152: CALL 071.................... }0153: INCF 3A,F0154: BTFSC 03.20155: INCF 3B,F0156: GOTO 0EC.................... STOPR;STOPL;0157: BSF 03.50158: BCF 05.60159: BCF 03.5015A: BCF 05.6015B: BSF 03.5015C: BCF 05.7015D: BCF 03.5015E: BCF 05.7015F: BSF 03.50160: BCF 05.00161: BCF 03.50162: BCF 05.00163: BSF 03.50164: BCF 05.10165: BCF 03.50166: BCF 05.1........................................ uhel=STRED; // dopredu0167: MOVLW 800168: MOVWF 2C.................... delay_ms(100);0169: MOVLW 64016A: MOVWF 3D016B: CALL 071.................... FR; FL;016C: BSF 03.5016D: BCF 05.7016E: BCF 03.5016F: BCF 05.70170: BSF 03.50171: BCF 05.60172: BCF 03.50173: BSF 05.60174: BSF 03.50175: BCF 05.10176: BCF 03.50177: BCF 05.10178: BSF 03.50179: BCF 05.0017A: BCF 03.5017B: BSF 05.0.................... delay_ms(500);017C: MOVLW 02017D: MOVWF 3C017E: MOVLW FA017F: MOVWF 3D0180: CALL 0710181: DECFSZ 3C,F0182: GOTO 17E.................... BL;BR;0183: BSF 03.50184: BCF 05.00185: BCF 03.50186: BCF 05.00187: BSF 03.50188: BCF 05.10189: BCF 03.5018A: BSF 05.1018B: BSF 03.5018C: BCF 05.6018D: BCF 03.5018E: BCF 05.6018F: BSF 03.50190: BCF 05.70191: BCF 03.50192: BSF 05.7.................... delay_ms(200);0193: MOVLW C80194: MOVWF 3D0195: CALL 071.................... STOPL;STOPR;0196: BSF 03.50197: BCF 05.00198: BCF 03.50199: BCF 05.0019A: BSF 03.5019B: BCF 05.1019C: BCF 03.5019D: BCF 05.1019E: BSF 03.5019F: BCF 05.601A0: BCF 03.501A1: BCF 05.601A2: BSF 03.501A3: BCF 05.701A4: BCF 03.501A5: BCF 05.7........................................ uhel=STRED+BEAR3; // doprava01A6: MOVLW AD01A7: MOVWF 2C.................... delay_ms(100);01A8: MOVLW 6401A9: MOVWF 3D01AA: CALL 071.................... FL;01AB: BSF 03.501AC: BCF 05.101AD: BCF 03.501AE: BCF 05.101AF: BSF 03.501B0: BCF 05.001B1: BCF 03.501B2: BSF 05.0.................... delay_ms(400);01B3: MOVLW 0201B4: MOVWF 3C01B5: MOVLW C801B6: MOVWF 3D01B7: CALL 07101B8: DECFSZ 3C,F01B9: GOTO 1B5.................... uhel=STRED+BEAR2; // min doprava01BA: MOVLW 9901BB: MOVWF 2C.................... FL;FR;01BC: BSF 03.501BD: BCF 05.101BE: BCF 03.501BF: BCF 05.101C0: BSF 03.501C1: BCF 05.001C2: BCF 03.501C3: BSF 05.001C4: BSF 03.501C5: BCF 05.701C6: BCF 03.501C7: BCF 05.701C8: BSF 03.501C9: BCF 05.601CA: BCF 03.501CB: BSF 05.6.................... delay_ms(100);01CC: MOVLW 6401CD: MOVWF 3D01CE: CALL 071.................... uhel=STRED+BEAR1; // jeste min doprava01CF: MOVLW 8A01D0: MOVWF 2C.................... FL;FR;01D1: BSF 03.501D2: BCF 05.101D3: BCF 03.501D4: BCF 05.101D5: BSF 03.501D6: BCF 05.001D7: BCF 03.501D8: BSF 05.001D9: BSF 03.501DA: BCF 05.701DB: BCF 03.501DC: BCF 05.701DD: BSF 03.501DE: BCF 05.601DF: BCF 03.501E0: BSF 05.6.................... delay_ms(200);01E1: MOVLW C801E2: MOVWF 3D01E3: CALL 071.................... While((sensors & 0b01111111)!=0) //dokud neni cara.................... {01E4: MOVF 2A,W01E5: ANDLW 7F01E6: BTFSC 03.201E7: GOTO 1F7.................... sensors = spi_read(0); // cteni senzoru01E8: MOVF 13,W01E9: CLRF 1301EA: BSF 03.501EB: BTFSC 14.001EC: GOTO 1EF01ED: BCF 03.501EE: GOTO 1EA01EF: BCF 03.501F0: MOVF 13,W01F1: MOVWF 2A.................... sensors=~sensors;01F2: COMF 2A,F.................... Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel01F3: MOVLW 0401F4: MOVWF 3D01F5: CALL 071.................... }01F6: GOTO 1E4.................... BL; BR;01F7: BSF 03.501F8: BCF 05.001F9: BCF 03.501FA: BCF 05.001FB: BSF 03.501FC: BCF 05.101FD: BCF 03.501FE: BSF 05.101FF: BSF 03.50200: BCF 05.60201: BCF 03.50202: BCF 05.60203: BSF 03.50204: BCF 05.70205: BCF 03.50206: BSF 05.7.................... delay_ms(400);0207: MOVLW 020208: MOVWF 3C0209: MOVLW C8020A: MOVWF 3D020B: CALL 071020C: DECFSZ 3C,F020D: GOTO 209........................................ uhel=STRED-BEAR3; // doleva020E: MOVLW 53020F: MOVWF 2C.................... }0210: BCF 0A.30211: GOTO 343 (RETURN)........................................ ////////////////////////////////////////////////////////////////////////////////.................... void main().................... {0212: CLRF 040213: MOVLW 1F0214: ANDWF 03,F0215: MOVLW 700216: BSF 03.50217: MOVWF 0F0218: BCF 1F.40219: BCF 1F.5021A: MOVF 1B,W021B: ANDLW 80021C: MOVWF 1B021D: MOVLW 07021E: MOVWF 1C........................................ unsigned int8 n;.................... unsigned int8 i,v;.................... unsigned int8 last_sensors;........................................ setup_adc_ports(sAN5|sAN2|sAN4|sAN6|VSS_VDD); // AD pro kroutitka*0221: BSF 03.50222: BCF 1F.40223: BCF 1F.50224: MOVF 1B,W0225: ANDLW 800226: IORLW 740227: MOVWF 1B.................... setup_adc(ADC_CLOCK_INTERNAL);0228: BCF 1F.60229: BCF 03.5022A: BSF 1F.6022B: BSF 1F.7022C: BSF 03.5022D: BCF 1F.7022E: BCF 03.5022F: BSF 1F.0.................... setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_16);0230: BCF 14.50231: BSF 03.50232: BCF 06.20233: BSF 06.10234: BCF 06.40235: MOVLW 310236: BCF 03.50237: MOVWF 140238: MOVLW 000239: BSF 03.5023A: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);023B: MOVF 01,W023C: ANDLW C7023D: IORLW 08023E: MOVWF 01.................... setup_timer_1(T1_DISABLED|T1_DIV_BY_8);023F: MOVLW 300240: BCF 03.50241: MOVWF 10.................... setup_timer_2(T2_DIV_BY_16,140,16);0242: MOVLW 780243: MOVWF 780244: IORLW 060245: MOVWF 120246: MOVLW 8C0247: BSF 03.50248: MOVWF 12.................... setup_oscillator(OSC_8MHZ|OSC_INTRC);0249: MOVLW 72024A: MOVWF 0F........................................ STOPR; STOPL; // zastav motory024B: BCF 05.6024C: BCF 03.5024D: BCF 05.6024E: BSF 03.5024F: BCF 05.70250: BCF 03.50251: BCF 05.70252: BSF 03.50253: BCF 05.00254: BCF 03.50255: BCF 05.00256: BSF 03.50257: BCF 05.10258: BCF 03.50259: BCF 05.1.................... Lmotor=0;Rmotor=0;025A: CLRF 32025B: CLRF 31025C: CLRF 34025D: CLRF 33........................................ uhel = STRED; // nastav zadni kolecko na stred025E: MOVLW 80025F: MOVWF 2C.................... rovinka = 0;0260: CLRF 2F........................................ enable_interrupts(INT_TIMER2);0261: BSF 03.50262: BSF 0C.1.................... enable_interrupts(GLOBAL);0263: MOVLW C00264: BCF 03.50265: IORWF 0B,F........................................ output_low(IRTX); // zapni IR vysilac0266: BSF 03.50267: BCF 06.20268: BCF 03.50269: BCF 06.2........................................ delay_ms(1500); // musime pockat na diagnostiku slave CPU026A: MOVLW 06026B: MOVWF 39026C: MOVLW FA026D: MOVWF 3D026E: CALL 071026F: DECFSZ 39,F0270: GOTO 26C........................................ //nastaveni rychlosti.................... set_adc_channel(CERVENA);0271: MOVLW 280272: MOVWF 780273: MOVF 1F,W0274: ANDLW C70275: IORWF 78,W0276: MOVWF 1F.................... Delay_ms(1);0277: MOVLW 010278: MOVWF 3D0279: CALL 071.................... speed=R+(read_adc()>>2); // rychlost rovne +63; kroutitko dava 0-63027A: BSF 1F.2027B: BTFSC 1F.2027C: GOTO 27B027D: MOVF 1E,W027E: MOVWF 77027F: RRF 77,F0280: RRF 77,F0281: MOVLW 3F0282: ANDWF 77,F0283: MOVF 77,W0284: ADDLW 640285: MOVWF 2D.................... set_adc_channel(MODRA);0286: MOVLW 300287: MOVWF 780288: MOVF 1F,W0289: ANDLW C7028A: IORWF 78,W028B: MOVWF 1F.................... Delay_ms(1);028C: MOVLW 01028D: MOVWF 3D028E: CALL 071.................... turn=speed-32+(read_adc()>>2); // rychlost toceni +-32; kroutitko dava 0-63028F: MOVLW 200290: SUBWF 2D,W0291: MOVWF 390292: BSF 1F.20293: BTFSC 1F.20294: GOTO 2930295: MOVF 1E,W0296: MOVWF 770297: RRF 77,F0298: RRF 77,F0299: MOVLW 3F029A: ANDWF 77,F029B: MOVF 77,W029C: ADDWF 39,W029D: MOVWF 2E.................... while(true).................... {........................................ GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory PWM podle promenych Lmotor a Rmotor029E: MOVF 01,W029F: BTFSS 00.702A0: GOTO 2A402A1: BTFSS 32.702A2: GOTO 2AC02A3: GOTO 2A602A4: BTFSC 32.702A5: GOTO 2B502A6: MOVF 32,F02A7: BTFSS 03.202A8: GOTO 2AC02A9: SUBWF 31,W02AA: BTFSS 03.002AB: GOTO 2B502AC: BSF 03.502AD: BCF 05.102AE: BCF 03.502AF: BCF 05.102B0: BSF 03.502B1: BCF 05.002B2: BCF 03.502B3: BSF 05.002B4: GOTO 2BD02B5: BSF 03.502B6: BCF 05.002B7: BCF 03.502B8: BCF 05.002B9: BSF 03.502BA: BCF 05.102BB: BCF 03.502BC: BCF 05.102BD: MOVF 01,W02BE: BTFSS 00.702BF: GOTO 2C302C0: BTFSS 34.702C1: GOTO 2CB02C2: GOTO 2C502C3: BTFSC 34.702C4: GOTO 2D402C5: MOVF 34,F02C6: BTFSS 03.202C7: GOTO 2CB02C8: SUBWF 33,W02C9: BTFSS 03.002CA: GOTO 2D402CB: BSF 03.502CC: BCF 05.702CD: BCF 03.502CE: BCF 05.702CF: BSF 03.502D0: BCF 05.602D1: BCF 03.502D2: BSF 05.602D3: GOTO 2DC02D4: BSF 03.502D5: BCF 05.602D6: BCF 03.502D7: BCF 05.602D8: BSF 03.502D9: BCF 05.702DA: BCF 03.502DB: BCF 05.7........................................ delay_us(2000); // cekani na SLAVE, nez pripravi data od cidel02DC: CLRWDT02DD: MOVLW 0102DE: MOVWF 3D02DF: CALL 07102E0: MOVLW 0902E1: MOVWF 3902E2: CLRF 2902E3: BTFSC 0B.702E4: BSF 29.702E5: BCF 0B.702E6: MOVLW 6D02E7: MOVWF 4002E8: CALL 04302E9: BTFSC 29.702EA: BSF 0B.702EB: DECFSZ 39,F02EC: GOTO 2E2........................................ output_low(STROBE); // vypni zobrazovani na posuvnem registru02ED: BSF 03.502EE: BCF 06.002EF: BCF 03.502F0: BCF 06.0.................... sensors = spi_read(0); // cteni senzoru02F1: MOVF 13,W02F2: CLRF 1302F3: BSF 03.502F4: BTFSC 14.002F5: GOTO 2F802F6: BCF 03.502F7: GOTO 2F302F8: BCF 03.502F9: MOVF 13,W02FA: MOVWF 2A.................... sensors=~sensors;02FB: COMF 2A,F.................... output_high(STROBE); // zobraz data na posuvnem registru02FC: BSF 03.502FD: BCF 06.002FE: BCF 03.502FF: BSF 06.0........................................ i=0; // havarijni kod0300: CLRF 36.................... for (n=0; n<=6; n++)0301: CLRF 350302: MOVF 35,W0303: SUBLW 060304: BTFSS 03.00305: GOTO 314.................... {.................... if(bit_test(sensors,n)) i++;0306: MOVF 2A,W0307: MOVWF 770308: MOVF 35,W0309: MOVWF 78030A: BTFSC 03.2030B: GOTO 310030C: BCF 03.0030D: RRF 77,F030E: DECFSZ 78,F030F: GOTO 30C0310: BTFSC 77.00311: INCF 36,F.................... }0312: INCF 35,F0313: GOTO 302.................... if (i>3) // zastavi, kdyz je cerno pod vice nez tremi cidly0314: MOVF 36,W0315: SUBLW 030316: BTFSC 03.00317: GOTO 340.................... {.................... BL; BR;0318: BSF 03.50319: BCF 05.0031A: BCF 03.5031B: BCF 05.0031C: BSF 03.5031D: BCF 05.1031E: BCF 03.5031F: BSF 05.10320: BSF 03.50321: BCF 05.60322: BCF 03.50323: BCF 05.60324: BSF 03.50325: BCF 05.70326: BCF 03.50327: BSF 05.7.................... delay_ms(300);0328: MOVLW 020329: MOVWF 39032A: MOVLW 96032B: MOVWF 3D032C: CALL 071032D: DECFSZ 39,F032E: GOTO 32A.................... STOPR; STOPL;032F: BSF 03.50330: BCF 05.60331: BCF 03.50332: BCF 05.60333: BSF 03.50334: BCF 05.70335: BCF 03.50336: BCF 05.70337: BSF 03.50338: BCF 05.00339: BCF 03.5033A: BCF 05.0033B: BSF 03.5033C: BCF 05.1033D: BCF 03.5033E: BCF 05.1.................... While(true);033F: GOTO 33F.................... };........................................ if(bit_test(sensors,7)) // detekce cihly0340: BTFSS 2A.70341: GOTO 343.................... {.................... objizdka(); // objede cihlu0342: GOTO 089.................... }............................................................ if(bit_test(sensors,3)) //...|...//0343: BTFSS 2A.30344: GOTO 361.................... {.................... uhel=STRED;0345: MOVLW 800346: MOVWF 2C.................... if (rovinka<50)0347: MOVF 2F,W0348: SUBLW 310349: BTFSS 03.0034A: GOTO 351.................... {.................... Lmotor=R17;034B: CLRF 32034C: MOVLW FF034D: MOVWF 31.................... Rmotor=R17;034E: CLRF 34034F: MOVWF 33.................... }.................... else0350: GOTO 35B.................... {.................... Lmotor=speed;0351: CLRF 7A0352: MOVF 2D,W0353: MOVWF 310354: MOVF 7A,W0355: MOVWF 32.................... Rmotor=speed;0356: CLRF 7A0357: MOVF 2D,W0358: MOVWF 330359: MOVF 7A,W035A: MOVWF 34.................... };.................... line=S;035B: CLRF 2B.................... if (rovinka < 255) rovinka++;035C: INCFSZ 2F,W035D: GOTO 35F035E: GOTO 360035F: INCF 2F,F.................... continue;0360: GOTO 29E.................... }........................................ if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu0361: BTFSS 2A.00362: GOTO 36F.................... {.................... uhel=STRED - BEAR3;0363: MOVLW 530364: MOVWF 2C.................... Lmotor=0;0365: CLRF 320366: CLRF 31.................... Rmotor=turn;0367: CLRF 7A0368: MOVF 2E,W0369: MOVWF 33036A: MOVF 7A,W036B: MOVWF 34.................... line=L3;036C: MOVLW 03036D: MOVWF 2B.................... continue;036E: GOTO 29E.................... }........................................ if(bit_test(sensors,6)) //......|//036F: BTFSS 2A.60370: GOTO 37D.................... {.................... uhel=STRED + BEAR3;0371: MOVLW AD0372: MOVWF 2C.................... Rmotor=0;0373: CLRF 340374: CLRF 33.................... Lmotor=turn;0375: CLRF 7A0376: MOVF 2E,W0377: MOVWF 310378: MOVF 7A,W0379: MOVWF 32.................... line=R3;037A: MOVLW FD037B: MOVWF 2B.................... continue;037C: GOTO 29E.................... }........................................ if(bit_test(sensors,1)) //.|.....//037D: BTFSS 2A.1037E: GOTO 38F.................... {.................... uhel=STRED - BEAR2;037F: MOVLW 670380: MOVWF 2C.................... Lmotor=speed-50;0381: MOVLW 320382: SUBWF 2D,W0383: CLRF 7A0384: MOVWF 310385: MOVF 7A,W0386: MOVWF 32.................... Rmotor=speed;0387: CLRF 7A0388: MOVF 2D,W0389: MOVWF 33038A: MOVF 7A,W038B: MOVWF 34.................... line=L2;038C: MOVLW 02038D: MOVWF 2B.................... continue;038E: GOTO 29E.................... }........................................ if(bit_test(sensors,5)) //.....|.//038F: BTFSS 2A.50390: GOTO 3A1.................... {.................... uhel=STRED + BEAR2;0391: MOVLW 990392: MOVWF 2C.................... Rmotor=speed-50;0393: MOVLW 320394: SUBWF 2D,W0395: CLRF 7A0396: MOVWF 330397: MOVF 7A,W0398: MOVWF 34.................... Lmotor=speed;0399: CLRF 7A039A: MOVF 2D,W039B: MOVWF 31039C: MOVF 7A,W039D: MOVWF 32.................... line=R2;039E: MOVLW FE039F: MOVWF 2B.................... continue;03A0: GOTO 29E.................... }........................................ if (bit_test(sensors,2)) //..|....//03A1: BTFSS 2A.203A2: GOTO 3B6.................... {.................... uhel=STRED - BEAR1;03A3: MOVLW 7603A4: MOVWF 2C.................... Lmotor=speed;03A5: CLRF 7A03A6: MOVF 2D,W03A7: MOVWF 3103A8: MOVF 7A,W03A9: MOVWF 32.................... Rmotor=speed;03AA: CLRF 7A03AB: MOVF 2D,W03AC: MOVWF 3303AD: MOVF 7A,W03AE: MOVWF 34.................... line=L1;03AF: MOVLW 0103B0: MOVWF 2B.................... if (rovinka<255) rovinka++;03B1: INCFSZ 2F,W03B2: GOTO 3B403B3: GOTO 3B503B4: INCF 2F,F.................... continue;03B5: GOTO 29E.................... }........................................ if (bit_test(sensors,4)) //....|..//03B6: BTFSS 2A.403B7: GOTO 3CB.................... {.................... uhel=STRED + BEAR1;03B8: MOVLW 8A03B9: MOVWF 2C.................... Rmotor=speed;03BA: CLRF 7A03BB: MOVF 2D,W03BC: MOVWF 3303BD: MOVF 7A,W03BE: MOVWF 34.................... Lmotor=speed;03BF: CLRF 7A03C0: MOVF 2D,W03C1: MOVWF 3103C2: MOVF 7A,W03C3: MOVWF 32.................... line=R1;03C4: MOVLW FF03C5: MOVWF 2B.................... if (rovinka<255) rovinka++;03C6: INCFSZ 2F,W03C7: GOTO 3C903C8: GOTO 3CA03C9: INCF 2F,F.................... continue;03CA: GOTO 29E.................... }............................................................ if ((L3==line) || (R3==line)) // Brzdeni pri vyjeti z trate03CB: MOVF 2B,W03CC: SUBLW 0303CD: BTFSC 03.203CE: GOTO 3D303CF: MOVF 2B,W03D0: SUBLW FD03D1: BTFSS 03.203D2: GOTO 3F2.................... {.................... if (rovinka>50)03D3: MOVF 2F,W03D4: SUBLW 3203D5: BTFSC 03.003D6: GOTO 3F1.................... {.................... BL; BR;03D7: BSF 03.503D8: BCF 05.003D9: BCF 03.503DA: BCF 05.003DB: BSF 03.503DC: BCF 05.103DD: BCF 03.503DE: BSF 05.103DF: BSF 03.503E0: BCF 05.603E1: BCF 03.503E2: BCF 05.603E3: BSF 03.503E4: BCF 05.703E5: BCF 03.503E6: BSF 05.7.................... Delay_ms(100);03E7: MOVLW 6403E8: MOVWF 3D03E9: CALL 071.................... if (rovinka>250) delay_ms(50);03EA: MOVF 2F,W03EB: SUBLW FA03EC: BTFSC 03.003ED: GOTO 3F103EE: MOVLW 3203EF: MOVWF 3D03F0: CALL 071.................... };.................... rovinka=0;03F1: CLRF 2F.................... };.................... }03F2: GOTO 29E.................... }03F3: SLEEPConfiguration Fuses:Word 1: 3F38 NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT INTRC_IOWord 2: 3FFC NOFCMEN NOIESO