Blame | Last modification | View Log | Download
CCS PCM C Compiler, Version 3.245, 27853 15-IV-06 16:28Filename: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lstROM used: 598 words (15%)Largest free fragment is 2048RAM used: 31 (18%) at main() level40 (23%) worst caseStack: 4 worst case (2 in main + 2 for interrupts)*0000: MOVLW 000001: MOVWF 0A0002: GOTO 1820003: NOP.................... #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)000C: MOVLW 3D000D: MOVWF 04000E: MOVF 00,W000F: BTFSC 03.20010: GOTO 0230011: MOVLW 020012: MOVWF 780013: MOVLW BF0014: MOVWF 770015: CLRWDT0016: DECFSZ 77,F0017: GOTO 0150018: DECFSZ 78,F0019: GOTO 013001A: MOVLW 96001B: MOVWF 77001C: DECFSZ 77,F001D: GOTO 01C001E: NOP001F: NOP0020: CLRWDT0021: DECFSZ 00,F0022: GOTO 0110023: RETLW 000024: MOVLW 080025: SUBWF 42,F0026: BTFSS 03.00027: GOTO 0330028: MOVLW 420029: MOVWF 04002A: BCF 03.0002B: RRF 00,F002C: MOVF 00,W002D: BTFSC 03.2002E: GOTO 033002F: GOTO 0310030: CLRWDT0031: DECFSZ 00,F0032: GOTO 0300033: RETLW 00................................................................................ #use rtos (timer=2, minor_cycle=2ms)........................................ #define STRED 128 // sredni poloha zadniho kolecka.................... #define BEAR1 12 // 3 stupne zataceni.................... #define BEAR2 34.................... #define BEAR3 70.................... #define SPEEDMAX 120 // maximalni rychlost........................................ #define L 1.................... #define S 2.................... #define R 0........................................ // servo.................... #define SERVO PIN_A2........................................ // IR.................... #define IRTX PIN_B2........................................ //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.................... unsigned int8 line; // na ktere strane byla detekovana cara.................... //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........................................ signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem.................... signed int16 Rmotor; // a pravem motoru........................................ // makro pro PWM.................... #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);.................... }.................... */.................... ////////////////////////////////////////////////////////////////////////////////.................... #task (rate=18ms,max=2ms).................... void zatoc() // ridi servo ktere otaci kolem.................... {.................... unsigned int8 n;........................................ output_high(SERVO);0034: BSF 03.50035: BCF 05.20036: BCF 03.50037: BSF 05.2.................... delay_us(1100);0038: CLRWDT0039: MOVLW 01003A: MOVWF 3D003B: CALL 00C003C: MOVLW 63003D: MOVWF 42003E: CALL 024.................... for(n=uhel; n>0; n--);003F: MOVF 23,W0040: MOVWF 3C0041: MOVF 3C,F0042: BTFSC 03.20043: GOTO 0460044: DECF 3C,F0045: GOTO 041.................... output_low(SERVO);0046: BSF 03.50047: BCF 05.20048: BCF 03.50049: BCF 05.2.................... }004A: MOVLW 34004B: MOVWF 2E004C: MOVLW 00004D: MOVWF 2F004E: BCF 0A.3004F: GOTO 2340050: RETLW 00........................................ ////////////////////////////////////////////////////////////////////////////////.................... void diag() // ridi servo ktere otaci kolem.................... {.................... unsigned int8 n;........................................ output_high(SERVO);*016A: BSF 03.5016B: BCF 05.2016C: BCF 03.5016D: BSF 05.2.................... delay_us(1100);016E: CLRWDT016F: MOVLW 010170: MOVWF 3D0171: CALL 00C0172: MOVLW 630173: MOVWF 420174: CALL 024.................... for(n=uhel; n>0; n--);0175: MOVF 23,W0176: MOVWF 3A0177: MOVF 3A,F0178: BTFSC 03.20179: GOTO 17C017A: DECF 3A,F017B: GOTO 177.................... output_low(SERVO);017C: BSF 03.5017D: BCF 05.2017E: BCF 03.5017F: BCF 05.2.................... }0180: BCF 0A.30181: GOTO 1D4 (RETURN)........................................ ////////////////////////////////////////////////////////////////////////////////.................... short int IRcheck() // potvrdi detekci cihly.................... {.................... output_high(IRTX); // vypne vysilac IR........................................ output_low(STROBE);.................... sensors = spi_read(0); // cteni senzoru.................... output_high(STROBE);........................................ if(true==bit_test(sensors,7)) // otestuje, jestli je stale detekovan IR signal.................... {.................... output_low(IRTX); // zapne vysilac IR........................................ output_low(STROBE);.................... sensors = spi_read(0); // cteni senzoru.................... output_high(STROBE);........................................ if(false==bit_test(sensors,7)) // otestuje, jestli je detekovana cihla.................... {.................... output_high(IRTX); // vypne vysilac IR........................................ output_low(STROBE);.................... sensors = spi_read(0); // cteni senzoru.................... output_high(STROBE);........................................ if(bit_test(sensors,7)) return 1; //........................................ else return 0; // vrat 0 kdyz je ruseni.................... }.................... else return 0; // vrat 0 kdyz to nebyla cihla.................... }.................... else return 0; // vrat 0 kdyz je detekovano ruseni.................... }.................... ////////////////////////////////////////////////////////////////////////////////.................... /*.................... #task (rate=4ms, max=20us).................... void rychlost().................... {.................... if(speed<255) speed++;.................... }.................... */.................... ////////////////////////////////////////////////////////////////////////////////.................... #task (rate=2ms, max=1ms).................... void rizeni().................... {.................... unsigned int16 n;.................... unsigned int8 i;........................................ GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory*0051: MOVF 01,W0052: BTFSS 00.70053: GOTO 0570054: BTFSS 26.70055: GOTO 05F0056: GOTO 0590057: BTFSC 26.70058: GOTO 0680059: MOVF 26,F005A: BTFSS 03.2005B: GOTO 05F005C: SUBWF 25,W005D: BTFSS 03.0005E: GOTO 068005F: BSF 03.50060: BCF 05.10061: BCF 03.50062: BCF 05.10063: BSF 03.50064: BCF 05.00065: BCF 03.50066: BSF 05.00067: GOTO 0700068: BSF 03.50069: BCF 05.0006A: BCF 03.5006B: BCF 05.0006C: BSF 03.5006D: BCF 05.1006E: BCF 03.5006F: BCF 05.10070: MOVF 01,W0071: BTFSS 00.70072: GOTO 0760073: BTFSS 28.70074: GOTO 07E0075: GOTO 0780076: BTFSC 28.70077: GOTO 0870078: MOVF 28,F0079: BTFSS 03.2007A: GOTO 07E007B: SUBWF 27,W007C: BTFSS 03.0007D: GOTO 087007E: BSF 03.5007F: BCF 05.70080: BCF 03.50081: BCF 05.70082: BSF 03.50083: BCF 05.60084: BCF 03.50085: BSF 05.60086: GOTO 08F0087: BSF 03.50088: BCF 05.60089: BCF 03.5008A: BCF 05.6008B: BSF 03.5008C: BCF 05.7008D: BCF 03.5008E: BCF 05.7........................................ delay_us(500);008F: CLRWDT0090: MOVLW 020091: MOVWF 410092: MOVLW F70093: MOVWF 420094: CALL 0240095: DECFSZ 41,F0096: GOTO 092........................................ output_low(STROBE);0097: BSF 03.50098: BCF 06.00099: BCF 03.5009A: BCF 06.0.................... sensors = spi_read(0); // cteni senzoru009B: MOVF 13,W009C: CLRF 13009D: BSF 03.5009E: BTFSC 14.0009F: GOTO 0A200A0: BCF 03.500A1: GOTO 09D00A2: BCF 03.500A3: MOVF 13,W00A4: MOVWF 21.................... sensors=~sensors;00A5: COMF 21,F.................... output_high(STROBE);00A6: BSF 03.500A7: BCF 06.000A8: BCF 03.500A9: BSF 06.0........................................ i=0; // havarijni kod00AA: CLRF 40.................... for (n=0; n<=6; n++)00AB: CLRF 3F00AC: CLRF 3E00AD: MOVF 3F,F00AE: BTFSS 03.200AF: GOTO 0C400B0: MOVF 3E,W00B1: SUBLW 0600B2: BTFSS 03.000B3: GOTO 0C4.................... {.................... if(bit_test(sensors,n)) i++;00B4: MOVF 21,W00B5: MOVWF 7700B6: MOVF 3E,W00B7: MOVWF 7800B8: BTFSC 03.200B9: GOTO 0BE00BA: BCF 03.000BB: RRF 77,F00BC: DECFSZ 78,F00BD: GOTO 0BA00BE: BTFSC 77.000BF: INCF 40,F.................... }00C0: INCF 3E,F00C1: BTFSC 03.200C2: INCF 3F,F00C3: GOTO 0AD.................... if (i>3) rtos_terminate(); // zastavi, kdyz je cerno pod vice nez tremi cidly00C4: MOVF 40,W00C5: SUBLW 0300C6: BTFSS 03.000C7: GOTO 241............................................................ if(bit_test(sensors,3)) //...|...//00C8: BTFSS 21.300C9: GOTO 0D8.................... {.................... uhel=STRED;00CA: MOVLW 8000CB: MOVWF 23.................... Lmotor=SPEEDMAX;00CC: CLRF 2600CD: MOVLW 7800CE: MOVWF 25.................... Rmotor=SPEEDMAX;00CF: CLRF 2800D0: MOVWF 27.................... line=S;00D1: MOVLW 0200D2: MOVWF 22.................... if (rovinka<255) rovinka++;00D3: INCFSZ 24,W00D4: GOTO 0D600D5: GOTO 0D700D6: INCF 24,F.................... return;00D7: GOTO 163.................... }........................................ if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu00D8: BTFSS 21.000D9: GOTO 0E4.................... {.................... uhel=STRED-BEAR3;00DA: MOVLW 3A00DB: MOVWF 23.................... Lmotor=0;00DC: CLRF 2600DD: CLRF 25.................... Rmotor=SPEEDMAX;00DE: CLRF 2800DF: MOVLW 7800E0: MOVWF 27.................... line=L;00E1: MOVLW 0100E2: MOVWF 22.................... return;00E3: GOTO 163.................... }........................................ if(bit_test(sensors,6)) //......|//00E4: BTFSS 21.600E5: GOTO 0EF.................... {.................... uhel=STRED+BEAR3;00E6: MOVLW C600E7: MOVWF 23.................... Rmotor=0;00E8: CLRF 2800E9: CLRF 27.................... Lmotor=SPEEDMAX;00EA: CLRF 2600EB: MOVLW 7800EC: MOVWF 25.................... line=R;00ED: CLRF 22.................... return;00EE: GOTO 163........................................ }........................................ if(bit_test(sensors,1)) //.|.....//00EF: BTFSS 21.100F0: GOTO 0FC.................... {.................... uhel=STRED-BEAR2;00F1: MOVLW 5E00F2: MOVWF 23.................... Lmotor=SPEEDMAX-50;00F3: CLRF 2600F4: MOVLW 4600F5: MOVWF 25.................... Rmotor=SPEEDMAX;00F6: CLRF 2800F7: MOVLW 7800F8: MOVWF 27.................... line=S;00F9: MOVLW 0200FA: MOVWF 22.................... return;00FB: GOTO 163.................... }........................................ if(bit_test(sensors,5)) //.....|.//00FC: BTFSS 21.500FD: GOTO 109.................... {.................... uhel=STRED+BEAR2;00FE: MOVLW A200FF: MOVWF 23.................... Rmotor=SPEEDMAX-50;0100: CLRF 280101: MOVLW 460102: MOVWF 27.................... Lmotor=SPEEDMAX;0103: CLRF 260104: MOVLW 780105: MOVWF 25.................... line=S;0106: MOVLW 020107: MOVWF 22.................... return;0108: GOTO 163.................... }........................................ if (bit_test(sensors,2)) //..|....//0109: BTFSS 21.2010A: GOTO 119.................... {.................... uhel=STRED-BEAR1;010B: MOVLW 74010C: MOVWF 23.................... Lmotor=SPEEDMAX;010D: CLRF 26010E: MOVLW 78010F: MOVWF 25.................... Rmotor=SPEEDMAX;0110: CLRF 280111: MOVWF 27.................... line=S;0112: MOVLW 020113: MOVWF 22.................... if (rovinka<255) rovinka++;0114: INCFSZ 24,W0115: GOTO 1170116: GOTO 1180117: INCF 24,F.................... return;0118: GOTO 163.................... }........................................ if (bit_test(sensors,4)) //....|..//0119: BTFSS 21.4011A: GOTO 129.................... {.................... uhel=STRED+BEAR1;011B: MOVLW 8C011C: MOVWF 23.................... Rmotor=SPEEDMAX;011D: CLRF 28011E: MOVLW 78011F: MOVWF 27.................... Lmotor=SPEEDMAX;0120: CLRF 260121: MOVWF 25.................... line=S;0122: MOVLW 020123: MOVWF 22.................... if (rovinka<255) rovinka++;0124: INCFSZ 24,W0125: GOTO 1270126: GOTO 1280127: INCF 24,F.................... return;0128: GOTO 163.................... }........................................ if ((L==line) || (R==line)) // Brzdeni pri vyjeti z trate0129: DECFSZ 22,W012A: GOTO 12C012B: GOTO 12F012C: MOVF 22,F012D: BTFSS 03.2012E: GOTO 160.................... {.................... if (rovinka>250)012F: MOVF 24,W0130: SUBLW FA0131: BTFSC 03.00132: GOTO 15F.................... {.................... BL; BR;0133: BSF 03.50134: BCF 05.00135: BCF 03.50136: BCF 05.00137: BSF 03.50138: BCF 05.10139: BCF 03.5013A: BSF 05.1013B: BSF 03.5013C: BCF 05.6013D: BCF 03.5013E: BCF 05.6013F: BSF 03.50140: BCF 05.70141: BCF 03.50142: BSF 05.7.................... for(n=1; n<(60); n++) {rtos_yield(); delay_us(500);};0143: CLRF 3F0144: MOVLW 010145: MOVWF 3E0146: MOVF 3F,F0147: BTFSS 03.20148: GOTO 15F0149: MOVF 3E,W014A: SUBLW 3B014B: BTFSS 03.0014C: GOTO 15F014D: MOVLW 53014E: MOVWF 35014F: MOVLW 010150: MOVWF 360151: BCF 0A.30152: GOTO 2340153: CLRWDT0154: MOVLW 020155: MOVWF 410156: MOVLW F70157: MOVWF 420158: CALL 0240159: DECFSZ 41,F015A: GOTO 156015B: INCF 3E,F015C: BTFSC 03.2015D: INCF 3F,F015E: GOTO 146.................... };.................... rovinka=0;015F: CLRF 24.................... }........................................ if(bit_test(sensors,7)) // zjisti jestli neni cihla0160: BTFSS 21.70161: GOTO 163.................... {.................... rtos_terminate();0162: GOTO 241.................... }.................... }0163: MOVLW 510164: MOVWF 350165: MOVLW 000166: MOVWF 360167: BCF 0A.30168: GOTO 2340169: RETLW 00................................................................................ ////////////////////////////////////////////////////////////////////////////////.................... void main().................... {*0182: CLRF 040183: MOVLW 1F0184: ANDWF 03,F0185: MOVLW 700186: BSF 03.50187: MOVWF 0F0188: BCF 1F.40189: BCF 1F.5018A: MOVF 1B,W018B: ANDLW 80018C: MOVWF 1B018D: MOVLW 07018E: MOVWF 1C.................... unsigned int16 i;.................... unsigned int8 last;........................................ setup_adc_ports(NO_ANALOGS);018F: BCF 1F.40190: BCF 1F.50191: MOVF 1B,W0192: ANDLW 800193: MOVWF 1B.................... setup_adc(ADC_CLOCK_INTERNAL);0194: BCF 1F.60195: BCF 03.50196: BSF 1F.60197: BSF 1F.70198: BSF 03.50199: BCF 1F.7019A: BCF 03.5019B: BSF 1F.0.................... setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4);019C: BCF 14.5019D: BSF 03.5019E: BCF 06.2019F: BSF 06.101A0: BCF 06.401A1: MOVLW 3001A2: BCF 03.501A3: MOVWF 1401A4: MOVLW 0001A5: BSF 03.501A6: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);01A7: MOVF 01,W01A8: ANDLW C701A9: IORLW 0801AA: MOVWF 01.................... setup_timer_1(T1_DISABLED);01AB: BCF 03.501AC: CLRF 10.................... setup_oscillator(OSC_8MHZ|OSC_INTRC);01AD: MOVLW 7201AE: BSF 03.501AF: MOVWF 0F........................................ STOPR; STOPL; // zastav motory01B0: BCF 05.601B1: BCF 03.501B2: BCF 05.601B3: BSF 03.501B4: BCF 05.701B5: BCF 03.501B6: BCF 05.701B7: BSF 03.501B8: BCF 05.001B9: BCF 03.501BA: BCF 05.001BB: BSF 03.501BC: BCF 05.101BD: BCF 03.501BE: BCF 05.1.................... Lmotor=0;Rmotor=0;01BF: CLRF 2601C0: CLRF 2501C1: CLRF 2801C2: CLRF 27........................................ uhel=STRED; // nastav zadni kolecko na stred01C3: MOVLW 8001C4: MOVWF 23.................... rovinka=0;01C5: CLRF 24........................................ output_low(IRTX); // zapni IR vysilac01C6: BSF 03.501C7: BCF 06.201C8: BCF 03.501C9: BCF 06.2........................................ for(i=0;i<100;i++) // pockej, nez se zadni kolecko vystredi01CA: CLRF 3801CB: CLRF 3701CC: MOVF 38,F01CD: BTFSS 03.201CE: GOTO 1DB01CF: MOVF 37,W01D0: SUBLW 6301D1: BTFSS 03.001D2: GOTO 1DB.................... {.................... diag();01D3: GOTO 16A.................... delay_ms(16);01D4: MOVLW 1001D5: MOVWF 3D01D6: CALL 00C.................... }01D7: INCF 37,F01D8: BTFSC 03.201D9: INCF 38,F01DA: GOTO 1CC.................... // diagnostika();........................................ while(true).................... {.................... rtos_run();01DB: CLRF 2901DC: CLRF 2B01DD: MOVLW 0901DE: MOVWF 2A01DF: CLRF 2D01E0: CLRF 2C01E1: MOVLW 3401E2: MOVWF 2E01E3: MOVLW 0001E4: MOVWF 2F01E5: CLRF 3001E6: CLRF 3201E7: MOVLW 0101E8: MOVWF 3101E9: CLRF 3401EA: CLRF 3301EB: MOVLW 5101EC: MOVWF 3501ED: MOVLW 0001EE: MOVWF 3601EF: CLRF 2001F0: MOVLW 0001F1: MOVWF 7801F2: IORLW 0601F3: MOVWF 1201F4: MOVLW FA01F5: BSF 03.501F6: MOVWF 1201F7: BCF 03.501F8: BCF 0C.101F9: MOVLW 0001FA: MOVWF 7801FB: IORLW 0601FC: MOVWF 1201FD: MOVLW FA01FE: BSF 03.501FF: MOVWF 120200: BCF 03.50201: BCF 0C.10202: BCF 03.00203: RLF 20,W0204: MOVWF 770205: CALL 0040206: MOVWF 790207: MOVLW 010208: ADDWF 77,W0209: CALL 004020A: MOVWF 7A020B: MOVF 79,W020C: MOVWF 04020D: MOVF 00,W020E: MOVWF 79020F: INCF 04,F0210: MOVF 00,W0211: MOVWF 770212: INCF 04,F0213: MOVF 00,W0214: MOVWF 780215: INCF 04,F0216: INCF 00,F0217: MOVF 00,W0218: MOVWF 7A0219: BTFSS 03.2021A: GOTO 21E021B: INCF 04,F021C: INCF 00,F021D: DECF 04,F021E: INCF 04,F021F: MOVF 00,W0220: SUBWF 78,W0221: BTFSS 03.20222: GOTO 2360223: MOVF 77,W0224: SUBWF 7A,W0225: BTFSS 03.20226: GOTO 2360227: DECF 04,F0228: CLRF 000229: INCF 04,F022A: CLRF 00022B: INCF 04,F022C: BTFSC 79.7022D: GOTO 236022E: INCF 04,F022F: MOVF 00,W0230: MOVWF 0A0231: DECF 04,F0232: MOVF 00,W0233: MOVWF 020234: BCF 03.50235: BCF 03.60236: INCF 20,F0237: MOVLW 020238: SUBWF 20,W0239: BTFSS 03.2023A: GOTO 202023B: CLRF 20023C: BTFSS 0C.1023D: GOTO 240023E: BSF 03.5023F: GOTO 2000240: GOTO 23C0241: MOVLW FF0242: MOVWF 20.................... STOPR;0243: BSF 03.50244: BCF 05.60245: BCF 03.50246: BCF 05.60247: BSF 03.50248: BCF 05.70249: BCF 03.5024A: BCF 05.7.................... STOPL;024B: BSF 03.5024C: BCF 05.0024D: BCF 03.5024E: BCF 05.0024F: BSF 03.50250: BCF 05.10251: BCF 03.50252: BCF 05.1.................... while(true);0253: GOTO 253.................... }0254: GOTO 1DB.................... }0255: SLEEPConfiguration Fuses:Word 1: 3F38 NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT INTRC_IOWord 2: 3FFC NOFCMEN NOIESO