Subversion Repositories svnkaklik

Rev

Go to most recent revision | Blame | Last modification | View Log | Download

CCS PCM C Compiler, Version 3.245, 27853               12-IX-06 23:20

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

               ROM used: 837 words (20%)
                         Largest free fragment is 2048
               RAM used: 85 (49%) at main() level
                         91 (52%) worst case
               Stack:    4 worst case (3 in main + 1 for interrupts)

*
0000:  MOVLW  00
0001:  MOVWF  0A
0002:  GOTO   1BA
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   043
.................... // ************************************* 
.................... // * 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   WDT,INTRC_IO, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, \ 
....................          NOWRT, DEBUG, NOPROTECT, NOFCMEN, NOIESO, CCPB3 
....................  
.................... #use delay(clock=3900000,RESTART_WDT) 
*
0048:  MOVLW  6F
0049:  MOVWF  04
004A:  MOVF   00,W
004B:  BTFSC  03.2
004C:  GOTO   05D
004D:  MOVLW  01
004E:  MOVWF  78
004F:  MOVLW  BF
0050:  MOVWF  77
0051:  CLRWDT
0052:  DECFSZ 77,F
0053:  GOTO   051
0054:  DECFSZ 78,F
0055:  GOTO   04F
0056:  MOVLW  42
0057:  MOVWF  77
0058:  DECFSZ 77,F
0059:  GOTO   058
005A:  CLRWDT
005B:  DECFSZ 00,F
005C:  GOTO   04D
005D:  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}; 
*
01C5:  MOVLW  82
01C6:  BCF    03.5
01C7:  MOVWF  29
01C8:  MOVLW  98
01C9:  MOVWF  2A
01CA:  MOVWF  2B
01CB:  MOVLW  40
01CC:  MOVWF  2C
01CD:  MOVWF  2D
01CE:  MOVWF  2E
01CF:  MOVLW  60
01D0:  MOVWF  2F
01D1:  MOVLW  86
01D2:  MOVWF  30
01D3:  MOVLW  B4
01D4:  MOVWF  31
01D5:  MOVLW  60
01D6:  MOVWF  32
01D7:  MOVLW  A4
01D8:  MOVWF  33
01D9:  MOVWF  34
01DA:  MOVWF  35
01DB:  MOVLW  61
01DC:  MOVWF  36
01DD:  MOVLW  03
01DE:  MOVWF  37
01DF:  MOVLW  F0
01E0:  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 
*
00E7:  CLRF   3C
....................    if (bit) 
00E8:  BTFSS  39.0
00E9:  GOTO   0EC
....................    { 
....................      bit=FALSE;      //if the state of the pin was low, make it high. 
00EA:  BCF    39.0
....................    } 
....................    else 
00EB:  GOTO   0ED
....................    { 
....................      bit=TRUE;                //if the state of the pin was high make it low 
00EC:  BSF    39.0
....................    } 
.................... } 
00ED:  RETLW  00
....................  
.................... void fcsbit(byte tbyte) 
.................... { 
.................... #asm 
....................    BCF    STATUS,0 
*
0149:  BCF    03.0
....................    RRF    fcshi,F             // rotates the entire 16 bits 
014A:  RRF    3B,F
....................    RRF    fcslo,F                        // to the right 
014B:  RRF    3A,F
.................... #endasm 
....................    if (((STATUS & 0x01)^(tbyte)) ==0x01) 
014C:  MOVF   03,W
014D:  ANDLW  01
014E:  XORWF  73,W
014F:  SUBLW  01
0150:  BTFSS  03.2
0151:  GOTO   156
....................    { 
....................          fcshi = fcshi^0x84; 
0152:  MOVLW  84
0153:  XORWF  3B,F
....................          fcslo = fcslo^0x08; 
0154:  MOVLW  08
0155:  XORWF  3A,F
....................    } 
.................... } 
....................  
.................... void SendBit () 
.................... { 
....................    if (bit) 
*
00EE:  BTFSS  39.0
00EF:  GOTO   11A
....................    { 
....................       output_low(TXo); 
00F0:  BSF    03.5
00F1:  BCF    06.5
00F2:  BCF    03.5
00F3:  BCF    06.5
....................       PERIODAH; 
00F4:  CLRWDT
00F5:  MOVLW  47
00F6:  MOVWF  77
00F7:  DECFSZ 77,F
00F8:  GOTO   0F7
00F9:  NOP
....................       output_high(TXo); 
00FA:  BSF    03.5
00FB:  BCF    06.5
00FC:  BCF    03.5
00FD:  BSF    06.5
....................       PERIODAH; 
00FE:  CLRWDT
00FF:  MOVLW  47
0100:  MOVWF  77
0101:  DECFSZ 77,F
0102:  GOTO   101
0103:  NOP
....................       output_low(TXo); 
0104:  BSF    03.5
0105:  BCF    06.5
0106:  BCF    03.5
0107:  BCF    06.5
....................       PERIODAH; 
0108:  CLRWDT
0109:  MOVLW  47
010A:  MOVWF  77
010B:  DECFSZ 77,F
010C:  GOTO   10B
010D:  NOP
....................       output_high(TXo); 
010E:  BSF    03.5
010F:  BCF    06.5
0110:  BCF    03.5
0111:  BSF    06.5
....................       TAILH; 
0112:  CLRWDT
0113:  MOVLW  18
0114:  MOVWF  77
0115:  DECFSZ 77,F
0116:  GOTO   115
0117:  NOP
0118:  NOP
....................     } 
....................     else 
0119:  GOTO   12D
....................     { 
....................       output_low(TXo); 
011A:  BSF    03.5
011B:  BCF    06.5
011C:  BCF    03.5
011D:  BCF    06.5
....................       PERIODAL; 
011E:  CLRWDT
011F:  MOVLW  85
0120:  MOVWF  77
0121:  DECFSZ 77,F
0122:  GOTO   121
....................       output_high(TXo); 
0123:  BSF    03.5
0124:  BCF    06.5
0125:  BCF    03.5
0126:  BSF    06.5
....................       TAILL; 
0127:  CLRWDT
0128:  MOVLW  6F
0129:  MOVWF  77
012A:  DECFSZ 77,F
012B:  GOTO   12A
012C:  NOP
....................     }; 
.................... } 
012D:  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 
012E:  CLRF   71
012F:  MOVF   71,W
0130:  SUBLW  07
0131:  BTFSS  03.0
0132:  GOTO   176
....................    { 
....................      bt = inbyte & 0x01;            //strip off the rightmost bit of the byte to be sent (inbyte) 
0133:  MOVF   70,W
0134:  ANDLW  01
0135:  MOVWF  72
....................      if ((fcs_flag == FALSE) & (flag_flag == FALSE)) fcsbit(bt);    //do FCS calc, but only if this 
0136:  MOVF   3E,F
0137:  BTFSC  03.2
0138:  GOTO   13B
0139:  MOVLW  00
013A:  GOTO   13C
013B:  MOVLW  01
013C:  MOVWF  73
013D:  MOVF   3D,F
013E:  BTFSC  03.2
013F:  GOTO   142
0140:  MOVLW  00
0141:  GOTO   143
0142:  MOVLW  01
0143:  ANDWF  73,W
0144:  XORLW  00
0145:  BTFSC  03.2
0146:  GOTO   156
0147:  MOVF   72,W
0148:  MOVWF  73
....................                                                                                            //is not a flag or fcs byte 
....................      if (bt == 0) 
*
0156:  MOVF   72,F
0157:  BTFSS  03.2
0158:  GOTO   15B
....................      { 
....................        flipout(); 
0159:  CALL   0E7
....................      }                                    // if this bit is a zero, flip the output state 
....................      else 
015A:  GOTO   171
....................      {                                                   //otherwise if it is a 1, do the following: 
....................        if (flag_flag == FALSE) stuff++;      //increment the count of consequtive 1's 
015B:  MOVF   3D,F
015C:  BTFSC  03.2
015D:  INCF   3C,F
....................        if ((flag_flag == FALSE) & (stuff == 5)) 
015E:  MOVF   3D,F
015F:  BTFSC  03.2
0160:  GOTO   163
0161:  MOVLW  00
0162:  GOTO   164
0163:  MOVLW  01
0164:  MOVWF  73
0165:  MOVF   3C,W
0166:  SUBLW  05
0167:  BTFSC  03.2
0168:  GOTO   16B
0169:  MOVLW  00
016A:  GOTO   16C
016B:  MOVLW  01
016C:  ANDWF  73,W
016D:  BTFSC  03.2
016E:  GOTO   171
....................        {       //stuff an extra 0, if 5 1's in a row 
....................          SendBit(); 
016F:  CALL   0EE
....................          flipout();               //flip the output state to stuff a 0 
0170:  CALL   0E7
....................        }//end of if 
....................      }//end of else 
....................      // delay_us(850);                              //introduces a delay that creates 1200 baud 
....................      SendBit(); 
0171:  CALL   0EE
....................      inbyte = inbyte>>1;          //go to the next bit in the byte 
0172:  BCF    03.0
0173:  RRF    70,F
....................    }//end of for 
0174:  INCF   71,F
0175:  GOTO   12F
.................... }//end of SendByte 
0176:  RETLW  00
....................  
.................... void SendPacket(char *data) 
.................... { 
....................     bit=FALSE; 
0177:  BCF    39.0
....................  
....................    fcslo=fcshi=0xFF;       //The 2 FCS Bytes are initialized to FF 
0178:  MOVLW  FF
0179:  MOVWF  3B
017A:  MOVWF  3A
....................    stuff = 0;              //The variable stuff counts the number of 1's in a row. When it gets to 5 
017B:  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. 
017C:  MOVLW  01
017D:  MOVWF  3D
....................    fcs_flag = FALSE;       //The variable fcsflag is true if you are transmitting FCS bytes, false otherwise. 
017E:  CLRF   3E
....................  
....................    for(i=0; i<10; i++) SendByte(0x7E); //Sends flag bytes.  Adjust length for txdelay 
017F:  CLRF   3F
0180:  MOVF   3F,W
0181:  SUBLW  09
0182:  BTFSS  03.0
0183:  GOTO   189
0184:  MOVLW  7E
0185:  MOVWF  70
0186:  CALL   12E
0187:  INCF   3F,F
0188:  GOTO   180
....................                                        //each flag takes approx 6.7 ms 
....................    flag_flag = FALSE;      //done sending flags 
0189:  CLRF   3D
....................  
....................    for(i=0; i<16; i++) SendByte(SendData[i]);      //send the packet bytes 
018A:  CLRF   3F
018B:  MOVF   3F,W
018C:  SUBLW  0F
018D:  BTFSS  03.0
018E:  GOTO   198
018F:  MOVLW  29
0190:  ADDWF  3F,W
0191:  MOVWF  04
0192:  MOVF   00,W
0193:  MOVWF  6F
0194:  MOVWF  70
0195:  CALL   12E
0196:  INCF   3F,F
0197:  GOTO   18B
....................  
....................    for(i=0; 0 != *data; i++) 
0198:  CLRF   3F
0199:  MOVF   6E,W
019A:  MOVWF  04
019B:  MOVF   00,W
019C:  BTFSC  03.2
019D:  GOTO   1A7
....................    { 
....................       SendByte(*data);     //send the packet bytes 
019E:  MOVF   6E,W
019F:  MOVWF  04
01A0:  MOVF   00,W
01A1:  MOVWF  6F
01A2:  MOVWF  70
01A3:  CALL   12E
....................       data++; 
01A4:  INCF   6E,F
....................    }; 
01A5:  INCF   3F,F
01A6:  GOTO   199
....................  
....................    fcs_flag = TRUE;        //about to send the FCS bytes 
01A7:  MOVLW  01
01A8:  MOVWF  3E
....................    fcslo =fcslo^0xff;      //must XOR them with FF before sending 
01A9:  MOVLW  FF
01AA:  XORWF  3A,F
....................    fcshi = fcshi^0xff; 
01AB:  XORWF  3B,F
....................    SendByte(fcslo);        //send the low byte of fcs 
01AC:  MOVF   3A,W
01AD:  MOVWF  70
01AE:  CALL   12E
....................    SendByte(fcshi);        //send the high byte of fcs 
01AF:  MOVF   3B,W
01B0:  MOVWF  70
01B1:  CALL   12E
....................    fcs_flag = FALSE;                  //done sending FCS 
01B2:  CLRF   3E
....................    flag_flag = TRUE;               //about to send flags 
01B3:  MOVLW  01
01B4:  MOVWF  3D
....................    SendByte(0x7e);         // Send a flag to end packet 
01B5:  MOVLW  7E
01B6:  MOVWF  70
01B7:  CALL   12E
.................... } 
01B8:  BCF    0A.3
01B9:  GOTO   30C (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 
*
0043:  MOVF   68,W
0044:  MOVWF  13
.................... } 
....................  
0045:  BCF    0C.3
0046:  BCF    0A.3
0047:  GOTO   022
.................... void pip()     // pipnuti a bliknuti 
.................... { 
....................    int1 beep; 
....................    int i; 
....................  
....................    for(i=0; i<250; i++) 
*
006B:  CLRF   6F
006C:  MOVF   6F,W
006D:  SUBLW  F9
006E:  BTFSS  03.0
006F:  GOTO   08B
....................    { 
....................       output_bit(PIEZO, beep); 
0070:  BTFSC  6E.0
0071:  GOTO   074
0072:  BCF    05.6
0073:  GOTO   075
0074:  BSF    05.6
0075:  BSF    03.5
0076:  BCF    05.6
....................       beep=~beep; 
0077:  MOVLW  01
0078:  BCF    03.5
0079:  XORWF  6E,F
....................       output_bit(LED, beep); 
007A:  BTFSC  6E.0
007B:  GOTO   07E
007C:  BCF    05.7
007D:  GOTO   07F
007E:  BSF    05.7
007F:  BSF    03.5
0080:  BCF    05.7
....................       delay_us(100); 
0081:  CLRWDT
0082:  MOVLW  1F
0083:  MOVWF  77
0084:  DECFSZ 77,F
0085:  GOTO   084
0086:  NOP
0087:  NOP
....................    }; 
0088:  BCF    03.5
0089:  INCF   6F,F
008A:  GOTO   06C
....................    output_high(PIEZO); 
008B:  BSF    03.5
008C:  BCF    05.6
008D:  BCF    03.5
008E:  BSF    05.6
....................    output_high(LED); 
008F:  BSF    03.5
0090:  BCF    05.7
0091:  BCF    03.5
0092:  BSF    05.7
.................... } 
0093:  BCF    0A.3
0094:  GOTO   2A3 (RETURN)
....................  
.................... void cvak()    // pouze cvaknuti piezoelementem bez bliknuti 
.................... { 
....................    output_bit(PIEZO,~input(PIEZO)); 
*
005E:  BSF    03.5
005F:  BSF    05.6
0060:  BCF    03.5
0061:  BTFSS  05.6
0062:  GOTO   065
0063:  BCF    05.6
0064:  GOTO   066
0065:  BSF    05.6
0066:  BSF    03.5
0067:  BCF    05.6
.................... } 
0068:  BCF    03.5
0069:  BCF    0A.3
006A:  GOTO   25A (RETURN)
....................  
.................... void main() 
.................... { 
*
01BA:  CLRF   04
01BB:  MOVLW  1F
01BC:  ANDWF  03,F
01BD:  BSF    03.5
01BE:  BCF    1F.4
01BF:  BCF    1F.5
01C0:  MOVF   1B,W
01C1:  ANDLW  80
01C2:  MOVWF  1B
01C3:  MOVLW  07
01C4:  MOVWF  1C
....................    int8 n; 
....................    int8 perioda; 
....................    int8 razeni; 
....................    int8 uclanku; 
....................  
....................    setup_timer_0(RTCC_INTERNAL);setup_wdt(WDT_1152MS); 
*
01E2:  BSF    03.5
01E3:  MOVF   01,W
01E4:  ANDLW  C0
01E5:  MOVWF  01
01E6:  MOVLW  0E
01E7:  MOVWF  77
01E8:  MOVLW  07
01E9:  BCF    03.5
01EA:  CLRF   01
01EB:  MOVLW  81
01EC:  MOVWF  04
01ED:  MOVF   00,W
01EE:  ANDLW  F0
01EF:  IORLW  07
01F0:  MOVWF  00
01F1:  CLRWDT
01F2:  MOVF   00,W
01F3:  ANDLW  F7
01F4:  BTFSC  77.3
01F5:  ANDLW  F0
01F6:  IORWF  77,W
01F7:  MOVWF  00
....................    setup_timer_1(T1_DISABLED); 
01F8:  CLRF   10
....................    setup_adc_ports(ADC_CLOCK_INTERNAL|sAN0|sAN1|sAN4|VSS_VDD); 
01F9:  BSF    03.5
01FA:  BCF    1F.4
01FB:  BCF    1F.5
01FC:  MOVF   1B,W
01FD:  ANDLW  80
01FE:  IORLW  D3
01FF:  MOVWF  1B
....................    setup_adc(ADC_CLOCK_INTERNAL); 
0200:  BCF    1F.6
0201:  BCF    03.5
0202:  BSF    1F.6
0203:  BSF    1F.7
0204:  BSF    03.5
0205:  BCF    1F.7
0206:  BCF    03.5
0207:  BSF    1F.0
....................    setup_spi(FALSE); 
0208:  BCF    14.5
0209:  BSF    03.5
020A:  BCF    06.2
020B:  BSF    06.1
020C:  BCF    06.4
020D:  MOVLW  00
020E:  BCF    03.5
020F:  MOVWF  14
0210:  BSF    03.5
0211:  MOVWF  14
....................    setup_comparator(NC_NC_NC_NC); 
0212:  MOVLW  07
0213:  MOVWF  1C
0214:  MOVF   05,W
0215:  CLRWDT
0216:  MOVLW  02
0217:  MOVWF  77
0218:  DECFSZ 77,F
0219:  GOTO   218
021A:  NOP
021B:  MOVF   1C,W
021C:  BCF    03.5
021D:  BCF    0D.6
....................    setup_vref(FALSE); 
021E:  BSF    03.5
021F:  CLRF   1D
....................  
....................    output_low(MENIC);      // Vsechno zastav 
0220:  BCF    06.3
0221:  BCF    03.5
0222:  BCF    06.3
....................    output_low(MOTOR); 
0223:  BSF    03.5
0224:  BCF    06.2
0225:  BCF    03.5
0226:  BCF    06.2
....................    output_low(REFPWR); 
0227:  BSF    03.5
0228:  BCF    06.1
0229:  BCF    03.5
022A:  BCF    06.1
....................    output_high(LED); 
022B:  BSF    03.5
022C:  BCF    05.7
022D:  BCF    03.5
022E:  BSF    05.7
....................    output_high(PIEZO); 
022F:  BSF    03.5
0230:  BCF    05.6
0231:  BCF    03.5
0232:  BSF    05.6
....................  
....................    set_adc_channel(NAPETI);     // Vyber AD kanal pro pomerne mereni napeti 
0233:  MOVLW  20
0234:  MOVWF  78
0235:  MOVF   1F,W
0236:  ANDLW  C7
0237:  IORWF  78,W
0238:  MOVWF  1F
....................    set_pwm1_duty(0);       // Spust PWM, ale zatim s trvalou 0 na vystupu 
0239:  CLRF   15
....................    setup_ccp1(CCP_PWM); 
023A:  BSF    03.5
023B:  BCF    06.3
023C:  BCF    03.5
023D:  BCF    06.3
023E:  MOVLW  0C
023F:  MOVWF  17
....................    setup_timer_2(T2_DIV_BY_1,100,1);  // perioda 
0240:  MOVLW  00
0241:  MOVWF  78
0242:  IORLW  04
0243:  MOVWF  12
0244:  MOVLW  64
0245:  BSF    03.5
0246:  MOVWF  12
....................  
....................    setup_oscillator(OSC_4MHZ|OSC_INTRC);  // rozjed PIC (zvysi se odber) 
0247:  MOVLW  62
0248:  MOVWF  0F
....................  
.................... // jsme v depu? 
....................    set_pwm1_duty(DUTY1);          // PWM pro zatizeni clanku pri malem osvetleni 
0249:  MOVLW  02
024A:  BCF    03.5
024B:  MOVWF  15
....................    n=0; 
024C:  CLRF   6A
....................    do 
....................    { 
....................       output_low(REFPWR);  // Vypni napajeni napetove reference, aby se setrilo 
024D:  BSF    03.5
024E:  BCF    06.1
024F:  BCF    03.5
0250:  BCF    06.1
....................       delay_ms(100); 
0251:  MOVLW  64
0252:  MOVWF  6F
0253:  CALL   048
....................       if (4==n++) {cvak(); n=0;};   // Kazdy 4. pruchod cvakni 
0254:  MOVF   6A,W
0255:  INCF   6A,F
0256:  SUBLW  04
0257:  BTFSS  03.2
0258:  GOTO   25B
0259:  GOTO   05E
025A:  CLRF   6A
....................       output_high(REFPWR);          // Zapni napajeni napetove reference 
025B:  BSF    03.5
025C:  BCF    06.1
025D:  BCF    03.5
025E:  BSF    06.1
....................       delay_ms(1);                  // Pockej na ustaleni napeti 
025F:  MOVLW  01
0260:  MOVWF  6F
0261:  CALL   048
....................    } while (read_adc()>REFSTART);   // Odkryl starter clanky? 
0262:  BSF    1F.2
0263:  BTFSC  1F.2
0264:  GOTO   263
0265:  MOVF   1E,W
0266:  SUBLW  5F
0267:  BTFSS  03.0
0268:  GOTO   24D
....................    output_low(REFPWR);     // Vypni napajeni napetove reference, aby se setrilo 
0269:  BSF    03.5
026A:  BCF    06.1
026B:  BCF    03.5
026C:  BCF    06.1
....................  
.................... //   port_b_pullups(TRUE);            // Zapni pullupy, aby slo cist DIPswitch 
.................... //   do 
.................... //   { 
....................       // Precti trimry 
....................       set_adc_channel(PWM);         // Zjisteni nastaveni PWM 
026D:  MOVLW  00
026E:  MOVWF  78
026F:  MOVF   1F,W
0270:  ANDLW  C7
0271:  IORWF  78,W
0272:  MOVWF  1F
....................       delay_us(100);                // Pockej na prepnuti kanalu A/D prevodniku 
0273:  CLRWDT
0274:  MOVLW  1F
0275:  MOVWF  77
0276:  DECFSZ 77,F
0277:  GOTO   276
0278:  NOP
0279:  NOP
....................       perioda=(read_adc()>>1)+40;   // rozsah: 40 az 167 
027A:  BSF    1F.2
027B:  BTFSC  1F.2
027C:  GOTO   27B
027D:  MOVF   1E,W
027E:  MOVWF  77
027F:  BCF    03.0
0280:  RRF    77,F
0281:  MOVF   77,W
0282:  ADDLW  28
0283:  MOVWF  6B
....................  
....................       set_adc_channel(ROZJEZD);     // Zjisteni nastaveni rozjezdu 
0284:  MOVLW  08
0285:  MOVWF  78
0286:  MOVF   1F,W
0287:  ANDLW  C7
0288:  IORWF  78,W
0289:  MOVWF  1F
....................       delay_us(100);                // Pockej na prepnuti kanalu A/D prevodniku 
028A:  CLRWDT
028B:  MOVLW  1F
028C:  MOVWF  77
028D:  DECFSZ 77,F
028E:  GOTO   28D
028F:  NOP
0290:  NOP
....................       razeni=read_adc()>>1;         // rozsah: 0 az 127 
0291:  BSF    1F.2
0292:  BTFSC  1F.2
0293:  GOTO   292
0294:  BCF    03.0
0295:  RRF    1E,W
0296:  MOVWF  6C
....................  
....................       // Rozjeti menice 
....................       set_pwm1_duty(0);    // Zastav PWM, aby slo nastavit jinou frekvenci 
0297:  CLRF   15
....................       setup_timer_2(T2_DIV_BY_1,perioda,1);    // perioda 
0298:  MOVLW  00
0299:  MOVWF  78
029A:  IORLW  04
029B:  MOVWF  12
029C:  MOVF   6B,W
029D:  BSF    03.5
029E:  MOVWF  12
....................       set_pwm1_duty(DUTY2); // PWM pro zatizeni clanku pri jedne 500W zarovce 
029F:  MOVLW  13
02A0:  BCF    03.5
02A1:  MOVWF  15
....................  
....................       pip();                  // potvrzeni odstartovani / servisni mod 
02A2:  GOTO   06B
....................       delay_ms(500); 
02A3:  MOVLW  02
02A4:  MOVWF  6E
02A5:  MOVLW  FA
02A6:  MOVWF  6F
02A7:  CALL   048
02A8:  DECFSZ 6E,F
02A9:  GOTO   2A5
....................  
.................... //   } while (input(SW1));      // Je zapnut servisni mod? SW1(OFF)=ANO 
.................... //   port_b_pullups(FALSE);     // Vypni pullupy, aby se setrilo energii 
....................  
.................... // Regulace nabíjení 
....................    output_high(REFPWR);          // Prepni AD na mereni napeti clanku 
02AA:  BSF    03.5
02AB:  BCF    06.1
02AC:  BCF    03.5
02AD:  BSF    06.1
....................    set_adc_channel(NAPETI);      // Prepni Zmer napeti clanku 
02AE:  MOVLW  20
02AF:  MOVWF  78
02B0:  MOVF   1F,W
02B1:  ANDLW  C7
02B2:  IORWF  78,W
02B3:  MOVWF  1F
....................    delay_us(50);                // Pockej na prepnuti kanalu A/D prevodniku 
02B4:  CLRWDT
02B5:  MOVLW  0F
02B6:  MOVWF  77
02B7:  DECFSZ 77,F
02B8:  GOTO   2B7
02B9:  NOP
....................    for(n=1;n<=10;n++) 
02BA:  MOVLW  01
02BB:  MOVWF  6A
02BC:  MOVF   6A,W
02BD:  SUBLW  0A
02BE:  BTFSS  03.0
02BF:  GOTO   2DC
....................    { 
....................       // Zmer napeti (aktualni zatizeni clanku) 
....................       uclanku=read_adc(); 
02C0:  BSF    1F.2
02C1:  BTFSC  1F.2
02C2:  GOTO   2C1
02C3:  MOVF   1E,W
02C4:  MOVWF  6D
....................       // Uprav parametry menice 
....................       if (uclanku>105) 
02C5:  MOVF   6D,W
02C6:  SUBLW  69
02C7:  BTFSC  03.0
02C8:  GOTO   2CB
....................       { 
....................          perioda++; 
02C9:  INCF   6B,F
....................       } 
....................       else 
02CA:  GOTO   2CC
....................       { 
....................          perioda--; 
02CB:  DECF   6B,F
....................       } 
....................       set_pwm1_duty(0);    // Zastav PWM, aby slo nastavit jinou frekvenci 
02CC:  CLRF   15
....................       setup_timer_2(T2_DIV_BY_1,perioda,1);    // perioda 
02CD:  MOVLW  00
02CE:  MOVWF  78
02CF:  IORLW  04
02D0:  MOVWF  12
02D1:  MOVF   6B,W
02D2:  BSF    03.5
02D3:  MOVWF  12
....................       set_pwm1_duty(DUTY2); // PWM pro zatizeni clanku pri jedne 500W zarovce 
02D4:  MOVLW  13
02D5:  BCF    03.5
02D6:  MOVWF  15
....................       delay_ms(100); 
02D7:  MOVLW  64
02D8:  MOVWF  6F
02D9:  CALL   048
....................    } 
02DA:  INCF   6A,F
02DB:  GOTO   2BC
....................    output_low(REFPWR); 
02DC:  BSF    03.5
02DD:  BCF    06.1
02DE:  BCF    03.5
02DF:  BCF    06.1
....................    // posli telemetrii 
....................    sprintf(AXstring,"p=%u r=%u u=%u", perioda, razeni, uclanku);  // Convert DATA to String. 
*
01E1:  CLRF   69
*
02E0:  MOVLW  40
02E1:  MOVWF  69
02E2:  MOVLW  70
02E3:  MOVWF  70
02E4:  CALL   095
02E5:  MOVLW  3D
02E6:  MOVWF  70
02E7:  CALL   095
02E8:  MOVF   6B,W
02E9:  MOVWF  6E
02EA:  MOVLW  1B
02EB:  MOVWF  6F
02EC:  CALL   0B2
02ED:  MOVLW  20
02EE:  MOVWF  70
02EF:  CALL   095
02F0:  MOVLW  72
02F1:  MOVWF  70
02F2:  CALL   095
02F3:  MOVLW  3D
02F4:  MOVWF  70
02F5:  CALL   095
02F6:  MOVF   6C,W
02F7:  MOVWF  6E
02F8:  MOVLW  1B
02F9:  MOVWF  6F
02FA:  CALL   0B2
02FB:  MOVLW  20
02FC:  MOVWF  70
02FD:  CALL   095
02FE:  MOVLW  75
02FF:  MOVWF  70
0300:  CALL   095
0301:  MOVLW  3D
0302:  MOVWF  70
0303:  CALL   095
0304:  MOVF   6D,W
0305:  MOVWF  6E
0306:  MOVLW  1B
0307:  MOVWF  6F
0308:  CALL   0B2
....................    SendPacket(&AXstring[0]); 
0309:  MOVLW  40
030A:  MOVWF  6E
030B:  GOTO   177
....................  
....................    delay_ms(13000);           // Pockame 14s 
030C:  MOVLW  34
030D:  MOVWF  6E
030E:  MOVLW  FA
030F:  MOVWF  6F
0310:  CALL   048
0311:  DECFSZ 6E,F
0312:  GOTO   30E
....................  
.................... // rozjezd 
....................    SSPSTAT = 0;                  // inicializace SPI jednotky 
0313:  BSF    03.5
0314:  CLRF   14
....................    SSPCON1 = 0x22;               // SPI OSC/64 
0315:  MOVLW  22
0316:  BCF    03.5
0317:  MOVWF  14
....................    MotorPattern=0x02;            // prvni data pro vyslani 
0318:  MOVLW  02
0319:  MOVWF  68
....................    SSPBUF=MotorPattern; 
031A:  MOVF   68,W
031B:  MOVWF  13
....................    enable_interrupts(global); 
031C:  MOVLW  C0
031D:  IORWF  0B,F
....................    enable_interrupts(INT_SSP);   // az budou vyslana, prijde interrupt od SSP 
031E:  BSF    03.5
031F:  BSF    0C.3
....................  
....................    for(n=0; n<=7; n++)     // razeni osmi rychlostnich stupnu 
0320:  BCF    03.5
0321:  CLRF   6A
0322:  MOVF   6A,W
0323:  SUBLW  07
0324:  BTFSS  03.0
0325:  GOTO   32F
....................    { 
....................       MotorPattern=Pattern[n]; 
0326:  MOVF   6A,W
0327:  CALL   037
0328:  MOVWF  78
0329:  MOVWF  68
....................       delay_ms(razeni);             // Pockej na dalsi razeni 
032A:  MOVF   6C,W
032B:  MOVWF  6F
032C:  CALL   048
....................    }; 
032D:  INCF   6A,F
032E:  GOTO   322
....................    SSPSTAT = 0; 
032F:  BSF    03.5
0330:  CLRF   14
....................    SSPCON1 = 0;                     // SPI stop 
0331:  BCF    03.5
0332:  CLRF   14
....................    disable_interrupts(INT_SSP);     // zastav preruseni od SSP 
0333:  BSF    03.5
0334:  BCF    0C.3
....................  
.................... // jedem co to da 
....................    output_high(MOTOR); 
0335:  BCF    06.2
0336:  BCF    03.5
0337:  BSF    06.2
....................  
.................... /* 
....................    if (TRUE)         // Venkovni jizda? 
....................    { 
....................       delay_ms(5000);                  // Venku muzeme jet 5s 
....................       set_pwm1_duty(0);                // Zastav menic 
.................... //      output_low(MOTOR);               // Zastav motor 
....................       while(TRUE) restart_wdt();       // Cekej porad 
....................    }; 
....................    delay_ms(3000);                  
.................... */ 
....................    delay_ms(1300);                  // Nemeli bysme jet dele nez 1,3s :-) 
0338:  MOVLW  0A
0339:  MOVWF  6E
033A:  MOVLW  82
033B:  MOVWF  6F
033C:  CALL   048
033D:  DECFSZ 6E,F
033E:  GOTO   33A
....................    output_low(MOTOR);               // Zastav motor 
033F:  BSF    03.5
0340:  BCF    06.2
0341:  BCF    03.5
0342:  BCF    06.2
....................                                     // Menic je stale zapnut a zatezuje clanky 
....................  
....................    while(TRUE);            // Cekej, dokud se neztrati svetlo, 
0343:  GOTO   343
....................                            // nebo prijde WatchDog 
....................  
.................... } 
0344:  SLEEP

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