Subversion Repositories svnkaklik

Rev

Blame | Last modification | View Log | Download

CCS PCM C Compiler, Version 3.245, 27853               17-IX-06 22:12

               Filename: D:\KAKL\roboti\solarni\2006\scamnum\menic.lst

               ROM used: 836 words (20%)
                         Largest free fragment is 2048
               RAM used: 87 (50%) at main() level
                         94 (54%) worst case
               Stack:    4 worst case (3 in main + 1 for interrupts)

*
0000:  MOVLW  00
0001:  MOVWF  0A
0002:  GOTO   1C3
0003:  NOP
0004:  MOVWF  7F
0005:  SWAPF  03,W
0006:  CLRF   03
0007:  MOVWF  21
0008:  MOVF   7F,W
0009:  MOVWF  20
000A:  MOVF   0A,W
000B:  MOVWF  28
000C:  CLRF   0A
000D:  SWAPF  20,F
000E:  MOVF   04,W
000F:  MOVWF  22
0010:  MOVF   77,W
0011:  MOVWF  23
0012:  MOVF   78,W
0013:  MOVWF  24
0014:  MOVF   79,W
0015:  MOVWF  25
0016:  MOVF   7A,W
0017:  MOVWF  26
0018:  MOVF   7B,W
0019:  MOVWF  27
001A:  BCF    03.7
001B:  BCF    03.5
001C:  MOVLW  8C
001D:  MOVWF  04
001E:  BTFSS  00.3
001F:  GOTO   022
0020:  BTFSC  0C.3
0021:  GOTO   035
0022:  MOVF   22,W
0023:  MOVWF  04
0024:  MOVF   23,W
0025:  MOVWF  77
0026:  MOVF   24,W
0027:  MOVWF  78
0028:  MOVF   25,W
0029:  MOVWF  79
002A:  MOVF   26,W
002B:  MOVWF  7A
002C:  MOVF   27,W
002D:  MOVWF  7B
002E:  MOVF   28,W
002F:  MOVWF  0A
0030:  SWAPF  21,W
0031:  MOVWF  03
0032:  SWAPF  7F,F
0033:  SWAPF  7F,W
0034:  RETFIE
0035:  BCF    0A.3
0036:  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  71
003D:  MOVWF  04
003E:  MOVF   00,W
003F:  BTFSC  03.2
0040:  GOTO   051
0041:  MOVLW  01
0042:  MOVWF  78
0043:  MOVLW  BF
0044:  MOVWF  77
0045:  CLRWDT
0046:  DECFSZ 77,F
0047:  GOTO   045
0048:  DECFSZ 78,F
0049:  GOTO   043
004A:  MOVLW  42
004B:  MOVWF  77
004C:  DECFSZ 77,F
004D:  GOTO   04C
004E:  CLRWDT
004F:  DECFSZ 00,F
0050:  GOTO   041
0051:  RETLW  00
*
01B0:  MOVLW  12
01B1:  SUBWF  72,F
01B2:  BTFSS  03.0
01B3:  GOTO   1C2
01B4:  MOVLW  72
01B5:  MOVWF  04
01B6:  MOVLW  FC
01B7:  ANDWF  00,F
01B8:  BCF    03.0
01B9:  RRF    00,F
01BA:  RRF    00,F
01BB:  MOVF   00,W
01BC:  BTFSC  03.2
01BD:  GOTO   1C2
01BE:  GOTO   1C0
01BF:  CLRWDT
01C0:  DECFSZ 00,F
01C1:  GOTO   1BF
01C2:  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  82
01CF:  BCF    03.5
01D0:  MOVWF  29
01D1:  MOVLW  98
01D2:  MOVWF  2A
01D3:  MOVWF  2B
01D4:  MOVLW  40
01D5:  MOVWF  2C
01D6:  MOVWF  2D
01D7:  MOVWF  2E
01D8:  MOVLW  60
01D9:  MOVWF  2F
01DA:  MOVLW  86
01DB:  MOVWF  30
01DC:  MOVLW  B4
01DD:  MOVWF  31
01DE:  MOVLW  60
01DF:  MOVWF  32
01E0:  MOVLW  A4
01E1:  MOVWF  33
01E2:  MOVWF  34
01E3:  MOVWF  35
01E4:  MOVLW  61
01E5:  MOVWF  36
01E6:  MOVLW  03
01E7:  MOVWF  37
01E8:  MOVLW  F0
01E9:  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.0
00DF:  GOTO   0E2
....................    { 
....................      bit=FALSE;      //if the state of the pin was low, make it high. 
00E0:  BCF    39.0
....................    } 
....................    else 
00E1:  GOTO   0E3
....................    { 
....................      bit=TRUE;                //if the state of the pin was high make it low 
00E2:  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 bits 
0140:  RRF    3B,F
....................    RRF    fcslo,F                        // to the right 
0141:  RRF    3A,F
.................... #endasm 
....................    if (((STATUS & 0x01)^(tbyte)) ==0x01) 
0142:  MOVF   03,W
0143:  ANDLW  01
0144:  XORWF  75,W
0145:  SUBLW  01
0146:  BTFSS  03.2
0147:  GOTO   14C
....................    { 
....................          fcshi = fcshi^0x84; 
0148:  MOVLW  84
0149:  XORWF  3B,F
....................          fcslo = fcslo^0x08; 
014A:  MOVLW  08
014B:  XORWF  3A,F
....................    } 
.................... } 
....................  
.................... void SendBit () 
.................... { 
....................    if (bit) 
*
00E4:  BTFSS  39.0
00E5:  GOTO   110
....................    { 
....................       output_low(TXo); 
00E6:  BSF    03.5
00E7:  BCF    06.5
00E8:  BCF    03.5
00E9:  BCF    06.5
....................       PERIODAH; 
00EA:  CLRWDT
00EB:  MOVLW  47
00EC:  MOVWF  77
00ED:  DECFSZ 77,F
00EE:  GOTO   0ED
00EF:  NOP
....................       output_high(TXo); 
00F0:  BSF    03.5
00F1:  BCF    06.5
00F2:  BCF    03.5
00F3:  BSF    06.5
....................       PERIODAH; 
00F4:  CLRWDT
00F5:  MOVLW  47
00F6:  MOVWF  77
00F7:  DECFSZ 77,F
00F8:  GOTO   0F7
00F9:  NOP
....................       output_low(TXo); 
00FA:  BSF    03.5
00FB:  BCF    06.5
00FC:  BCF    03.5
00FD:  BCF    06.5
....................       PERIODAH; 
00FE:  CLRWDT
00FF:  MOVLW  47
0100:  MOVWF  77
0101:  DECFSZ 77,F
0102:  GOTO   101
0103:  NOP
....................       output_high(TXo); 
0104:  BSF    03.5
0105:  BCF    06.5
0106:  BCF    03.5
0107:  BSF    06.5
....................       TAILH; 
0108:  CLRWDT
0109:  MOVLW  18
010A:  MOVWF  77
010B:  DECFSZ 77,F
010C:  GOTO   10B
010D:  NOP
010E:  NOP
....................     } 
....................     else 
010F:  GOTO   123
....................     { 
....................       output_low(TXo); 
0110:  BSF    03.5
0111:  BCF    06.5
0112:  BCF    03.5
0113:  BCF    06.5
....................       PERIODAL; 
0114:  CLRWDT
0115:  MOVLW  85
0116:  MOVWF  77
0117:  DECFSZ 77,F
0118:  GOTO   117
....................       output_high(TXo); 
0119:  BSF    03.5
011A:  BCF    06.5
011B:  BCF    03.5
011C:  BSF    06.5
....................       TAILL; 
011D:  CLRWDT
011E:  MOVLW  6F
011F:  MOVWF  77
0120:  DECFSZ 77,F
0121:  GOTO   120
0122:  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 byte 
0124:  CLRF   73
0125:  MOVF   73,W
0126:  SUBLW  07
0127:  BTFSS  03.0
0128:  GOTO   16C
....................    { 
....................      bt = inbyte & 0x01;            //strip off the rightmost bit of the byte to be sent (inbyte) 
0129:  MOVF   72,W
012A:  ANDLW  01
012B:  MOVWF  74
....................      if ((fcs_flag == FALSE) & (flag_flag == FALSE)) fcsbit(bt);    //do FCS calc, but only if this 
012C:  MOVF   3E,F
012D:  BTFSC  03.2
012E:  GOTO   131
012F:  MOVLW  00
0130:  GOTO   132
0131:  MOVLW  01
0132:  MOVWF  75
0133:  MOVF   3D,F
0134:  BTFSC  03.2
0135:  GOTO   138
0136:  MOVLW  00
0137:  GOTO   139
0138:  MOVLW  01
0139:  ANDWF  75,W
013A:  XORLW  00
013B:  BTFSC  03.2
013C:  GOTO   14C
013D:  MOVF   74,W
013E:  MOVWF  75
....................                                                                                            //is not a flag or fcs byte 
....................      if (bt == 0) 
*
014C:  MOVF   74,F
014D:  BTFSS  03.2
014E:  GOTO   151
....................      { 
....................        flipout(); 
014F:  CALL   0DD
....................      }                                    // if this bit is a zero, flip the output state 
....................      else 
0150:  GOTO   167
....................      {                                                   //otherwise if it is a 1, do the following: 
....................        if (flag_flag == FALSE) stuff++;      //increment the count of consequtive 1's 
0151:  MOVF   3D,F
0152:  BTFSC  03.2
0153:  INCF   3C,F
....................        if ((flag_flag == FALSE) & (stuff == 5)) 
0154:  MOVF   3D,F
0155:  BTFSC  03.2
0156:  GOTO   159
0157:  MOVLW  00
0158:  GOTO   15A
0159:  MOVLW  01
015A:  MOVWF  75
015B:  MOVF   3C,W
015C:  SUBLW  05
015D:  BTFSC  03.2
015E:  GOTO   161
015F:  MOVLW  00
0160:  GOTO   162
0161:  MOVLW  01
0162:  ANDWF  75,W
0163:  BTFSC  03.2
0164:  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 0 
0166:  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 byte 
0168:  BCF    03.0
0169:  RRF    72,F
....................    }//end of for 
016A:  INCF   73,F
016B:  GOTO   125
.................... }//end of SendByte 
016C:  RETLW  00
....................  
.................... void SendPacket(char *data) 
.................... { 
....................     bit=FALSE; 
016D:  BCF    39.0
....................  
....................    fcslo=fcshi=0xFF;       //The 2 FCS Bytes are initialized to FF 
016E:  MOVLW  FF
016F:  MOVWF  3B
0170:  MOVWF  3A
....................    stuff = 0;              //The variable stuff counts the number of 1's in a row. When it gets to 5 
0171:  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  01
0173:  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 txdelay 
0175:  CLRF   3F
0176:  MOVF   3F,W
0177:  SUBLW  09
0178:  BTFSS  03.0
0179:  GOTO   17F
017A:  MOVLW  7E
017B:  MOVWF  72
017C:  CALL   124
017D:  INCF   3F,F
017E:  GOTO   176
....................                                        //each flag takes approx 6.7 ms 
....................    flag_flag = FALSE;      //done sending flags 
017F:  CLRF   3D
....................  
....................    for(i=0; i<16; i++) SendByte(SendData[i]);      //send the packet bytes 
0180:  CLRF   3F
0181:  MOVF   3F,W
0182:  SUBLW  0F
0183:  BTFSS  03.0
0184:  GOTO   18E
0185:  MOVLW  29
0186:  ADDWF  3F,W
0187:  MOVWF  04
0188:  MOVF   00,W
0189:  MOVWF  71
018A:  MOVWF  72
018B:  CALL   124
018C:  INCF   3F,F
018D:  GOTO   181
....................  
....................    for(i=0; 0 != *data; i++) 
018E:  CLRF   3F
018F:  MOVF   70,W
0190:  MOVWF  04
0191:  MOVF   00,W
0192:  BTFSC  03.2
0193:  GOTO   19D
....................    { 
....................       SendByte(*data);     //send the packet bytes 
0194:  MOVF   70,W
0195:  MOVWF  04
0196:  MOVF   00,W
0197:  MOVWF  71
0198:  MOVWF  72
0199:  CALL   124
....................       data++; 
019A:  INCF   70,F
....................    }; 
019B:  INCF   3F,F
019C:  GOTO   18F
....................  
....................    fcs_flag = TRUE;        //about to send the FCS bytes 
019D:  MOVLW  01
019E:  MOVWF  3E
....................    fcslo =fcslo^0xff;      //must XOR them with FF before sending 
019F:  MOVLW  FF
01A0:  XORWF  3A,F
....................    fcshi = fcshi^0xff; 
01A1:  XORWF  3B,F
....................    SendByte(fcslo);        //send the low byte of fcs 
01A2:  MOVF   3A,W
01A3:  MOVWF  72
01A4:  CALL   124
....................    SendByte(fcshi);        //send the high byte of fcs 
01A5:  MOVF   3B,W
01A6:  MOVWF  72
01A7:  CALL   124
....................    fcs_flag = FALSE;                  //done sending FCS 
01A8:  CLRF   3E
....................    flag_flag = TRUE;               //about to send flags 
01A9:  MOVLW  01
01AA:  MOVWF  3D
....................    SendByte(0x7e);         // Send a flag to end packet 
01AB:  MOVLW  7E
01AC:  MOVWF  72
01AD:  CALL   124
.................... } 
01AE:  BCF    0A.3
01AF:  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,W
0038:  MOVWF  13
.................... } 
....................  
0039:  BCF    0C.3
003A:  BCF    0A.3
003B:  GOTO   022
.................... void pip()     // pipnuti a bliknuti 
.................... { 
....................    int1 beep; 
....................    int i; 
....................  
....................    for(i=0; i<250; i++) 
*
005F:  CLRF   71
0060:  MOVF   71,W
0061:  SUBLW  F9
0062:  BTFSS  03.0
0063:  GOTO   081
....................    { 
....................       output_bit(PIEZO, beep); 
0064:  BTFSC  70.0
0065:  GOTO   068
0066:  BCF    05.6
0067:  GOTO   069
0068:  BSF    05.6
0069:  BSF    03.5
006A:  BCF    05.6
....................       beep=~beep; 
006B:  MOVLW  01
006C:  XORWF  70,F
....................       output_bit(LED, beep); 
006D:  BTFSC  70.0
006E:  GOTO   073
006F:  BCF    03.5
0070:  BCF    05.7
0071:  GOTO   075
0072:  BSF    03.5
0073:  BCF    03.5
0074:  BSF    05.7
0075:  BSF    03.5
0076:  BCF    05.7
....................       delay_us(100); 
0077:  CLRWDT
0078:  MOVLW  1F
0079:  MOVWF  77
007A:  DECFSZ 77,F
007B:  GOTO   07A
007C:  NOP
007D:  NOP
....................    }; 
007E:  INCF   71,F
007F:  BCF    03.5
0080:  GOTO   060
....................    output_high(PIEZO); 
0081:  BSF    03.5
0082:  BCF    05.6
0083:  BCF    03.5
0084:  BSF    05.6
....................    output_high(LED); 
0085:  BSF    03.5
0086:  BCF    05.7
0087:  BCF    03.5
0088:  BSF    05.7
.................... } 
0089:  BCF    0A.3
008A:  GOTO   2B1 (RETURN)
....................  
.................... void cvak()    // pouze cvaknuti piezoelementem bez bliknuti 
.................... { 
....................    output_bit(PIEZO,~input(PIEZO)); 
*
0052:  BSF    03.5
0053:  BSF    05.6
0054:  BCF    03.5
0055:  BTFSS  05.6
0056:  GOTO   059
0057:  BCF    05.6
0058:  GOTO   05A
0059:  BSF    05.6
005A:  BSF    03.5
005B:  BCF    05.6
.................... } 
005C:  BCF    03.5
005D:  BCF    0A.3
005E:  GOTO   263 (RETURN)
....................  
.................... void main() 
.................... { 
*
01C3:  CLRF   04
01C4:  MOVLW  1F
01C5:  ANDWF  03,F
01C6:  BSF    03.5
01C7:  BCF    1F.4
01C8:  BCF    1F.5
01C9:  MOVF   1B,W
01CA:  ANDLW  80
01CB:  MOVWF  1B
01CC:  MOVLW  07
01CD:  MOVWF  1C
....................    int8 n; 
....................    int8 perioda; 
....................    int8 razeni; 
....................    int8 uclanku; 
....................    int16 ble; 
....................  
....................    setup_timer_0(RTCC_INTERNAL);setup_wdt(WDT_1152MS); 
*
01EB:  BSF    03.5
01EC:  MOVF   01,W
01ED:  ANDLW  C0
01EE:  MOVWF  01
01EF:  MOVLW  0E
01F0:  MOVWF  77
01F1:  MOVLW  07
01F2:  BCF    03.5
01F3:  CLRF   01
01F4:  MOVLW  81
01F5:  MOVWF  04
01F6:  MOVF   00,W
01F7:  ANDLW  F0
01F8:  IORLW  07
01F9:  MOVWF  00
01FA:  CLRWDT
01FB:  MOVF   00,W
01FC:  ANDLW  F7
01FD:  BTFSC  77.3
01FE:  ANDLW  F0
01FF:  IORWF  77,W
0200:  MOVWF  00
....................    setup_timer_1(T1_DISABLED); 
0201:  CLRF   10
....................    setup_adc_ports(ADC_CLOCK_INTERNAL|sAN0|sAN1|sAN4|VSS_VDD); 
0202:  BSF    03.5
0203:  BCF    1F.4
0204:  BCF    1F.5
0205:  MOVF   1B,W
0206:  ANDLW  80
0207:  IORLW  D3
0208:  MOVWF  1B
....................    setup_adc(ADC_CLOCK_INTERNAL); 
0209:  BCF    1F.6
020A:  BCF    03.5
020B:  BSF    1F.6
020C:  BSF    1F.7
020D:  BSF    03.5
020E:  BCF    1F.7
020F:  BCF    03.5
0210:  BSF    1F.0
....................    setup_spi(FALSE); 
0211:  BCF    14.5
0212:  BSF    03.5
0213:  BCF    06.2
0214:  BSF    06.1
0215:  BCF    06.4
0216:  MOVLW  00
0217:  BCF    03.5
0218:  MOVWF  14
0219:  BSF    03.5
021A:  MOVWF  14
....................    setup_comparator(NC_NC_NC_NC); 
021B:  MOVLW  07
021C:  MOVWF  1C
021D:  MOVF   05,W
021E:  CLRWDT
021F:  MOVLW  02
0220:  MOVWF  77
0221:  DECFSZ 77,F
0222:  GOTO   221
0223:  NOP
0224:  MOVF   1C,W
0225:  BCF    03.5
0226:  BCF    0D.6
....................    setup_vref(FALSE); 
0227:  BSF    03.5
0228:  CLRF   1D
....................  
....................    output_low(MENIC);      // Vsechno zastav 
0229:  BCF    06.3
022A:  BCF    03.5
022B:  BCF    06.3
....................    output_low(MOTOR); 
022C:  BSF    03.5
022D:  BCF    06.2
022E:  BCF    03.5
022F:  BCF    06.2
....................    output_low(REFPWR); 
0230:  BSF    03.5
0231:  BCF    06.1
0232:  BCF    03.5
0233:  BCF    06.1
....................    output_high(LED); 
0234:  BSF    03.5
0235:  BCF    05.7
0236:  BCF    03.5
0237:  BSF    05.7
....................    output_high(PIEZO); 
0238:  BSF    03.5
0239:  BCF    05.6
023A:  BCF    03.5
023B:  BSF    05.6
....................  
....................    set_adc_channel(NAPETI);     // Vyber AD kanal pro pomerne mereni napeti 
023C:  MOVLW  20
023D:  MOVWF  78
023E:  MOVF   1F,W
023F:  ANDLW  C7
0240:  IORWF  78,W
0241:  MOVWF  1F
....................    set_pwm1_duty(0);       // Spust PWM, ale zatim s trvalou 0 na vystupu 
0242:  CLRF   15
....................    setup_ccp1(CCP_PWM); 
0243:  BSF    03.5
0244:  BCF    06.3
0245:  BCF    03.5
0246:  BCF    06.3
0247:  MOVLW  0C
0248:  MOVWF  17
....................    setup_timer_2(T2_DIV_BY_1,100,1);  // perioda 
0249:  MOVLW  00
024A:  MOVWF  78
024B:  IORLW  04
024C:  MOVWF  12
024D:  MOVLW  64
024E:  BSF    03.5
024F:  MOVWF  12
....................  
....................    setup_oscillator(OSC_4MHZ|OSC_INTRC);  // rozjed PIC (zvysi se odber) 
0250:  MOVLW  62
0251:  MOVWF  0F
....................  
.................... // jsme v depu? 
....................    set_pwm1_duty(DUTY1);          // PWM pro zatizeni clanku pri malem osvetleni 
0252:  MOVLW  02
0253:  BCF    03.5
0254:  MOVWF  15
....................    n=0; 
0255:  CLRF   6A
....................    do 
....................    { 
....................       output_low(REFPWR);  // Vypni napajeni napetove reference, aby se setrilo 
0256:  BSF    03.5
0257:  BCF    06.1
0258:  BCF    03.5
0259:  BCF    06.1
....................       delay_ms(100); 
025A:  MOVLW  64
025B:  MOVWF  71
025C:  CALL   03C
....................       if (4==n++) {cvak(); n=0;};   // Kazdy 4. pruchod cvakni 
025D:  MOVF   6A,W
025E:  INCF   6A,F
025F:  SUBLW  04
0260:  BTFSS  03.2
0261:  GOTO   264
0262:  GOTO   052
0263:  CLRF   6A
....................       output_high(REFPWR);          // Zapni napajeni napetove reference 
0264:  BSF    03.5
0265:  BCF    06.1
0266:  BCF    03.5
0267:  BSF    06.1
....................       delay_ms(1);                  // Pockej na ustaleni napeti 
0268:  MOVLW  01
0269:  MOVWF  71
026A:  CALL   03C
....................    } while (read_adc()>REFSTART);   // Odkryl starter clanky? 
026B:  BSF    1F.2
026C:  BTFSC  1F.2
026D:  GOTO   26C
026E:  MOVF   1E,W
026F:  SUBLW  5F
0270:  BTFSS  03.0
0271:  GOTO   256
....................    output_low(REFPWR);     // Vypni napajeni napetove reference, aby se setrilo 
0272:  BSF    03.5
0273:  BCF    06.1
0274:  BCF    03.5
0275:  BCF    06.1
....................  
.................... //   port_b_pullups(TRUE);            // Zapni pullupy, aby slo cist DIPswitch 
.................... //   do 
.................... //   { 
....................       // Precti trimry 
....................       set_adc_channel(PWM);         // Zjisteni nastaveni PWM 
0276:  MOVLW  00
0277:  MOVWF  78
0278:  MOVF   1F,W
0279:  ANDLW  C7
027A:  IORWF  78,W
027B:  MOVWF  1F
....................       delay_us(100);                // Pockej na prepnuti kanalu A/D prevodniku 
027C:  CLRWDT
027D:  MOVLW  1F
027E:  MOVWF  77
027F:  DECFSZ 77,F
0280:  GOTO   27F
0281:  NOP
0282:  NOP
....................       perioda=(read_adc()>>2)+40;   // rozsah: 40 az 103 
0283:  BSF    1F.2
0284:  BTFSC  1F.2
0285:  GOTO   284
0286:  MOVF   1E,W
0287:  MOVWF  77
0288:  RRF    77,F
0289:  RRF    77,F
028A:  MOVLW  3F
028B:  ANDWF  77,F
028C:  MOVF   77,W
028D:  ADDLW  28
028E:  MOVWF  6B
....................  
....................       set_adc_channel(ROZJEZD);     // Zjisteni nastaveni rozjezdu 
028F:  MOVLW  08
0290:  MOVWF  78
0291:  MOVF   1F,W
0292:  ANDLW  C7
0293:  IORWF  78,W
0294:  MOVWF  1F
....................       delay_us(100);                // Pockej na prepnuti kanalu A/D prevodniku 
0295:  CLRWDT
0296:  MOVLW  1F
0297:  MOVWF  77
0298:  DECFSZ 77,F
0299:  GOTO   298
029A:  NOP
029B:  NOP
....................       razeni=read_adc()>>3;         // rozsah: 0 az 31 
029C:  BSF    1F.2
029D:  BTFSC  1F.2
029E:  GOTO   29D
029F:  RRF    1E,W
02A0:  MOVWF  6C
02A1:  RRF    6C,F
02A2:  RRF    6C,F
02A3:  MOVLW  1F
02A4:  ANDWF  6C,F
....................  
....................       // Rozjeti menice 
....................       set_pwm1_duty(0);    // Zastav PWM, aby slo nastavit jinou frekvenci 
02A5:  CLRF   15
....................       setup_timer_2(T2_DIV_BY_1,perioda,1);    // perioda 
02A6:  MOVLW  00
02A7:  MOVWF  78
02A8:  IORLW  04
02A9:  MOVWF  12
02AA:  MOVF   6B,W
02AB:  BSF    03.5
02AC:  MOVWF  12
....................       set_pwm1_duty(DUTY2); // PWM pro zatizeni clanku pri jedne 500W zarovce 
02AD:  MOVLW  13
02AE:  BCF    03.5
02AF:  MOVWF  15
....................  
....................       pip();                  // potvrzeni odstartovani / servisni mod 
02B0:  GOTO   05F
....................       delay_ms(500); 
02B1:  MOVLW  02
02B2:  MOVWF  70
02B3:  MOVLW  FA
02B4:  MOVWF  71
02B5:  CALL   03C
02B6:  DECFSZ 70,F
02B7:  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 clanku 
02B8:  BSF    03.5
02B9:  BCF    06.1
02BA:  BCF    03.5
02BB:  BSF    06.1
....................    set_adc_channel(NAPETI);      // Prepni Zmer napeti clanku 
02BC:  MOVLW  20
02BD:  MOVWF  78
02BE:  MOVF   1F,W
02BF:  ANDLW  C7
02C0:  IORWF  78,W
02C1:  MOVWF  1F
....................    delay_us(50);                // Pockej na prepnuti kanalu A/D prevodniku 
02C2:  CLRWDT
02C3:  MOVLW  0F
02C4:  MOVWF  77
02C5:  DECFSZ 77,F
02C6:  GOTO   2C5
02C7:  NOP
....................    uclanku=read_adc(); 
02C8:  BSF    1F.2
02C9:  BTFSC  1F.2
02CA:  GOTO   2C9
02CB:  MOVF   1E,W
02CC:  MOVWF  6D
....................    output_low(REFPWR);     // odpoj odpor pro mereni napeti 
02CD:  BSF    03.5
02CE:  BCF    06.1
02CF:  BCF    03.5
02D0:  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  40
02D2:  MOVWF  69
02D3:  MOVLW  70
02D4:  MOVWF  72
02D5:  CALL   08B
02D6:  MOVLW  3D
02D7:  MOVWF  72
02D8:  CALL   08B
02D9:  MOVF   6B,W
02DA:  MOVWF  70
02DB:  MOVLW  1B
02DC:  MOVWF  71
02DD:  CALL   0A8
02DE:  MOVLW  20
02DF:  MOVWF  72
02E0:  CALL   08B
02E1:  MOVLW  72
02E2:  MOVWF  72
02E3:  CALL   08B
02E4:  MOVLW  3D
02E5:  MOVWF  72
02E6:  CALL   08B
02E7:  MOVF   6C,W
02E8:  MOVWF  70
02E9:  MOVLW  1B
02EA:  MOVWF  71
02EB:  CALL   0A8
02EC:  MOVLW  20
02ED:  MOVWF  72
02EE:  CALL   08B
02EF:  MOVLW  75
02F0:  MOVWF  72
02F1:  CALL   08B
02F2:  MOVLW  3D
02F3:  MOVWF  72
02F4:  CALL   08B
02F5:  MOVF   6D,W
02F6:  MOVWF  70
02F7:  MOVLW  1B
02F8:  MOVWF  71
02F9:  CALL   0A8
....................    SendPacket(&AXstring[0]); 
02FA:  MOVLW  40
02FB:  MOVWF  70
02FC:  GOTO   16D
....................  
....................    delay_ms(14000);           // Pockame do 14.5s 
02FD:  MOVLW  38
02FE:  MOVWF  70
02FF:  MOVLW  FA
0300:  MOVWF  71
0301:  CALL   03C
0302:  DECFSZ 70,F
0303:  GOTO   2FF
....................  
....................    // rozjezd 
....................    for(ble=1;ble<=1000;ble++) 
0304:  CLRF   6F
0305:  MOVLW  01
0306:  MOVWF  6E
0307:  MOVF   6F,W
0308:  SUBLW  03
0309:  BTFSS  03.0
030A:  GOTO   333
030B:  BTFSS  03.2
030C:  GOTO   311
030D:  MOVF   6E,W
030E:  SUBLW  E8
030F:  BTFSS  03.0
0310:  GOTO   333
....................    {    
....................       for(n=0;n<=razeni;n++) 
0311:  CLRF   6A
0312:  MOVF   6A,W
0313:  SUBWF  6C,W
0314:  BTFSS  03.0
0315:  GOTO   32F
....................       { 
....................          output_high(MOTOR);               
0316:  BSF    03.5
0317:  BCF    06.2
0318:  BCF    03.5
0319:  BSF    06.2
....................          delay_us(ble);    
031A:  MOVF   6E,W
031B:  MOVWF  72
031C:  CALL   1B0
....................          output_low(MOTOR);              
031D:  BSF    03.5
031E:  BCF    06.2
031F:  BCF    03.5
0320:  BCF    06.2
....................          delay_us(1000-ble);    
0321:  MOVF   6E,W
0322:  SUBLW  E8
0323:  MOVWF  70
0324:  MOVLW  03
0325:  MOVWF  71
0326:  MOVF   6F,W
0327:  BTFSS  03.0
0328:  INCFSZ 6F,W
0329:  SUBWF  71,F
032A:  MOVF   70,W
032B:  MOVWF  72
032C:  CALL   1B0
....................       } 
032D:  INCF   6A,F
032E:  GOTO   312
....................    } 
032F:  INCF   6E,F
0330:  BTFSC  03.2
0331:  INCF   6F,F
0332:  GOTO   307
....................  
.................... // jedem co to da 
....................    output_high(MOTOR); 
0333:  BSF    03.5
0334:  BCF    06.2
0335:  BCF    03.5
0336:  BSF    06.2
....................  
....................    delay_ms(1300);                  // Nemeli bysme jet dele nez 1,3s :-) 
0337:  MOVLW  0A
0338:  MOVWF  70
0339:  MOVLW  82
033A:  MOVWF  71
033B:  CALL   03C
033C:  DECFSZ 70,F
033D:  GOTO   339
....................    output_low(MOTOR);               // Zastav motor 
033E:  BSF    03.5
033F:  BCF    06.2
0340:  BCF    03.5
0341:  BCF    06.2
....................                                     // Menic je stale zapnut a zatezuje clanky 
....................  
....................    while(TRUE);            // Cekej, dokud se neztrati svetlo, 
0342:  GOTO   342
....................                            // nebo prijde WatchDog 
....................  
.................... } 
0343:  SLEEP

Configuration Fuses:
   Word  1: 2738   NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT DEBUG CCPB3 NOPROTECT INTRC_IO
   Word  2: 3FFC   NOFCMEN NOIESO