Blame | Last modification | View Log | Download
CCS PCM C Compiler, Version 3.245, 27853 20-IX-06 03:03
Filename: D:\KAKL\roboti\solarni\2006\scamnum\menic.lst
ROM used: 769 words (19%)
Largest free fragment is 2048
RAM used: 76 (43%) at main() level
82 (47%) worst case
Stack: 3 locations
*
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 189
0003: NOP
.................... // *************************************
.................... // * 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)
*
0004: MOVLW 66
0005: MOVWF 04
0006: MOVF 00,W
0007: BTFSC 03.2
0008: GOTO 019
0009: MOVLW 01
000A: MOVWF 78
000B: MOVLW BF
000C: MOVWF 77
000D: CLRWDT
000E: DECFSZ 77,F
000F: GOTO 00D
0010: DECFSZ 78,F
0011: GOTO 00B
0012: MOVLW 42
0013: MOVWF 77
0014: DECFSZ 77,F
0015: GOTO 014
0016: CLRWDT
0017: DECFSZ 00,F
0018: GOTO 009
0019: RETLW 00
*
0176: MOVLW 12
0177: SUBWF 66,F
0178: BTFSS 03.0
0179: GOTO 188
017A: MOVLW 66
017B: MOVWF 04
017C: MOVLW FC
017D: ANDWF 00,F
017E: BCF 03.0
017F: RRF 00,F
0180: RRF 00,F
0181: MOVF 00,W
0182: BTFSC 03.2
0183: GOTO 188
0184: GOTO 186
0185: CLRWDT
0186: DECFSZ 00,F
0187: GOTO 185
0188: 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};
*
0194: MOVLW 82
0195: BCF 03.5
0196: MOVWF 20
0197: MOVLW 98
0198: MOVWF 21
0199: MOVWF 22
019A: MOVLW 40
019B: MOVWF 23
019C: MOVWF 24
019D: MOVWF 25
019E: MOVLW 60
019F: MOVWF 26
01A0: MOVLW 86
01A1: MOVWF 27
01A2: MOVLW B4
01A3: MOVWF 28
01A4: MOVLW 60
01A5: MOVWF 29
01A6: MOVLW A4
01A7: MOVWF 2A
01A8: MOVWF 2B
01A9: MOVWF 2C
01AA: MOVLW 61
01AB: MOVWF 2D
01AC: MOVLW 03
01AD: MOVWF 2E
01AE: MOVLW F0
01AF: MOVWF 2F
....................
.................... 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
*
00A3: CLRF 33
.................... if (bit)
00A4: BTFSS 30.0
00A5: GOTO 0A8
.................... {
.................... bit=FALSE; //if the state of the pin was low, make it high.
00A6: BCF 30.0
.................... }
.................... else
00A7: GOTO 0A9
.................... {
.................... bit=TRUE; //if the state of the pin was high make it low
00A8: BSF 30.0
.................... }
.................... }
00A9: RETLW 00
....................
.................... void fcsbit(byte tbyte)
.................... {
.................... #asm
.................... BCF STATUS,0
*
0105: BCF 03.0
.................... RRF fcshi,F // rotates the entire 16 bits
0106: RRF 32,F
.................... RRF fcslo,F // to the right
0107: RRF 31,F
.................... #endasm
.................... if (((STATUS & 0x01)^(tbyte)) ==0x01)
0108: MOVF 03,W
0109: ANDLW 01
010A: XORWF 6A,W
010B: SUBLW 01
010C: BTFSS 03.2
010D: GOTO 112
.................... {
.................... fcshi = fcshi^0x84;
010E: MOVLW 84
010F: XORWF 32,F
.................... fcslo = fcslo^0x08;
0110: MOVLW 08
0111: XORWF 31,F
.................... }
.................... }
....................
.................... void SendBit ()
.................... {
.................... if (bit)
*
00AA: BTFSS 30.0
00AB: GOTO 0D6
.................... {
.................... output_low(TXo);
00AC: BSF 03.5
00AD: BCF 06.5
00AE: BCF 03.5
00AF: BCF 06.5
.................... PERIODAH;
00B0: CLRWDT
00B1: MOVLW 47
00B2: MOVWF 77
00B3: DECFSZ 77,F
00B4: GOTO 0B3
00B5: NOP
.................... output_high(TXo);
00B6: BSF 03.5
00B7: BCF 06.5
00B8: BCF 03.5
00B9: BSF 06.5
.................... PERIODAH;
00BA: CLRWDT
00BB: MOVLW 47
00BC: MOVWF 77
00BD: DECFSZ 77,F
00BE: GOTO 0BD
00BF: NOP
.................... output_low(TXo);
00C0: BSF 03.5
00C1: BCF 06.5
00C2: BCF 03.5
00C3: BCF 06.5
.................... PERIODAH;
00C4: CLRWDT
00C5: MOVLW 47
00C6: MOVWF 77
00C7: DECFSZ 77,F
00C8: GOTO 0C7
00C9: NOP
.................... output_high(TXo);
00CA: BSF 03.5
00CB: BCF 06.5
00CC: BCF 03.5
00CD: BSF 06.5
.................... TAILH;
00CE: CLRWDT
00CF: MOVLW 18
00D0: MOVWF 77
00D1: DECFSZ 77,F
00D2: GOTO 0D1
00D3: NOP
00D4: NOP
.................... }
.................... else
00D5: GOTO 0E9
.................... {
.................... output_low(TXo);
00D6: BSF 03.5
00D7: BCF 06.5
00D8: BCF 03.5
00D9: BCF 06.5
.................... PERIODAL;
00DA: CLRWDT
00DB: MOVLW 85
00DC: MOVWF 77
00DD: DECFSZ 77,F
00DE: GOTO 0DD
.................... output_high(TXo);
00DF: BSF 03.5
00E0: BCF 06.5
00E1: BCF 03.5
00E2: BSF 06.5
.................... TAILL;
00E3: CLRWDT
00E4: MOVLW 6F
00E5: MOVWF 77
00E6: DECFSZ 77,F
00E7: GOTO 0E6
00E8: NOP
.................... };
.................... }
00E9: 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 byte
00EA: CLRF 68
00EB: MOVF 68,W
00EC: SUBLW 07
00ED: BTFSS 03.0
00EE: GOTO 132
.................... {
.................... bt = inbyte & 0x01; //strip off the rightmost bit of the byte to be sent (inbyte)
00EF: MOVF 67,W
00F0: ANDLW 01
00F1: MOVWF 69
.................... if ((fcs_flag == FALSE) & (flag_flag == FALSE)) fcsbit(bt); //do FCS calc, but only if this
00F2: MOVF 35,F
00F3: BTFSC 03.2
00F4: GOTO 0F7
00F5: MOVLW 00
00F6: GOTO 0F8
00F7: MOVLW 01
00F8: MOVWF 6A
00F9: MOVF 34,F
00FA: BTFSC 03.2
00FB: GOTO 0FE
00FC: MOVLW 00
00FD: GOTO 0FF
00FE: MOVLW 01
00FF: ANDWF 6A,W
0100: XORLW 00
0101: BTFSC 03.2
0102: GOTO 112
0103: MOVF 69,W
0104: MOVWF 6A
.................... //is not a flag or fcs byte
.................... if (bt == 0)
*
0112: MOVF 69,F
0113: BTFSS 03.2
0114: GOTO 117
.................... {
.................... flipout();
0115: CALL 0A3
.................... } // if this bit is a zero, flip the output state
.................... else
0116: GOTO 12D
.................... { //otherwise if it is a 1, do the following:
.................... if (flag_flag == FALSE) stuff++; //increment the count of consequtive 1's
0117: MOVF 34,F
0118: BTFSC 03.2
0119: INCF 33,F
.................... if ((flag_flag == FALSE) & (stuff == 5))
011A: MOVF 34,F
011B: BTFSC 03.2
011C: GOTO 11F
011D: MOVLW 00
011E: GOTO 120
011F: MOVLW 01
0120: MOVWF 6A
0121: MOVF 33,W
0122: SUBLW 05
0123: BTFSC 03.2
0124: GOTO 127
0125: MOVLW 00
0126: GOTO 128
0127: MOVLW 01
0128: ANDWF 6A,W
0129: BTFSC 03.2
012A: GOTO 12D
.................... { //stuff an extra 0, if 5 1's in a row
.................... SendBit();
012B: CALL 0AA
.................... flipout(); //flip the output state to stuff a 0
012C: CALL 0A3
.................... }//end of if
.................... }//end of else
.................... // delay_us(850); //introduces a delay that creates 1200 baud
.................... SendBit();
012D: CALL 0AA
.................... inbyte = inbyte>>1; //go to the next bit in the byte
012E: BCF 03.0
012F: RRF 67,F
.................... }//end of for
0130: INCF 68,F
0131: GOTO 0EB
.................... }//end of SendByte
0132: RETLW 00
....................
.................... void SendPacket(char *data)
.................... {
.................... bit=FALSE;
0133: BCF 30.0
....................
.................... fcslo=fcshi=0xFF; //The 2 FCS Bytes are initialized to FF
0134: MOVLW FF
0135: MOVWF 32
0136: MOVWF 31
.................... stuff = 0; //The variable stuff counts the number of 1's in a row. When it gets to 5
0137: CLRF 33
.................... // 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.
0138: MOVLW 01
0139: MOVWF 34
.................... fcs_flag = FALSE; //The variable fcsflag is true if you are transmitting FCS bytes, false otherwise.
013A: CLRF 35
....................
.................... for(i=0; i<10; i++) SendByte(0x7E); //Sends flag bytes. Adjust length for txdelay
013B: CLRF 36
013C: MOVF 36,W
013D: SUBLW 09
013E: BTFSS 03.0
013F: GOTO 145
0140: MOVLW 7E
0141: MOVWF 67
0142: CALL 0EA
0143: INCF 36,F
0144: GOTO 13C
.................... //each flag takes approx 6.7 ms
.................... flag_flag = FALSE; //done sending flags
0145: CLRF 34
....................
.................... for(i=0; i<16; i++) SendByte(SendData[i]); //send the packet bytes
0146: CLRF 36
0147: MOVF 36,W
0148: SUBLW 0F
0149: BTFSS 03.0
014A: GOTO 154
014B: MOVLW 20
014C: ADDWF 36,W
014D: MOVWF 04
014E: MOVF 00,W
014F: MOVWF 66
0150: MOVWF 67
0151: CALL 0EA
0152: INCF 36,F
0153: GOTO 147
....................
.................... for(i=0; 0 != *data; i++)
0154: CLRF 36
0155: MOVF 65,W
0156: MOVWF 04
0157: MOVF 00,W
0158: BTFSC 03.2
0159: GOTO 163
.................... {
.................... SendByte(*data); //send the packet bytes
015A: MOVF 65,W
015B: MOVWF 04
015C: MOVF 00,W
015D: MOVWF 66
015E: MOVWF 67
015F: CALL 0EA
.................... data++;
0160: INCF 65,F
.................... };
0161: INCF 36,F
0162: GOTO 155
....................
.................... fcs_flag = TRUE; //about to send the FCS bytes
0163: MOVLW 01
0164: MOVWF 35
.................... fcslo =fcslo^0xff; //must XOR them with FF before sending
0165: MOVLW FF
0166: XORWF 31,F
.................... fcshi = fcshi^0xff;
0167: XORWF 32,F
.................... SendByte(fcslo); //send the low byte of fcs
0168: MOVF 31,W
0169: MOVWF 67
016A: CALL 0EA
.................... SendByte(fcshi); //send the high byte of fcs
016B: MOVF 32,W
016C: MOVWF 67
016D: CALL 0EA
.................... fcs_flag = FALSE; //done sending FCS
016E: CLRF 35
.................... flag_flag = TRUE; //about to send flags
016F: MOVLW 01
0170: MOVWF 34
.................... SendByte(0x7e); // Send a flag to end packet
0171: MOVLW 7E
0172: MOVWF 67
0173: CALL 0EA
.................... }
0174: BCF 0A.3
0175: GOTO 2C2 (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
....................
.................... void pip() // pipnuti a bliknuti
.................... {
.................... int1 beep;
.................... int i;
....................
.................... for(i=0; i<250; i++)
*
0027: CLRF 66
0028: MOVF 66,W
0029: SUBLW F9
002A: BTFSS 03.0
002B: GOTO 047
.................... {
.................... output_bit(PIEZO, beep);
002C: BTFSC 65.0
002D: GOTO 030
002E: BCF 05.6
002F: GOTO 031
0030: BSF 05.6
0031: BSF 03.5
0032: BCF 05.6
.................... beep=~beep;
0033: MOVLW 01
0034: BCF 03.5
0035: XORWF 65,F
.................... output_bit(LED, beep);
0036: BTFSC 65.0
0037: GOTO 03A
0038: BCF 05.7
0039: GOTO 03B
003A: BSF 05.7
003B: BSF 03.5
003C: BCF 05.7
.................... delay_us(100);
003D: CLRWDT
003E: MOVLW 1F
003F: MOVWF 77
0040: DECFSZ 77,F
0041: GOTO 040
0042: NOP
0043: NOP
.................... };
0044: BCF 03.5
0045: INCF 66,F
0046: GOTO 028
.................... output_high(PIEZO);
0047: BSF 03.5
0048: BCF 05.6
0049: BCF 03.5
004A: BSF 05.6
.................... output_high(LED);
004B: BSF 03.5
004C: BCF 05.7
004D: BCF 03.5
004E: BSF 05.7
.................... }
004F: BCF 0A.3
0050: GOTO 276 (RETURN)
....................
.................... void cvak() // pouze cvaknuti piezoelementem bez bliknuti
.................... {
.................... output_bit(PIEZO,~input(PIEZO));
*
001A: BSF 03.5
001B: BSF 05.6
001C: BCF 03.5
001D: BTFSS 05.6
001E: GOTO 021
001F: BCF 05.6
0020: GOTO 022
0021: BSF 05.6
0022: BSF 03.5
0023: BCF 05.6
.................... }
0024: BCF 03.5
0025: BCF 0A.3
0026: GOTO 229 (RETURN)
....................
.................... void main()
.................... {
*
0189: CLRF 04
018A: MOVLW 1F
018B: ANDWF 03,F
018C: BSF 03.5
018D: BCF 1F.4
018E: BCF 1F.5
018F: MOVF 1B,W
0190: ANDLW 80
0191: MOVWF 1B
0192: MOVLW 07
0193: MOVWF 1C
.................... int8 n;
.................... int8 perioda;
.................... int8 razeni;
.................... int8 uclanku;
.................... int8 ble;
....................
.................... setup_timer_0(RTCC_INTERNAL);setup_wdt(WDT_1152MS);
*
01B1: BSF 03.5
01B2: MOVF 01,W
01B3: ANDLW C0
01B4: MOVWF 01
01B5: MOVLW 0E
01B6: MOVWF 77
01B7: MOVLW 07
01B8: BCF 03.5
01B9: CLRF 01
01BA: MOVLW 81
01BB: MOVWF 04
01BC: MOVF 00,W
01BD: ANDLW F0
01BE: IORLW 07
01BF: MOVWF 00
01C0: CLRWDT
01C1: MOVF 00,W
01C2: ANDLW F7
01C3: BTFSC 77.3
01C4: ANDLW F0
01C5: IORWF 77,W
01C6: MOVWF 00
.................... setup_timer_1(T1_DISABLED);
01C7: CLRF 10
.................... setup_adc_ports(ADC_CLOCK_INTERNAL|sAN0|sAN1|sAN4|VSS_VDD);
01C8: BSF 03.5
01C9: BCF 1F.4
01CA: BCF 1F.5
01CB: MOVF 1B,W
01CC: ANDLW 80
01CD: IORLW D3
01CE: MOVWF 1B
.................... setup_adc(ADC_CLOCK_INTERNAL);
01CF: BCF 1F.6
01D0: BCF 03.5
01D1: BSF 1F.6
01D2: BSF 1F.7
01D3: BSF 03.5
01D4: BCF 1F.7
01D5: BCF 03.5
01D6: BSF 1F.0
.................... setup_spi(FALSE);
01D7: BCF 14.5
01D8: BSF 03.5
01D9: BCF 06.2
01DA: BSF 06.1
01DB: BCF 06.4
01DC: MOVLW 00
01DD: BCF 03.5
01DE: MOVWF 14
01DF: BSF 03.5
01E0: MOVWF 14
.................... setup_comparator(NC_NC_NC_NC);
01E1: MOVLW 07
01E2: MOVWF 1C
01E3: MOVF 05,W
01E4: CLRWDT
01E5: MOVLW 02
01E6: MOVWF 77
01E7: DECFSZ 77,F
01E8: GOTO 1E7
01E9: NOP
01EA: MOVF 1C,W
01EB: BCF 03.5
01EC: BCF 0D.6
.................... setup_vref(FALSE);
01ED: BSF 03.5
01EE: CLRF 1D
....................
.................... output_low(MENIC); // Vsechno zastav
01EF: BCF 06.3
01F0: BCF 03.5
01F1: BCF 06.3
.................... output_low(MOTOR);
01F2: BSF 03.5
01F3: BCF 06.2
01F4: BCF 03.5
01F5: BCF 06.2
.................... output_low(REFPWR);
01F6: BSF 03.5
01F7: BCF 06.1
01F8: BCF 03.5
01F9: BCF 06.1
.................... output_high(LED);
01FA: BSF 03.5
01FB: BCF 05.7
01FC: BCF 03.5
01FD: BSF 05.7
.................... output_high(PIEZO);
01FE: BSF 03.5
01FF: BCF 05.6
0200: BCF 03.5
0201: BSF 05.6
....................
.................... set_adc_channel(NAPETI); // Vyber AD kanal pro pomerne mereni napeti
0202: MOVLW 20
0203: MOVWF 78
0204: MOVF 1F,W
0205: ANDLW C7
0206: IORWF 78,W
0207: MOVWF 1F
.................... set_pwm1_duty(0); // Spust PWM, ale zatim s trvalou 0 na vystupu
0208: CLRF 15
.................... setup_ccp1(CCP_PWM);
0209: BSF 03.5
020A: BCF 06.3
020B: BCF 03.5
020C: BCF 06.3
020D: MOVLW 0C
020E: MOVWF 17
.................... setup_timer_2(T2_DIV_BY_1,100,1); // perioda
020F: MOVLW 00
0210: MOVWF 78
0211: IORLW 04
0212: MOVWF 12
0213: MOVLW 64
0214: BSF 03.5
0215: MOVWF 12
....................
.................... setup_oscillator(OSC_4MHZ|OSC_INTRC); // rozjed PIC (zvysi se odber)
0216: MOVLW 62
0217: MOVWF 0F
....................
.................... // jsme v depu?
.................... set_pwm1_duty(DUTY1); // PWM pro zatizeni clanku pri malem osvetleni
0218: MOVLW 02
0219: BCF 03.5
021A: MOVWF 15
.................... n=0;
021B: CLRF 60
.................... do
.................... {
.................... output_low(REFPWR); // Vypni napajeni napetove reference, aby se setrilo
021C: BSF 03.5
021D: BCF 06.1
021E: BCF 03.5
021F: BCF 06.1
.................... delay_ms(100);
0220: MOVLW 64
0221: MOVWF 66
0222: CALL 004
.................... if (4==n++) {cvak(); n=0;}; // Kazdy 4. pruchod cvakni
0223: MOVF 60,W
0224: INCF 60,F
0225: SUBLW 04
0226: BTFSS 03.2
0227: GOTO 22A
0228: GOTO 01A
0229: CLRF 60
.................... output_high(REFPWR); // Zapni napajeni napetove reference
022A: BSF 03.5
022B: BCF 06.1
022C: BCF 03.5
022D: BSF 06.1
.................... delay_ms(1); // Pockej na ustaleni napeti
022E: MOVLW 01
022F: MOVWF 66
0230: CALL 004
.................... } while (read_adc()>REFSTART); // Odkryl starter clanky?
0231: BSF 1F.2
0232: BTFSC 1F.2
0233: GOTO 232
0234: MOVF 1E,W
0235: SUBLW 5F
0236: BTFSS 03.0
0237: GOTO 21C
.................... output_low(REFPWR); // Vypni napajeni napetove reference, aby se setrilo
0238: BSF 03.5
0239: BCF 06.1
023A: BCF 03.5
023B: BCF 06.1
....................
.................... // port_b_pullups(TRUE); // Zapni pullupy, aby slo cist DIPswitch
.................... // do
.................... // {
.................... // Precti trimry
.................... set_adc_channel(PWM); // Zjisteni nastaveni PWM
023C: MOVLW 00
023D: MOVWF 78
023E: MOVF 1F,W
023F: ANDLW C7
0240: IORWF 78,W
0241: MOVWF 1F
.................... delay_us(100); // Pockej na prepnuti kanalu A/D prevodniku
0242: CLRWDT
0243: MOVLW 1F
0244: MOVWF 77
0245: DECFSZ 77,F
0246: GOTO 245
0247: NOP
0248: NOP
.................... perioda=(read_adc()>>2)+40; // rozsah: 40 az 103
0249: BSF 1F.2
024A: BTFSC 1F.2
024B: GOTO 24A
024C: MOVF 1E,W
024D: MOVWF 77
024E: RRF 77,F
024F: RRF 77,F
0250: MOVLW 3F
0251: ANDWF 77,F
0252: MOVF 77,W
0253: ADDLW 28
0254: MOVWF 61
....................
.................... set_adc_channel(ROZJEZD); // Zjisteni nastaveni rozjezdu
0255: MOVLW 08
0256: MOVWF 78
0257: MOVF 1F,W
0258: ANDLW C7
0259: IORWF 78,W
025A: MOVWF 1F
.................... delay_us(100); // Pockej na prepnuti kanalu A/D prevodniku
025B: CLRWDT
025C: MOVLW 1F
025D: MOVWF 77
025E: DECFSZ 77,F
025F: GOTO 25E
0260: NOP
0261: NOP
.................... razeni=read_adc()>>4; // rozsah: 0 az 15
0262: BSF 1F.2
0263: BTFSC 1F.2
0264: GOTO 263
0265: MOVF 1E,W
0266: SWAPF 1E,W
0267: MOVWF 62
0268: MOVLW 0F
0269: ANDWF 62,F
....................
.................... // Rozjeti menice
.................... set_pwm1_duty(0); // Zastav PWM, aby slo nastavit jinou frekvenci
026A: CLRF 15
.................... setup_timer_2(T2_DIV_BY_1,perioda,1); // perioda
026B: MOVLW 00
026C: MOVWF 78
026D: IORLW 04
026E: MOVWF 12
026F: MOVF 61,W
0270: BSF 03.5
0271: MOVWF 12
.................... set_pwm1_duty(DUTY2); // PWM pro zatizeni clanku pri jedne 500W zarovce
0272: MOVLW 13
0273: BCF 03.5
0274: MOVWF 15
....................
.................... pip(); // potvrzeni odstartovani / servisni mod
0275: GOTO 027
.................... delay_ms(500);
0276: MOVLW 02
0277: MOVWF 65
0278: MOVLW FA
0279: MOVWF 66
027A: CALL 004
027B: DECFSZ 65,F
027C: GOTO 278
....................
.................... // } 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 clanku
027D: BSF 03.5
027E: BCF 06.1
027F: BCF 03.5
0280: BSF 06.1
.................... set_adc_channel(NAPETI); // Prepni Zmer napeti clanku
0281: MOVLW 20
0282: MOVWF 78
0283: MOVF 1F,W
0284: ANDLW C7
0285: IORWF 78,W
0286: MOVWF 1F
.................... delay_us(50); // Pockej na prepnuti kanalu A/D prevodniku
0287: CLRWDT
0288: MOVLW 0F
0289: MOVWF 77
028A: DECFSZ 77,F
028B: GOTO 28A
028C: NOP
.................... uclanku=read_adc();
028D: BSF 1F.2
028E: BTFSC 1F.2
028F: GOTO 28E
0290: MOVF 1E,W
0291: MOVWF 63
.................... output_low(REFPWR); // odpoj odpor pro mereni napeti
0292: BSF 03.5
0293: BCF 06.1
0294: BCF 03.5
0295: BCF 06.1
....................
.................... // posli telemetrii
.................... sprintf(AXstring,"p=%u r=%u u=%u", perioda, razeni, uclanku); // Convert DATA to String.
*
01B0: CLRF 5F
*
0296: MOVLW 37
0297: MOVWF 5F
0298: MOVLW 70
0299: MOVWF 67
029A: CALL 051
029B: MOVLW 3D
029C: MOVWF 67
029D: CALL 051
029E: MOVF 61,W
029F: MOVWF 65
02A0: MOVLW 1B
02A1: MOVWF 66
02A2: CALL 06E
02A3: MOVLW 20
02A4: MOVWF 67
02A5: CALL 051
02A6: MOVLW 72
02A7: MOVWF 67
02A8: CALL 051
02A9: MOVLW 3D
02AA: MOVWF 67
02AB: CALL 051
02AC: MOVF 62,W
02AD: MOVWF 65
02AE: MOVLW 1B
02AF: MOVWF 66
02B0: CALL 06E
02B1: MOVLW 20
02B2: MOVWF 67
02B3: CALL 051
02B4: MOVLW 75
02B5: MOVWF 67
02B6: CALL 051
02B7: MOVLW 3D
02B8: MOVWF 67
02B9: CALL 051
02BA: MOVF 63,W
02BB: MOVWF 65
02BC: MOVLW 1B
02BD: MOVWF 66
02BE: CALL 06E
.................... SendPacket(&AXstring[0]);
02BF: MOVLW 37
02C0: MOVWF 65
02C1: GOTO 133
....................
.................... delay_ms(14000); // Pockame do 14.5s
02C2: MOVLW 38
02C3: MOVWF 65
02C4: MOVLW FA
02C5: MOVWF 66
02C6: CALL 004
02C7: DECFSZ 65,F
02C8: GOTO 2C4
....................
.................... // rozjezd
.................... for( ble=1;ble<255;ble++)
02C9: MOVLW 01
02CA: MOVWF 64
02CB: INCFSZ 64,W
02CC: GOTO 2CE
02CD: GOTO 2EF
.................... {
.................... for(n=0;n<=razeni;n++)
02CE: CLRF 60
02CF: MOVF 60,W
02D0: SUBWF 62,W
02D1: BTFSS 03.0
02D2: GOTO 2ED
.................... {
.................... output_high(MOTOR);
02D3: BSF 03.5
02D4: BCF 06.2
02D5: BCF 03.5
02D6: BSF 06.2
.................... delay_us(ble);
02D7: MOVF 64,W
02D8: MOVWF 66
02D9: CALL 176
.................... delay_us(ble);
02DA: MOVF 64,W
02DB: MOVWF 66
02DC: CALL 176
.................... output_low(MOTOR);
02DD: BSF 03.5
02DE: BCF 06.2
02DF: BCF 03.5
02E0: BCF 06.2
.................... delay_us(255-ble);
02E1: MOVF 64,W
02E2: SUBLW FF
02E3: MOVWF 65
02E4: MOVWF 66
02E5: CALL 176
.................... delay_us(255-ble);
02E6: MOVF 64,W
02E7: SUBLW FF
02E8: MOVWF 65
02E9: MOVWF 66
02EA: CALL 176
.................... }
02EB: INCF 60,F
02EC: GOTO 2CF
.................... }
02ED: INCF 64,F
02EE: GOTO 2CB
....................
.................... // jedem co to da
.................... output_high(MOTOR);
02EF: BSF 03.5
02F0: BCF 06.2
02F1: BCF 03.5
02F2: BSF 06.2
....................
.................... delay_ms(1300); // Nemeli bysme jet dele nez 1,3s :-)
02F3: MOVLW 0A
02F4: MOVWF 65
02F5: MOVLW 82
02F6: MOVWF 66
02F7: CALL 004
02F8: DECFSZ 65,F
02F9: GOTO 2F5
.................... output_low(MOTOR); // Zastav motor
02FA: BSF 03.5
02FB: BCF 06.2
02FC: BCF 03.5
02FD: BCF 06.2
.................... // Menic je stale zapnut a zatezuje clanky
....................
.................... reset_cpu();
02FE: CLRF 0A
02FF: GOTO 000
.................... }
0300: SLEEP
Configuration Fuses:
Word 1: 2738 NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT DEBUG CCPB3 NOPROTECT INTRC_IO
Word 2: 3FFC NOFCMEN NOIESO