Rev 10 | Blame | Last modification | View Log | Download
CCS PCM C Compiler, Version 3.245, 27853 17-IX-06 22:12Filename: D:\KAKL\roboti\solarni\2006\scamnum\menic.lstROM used: 836 words (20%)Largest free fragment is 2048RAM used: 87 (50%) at main() level94 (54%) worst caseStack: 4 worst case (3 in main + 1 for interrupts)*0000: MOVLW 000001: MOVWF 0A0002: GOTO 1C30003: 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.3001F: GOTO 0220020: BTFSC 0C.30021: GOTO 0350022: MOVF 22,W0023: MOVWF 040024: MOVF 23,W0025: MOVWF 770026: MOVF 24,W0027: MOVWF 780028: MOVF 25,W0029: MOVWF 79002A: MOVF 26,W002B: MOVWF 7A002C: MOVF 27,W002D: MOVWF 7B002E: MOVF 28,W002F: MOVWF 0A0030: SWAPF 21,W0031: MOVWF 030032: SWAPF 7F,F0033: SWAPF 7F,W0034: RETFIE0035: BCF 0A.30036: GOTO 037.................... // *************************************.................... // * Scamnum Specularis ** 20. 9. 2006 *.................... // *************************************........................................ #include ".\menic.h".................... #include <16F88.h>.................... //////// Standard Header file for the PIC16F88 device ////////////////.................... #device PIC16F88.................... #list............................................................ #device adc=8........................................ #fuses NOWDT,INTRC_IO, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, \.................... NOWRT, DEBUG, NOPROTECT, NOFCMEN, NOIESO, CCPB3........................................ #use delay(clock=3900000,RESTART_WDT)*003C: MOVLW 71003D: MOVWF 04003E: MOVF 00,W003F: BTFSC 03.20040: GOTO 0510041: MOVLW 010042: MOVWF 780043: MOVLW BF0044: MOVWF 770045: CLRWDT0046: DECFSZ 77,F0047: GOTO 0450048: DECFSZ 78,F0049: GOTO 043004A: MOVLW 42004B: MOVWF 77004C: DECFSZ 77,F004D: GOTO 04C004E: CLRWDT004F: DECFSZ 00,F0050: GOTO 0410051: RETLW 00*01B0: MOVLW 1201B1: SUBWF 72,F01B2: BTFSS 03.001B3: GOTO 1C201B4: MOVLW 7201B5: MOVWF 0401B6: MOVLW FC01B7: ANDWF 00,F01B8: BCF 03.001B9: RRF 00,F01BA: RRF 00,F01BB: MOVF 00,W01BC: BTFSC 03.201BD: GOTO 1C201BE: GOTO 1C001BF: CLRWDT01C0: DECFSZ 00,F01C1: GOTO 1BF01C2: RETLW 00................................................................................ #define TXo PIN_B5 // To the transmitter modulator.................... #include ".\AX25.c" // Podprogram pro prenos telemetrie.................... //#define PTT PIN_A2 // PTT control.................... //#define TXo PIN_C0 // To the transmitter modulator.................... //#define PERIODAH delay_us(218) // Halfperiod H 222;78/1200 500;430/500.................... //#define TAILH delay_us(74).................... //#define PERIODAL delay_us(408) // Halfperiod L 412;345/1200 1000;880/500.................... //#define TAILL delay_us(341).................... #define PERIODAH delay_us(222) // Halfperiod H 222;78/1200 500;430/500.................... #define TAILH delay_us(78).................... #define PERIODAL delay_us(412) // Halfperiod L 412;345/1200 1000;880/500.................... #define TAILL delay_us(345).................... #byte STATUS = 3 // CPUs status register........................................ byte SendData[16] = {'A'<<1, 'L'<<1, 'L'<<1, ' '<<1, ' '<<1, ' '<<1, 0x60,.................... 'C'<<1, 'Z'<<1, '0'<<1, 'R'<<1, 'R'<<1, 'R'<<1, 0x61,.................... 0x03, 0xF0};*01CE: MOVLW 8201CF: BCF 03.501D0: MOVWF 2901D1: MOVLW 9801D2: MOVWF 2A01D3: MOVWF 2B01D4: MOVLW 4001D5: MOVWF 2C01D6: MOVWF 2D01D7: MOVWF 2E01D8: MOVLW 6001D9: MOVWF 2F01DA: MOVLW 8601DB: MOVWF 3001DC: MOVLW B401DD: MOVWF 3101DE: MOVLW 6001DF: MOVWF 3201E0: MOVLW A401E1: MOVWF 3301E2: MOVWF 3401E3: MOVWF 3501E4: MOVLW 6101E5: MOVWF 3601E6: MOVLW 0301E7: MOVWF 3701E8: MOVLW F001E9: MOVWF 38........................................ boolean bit;.................... int fcslo, fcshi; // variabloes for calculating FCS (CRC).................... int stuff; // stuff counter for extra 0.................... int flag_flag; // if it is sending flag (7E).................... int fcs_flag; // if it is sending Frame Check Sequence.................... int i; // for for........................................ void flipout() //flips the state of output pin a_1.................... {.................... stuff = 0; //since this is a 0, reset the stuff counter*00DD: CLRF 3C.................... if (bit)00DE: BTFSS 39.000DF: GOTO 0E2.................... {.................... bit=FALSE; //if the state of the pin was low, make it high.00E0: BCF 39.0.................... }.................... else00E1: GOTO 0E3.................... {.................... bit=TRUE; //if the state of the pin was high make it low00E2: BSF 39.0.................... }.................... }00E3: RETLW 00........................................ void fcsbit(byte tbyte).................... {.................... #asm.................... BCF STATUS,0*013F: BCF 03.0.................... RRF fcshi,F // rotates the entire 16 bits0140: RRF 3B,F.................... RRF fcslo,F // to the right0141: RRF 3A,F.................... #endasm.................... if (((STATUS & 0x01)^(tbyte)) ==0x01)0142: MOVF 03,W0143: ANDLW 010144: XORWF 75,W0145: SUBLW 010146: BTFSS 03.20147: GOTO 14C.................... {.................... fcshi = fcshi^0x84;0148: MOVLW 840149: XORWF 3B,F.................... fcslo = fcslo^0x08;014A: MOVLW 08014B: XORWF 3A,F.................... }.................... }........................................ void SendBit ().................... {.................... if (bit)*00E4: BTFSS 39.000E5: GOTO 110.................... {.................... output_low(TXo);00E6: BSF 03.500E7: BCF 06.500E8: BCF 03.500E9: BCF 06.5.................... PERIODAH;00EA: CLRWDT00EB: MOVLW 4700EC: MOVWF 7700ED: DECFSZ 77,F00EE: GOTO 0ED00EF: NOP.................... output_high(TXo);00F0: BSF 03.500F1: BCF 06.500F2: BCF 03.500F3: BSF 06.5.................... PERIODAH;00F4: CLRWDT00F5: MOVLW 4700F6: MOVWF 7700F7: DECFSZ 77,F00F8: GOTO 0F700F9: NOP.................... output_low(TXo);00FA: BSF 03.500FB: BCF 06.500FC: BCF 03.500FD: BCF 06.5.................... PERIODAH;00FE: CLRWDT00FF: MOVLW 470100: MOVWF 770101: DECFSZ 77,F0102: GOTO 1010103: NOP.................... output_high(TXo);0104: BSF 03.50105: BCF 06.50106: BCF 03.50107: BSF 06.5.................... TAILH;0108: CLRWDT0109: MOVLW 18010A: MOVWF 77010B: DECFSZ 77,F010C: GOTO 10B010D: NOP010E: NOP.................... }.................... else010F: GOTO 123.................... {.................... output_low(TXo);0110: BSF 03.50111: BCF 06.50112: BCF 03.50113: BCF 06.5.................... PERIODAL;0114: CLRWDT0115: MOVLW 850116: MOVWF 770117: DECFSZ 77,F0118: GOTO 117.................... output_high(TXo);0119: BSF 03.5011A: BCF 06.5011B: BCF 03.5011C: BSF 06.5.................... TAILL;011D: CLRWDT011E: MOVLW 6F011F: MOVWF 770120: DECFSZ 77,F0121: GOTO 1200122: NOP.................... };.................... }0123: RETLW 00........................................ void SendByte (byte inbyte).................... {.................... int k, bt;........................................ for (k=0;k<8;k++) //do the following for each of the 8 bits in the byte0124: CLRF 730125: MOVF 73,W0126: SUBLW 070127: BTFSS 03.00128: GOTO 16C.................... {.................... bt = inbyte & 0x01; //strip off the rightmost bit of the byte to be sent (inbyte)0129: MOVF 72,W012A: ANDLW 01012B: MOVWF 74.................... if ((fcs_flag == FALSE) & (flag_flag == FALSE)) fcsbit(bt); //do FCS calc, but only if this012C: MOVF 3E,F012D: BTFSC 03.2012E: GOTO 131012F: MOVLW 000130: GOTO 1320131: MOVLW 010132: MOVWF 750133: MOVF 3D,F0134: BTFSC 03.20135: GOTO 1380136: MOVLW 000137: GOTO 1390138: MOVLW 010139: ANDWF 75,W013A: XORLW 00013B: BTFSC 03.2013C: GOTO 14C013D: MOVF 74,W013E: MOVWF 75.................... //is not a flag or fcs byte.................... if (bt == 0)*014C: MOVF 74,F014D: BTFSS 03.2014E: GOTO 151.................... {.................... flipout();014F: CALL 0DD.................... } // if this bit is a zero, flip the output state.................... else0150: GOTO 167.................... { //otherwise if it is a 1, do the following:.................... if (flag_flag == FALSE) stuff++; //increment the count of consequtive 1's0151: MOVF 3D,F0152: BTFSC 03.20153: INCF 3C,F.................... if ((flag_flag == FALSE) & (stuff == 5))0154: MOVF 3D,F0155: BTFSC 03.20156: GOTO 1590157: MOVLW 000158: GOTO 15A0159: MOVLW 01015A: MOVWF 75015B: MOVF 3C,W015C: SUBLW 05015D: BTFSC 03.2015E: GOTO 161015F: MOVLW 000160: GOTO 1620161: MOVLW 010162: ANDWF 75,W0163: BTFSC 03.20164: GOTO 167.................... { //stuff an extra 0, if 5 1's in a row.................... SendBit();0165: CALL 0E4.................... flipout(); //flip the output state to stuff a 00166: CALL 0DD.................... }//end of if.................... }//end of else.................... // delay_us(850); //introduces a delay that creates 1200 baud.................... SendBit();0167: CALL 0E4.................... inbyte = inbyte>>1; //go to the next bit in the byte0168: BCF 03.00169: RRF 72,F.................... }//end of for016A: INCF 73,F016B: GOTO 125.................... }//end of SendByte016C: RETLW 00........................................ void SendPacket(char *data).................... {.................... bit=FALSE;016D: BCF 39.0........................................ fcslo=fcshi=0xFF; //The 2 FCS Bytes are initialized to FF016E: MOVLW FF016F: MOVWF 3B0170: MOVWF 3A.................... stuff = 0; //The variable stuff counts the number of 1's in a row. When it gets to 50171: CLRF 3C.................... // it is time to stuff a 0......................................... // output_low(PTT); // Blinking LED.................... // delay_ms(1000);.................... // output_high(PTT);........................................ flag_flag = TRUE; //The variable flag is true if you are transmitted flags (7E's) false otherwise.0172: MOVLW 010173: MOVWF 3D.................... fcs_flag = FALSE; //The variable fcsflag is true if you are transmitting FCS bytes, false otherwise.0174: CLRF 3E........................................ for(i=0; i<10; i++) SendByte(0x7E); //Sends flag bytes. Adjust length for txdelay0175: CLRF 3F0176: MOVF 3F,W0177: SUBLW 090178: BTFSS 03.00179: GOTO 17F017A: MOVLW 7E017B: MOVWF 72017C: CALL 124017D: INCF 3F,F017E: GOTO 176.................... //each flag takes approx 6.7 ms.................... flag_flag = FALSE; //done sending flags017F: CLRF 3D........................................ for(i=0; i<16; i++) SendByte(SendData[i]); //send the packet bytes0180: CLRF 3F0181: MOVF 3F,W0182: SUBLW 0F0183: BTFSS 03.00184: GOTO 18E0185: MOVLW 290186: ADDWF 3F,W0187: MOVWF 040188: MOVF 00,W0189: MOVWF 71018A: MOVWF 72018B: CALL 124018C: INCF 3F,F018D: GOTO 181........................................ for(i=0; 0 != *data; i++)018E: CLRF 3F018F: MOVF 70,W0190: MOVWF 040191: MOVF 00,W0192: BTFSC 03.20193: GOTO 19D.................... {.................... SendByte(*data); //send the packet bytes0194: MOVF 70,W0195: MOVWF 040196: MOVF 00,W0197: MOVWF 710198: MOVWF 720199: CALL 124.................... data++;019A: INCF 70,F.................... };019B: INCF 3F,F019C: GOTO 18F........................................ fcs_flag = TRUE; //about to send the FCS bytes019D: MOVLW 01019E: MOVWF 3E.................... fcslo =fcslo^0xff; //must XOR them with FF before sending019F: MOVLW FF01A0: XORWF 3A,F.................... fcshi = fcshi^0xff;01A1: XORWF 3B,F.................... SendByte(fcslo); //send the low byte of fcs01A2: MOVF 3A,W01A3: MOVWF 7201A4: CALL 124.................... SendByte(fcshi); //send the high byte of fcs01A5: MOVF 3B,W01A6: MOVWF 7201A7: CALL 124.................... fcs_flag = FALSE; //done sending FCS01A8: CLRF 3E.................... flag_flag = TRUE; //about to send flags01A9: MOVLW 0101AA: MOVWF 3D.................... SendByte(0x7e); // Send a flag to end packet01AB: MOVLW 7E01AC: MOVWF 7201AD: CALL 124.................... }01AE: BCF 0A.301AF: GOTO 2FD (RETURN).................................................................................................... char AXstring[40]; // Buffer pro prenos telemetrie........................................ #define REFSTART 95 // Hodnota odpovidajici 1,2V pri nezatizenych clancich.................... #define DUTY1 2 // Delka sepnuti PWM v us pro sero.................... #define DUTY2 19 // Delka sepnuti PWM v us pro jednu zarovku 500W........................................ // Tabulka hodnot prevodniku pro ruzna napajeci napeti.................... // 80 3,99V.................... // 90 3,54V.................... // 100 3,20V.................... // 105 3,04V.................... // 107 2,99V.................... // 110 2,91v.................... // 200 1,61V........................................ #define PIEZO PIN_A6 // Jeden pol piezo reproduktoru.................... #define LED PIN_A7 // LED / druhy pol piezo reproduktoru.................... #define MENIC PIN_B3 // Spinani tranzistoru menice.................... #define REFPWR PIN_B1 // Napajeni zdroje referencniho napeti.................... #define MOTOR PIN_B2 // Spinani tranzistoru motoru.................... #define SW1 PIN_B6 // DIPswitch 1.................... #define SW2 PIN_B7 // DIPswitch 2.................... #define NAPETI 4 // Cislo kanalu DA prevodniku pro mereni napeti.................... #define PWM 0 // Cislo kanalu DA prevodniku pro nastaveni PWM.................... #define ROZJEZD 1 // Cislo kanalu DA prevodniku pro nastaveni rozjezdu........................................ #byte SSPBUF = 0x13 // Adresy registru jednotky SSP.................... #byte SSPCON1 = 0x14.................... #byte SSPSTAT = 0x94........................................ // Vzorky pro generovani PWM pomoci SSP.................... unsigned int8 const Pattern[8] = {0x02,0x06,0x0e,0x1e,0x3e,0x7e,0xfe,0xff};.................... unsigned int8 MotorPattern;........................................ #INT_SSP.................... void IntSSP().................... {.................... SSPBUF=MotorPattern; // znovu vysli stejnou hodnotu*0037: MOVF 68,W0038: MOVWF 13.................... }....................0039: BCF 0C.3003A: BCF 0A.3003B: GOTO 022.................... void pip() // pipnuti a bliknuti.................... {.................... int1 beep;.................... int i;........................................ for(i=0; i<250; i++)*005F: CLRF 710060: MOVF 71,W0061: SUBLW F90062: BTFSS 03.00063: GOTO 081.................... {.................... output_bit(PIEZO, beep);0064: BTFSC 70.00065: GOTO 0680066: BCF 05.60067: GOTO 0690068: BSF 05.60069: BSF 03.5006A: BCF 05.6.................... beep=~beep;006B: MOVLW 01006C: XORWF 70,F.................... output_bit(LED, beep);006D: BTFSC 70.0006E: GOTO 073006F: BCF 03.50070: BCF 05.70071: GOTO 0750072: BSF 03.50073: BCF 03.50074: BSF 05.70075: BSF 03.50076: BCF 05.7.................... delay_us(100);0077: CLRWDT0078: MOVLW 1F0079: MOVWF 77007A: DECFSZ 77,F007B: GOTO 07A007C: NOP007D: NOP.................... };007E: INCF 71,F007F: BCF 03.50080: GOTO 060.................... output_high(PIEZO);0081: BSF 03.50082: BCF 05.60083: BCF 03.50084: BSF 05.6.................... output_high(LED);0085: BSF 03.50086: BCF 05.70087: BCF 03.50088: BSF 05.7.................... }0089: BCF 0A.3008A: GOTO 2B1 (RETURN)........................................ void cvak() // pouze cvaknuti piezoelementem bez bliknuti.................... {.................... output_bit(PIEZO,~input(PIEZO));*0052: BSF 03.50053: BSF 05.60054: BCF 03.50055: BTFSS 05.60056: GOTO 0590057: BCF 05.60058: GOTO 05A0059: BSF 05.6005A: BSF 03.5005B: BCF 05.6.................... }005C: BCF 03.5005D: BCF 0A.3005E: GOTO 263 (RETURN)........................................ void main().................... {*01C3: CLRF 0401C4: MOVLW 1F01C5: ANDWF 03,F01C6: BSF 03.501C7: BCF 1F.401C8: BCF 1F.501C9: MOVF 1B,W01CA: ANDLW 8001CB: MOVWF 1B01CC: MOVLW 0701CD: MOVWF 1C.................... int8 n;.................... int8 perioda;.................... int8 razeni;.................... int8 uclanku;.................... int16 ble;........................................ setup_timer_0(RTCC_INTERNAL);setup_wdt(WDT_1152MS);*01EB: BSF 03.501EC: MOVF 01,W01ED: ANDLW C001EE: MOVWF 0101EF: MOVLW 0E01F0: MOVWF 7701F1: MOVLW 0701F2: BCF 03.501F3: CLRF 0101F4: MOVLW 8101F5: MOVWF 0401F6: MOVF 00,W01F7: ANDLW F001F8: IORLW 0701F9: MOVWF 0001FA: CLRWDT01FB: MOVF 00,W01FC: ANDLW F701FD: BTFSC 77.301FE: ANDLW F001FF: IORWF 77,W0200: MOVWF 00.................... setup_timer_1(T1_DISABLED);0201: CLRF 10.................... setup_adc_ports(ADC_CLOCK_INTERNAL|sAN0|sAN1|sAN4|VSS_VDD);0202: BSF 03.50203: BCF 1F.40204: BCF 1F.50205: MOVF 1B,W0206: ANDLW 800207: IORLW D30208: MOVWF 1B.................... setup_adc(ADC_CLOCK_INTERNAL);0209: BCF 1F.6020A: BCF 03.5020B: BSF 1F.6020C: BSF 1F.7020D: BSF 03.5020E: BCF 1F.7020F: BCF 03.50210: BSF 1F.0.................... setup_spi(FALSE);0211: BCF 14.50212: BSF 03.50213: BCF 06.20214: BSF 06.10215: BCF 06.40216: MOVLW 000217: BCF 03.50218: MOVWF 140219: BSF 03.5021A: MOVWF 14.................... setup_comparator(NC_NC_NC_NC);021B: MOVLW 07021C: MOVWF 1C021D: MOVF 05,W021E: CLRWDT021F: MOVLW 020220: MOVWF 770221: DECFSZ 77,F0222: GOTO 2210223: NOP0224: MOVF 1C,W0225: BCF 03.50226: BCF 0D.6.................... setup_vref(FALSE);0227: BSF 03.50228: CLRF 1D........................................ output_low(MENIC); // Vsechno zastav0229: BCF 06.3022A: BCF 03.5022B: BCF 06.3.................... output_low(MOTOR);022C: BSF 03.5022D: BCF 06.2022E: BCF 03.5022F: BCF 06.2.................... output_low(REFPWR);0230: BSF 03.50231: BCF 06.10232: BCF 03.50233: BCF 06.1.................... output_high(LED);0234: BSF 03.50235: BCF 05.70236: BCF 03.50237: BSF 05.7.................... output_high(PIEZO);0238: BSF 03.50239: BCF 05.6023A: BCF 03.5023B: BSF 05.6........................................ set_adc_channel(NAPETI); // Vyber AD kanal pro pomerne mereni napeti023C: MOVLW 20023D: MOVWF 78023E: MOVF 1F,W023F: ANDLW C70240: IORWF 78,W0241: MOVWF 1F.................... set_pwm1_duty(0); // Spust PWM, ale zatim s trvalou 0 na vystupu0242: CLRF 15.................... setup_ccp1(CCP_PWM);0243: BSF 03.50244: BCF 06.30245: BCF 03.50246: BCF 06.30247: MOVLW 0C0248: MOVWF 17.................... setup_timer_2(T2_DIV_BY_1,100,1); // perioda0249: MOVLW 00024A: MOVWF 78024B: IORLW 04024C: MOVWF 12024D: MOVLW 64024E: BSF 03.5024F: MOVWF 12........................................ setup_oscillator(OSC_4MHZ|OSC_INTRC); // rozjed PIC (zvysi se odber)0250: MOVLW 620251: MOVWF 0F........................................ // jsme v depu?.................... set_pwm1_duty(DUTY1); // PWM pro zatizeni clanku pri malem osvetleni0252: MOVLW 020253: BCF 03.50254: MOVWF 15.................... n=0;0255: CLRF 6A.................... do.................... {.................... output_low(REFPWR); // Vypni napajeni napetove reference, aby se setrilo0256: BSF 03.50257: BCF 06.10258: BCF 03.50259: BCF 06.1.................... delay_ms(100);025A: MOVLW 64025B: MOVWF 71025C: CALL 03C.................... if (4==n++) {cvak(); n=0;}; // Kazdy 4. pruchod cvakni025D: MOVF 6A,W025E: INCF 6A,F025F: SUBLW 040260: BTFSS 03.20261: GOTO 2640262: GOTO 0520263: CLRF 6A.................... output_high(REFPWR); // Zapni napajeni napetove reference0264: BSF 03.50265: BCF 06.10266: BCF 03.50267: BSF 06.1.................... delay_ms(1); // Pockej na ustaleni napeti0268: MOVLW 010269: MOVWF 71026A: CALL 03C.................... } while (read_adc()>REFSTART); // Odkryl starter clanky?026B: BSF 1F.2026C: BTFSC 1F.2026D: GOTO 26C026E: MOVF 1E,W026F: SUBLW 5F0270: BTFSS 03.00271: GOTO 256.................... output_low(REFPWR); // Vypni napajeni napetove reference, aby se setrilo0272: BSF 03.50273: BCF 06.10274: BCF 03.50275: BCF 06.1........................................ // port_b_pullups(TRUE); // Zapni pullupy, aby slo cist DIPswitch.................... // do.................... // {.................... // Precti trimry.................... set_adc_channel(PWM); // Zjisteni nastaveni PWM0276: MOVLW 000277: MOVWF 780278: MOVF 1F,W0279: ANDLW C7027A: IORWF 78,W027B: MOVWF 1F.................... delay_us(100); // Pockej na prepnuti kanalu A/D prevodniku027C: CLRWDT027D: MOVLW 1F027E: MOVWF 77027F: DECFSZ 77,F0280: GOTO 27F0281: NOP0282: NOP.................... perioda=(read_adc()>>2)+40; // rozsah: 40 az 1030283: BSF 1F.20284: BTFSC 1F.20285: GOTO 2840286: MOVF 1E,W0287: MOVWF 770288: RRF 77,F0289: RRF 77,F028A: MOVLW 3F028B: ANDWF 77,F028C: MOVF 77,W028D: ADDLW 28028E: MOVWF 6B........................................ set_adc_channel(ROZJEZD); // Zjisteni nastaveni rozjezdu028F: MOVLW 080290: MOVWF 780291: MOVF 1F,W0292: ANDLW C70293: IORWF 78,W0294: MOVWF 1F.................... delay_us(100); // Pockej na prepnuti kanalu A/D prevodniku0295: CLRWDT0296: MOVLW 1F0297: MOVWF 770298: DECFSZ 77,F0299: GOTO 298029A: NOP029B: NOP.................... razeni=read_adc()>>3; // rozsah: 0 az 31029C: BSF 1F.2029D: BTFSC 1F.2029E: GOTO 29D029F: RRF 1E,W02A0: MOVWF 6C02A1: RRF 6C,F02A2: RRF 6C,F02A3: MOVLW 1F02A4: ANDWF 6C,F........................................ // Rozjeti menice.................... set_pwm1_duty(0); // Zastav PWM, aby slo nastavit jinou frekvenci02A5: CLRF 15.................... setup_timer_2(T2_DIV_BY_1,perioda,1); // perioda02A6: MOVLW 0002A7: MOVWF 7802A8: IORLW 0402A9: MOVWF 1202AA: MOVF 6B,W02AB: BSF 03.502AC: MOVWF 12.................... set_pwm1_duty(DUTY2); // PWM pro zatizeni clanku pri jedne 500W zarovce02AD: MOVLW 1302AE: BCF 03.502AF: MOVWF 15........................................ pip(); // potvrzeni odstartovani / servisni mod02B0: GOTO 05F.................... delay_ms(500);02B1: MOVLW 0202B2: MOVWF 7002B3: MOVLW FA02B4: MOVWF 7102B5: CALL 03C02B6: DECFSZ 70,F02B7: GOTO 2B3........................................ // } while (input(SW1)); // Je zapnut servisni mod? SW1(OFF)=ANO.................... // port_b_pullups(FALSE); // Vypni pullupy, aby se setrilo energii........................................ // zmereni napeti na clancich.................... output_high(REFPWR); // Prepni AD na mereni napeti clanku02B8: BSF 03.502B9: BCF 06.102BA: BCF 03.502BB: BSF 06.1.................... set_adc_channel(NAPETI); // Prepni Zmer napeti clanku02BC: MOVLW 2002BD: MOVWF 7802BE: MOVF 1F,W02BF: ANDLW C702C0: IORWF 78,W02C1: MOVWF 1F.................... delay_us(50); // Pockej na prepnuti kanalu A/D prevodniku02C2: CLRWDT02C3: MOVLW 0F02C4: MOVWF 7702C5: DECFSZ 77,F02C6: GOTO 2C502C7: NOP.................... uclanku=read_adc();02C8: BSF 1F.202C9: BTFSC 1F.202CA: GOTO 2C902CB: MOVF 1E,W02CC: MOVWF 6D.................... output_low(REFPWR); // odpoj odpor pro mereni napeti02CD: BSF 03.502CE: BCF 06.102CF: BCF 03.502D0: BCF 06.1........................................ // posli telemetrii.................... sprintf(AXstring,"p=%u r=%u u=%u", perioda, razeni, uclanku); // Convert DATA to String.*01EA: CLRF 69*02D1: MOVLW 4002D2: MOVWF 6902D3: MOVLW 7002D4: MOVWF 7202D5: CALL 08B02D6: MOVLW 3D02D7: MOVWF 7202D8: CALL 08B02D9: MOVF 6B,W02DA: MOVWF 7002DB: MOVLW 1B02DC: MOVWF 7102DD: CALL 0A802DE: MOVLW 2002DF: MOVWF 7202E0: CALL 08B02E1: MOVLW 7202E2: MOVWF 7202E3: CALL 08B02E4: MOVLW 3D02E5: MOVWF 7202E6: CALL 08B02E7: MOVF 6C,W02E8: MOVWF 7002E9: MOVLW 1B02EA: MOVWF 7102EB: CALL 0A802EC: MOVLW 2002ED: MOVWF 7202EE: CALL 08B02EF: MOVLW 7502F0: MOVWF 7202F1: CALL 08B02F2: MOVLW 3D02F3: MOVWF 7202F4: CALL 08B02F5: MOVF 6D,W02F6: MOVWF 7002F7: MOVLW 1B02F8: MOVWF 7102F9: CALL 0A8.................... SendPacket(&AXstring[0]);02FA: MOVLW 4002FB: MOVWF 7002FC: GOTO 16D........................................ delay_ms(14000); // Pockame do 14.5s02FD: MOVLW 3802FE: MOVWF 7002FF: MOVLW FA0300: MOVWF 710301: CALL 03C0302: DECFSZ 70,F0303: GOTO 2FF........................................ // rozjezd.................... for(ble=1;ble<=1000;ble++)0304: CLRF 6F0305: MOVLW 010306: MOVWF 6E0307: MOVF 6F,W0308: SUBLW 030309: BTFSS 03.0030A: GOTO 333030B: BTFSS 03.2030C: GOTO 311030D: MOVF 6E,W030E: SUBLW E8030F: BTFSS 03.00310: GOTO 333.................... {.................... for(n=0;n<=razeni;n++)0311: CLRF 6A0312: MOVF 6A,W0313: SUBWF 6C,W0314: BTFSS 03.00315: GOTO 32F.................... {.................... output_high(MOTOR);0316: BSF 03.50317: BCF 06.20318: BCF 03.50319: BSF 06.2.................... delay_us(ble);031A: MOVF 6E,W031B: MOVWF 72031C: CALL 1B0.................... output_low(MOTOR);031D: BSF 03.5031E: BCF 06.2031F: BCF 03.50320: BCF 06.2.................... delay_us(1000-ble);0321: MOVF 6E,W0322: SUBLW E80323: MOVWF 700324: MOVLW 030325: MOVWF 710326: MOVF 6F,W0327: BTFSS 03.00328: INCFSZ 6F,W0329: SUBWF 71,F032A: MOVF 70,W032B: MOVWF 72032C: CALL 1B0.................... }032D: INCF 6A,F032E: GOTO 312.................... }032F: INCF 6E,F0330: BTFSC 03.20331: INCF 6F,F0332: GOTO 307........................................ // jedem co to da.................... output_high(MOTOR);0333: BSF 03.50334: BCF 06.20335: BCF 03.50336: BSF 06.2........................................ delay_ms(1300); // Nemeli bysme jet dele nez 1,3s :-)0337: MOVLW 0A0338: MOVWF 700339: MOVLW 82033A: MOVWF 71033B: CALL 03C033C: DECFSZ 70,F033D: GOTO 339.................... output_low(MOTOR); // Zastav motor033E: BSF 03.5033F: BCF 06.20340: BCF 03.50341: BCF 06.2.................... // Menic je stale zapnut a zatezuje clanky........................................ while(TRUE); // Cekej, dokud se neztrati svetlo,0342: GOTO 342.................... // nebo prijde WatchDog........................................ }0343: SLEEPConfiguration Fuses:Word 1: 2738 NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT DEBUG CCPB3 NOPROTECT INTRC_IOWord 2: 3FFC NOFCMEN NOIESO