Blame | Last modification | View Log | Download
CCS PCM C Compiler, Version 3.245, 27853 22-IV-06 23:50Filename: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lstROM used: 960 words (23%)Largest free fragment is 2048RAM used: 30 (17%) at main() level37 (21%) 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 3F,F0045: BTFSS 03.00046: GOTO 0520047: MOVLW 3F0048: 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 3C0072: 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 SPEEDMAX 140 // ANSMANN=140; GP=120; maximalni 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_A2........................................ // 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 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;}........................................ ////////////////////////////////////////////////////////////////////////////////.................... /*.................... void diagnostika().................... {.................... if(input(SW1))STOPR;STOPL;While(TRUE);.................... // if(LSENSOR==true) output_high(LED2); else output_low(LED2);.................... // if(RSENSOR==true) output_high(LED1); else output_low(LED1);.................... }.................... */.................... ////////////////////////////////////////////////////////////////////////////////.................... #int_TIMER1.................... TIMER1_isr().................... {.................... preteceni = true;*003F: BSF 2F.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 05.20055: BCF 03.50056: BSF 05.2.................... delay_us(1000);0057: CLRWDT0058: MOVLW 090059: MOVWF 3E005A: MOVLW 6D005B: MOVWF 3F005C: CALL 043005D: DECFSZ 3E,F005E: GOTO 05A.................... for(n=uhel; n>0; n--) Delay_us(2);005F: MOVF 2C,W0060: MOVWF 3D0061: MOVF 3D,F0062: BTFSC 03.20063: GOTO 06A0064: CLRWDT0065: NOP0066: NOP0067: NOP0068: DECF 3D,F0069: GOTO 061.................... output_low(SERVO);006A: BSF 03.5006B: BCF 05.2006C: BCF 03.5006D: BCF 05.2.................... }........................................ ////////////////////////////////////////////////////////////////////////////////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 38.................... 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 3B009C: MOVLW C8009D: MOVWF 3C009E: CALL 071009F: DECFSZ 3B,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 3C00B5: 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 3C00C8: 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 3C00D8: 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 3A00EB: CLRF 3900EC: MOVF 3A,W00ED: SUBLW 0300EE: BTFSS 03.000EF: GOTO 15700F0: BTFSS 03.200F1: GOTO 0F600F2: MOVF 39,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.................... {.................... // BL; FR;.................... 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.................... {.................... // FL; BR;.................... 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 3C0152: CALL 071.................... }0153: INCF 39,F0154: BTFSC 03.20155: INCF 3A,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 3C016B: 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 3B017E: MOVLW FA017F: MOVWF 3C0180: CALL 0710181: DECFSZ 3B,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 3C0195: 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 3C01AA: 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 3B01B5: MOVLW C801B6: MOVWF 3C01B7: CALL 07101B8: DECFSZ 3B,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 3C01CE: 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 3C01E3: CALL 071.................... /*.................... uhel=STRED; // rovne.................... delay_ms(100);.................... FL;FR;.................... delay_ms(100);.................... */.................... 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 3C01F5: 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 3B0209: MOVLW C8020A: MOVWF 3C020B: CALL 071020C: DECFSZ 3B,F020D: GOTO 209........................................ uhel=STRED-BEAR3; // doleva020E: MOVLW 53020F: MOVWF 2C.................... }0210: BCF 0A.30211: GOTO 317 (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(NO_ANALOGS);*0221: BSF 03.50222: BCF 1F.40223: BCF 1F.50224: MOVF 1B,W0225: ANDLW 800226: MOVWF 1B.................... setup_adc(ADC_CLOCK_INTERNAL);0227: BCF 1F.60228: BCF 03.50229: BSF 1F.6022A: BSF 1F.7022B: BSF 03.5022C: BCF 1F.7022D: BCF 03.5022E: BSF 1F.0.................... setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_16);022F: BCF 14.50230: BSF 03.50231: BCF 06.20232: BSF 06.10233: BCF 06.40234: MOVLW 310235: BCF 03.50236: MOVWF 140237: MOVLW 000238: BSF 03.50239: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);023A: MOVF 01,W023B: ANDLW C7023C: IORLW 08023D: MOVWF 01.................... // setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);.................... setup_timer_1(T1_DISABLED|T1_DIV_BY_8);023E: MOVLW 30023F: BCF 03.50240: MOVWF 10.................... setup_timer_2(T2_DIV_BY_16,140,16);0241: MOVLW 780242: MOVWF 780243: IORLW 060244: MOVWF 120245: MOVLW 8C0246: BSF 03.50247: MOVWF 12.................... setup_oscillator(OSC_8MHZ|OSC_INTRC);0248: MOVLW 720249: MOVWF 0F........................................ STOPR; STOPL; // zastav motory024A: BCF 05.6024B: BCF 03.5024C: BCF 05.6024D: BSF 03.5024E: BCF 05.7024F: BCF 03.50250: BCF 05.70251: BSF 03.50252: BCF 05.00253: BCF 03.50254: BCF 05.00255: BSF 03.50256: BCF 05.10257: BCF 03.50258: BCF 05.1.................... Lmotor=0;Rmotor=0;0259: CLRF 31025A: CLRF 30025B: CLRF 33025C: CLRF 32........................................ uhel = STRED; // nastav zadni kolecko na stred025D: MOVLW 80025E: MOVWF 2C.................... rovinka = 0;025F: CLRF 2E........................................ enable_interrupts(INT_TIMER2);0260: BSF 03.50261: BSF 0C.1.................... // enable_interrupts(INT_TIMER1);.................... enable_interrupts(GLOBAL);0262: MOVLW C00263: BCF 03.50264: IORWF 0B,F........................................ output_low(IRTX); // zapni IR vysilac0265: BSF 03.50266: BCF 06.20267: BCF 03.50268: BCF 06.2........................................ delay_ms(1000);0269: MOVLW 04026A: MOVWF 38026B: MOVLW FA026C: MOVWF 3C026D: CALL 071026E: DECFSZ 38,F026F: GOTO 26B........................................ //!!!!.................... speed=SPEEDMAX;0270: MOVLW 8C0271: MOVWF 2D........................................ while(true).................... {........................................ GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory PWM podle promenych Lmotor a Rmotor0272: MOVF 01,W0273: BTFSS 00.70274: GOTO 2780275: BTFSS 31.70276: GOTO 2800277: GOTO 27A0278: BTFSC 31.70279: GOTO 289027A: MOVF 31,F027B: BTFSS 03.2027C: GOTO 280027D: SUBWF 30,W027E: BTFSS 03.0027F: GOTO 2890280: BSF 03.50281: BCF 05.10282: BCF 03.50283: BCF 05.10284: BSF 03.50285: BCF 05.00286: BCF 03.50287: BSF 05.00288: GOTO 2910289: BSF 03.5028A: BCF 05.0028B: BCF 03.5028C: BCF 05.0028D: BSF 03.5028E: BCF 05.1028F: BCF 03.50290: BCF 05.10291: MOVF 01,W0292: BTFSS 00.70293: GOTO 2970294: BTFSS 33.70295: GOTO 29F0296: GOTO 2990297: BTFSC 33.70298: GOTO 2A80299: MOVF 33,F029A: BTFSS 03.2029B: GOTO 29F029C: SUBWF 32,W029D: BTFSS 03.0029E: GOTO 2A8029F: BSF 03.502A0: BCF 05.702A1: BCF 03.502A2: BCF 05.702A3: BSF 03.502A4: BCF 05.602A5: BCF 03.502A6: BSF 05.602A7: GOTO 2B002A8: BSF 03.502A9: BCF 05.602AA: BCF 03.502AB: BCF 05.602AC: BSF 03.502AD: BCF 05.702AE: BCF 03.502AF: BCF 05.7........................................ delay_us(1500); // cekani na SLAVE, nez pripravi data od cidel02B0: CLRWDT02B1: MOVLW 0102B2: MOVWF 3C02B3: CALL 07102B4: MOVLW 0202B5: MOVWF 3802B6: CLRF 2902B7: BTFSC 0B.702B8: BSF 29.702B9: BCF 0B.702BA: MOVLW F702BB: MOVWF 3F02BC: CALL 04302BD: BTFSC 29.702BE: BSF 0B.702BF: DECFSZ 38,F02C0: GOTO 2B6........................................ output_low(STROBE); // vypni zobrazovani na posuvnem registru02C1: BSF 03.502C2: BCF 06.002C3: BCF 03.502C4: BCF 06.0.................... sensors = spi_read(0); // cteni senzoru02C5: MOVF 13,W02C6: CLRF 1302C7: BSF 03.502C8: BTFSC 14.002C9: GOTO 2CC02CA: BCF 03.502CB: GOTO 2C702CC: BCF 03.502CD: MOVF 13,W02CE: MOVWF 2A.................... sensors=~sensors;02CF: COMF 2A,F.................... output_high(STROBE); // zobraz data na posuvnem registru02D0: BSF 03.502D1: BCF 06.002D2: BCF 03.502D3: BSF 06.0........................................ i=0; // havarijni kod02D4: CLRF 35.................... for (n=0; n<=6; n++)02D5: CLRF 3402D6: MOVF 34,W02D7: SUBLW 0602D8: BTFSS 03.002D9: GOTO 2E8.................... {.................... if(bit_test(sensors,n)) i++;02DA: MOVF 2A,W02DB: MOVWF 7702DC: MOVF 34,W02DD: MOVWF 7802DE: BTFSC 03.202DF: GOTO 2E402E0: BCF 03.002E1: RRF 77,F02E2: DECFSZ 78,F02E3: GOTO 2E002E4: BTFSC 77.002E5: INCF 35,F.................... }02E6: INCF 34,F02E7: GOTO 2D6.................... if (i>3) // zastavi, kdyz je cerno pod vice nez tremi cidly02E8: MOVF 35,W02E9: SUBLW 0302EA: BTFSC 03.002EB: GOTO 314.................... {.................... BL; BR;02EC: BSF 03.502ED: BCF 05.002EE: BCF 03.502EF: BCF 05.002F0: BSF 03.502F1: BCF 05.102F2: BCF 03.502F3: BSF 05.102F4: BSF 03.502F5: BCF 05.602F6: BCF 03.502F7: BCF 05.602F8: BSF 03.502F9: BCF 05.702FA: BCF 03.502FB: BSF 05.7.................... delay_ms(300);02FC: MOVLW 0202FD: MOVWF 3802FE: MOVLW 9602FF: MOVWF 3C0300: CALL 0710301: DECFSZ 38,F0302: GOTO 2FE.................... STOPR; STOPL;0303: BSF 03.50304: BCF 05.60305: BCF 03.50306: BCF 05.60307: BSF 03.50308: BCF 05.70309: BCF 03.5030A: BCF 05.7030B: BSF 03.5030C: BCF 05.0030D: BCF 03.5030E: BCF 05.0030F: BSF 03.50310: BCF 05.10311: BCF 03.50312: BCF 05.1.................... While(true);0313: GOTO 313.................... };........................................ if(bit_test(sensors,7)) // detekce cihly0314: BTFSS 2A.70315: GOTO 317.................... {.................... objizdka(); // objede cihlu0316: GOTO 089.................... }............................................................ if(bit_test(sensors,3)) //...|...//0317: BTFSS 2A.30318: GOTO 32B.................... {.................... uhel=STRED;0319: MOVLW 80031A: MOVWF 2C.................... Lmotor=speed;031B: CLRF 7A031C: MOVF 2D,W031D: MOVWF 30031E: MOVF 7A,W031F: MOVWF 31.................... Rmotor=speed;0320: CLRF 7A0321: MOVF 2D,W0322: MOVWF 320323: MOVF 7A,W0324: MOVWF 33.................... line=S;0325: CLRF 2B.................... // set_timer1(0);.................... if (rovinka < 255) rovinka++;0326: INCFSZ 2E,W0327: GOTO 3290328: GOTO 32A0329: INCF 2E,F.................... continue;032A: GOTO 272.................... }........................................ if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu032B: BTFSS 2A.0032C: GOTO 339.................... {.................... uhel=STRED - BEAR3;032D: MOVLW 53032E: MOVWF 2C.................... Lmotor=0;032F: CLRF 310330: CLRF 30.................... Rmotor=speed;0331: CLRF 7A0332: MOVF 2D,W0333: MOVWF 320334: MOVF 7A,W0335: MOVWF 33.................... line=L3;0336: MOVLW 030337: MOVWF 2B.................... // set_timer1(0);.................... continue;0338: GOTO 272.................... }........................................ if(bit_test(sensors,6)) //......|//0339: BTFSS 2A.6033A: GOTO 347.................... {.................... uhel=STRED + BEAR3;033B: MOVLW AD033C: MOVWF 2C.................... Rmotor=0;033D: CLRF 33033E: CLRF 32.................... Lmotor=speed;033F: CLRF 7A0340: MOVF 2D,W0341: MOVWF 300342: MOVF 7A,W0343: MOVWF 31.................... line=R3;0344: MOVLW FD0345: MOVWF 2B.................... // set_timer1(0);.................... continue;0346: GOTO 272.................... }........................................ if(bit_test(sensors,1)) //.|.....//0347: BTFSS 2A.10348: GOTO 359.................... {.................... uhel=STRED - BEAR2;0349: MOVLW 67034A: MOVWF 2C.................... Lmotor=speed-50;034B: MOVLW 32034C: SUBWF 2D,W034D: CLRF 7A034E: MOVWF 30034F: MOVF 7A,W0350: MOVWF 31.................... Rmotor=speed;0351: CLRF 7A0352: MOVF 2D,W0353: MOVWF 320354: MOVF 7A,W0355: MOVWF 33.................... line=L2;0356: MOVLW 020357: MOVWF 2B.................... // set_timer1(0);.................... continue;0358: GOTO 272.................... }........................................ if(bit_test(sensors,5)) //.....|.//0359: BTFSS 2A.5035A: GOTO 36B.................... {.................... uhel=STRED + BEAR2;035B: MOVLW 99035C: MOVWF 2C.................... Rmotor=speed-50;035D: MOVLW 32035E: SUBWF 2D,W035F: CLRF 7A0360: MOVWF 320361: MOVF 7A,W0362: MOVWF 33.................... Lmotor=speed;0363: CLRF 7A0364: MOVF 2D,W0365: MOVWF 300366: MOVF 7A,W0367: MOVWF 31.................... line=R2;0368: MOVLW FE0369: MOVWF 2B.................... // set_timer1(0);.................... continue;036A: GOTO 272.................... }........................................ if (bit_test(sensors,2)) //..|....//036B: BTFSS 2A.2036C: GOTO 380.................... {.................... uhel=STRED - BEAR1;036D: MOVLW 76036E: MOVWF 2C.................... Lmotor=speed;036F: CLRF 7A0370: MOVF 2D,W0371: MOVWF 300372: MOVF 7A,W0373: MOVWF 31.................... Rmotor=speed;0374: CLRF 7A0375: MOVF 2D,W0376: MOVWF 320377: MOVF 7A,W0378: MOVWF 33.................... line=L1;0379: MOVLW 01037A: MOVWF 2B.................... // set_timer1(0);.................... if (rovinka<255) rovinka++;037B: INCFSZ 2E,W037C: GOTO 37E037D: GOTO 37F037E: INCF 2E,F.................... continue;037F: GOTO 272.................... }........................................ if (bit_test(sensors,4)) //....|..//0380: BTFSS 2A.40381: GOTO 395.................... {.................... uhel=STRED + BEAR1;0382: MOVLW 8A0383: MOVWF 2C.................... Rmotor=speed;0384: CLRF 7A0385: MOVF 2D,W0386: MOVWF 320387: MOVF 7A,W0388: MOVWF 33.................... Lmotor=speed;0389: CLRF 7A038A: MOVF 2D,W038B: MOVWF 30038C: MOVF 7A,W038D: MOVWF 31.................... line=R1;038E: MOVLW FF038F: MOVWF 2B.................... // set_timer1(0);.................... if (rovinka<255) rovinka++;0390: INCFSZ 2E,W0391: GOTO 3930392: GOTO 3940393: INCF 2E,F.................... continue;0394: GOTO 272.................... }............................................................ if ((L3==line) || (R3==line)) // Brzdeni pri vyjeti z trate0395: MOVF 2B,W0396: SUBLW 030397: BTFSC 03.20398: GOTO 39D0399: MOVF 2B,W039A: SUBLW FD039B: BTFSS 03.2039C: GOTO 3BE.................... {.................... if (rovinka>50)039D: MOVF 2E,W039E: SUBLW 32039F: BTFSC 03.003A0: GOTO 3BB.................... {.................... BL; BR;03A1: BSF 03.503A2: BCF 05.003A3: BCF 03.503A4: BCF 05.003A5: BSF 03.503A6: BCF 05.103A7: BCF 03.503A8: BSF 05.103A9: BSF 03.503AA: BCF 05.603AB: BCF 03.503AC: BCF 05.603AD: BSF 03.503AE: BCF 05.703AF: BCF 03.503B0: BSF 05.7.................... Delay_ms(100);03B1: MOVLW 6403B2: MOVWF 3C03B3: CALL 071.................... if (rovinka>250) delay_ms(50);03B4: MOVF 2E,W03B5: SUBLW FA03B6: BTFSC 03.003B7: GOTO 3BB03B8: MOVLW 3203B9: MOVWF 3C03BA: CALL 071.................... };.................... rovinka=0;03BB: CLRF 2E.................... speed=SPEEDMAX;03BC: MOVLW 8C03BD: MOVWF 2D.................... };.................... }03BE: GOTO 272.................... }03BF: SLEEPConfiguration Fuses:Word 1: 3F38 NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT INTRC_IOWord 2: 3FFC NOFCMEN NOIESO