Blame | Last modification | View Log | Download
CCS PCM C Compiler, Version 3.245, 27853 01-IV-06 23:13Filename: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lstROM used: 582 words (14%)Largest free fragment is 2048RAM used: 35 (20%) at main() level38 (22%) worst caseStack: 3 worst case (1 in main + 2 for interrupts)*0000: MOVLW 000001: MOVWF 0A0002: GOTO 18F0003: 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 BROWNOUT //Reset when brownout detected.................... #FUSES LVP //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 FCMEN //Fail-safe clock monitor enabled.................... #FUSES IESO //Internal External Switch Over mode enabled........................................ #use delay(clock=8000000,RESTART_WDT)000E: MOVLW 3F000F: MOVWF 040010: MOVF 00,W0011: BTFSC 03.20012: GOTO 0250013: MOVLW 020014: MOVWF 780015: MOVLW BF0016: MOVWF 770017: CLRWDT0018: DECFSZ 77,F0019: GOTO 017001A: DECFSZ 78,F001B: GOTO 015001C: MOVLW 96001D: MOVWF 77001E: DECFSZ 77,F001F: GOTO 01E0020: NOP0021: NOP0022: CLRWDT0023: DECFSZ 00,F0024: GOTO 0130025: BCF 0A.30026: GOTO 040 (RETURN)0027: MOVLW 080028: SUBWF 3F,F0029: BTFSS 03.0002A: GOTO 036002B: MOVLW 3F002C: MOVWF 04002D: BCF 03.0002E: RRF 00,F002F: MOVF 00,W0030: BTFSC 03.20031: GOTO 0360032: GOTO 0340033: CLRWDT0034: DECFSZ 00,F0035: GOTO 0330036: BCF 0A.30037: GOTO 043 (RETURN)................................................................................ #use rtos (timer=2, minor_cycle=2ms)........................................ 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........................................ signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem.................... signed int16 Rmotor; // a pravem motoru........................................ #define LMAX 190 // maximalni zatoceni doleva.................... #define RMAX 60 // maximalni zatoceni doprava.................... #define STRED 128 // sredni poloha zadniho kolecka........................................ // servo.................... #define SERVO PIN_A2........................................ //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........................................ // 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=16ms,max=2ms).................... void zatoc() // ridi servo ktere otaci kolem.................... {.................... unsigned int8 n;.................... output_high(SERVO);0038: BSF 03.50039: BCF 05.2003A: BCF 03.5003B: BSF 05.2.................... delay_us(1200);003C: CLRWDT003D: MOVLW 01003E: MOVWF 3F003F: GOTO 00E0040: MOVLW C70041: MOVWF 3F0042: GOTO 027.................... for(n=uhel; n>0; n--);0043: MOVF 24,W0044: MOVWF 3E0045: MOVF 3E,F0046: BTFSC 03.20047: GOTO 04A0048: DECF 3E,F0049: GOTO 045.................... output_low(SERVO);004A: BSF 03.5004B: BCF 05.2004C: BCF 03.5004D: BCF 05.2.................... }004E: MOVLW 38004F: MOVWF 2E0050: MOVLW 000051: MOVWF 2F0052: BCF 0A.30053: GOTO 2360054: RETLW 00........................................ ////////////////////////////////////////////////////////////////////////////////.................... #task (rate=2ms, max=500us).................... void motory() // umoznuje nezavisle rizeni vykonu na obou motorech.................... {........................................ if(Rmotor>0) //pravy motor0055: BTFSC 28.70056: GOTO 07D0057: MOVF 28,F0058: BTFSS 03.20059: GOTO 05E005A: MOVF 27,W005B: SUBLW 00005C: BTFSC 03.0005D: GOTO 07D.................... {.................... GO(R, F, Rmotor);005E: MOVF 01,W005F: BTFSS 00.70060: GOTO 0640061: BTFSS 28.70062: GOTO 06C0063: GOTO 0660064: BTFSC 28.70065: GOTO 0750066: MOVF 28,F0067: BTFSS 03.20068: GOTO 06C0069: SUBWF 27,W006A: BTFSS 03.0006B: GOTO 075006C: BSF 03.5006D: BCF 05.7006E: BCF 03.5006F: BCF 05.70070: BSF 03.50071: BCF 05.60072: BCF 03.50073: BSF 05.60074: GOTO 07D0075: BSF 03.50076: BCF 05.60077: BCF 03.50078: BCF 05.60079: BSF 03.5007A: BCF 05.7007B: BCF 03.5007C: BCF 05.7.................... }........................................ if(Rmotor==0) STOPR;007D: MOVF 27,F007E: BTFSS 03.2007F: GOTO 0870080: MOVF 28,F0081: BTFSS 03.20082: GOTO 0870083: BSF 03.50084: BCF 05.60085: BCF 03.50086: BCF 05.60087: BSF 03.50088: BCF 05.70089: BCF 03.5008A: BCF 05.7........................................ if(Rmotor<0)008B: BTFSS 28.7008C: GOTO 0BD.................... {.................... GO(R, B, abs(Rmotor));008D: MOVF 01,W008E: MOVWF 40008F: MOVF 28,W0090: MOVWF 7A0091: MOVF 27,W0092: BTFSS 28.70093: GOTO 09D0094: MOVF 27,W0095: SUBLW 000096: MOVWF 770097: CLRF 7A0098: MOVF 28,W0099: BTFSS 03.0009A: INCFSZ 28,W009B: SUBWF 7A,F009C: MOVF 77,W009D: MOVWF 78009E: BTFSS 40.7009F: GOTO 0A300A0: BTFSS 7A.700A1: GOTO 0AC00A2: GOTO 0A500A3: BTFSC 7A.700A4: GOTO 0B500A5: MOVF 7A,F00A6: BTFSS 03.200A7: GOTO 0AC00A8: MOVF 40,W00A9: SUBWF 78,W00AA: BTFSS 03.000AB: GOTO 0B500AC: BSF 03.500AD: BCF 05.600AE: BCF 03.500AF: BCF 05.600B0: BSF 03.500B1: BCF 05.700B2: BCF 03.500B3: BSF 05.700B4: GOTO 0BD00B5: BSF 03.500B6: BCF 05.600B7: BCF 03.500B8: BCF 05.600B9: BSF 03.500BA: BCF 05.700BB: BCF 03.500BC: BCF 05.7.................... }........................................ if(Lmotor>0) // levy motor00BD: BTFSC 26.700BE: GOTO 0E500BF: MOVF 26,F00C0: BTFSS 03.200C1: GOTO 0C600C2: MOVF 25,W00C3: SUBLW 0000C4: BTFSC 03.000C5: GOTO 0E5.................... {.................... GO(L, F, Lmotor);00C6: MOVF 01,W00C7: BTFSS 00.700C8: GOTO 0CC00C9: BTFSS 26.700CA: GOTO 0D400CB: GOTO 0CE00CC: BTFSC 26.700CD: GOTO 0DD00CE: MOVF 26,F00CF: BTFSS 03.200D0: GOTO 0D400D1: SUBWF 25,W00D2: BTFSS 03.000D3: GOTO 0DD00D4: BSF 03.500D5: BCF 05.100D6: BCF 03.500D7: BCF 05.100D8: BSF 03.500D9: BCF 05.000DA: BCF 03.500DB: BSF 05.000DC: GOTO 0E500DD: BSF 03.500DE: BCF 05.000DF: BCF 03.500E0: BCF 05.000E1: BSF 03.500E2: BCF 05.100E3: BCF 03.500E4: BCF 05.1.................... }........................................ if(Lmotor==0) STOPL;00E5: MOVF 25,F00E6: BTFSS 03.200E7: GOTO 0EF00E8: MOVF 26,F00E9: BTFSS 03.200EA: GOTO 0EF00EB: BSF 03.500EC: BCF 05.000ED: BCF 03.500EE: BCF 05.000EF: BSF 03.500F0: BCF 05.100F1: BCF 03.500F2: BCF 05.1........................................ if(Lmotor<0)00F3: BTFSS 26.700F4: GOTO 125.................... {.................... GO(L, B, abs(Lmotor));00F5: MOVF 01,W00F6: MOVWF 4000F7: MOVF 26,W00F8: MOVWF 7A00F9: MOVF 25,W00FA: BTFSS 26.700FB: GOTO 10500FC: MOVF 25,W00FD: SUBLW 0000FE: MOVWF 7700FF: CLRF 7A0100: MOVF 26,W0101: BTFSS 03.00102: INCFSZ 26,W0103: SUBWF 7A,F0104: MOVF 77,W0105: MOVWF 780106: BTFSS 40.70107: GOTO 10B0108: BTFSS 7A.70109: GOTO 114010A: GOTO 10D010B: BTFSC 7A.7010C: GOTO 11D010D: MOVF 7A,F010E: BTFSS 03.2010F: GOTO 1140110: MOVF 40,W0111: SUBWF 78,W0112: BTFSS 03.00113: GOTO 11D0114: BSF 03.50115: BCF 05.00116: BCF 03.50117: BCF 05.00118: BSF 03.50119: BCF 05.1011A: BCF 03.5011B: BSF 05.1011C: GOTO 125011D: BSF 03.5011E: BCF 05.0011F: BCF 03.50120: BCF 05.00121: BSF 03.50122: BCF 05.10123: BCF 03.50124: BCF 05.1.................... }.................... }0125: MOVLW 550126: MOVWF 350127: MOVLW 000128: MOVWF 360129: BCF 0A.3012A: GOTO 236012B: RETLW 00.................... ////////////////////////////////////////////////////////////////////////////////.................... #task (rate=4ms, max=500us, queue=0).................... void rizeni().................... {.................... rizeni:........................................ sensors = spi_read(0); // cteni senzoru na caru012C: MOVF 13,W012D: CLRF 13012E: BSF 03.5012F: BTFSC 14.00130: GOTO 1330131: BCF 03.50132: GOTO 12E0133: BCF 03.50134: MOVF 13,W0135: MOVWF 21.................... output_high(STROBE);0136: BSF 03.50137: BCF 06.00138: BCF 03.50139: BSF 06.0.................... output_low(STROBE);013A: BSF 03.5013B: BCF 06.0013C: BCF 03.5013D: BCF 06.0........................................ if(bit_test(sensors,0)) //*......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu013E: BTFSS 21.0013F: GOTO 148.................... {.................... uhel=LMAX;0140: MOVLW BE0141: MOVWF 24.................... Lmotor=0;Rmotor=127;0142: CLRF 260143: CLRF 250144: CLRF 280145: MOVLW 7F0146: MOVWF 27.................... goto rizeni;0147: GOTO 12C.................... }.................... if(bit_test(sensors,6)) //......*//0148: BTFSS 21.60149: GOTO 152.................... {.................... uhel=RMAX;014A: MOVLW 3C014B: MOVWF 24.................... Rmotor=0;Lmotor=127;014C: CLRF 28014D: CLRF 27014E: CLRF 26014F: MOVLW 7F0150: MOVWF 25.................... goto rizeni;0151: GOTO 12C.................... }.................... if(bit_test(sensors,1)) //.*.....//0152: BTFSS 21.10153: GOTO 15D.................... {.................... uhel=STRED+30;0154: MOVLW 9E0155: MOVWF 24.................... Lmotor=70;Rmotor=127;0156: CLRF 260157: MOVLW 460158: MOVWF 250159: CLRF 28015A: MOVLW 7F015B: MOVWF 27.................... goto rizeni;015C: GOTO 12C.................... }.................... if(bit_test(sensors,5)) //.....*.//015D: BTFSS 21.5015E: GOTO 168.................... {.................... uhel=STRED-30;015F: MOVLW 620160: MOVWF 24.................... Rmotor=70;Lmotor=127;0161: CLRF 280162: MOVLW 460163: MOVWF 270164: CLRF 260165: MOVLW 7F0166: MOVWF 25.................... goto rizeni;0167: GOTO 12C.................... }.................... if(bit_test(sensors,2)) //..*....//0168: BTFSS 21.20169: GOTO 173.................... {.................... uhel=STRED+20;016A: MOVLW 94016B: MOVWF 24.................... Lmotor=90;Rmotor=127;016C: CLRF 26016D: MOVLW 5A016E: MOVWF 25016F: CLRF 280170: MOVLW 7F0171: MOVWF 27.................... goto rizeni;0172: GOTO 12C.................... }.................... if(bit_test(sensors,4)) //....*..//0173: BTFSS 21.40174: GOTO 17E.................... {.................... uhel=STRED-20;0175: MOVLW 6C0176: MOVWF 24.................... Rmotor=90;Lmotor=127;0177: CLRF 280178: MOVLW 5A0179: MOVWF 27017A: CLRF 26017B: MOVLW 7F017C: MOVWF 25.................... goto rizeni;017D: GOTO 12C.................... }.................... if(bit_test(sensors,3)) //...*...//017E: BTFSS 21.3017F: GOTO 188.................... {.................... uhel=STRED;0180: MOVLW 800181: MOVWF 24.................... Lmotor=100;Rmotor=100;0182: CLRF 260183: MOVLW 640184: MOVWF 250185: CLRF 280186: MOVWF 27.................... goto rizeni;0187: GOTO 12C.................... }........................................ /*STOPL;STOPR;.................... if(bit_test(sensors,7)).................... {........................................ }*/.................... }0188: MOVLW 2C0189: MOVWF 3C018A: MOVLW 01018B: MOVWF 3D018C: BCF 0A.3018D: GOTO 236018E: RETLW 00.................... ////////////////////////////////////////////////////////////////////////////////.................... void main().................... {018F: CLRF 040190: MOVLW 1F0191: ANDWF 03,F0192: MOVLW 700193: BSF 03.50194: MOVWF 0F0195: BCF 1F.40196: BCF 1F.50197: MOVF 1B,W0198: ANDLW 800199: MOVWF 1B019A: MOVLW 07019B: MOVWF 1C.................... setup_adc_ports(NO_ANALOGS);019C: BCF 1F.4019D: BCF 1F.5019E: MOVF 1B,W019F: ANDLW 8001A0: MOVWF 1B.................... setup_adc(ADC_CLOCK_INTERNAL);01A1: BCF 1F.601A2: BCF 03.501A3: BSF 1F.601A4: BSF 1F.701A5: BSF 03.501A6: BCF 1F.701A7: BCF 03.501A8: BSF 1F.0.................... setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4);01A9: BCF 14.501AA: BSF 03.501AB: BCF 06.201AC: BSF 06.101AD: BCF 06.401AE: MOVLW 3001AF: BCF 03.501B0: MOVWF 1401B1: MOVLW 0001B2: BSF 03.501B3: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);01B4: MOVF 01,W01B5: ANDLW C701B6: IORLW 0801B7: MOVWF 01.................... setup_timer_1(T1_DISABLED);01B8: BCF 03.501B9: CLRF 10.................... setup_oscillator(OSC_8MHZ|OSC_INTRC);01BA: MOVLW 7201BB: BSF 03.501BC: MOVWF 0F.................... // set_pwm1_duty(0); // Spust PWM, ale zatim s trvalou 0 na vystupu.................... // setup_ccp1(CCP_PWM);.................... // setup_timer_2(T2_DIV_BY_16,200,1); // perioda.................... // setup_timer_2(T2_DIV_BY_4,255,10); // Casovac pro regulaci........................................ STOPR; STOPL;01BD: BCF 05.601BE: BCF 03.501BF: BCF 05.601C0: BSF 03.501C1: BCF 05.701C2: BCF 03.501C3: BCF 05.701C4: BSF 03.501C5: BCF 05.001C6: BCF 03.501C7: BCF 05.001C8: BSF 03.501C9: BCF 05.101CA: BCF 03.501CB: BCF 05.1.................... uhel=STRED;01CC: MOVLW 8001CD: MOVWF 24.................... // diagnostika();.................... Lmotor=0;01CE: CLRF 2601CF: CLRF 25.................... Rmotor=0;01D0: CLRF 2801D1: CLRF 27.................... rtos_run();01D2: CLRF 2901D3: CLRF 2B01D4: MOVLW 0801D5: MOVWF 2A01D6: CLRF 2D01D7: MOVLW 0101D8: MOVWF 2C01D9: MOVLW 3801DA: MOVWF 2E01DB: MOVLW 0001DC: MOVWF 2F01DD: CLRF 3001DE: CLRF 3201DF: MOVLW 0101E0: MOVWF 3101E1: CLRF 3401E2: CLRF 3301E3: MOVLW 5501E4: MOVWF 3501E5: MOVLW 0001E6: MOVWF 3601E7: CLRF 3701E8: CLRF 3901E9: MOVLW 0201EA: MOVWF 3801EB: CLRF 3B01EC: CLRF 3A01ED: MOVLW 2C01EE: MOVWF 3C01EF: MOVLW 0101F0: MOVWF 3D01F1: CLRF 2001F2: MOVLW 0001F3: MOVWF 7801F4: IORLW 0601F5: MOVWF 1201F6: MOVLW FA01F7: BSF 03.501F8: MOVWF 1201F9: BCF 03.501FA: BCF 0C.101FB: MOVLW 0001FC: MOVWF 7801FD: IORLW 0601FE: MOVWF 1201FF: MOVLW FA0200: BSF 03.50201: MOVWF 120202: BCF 03.50203: BCF 0C.10204: BCF 03.00205: RLF 20,W0206: MOVWF 770207: CALL 0040208: MOVWF 790209: MOVLW 01020A: ADDWF 77,W020B: CALL 004020C: MOVWF 7A020D: MOVF 79,W020E: MOVWF 04020F: MOVF 00,W0210: MOVWF 790211: INCF 04,F0212: MOVF 00,W0213: MOVWF 770214: INCF 04,F0215: MOVF 00,W0216: MOVWF 780217: INCF 04,F0218: INCF 00,F0219: MOVF 00,W021A: MOVWF 7A021B: BTFSS 03.2021C: GOTO 220021D: INCF 04,F021E: INCF 00,F021F: DECF 04,F0220: INCF 04,F0221: MOVF 00,W0222: SUBWF 78,W0223: BTFSS 03.20224: GOTO 2380225: MOVF 77,W0226: SUBWF 7A,W0227: BTFSS 03.20228: GOTO 2380229: DECF 04,F022A: CLRF 00022B: INCF 04,F022C: CLRF 00022D: INCF 04,F022E: BTFSC 79.7022F: GOTO 2380230: INCF 04,F0231: MOVF 00,W0232: MOVWF 0A0233: DECF 04,F0234: MOVF 00,W0235: MOVWF 020236: BCF 03.50237: BCF 03.60238: INCF 20,F0239: MOVLW 03023A: SUBWF 20,W023B: BTFSS 03.2023C: GOTO 204023D: CLRF 20023E: BTFSS 0C.1023F: GOTO 2420240: BSF 03.50241: GOTO 2020242: GOTO 23E0243: MOVLW FF0244: MOVWF 20........................................ }0245: SLEEPConfiguration Fuses:Word 1: 3FF8 NOWDT NOPUT MCLR BROWNOUT LVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT INTRC_IOWord 2: 3FFF FCMEN IESO