Subversion Repositories svnkaklik

Rev

Blame | Last modification | View Log | Download

CCS PCM C Compiler, Version 3.245, 27853               27-I-07 23:47

               Filename: C:\PIC\laserus\873\laserus.lst

               ROM used: 358 words (9%)
                         Largest free fragment is 2048
               RAM used: 23 (12%) at main() level
                         29 (15%) worst case
               Stack:    2 worst case (1 in main + 1 for interrupts)

*
0000:  MOVLW  00
0001:  MOVWF  0A
0002:  GOTO   0E3
0003:  NOP
0004:  MOVWF  7F
0005:  SWAPF  03,W
0006:  CLRF   03
0007:  MOVWF  26
0008:  MOVF   7F,W
0009:  MOVWF  25
000A:  MOVF   0A,W
000B:  MOVWF  2D
000C:  CLRF   0A
000D:  SWAPF  25,F
000E:  MOVF   04,W
000F:  MOVWF  27
0010:  MOVF   20,W
0011:  MOVWF  28
0012:  MOVF   21,W
0013:  MOVWF  29
0014:  MOVF   22,W
0015:  MOVWF  2A
0016:  MOVF   23,W
0017:  MOVWF  2B
0018:  MOVF   24,W
0019:  MOVWF  2C
001A:  BCF    03.7
001B:  BCF    03.5
001C:  BTFSS  0B.4
001D:  GOTO   020
001E:  BTFSC  0B.1
001F:  GOTO   033
0020:  MOVF   27,W
0021:  MOVWF  04
0022:  MOVF   28,W
0023:  MOVWF  20
0024:  MOVF   29,W
0025:  MOVWF  21
0026:  MOVF   2A,W
0027:  MOVWF  22
0028:  MOVF   2B,W
0029:  MOVWF  23
002A:  MOVF   2C,W
002B:  MOVWF  24
002C:  MOVF   2D,W
002D:  MOVWF  0A
002E:  SWAPF  26,W
002F:  MOVWF  03
0030:  SWAPF  7F,F
0031:  SWAPF  7F,W
0032:  RETFIE
0033:  BCF    0A.3
0034:  GOTO   035
.................... #include "laserus.h" 
.................... #include <16F873.h> 
.................... //////// Standard Header file for the PIC16F873 device //////////////// 
.................... #device PIC16F873 
.................... #list 
....................  
.................... #device adc=8 
....................  
.................... #FUSES NOWDT                       //No Watch Dog Timer 
.................... #FUSES XT                          //Crystal osc <= 4mhz 
.................... #FUSES NOPUT                       //No Power Up Timer 
.................... #FUSES NOPROTECT                   //Code not protected from reading 
.................... #FUSES NOBROWNOUT                  //No brownout reset 
.................... #FUSES NOLVP                       //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O 
.................... #FUSES NOCPD                       //No EE protection 
.................... #FUSES NOWRT                       //Program memory not write protected 
.................... #FUSES NODEBUG                     //No Debug mode for ICD 
....................  
.................... #use delay(clock=4000000) 
*
00CE:  MOVLW  35
00CF:  MOVWF  04
00D0:  MOVF   00,W
00D1:  BTFSC  03.2
00D2:  GOTO   0E2
00D3:  MOVLW  01
00D4:  MOVWF  21
00D5:  CLRF   20
00D6:  DECFSZ 20,F
00D7:  GOTO   0D6
00D8:  DECFSZ 21,F
00D9:  GOTO   0D5
00DA:  MOVLW  4A
00DB:  MOVWF  20
00DC:  DECFSZ 20,F
00DD:  GOTO   0DC
00DE:  NOP
00DF:  NOP
00E0:  DECFSZ 00,F
00E1:  GOTO   0D3
00E2:  RETLW  00
....................  
....................  
....................  
.................... #define SERVO PIN_B5    // Vystup pro rizeni serva 
.................... #define LASER PIN_B4    // Vstup pro cteni laseru 
....................  
.................... #define MOT_DIR_L PIN_C0    // Rizeni smeru otaceni motoru 
.................... #define MOT_DIR_R PIN_C3 
....................  
.................... // kroutitka 
.................... #define  CERVENA  0  // AN0 
.................... #define  CERNA    1  // AN1 
.................... //#define  ZELENA   3  // AN3 
.................... //#define  MODRA    4  // AN4 
....................  
.................... #byte INTCON      = 0x0B         // Interrupt configuration register 
....................    #bit GIE       = INTCON.7 
....................    #bit PEIE      = INTCON.6 
....................    #bit TMR0IE    = INTCON.5 
....................    #bit INT0IE    = INTCON.4 
....................    #bit RBIE      = INTCON.3 
....................    #bit TMR0IF    = INTCON.2 
....................    #bit INT0IF    = INTCON.1 
....................    #bit RBIF      = INTCON.0 
....................  
.................... boolean edge; 
.................... int8 uhel, olduhel; 
.................... int16 uhel16; 
....................  
.................... #int_EXT 
.................... EXT_isr() 
.................... { 
....................    int n, t1, t2, t; 
....................  
....................    set_timer0(0);          // Vynulovani casovace pro 2ms 
*
0035:  CLRF   01
....................    output_high(SERVO); 
0036:  BSF    03.5
0037:  BCF    06.5
0038:  BCF    03.5
0039:  BSF    06.5
....................    while(get_timer0()<(1000/256));    // Ceka 1ms 
003A:  MOVF   01,W
003B:  SUBLW  02
003C:  BTFSC  03.0
003D:  GOTO   03A
....................    for(n=uhel; n>0; n--) delay_us(3); // Sirka impulzu podle uhlu 
003E:  MOVF   2F,W
003F:  MOVWF  37
0040:  MOVF   37,F
0041:  BTFSC  03.2
0042:  GOTO   048
0043:  NOP
0044:  NOP
0045:  NOP
0046:  DECF   37,F
0047:  GOTO   040
....................    output_low(SERVO); 
0048:  BSF    03.5
0049:  BCF    06.5
004A:  BCF    03.5
004B:  BCF    06.5
....................    while(get_timer0()<(3000/256)); // Ceka do 3ms, nez zacne scanovat 
004C:  MOVF   01,W
004D:  SUBLW  0A
004E:  BTFSC  03.0
004F:  GOTO   04C
....................  
....................    set_timer0(0);          // Vynulovani casovace pro zjisteni polohy cary 
0050:  CLRF   01
....................    if(edge)                // Zrcatko prejizdelo tam nebo zpet? 
0051:  BTFSS  2E.0
0052:  GOTO   094
....................    { 
....................      edge=false; 
0053:  BCF    2E.0
....................      ext_int_edge(H_TO_L);      // Pristi inerrupt bude od opacne hrany 
0054:  BSF    03.5
0055:  BCF    01.6
....................      INT0IF=0;                  // Povoleni dalsiho preruseni 
0056:  BCF    03.5
0057:  BCF    0B.1
....................      enable_interrupts(INT_EXT); 
0058:  BSF    0B.4
....................      enable_interrupts(GLOBAL); 
0059:  MOVLW  C0
005A:  IORWF  0B,F
.................... //     do 
....................      { 
....................        while(0==input(LASER));  // Ceka na detekci cary 
005B:  BSF    03.5
005C:  BSF    06.4
005D:  MOVLW  00
005E:  BCF    03.5
005F:  BTFSC  06.4
0060:  MOVLW  01
0061:  XORLW  00
0062:  BTFSC  03.2
0063:  GOTO   05B
.................... //   output_high(SERVO); 
....................        t1=get_timer0();         // Poznamena cas nabezne hrany 
0064:  MOVF   01,W
0065:  MOVWF  38
....................        while(1==input(LASER));  // Ceka az zkonci cara 
0066:  BSF    03.5
0067:  BSF    06.4
0068:  MOVLW  00
0069:  BCF    03.5
006A:  BTFSC  06.4
006B:  MOVLW  01
006C:  SUBLW  01
006D:  BTFSC  03.2
006E:  GOTO   066
.................... //   output_low(SERVO); 
....................        t2=get_timer0();         // Poznamena cas sestupne hrany 
006F:  MOVF   01,W
0070:  MOVWF  39
....................        t=t2-t1; 
0071:  MOVF   38,W
0072:  SUBWF  39,W
0073:  MOVWF  3A
....................      } while((t<3) || (t>20)); // Cara je detekovana, kdyz trva mezi xx ms 
0074:  MOVF   3A,W
0075:  SUBLW  02
0076:  BTFSC  03.0
0077:  GOTO   074
0078:  MOVF   3A,W
0079:  SUBLW  14
007A:  BTFSS  03.0
007B:  GOTO   074
.................... //     if ((t>3) && (t<20)) uhel=(160-(read_adc()>>2))-t1; 
.................... //     if (abs(olduhel-uhel)<40) 
....................      { 
....................        uhel=(160-(read_adc()>>2))-t1; 
007C:  BSF    1F.2
007D:  BTFSC  1F.2
007E:  GOTO   07D
007F:  MOVF   1E,W
0080:  MOVWF  20
0081:  RRF    20,F
0082:  RRF    20,F
0083:  MOVLW  3F
0084:  ANDWF  20,F
0085:  MOVF   20,W
0086:  SUBLW  A0
0087:  MOVWF  21
0088:  MOVF   38,W
0089:  SUBWF  21,W
008A:  MOVWF  2F
....................        olduhel=uhel; 
008B:  MOVF   2F,W
008C:  MOVWF  30
....................      }; 
.................... //     uhel16=uhel; 
.................... //     set_pwm1_duty(250-(uhel16<<2));    // Elektronicky diferencial 
.................... //     set_pwm2_duty((uhel16)); 
....................      set_adc_channel(CERNA); 
008D:  MOVLW  08
008E:  MOVWF  21
008F:  MOVF   1F,W
0090:  ANDLW  C7
0091:  IORWF  21,W
0092:  MOVWF  1F
....................    } 
....................    else 
0093:  GOTO   0CA
....................    { 
....................      edge=true; 
0094:  BSF    2E.0
....................      ext_int_edge(L_TO_H);      // Pristi inerrupt bude od opacne hrany 
0095:  BSF    03.5
0096:  BSF    01.6
....................      INT0IF=0;                  // Povoleni dalsiho preruseni 
0097:  BCF    03.5
0098:  BCF    0B.1
....................      enable_interrupts(INT_EXT); 
0099:  BSF    0B.4
....................      enable_interrupts(GLOBAL); 
009A:  MOVLW  C0
009B:  IORWF  0B,F
.................... //     do 
....................      { 
....................        while(0==input(LASER));  // Ceka na detekci cary 
009C:  BSF    03.5
009D:  BSF    06.4
009E:  MOVLW  00
009F:  BCF    03.5
00A0:  BTFSC  06.4
00A1:  MOVLW  01
00A2:  XORLW  00
00A3:  BTFSC  03.2
00A4:  GOTO   09C
....................        t1=get_timer0();         // Poznamena cas nabezne hrany 
00A5:  MOVF   01,W
00A6:  MOVWF  38
....................        while(1==input(LASER));  // Ceka az zkonci cara 
00A7:  BSF    03.5
00A8:  BSF    06.4
00A9:  MOVLW  00
00AA:  BCF    03.5
00AB:  BTFSC  06.4
00AC:  MOVLW  01
00AD:  SUBLW  01
00AE:  BTFSC  03.2
00AF:  GOTO   0A7
....................        t2=get_timer0();         // Poznamena cas sestupne hrany 
00B0:  MOVF   01,W
00B1:  MOVWF  39
....................        t=t2-t1; 
00B2:  MOVF   38,W
00B3:  SUBWF  39,W
00B4:  MOVWF  3A
....................      } while((t<3) || (t>20)); // Cara je detekovana, kdyz trva mezi xx ms 
00B5:  MOVF   3A,W
00B6:  SUBLW  02
00B7:  BTFSC  03.0
00B8:  GOTO   0B5
00B9:  MOVF   3A,W
00BA:  SUBLW  14
00BB:  BTFSS  03.0
00BC:  GOTO   0B5
....................      if (abs(olduhel-uhel)<40) 
00BD:  MOVF   2F,W
00BE:  SUBWF  30,W
00BF:  MOVWF  3B
00C0:  MOVF   3B,W
00C1:  SUBLW  27
00C2:  BTFSS  03.0
00C3:  GOTO   0C4
....................      { 
.................... //       uhel=((read_adc()>>2)+32)+t1; 
.................... //       olduhel=uhel; 
....................      }; 
....................      set_adc_channel(CERVENA); 
00C4:  MOVLW  00
00C5:  MOVWF  21
00C6:  MOVF   1F,W
00C7:  ANDLW  C7
00C8:  IORWF  21,W
00C9:  MOVWF  1F
....................    } 
....................    while(true); 
00CA:  GOTO   0CA
.................... } 
....................  
....................  
....................  
00CB:  BCF    0B.1
00CC:  BCF    0A.3
00CD:  GOTO   020
.................... void main() 
.................... { 
*
00E3:  CLRF   04
00E4:  MOVLW  1F
00E5:  ANDWF  03,F
00E6:  BSF    03.5
00E7:  BSF    1F.0
00E8:  BSF    1F.1
00E9:  BSF    1F.2
00EA:  BCF    1F.3
....................  
....................    setup_adc_ports(ALL_ANALOG);  // Analogove vstupy pro cteni trimru 
*
00EE:  BSF    03.5
00EF:  BCF    1F.0
00F0:  BCF    1F.1
00F1:  BCF    1F.2
00F2:  BCF    1F.3
....................    setup_adc(ADC_CLOCK_INTERNAL); 
00F3:  BCF    03.5
00F4:  BSF    1F.6
00F5:  BSF    1F.7
00F6:  BSF    03.5
00F7:  BCF    1F.7
00F8:  BCF    03.5
00F9:  BSF    1F.0
....................    setup_spi(FALSE); 
*
00EB:  MOVLW  FF
00EC:  BCF    03.5
00ED:  MOVWF  33
*
00FA:  BCF    14.5
00FB:  BCF    33.5
00FC:  MOVF   33,W
00FD:  BSF    03.5
00FE:  MOVWF  07
00FF:  BCF    03.5
0100:  BSF    33.4
0101:  MOVF   33,W
0102:  BSF    03.5
0103:  MOVWF  07
0104:  BCF    03.5
0105:  BCF    33.3
0106:  MOVF   33,W
0107:  BSF    03.5
0108:  MOVWF  07
0109:  MOVLW  00
010A:  BCF    03.5
010B:  MOVWF  14
010C:  BSF    03.5
010D:  MOVWF  14
....................    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); // Casovac pro cteni laseru 
010E:  MOVF   01,W
010F:  ANDLW  C0
0110:  IORLW  07
0111:  MOVWF  01
....................    setup_timer_1(T1_DISABLED); 
0112:  BCF    03.5
0113:  CLRF   10
....................    setup_timer_2(T2_DIV_BY_4,255,1); // Casovac pro PWM cca 900Hz 
0114:  MOVLW  00
0115:  MOVWF  21
0116:  IORLW  05
0117:  MOVWF  12
0118:  MOVLW  FF
0119:  BSF    03.5
011A:  MOVWF  12
....................    setup_ccp1(CCP_PWM); // Nastaveni PWM pro diferencial RC1, RC2 
011B:  BCF    03.5
011C:  BCF    33.2
011D:  MOVF   33,W
011E:  BSF    03.5
011F:  MOVWF  07
0120:  BCF    03.5
0121:  BCF    07.2
0122:  MOVLW  0C
0123:  MOVWF  17
....................    setup_ccp2(CCP_PWM); 
0124:  BCF    33.1
0125:  MOVF   33,W
0126:  BSF    03.5
0127:  MOVWF  07
0128:  BCF    03.5
0129:  BCF    07.1
012A:  MOVLW  0C
012B:  MOVWF  1D
....................  
....................    set_pwm1_duty(90);    // Zastaveni PWM 
012C:  MOVLW  5A
012D:  MOVWF  15
....................    set_pwm2_duty(90); 
012E:  MOVWF  1B
....................  
....................    delay_ms(100); 
012F:  MOVLW  64
0130:  MOVWF  35
0131:  CALL   0CE
....................    set_adc_channel(CERVENA); 
0132:  MOVLW  00
0133:  MOVWF  21
0134:  MOVF   1F,W
0135:  ANDLW  C7
0136:  IORWF  21,W
0137:  MOVWF  1F
....................    Delay_ms(1); 
0138:  MOVLW  01
0139:  MOVWF  35
013A:  CALL   0CE
....................  
....................    ext_int_edge(L_TO_H); 
013B:  BSF    03.5
013C:  BSF    01.6
....................    edge=true; 
013D:  BCF    03.5
013E:  BSF    2E.0
....................    uhel=((read_adc()>>2)+32)+30; 
013F:  BSF    1F.2
0140:  BTFSC  1F.2
0141:  GOTO   140
0142:  MOVF   1E,W
0143:  MOVWF  20
0144:  RRF    20,F
0145:  RRF    20,F
0146:  MOVLW  3F
0147:  ANDWF  20,F
0148:  MOVF   20,W
0149:  ADDLW  20
014A:  ADDLW  1E
014B:  MOVWF  2F
....................    olduhel=uhel; 
014C:  MOVF   2F,W
014D:  MOVWF  30
....................  
....................    enable_interrupts(INT_EXT); 
014E:  BSF    0B.4
....................    enable_interrupts(GLOBAL); 
014F:  MOVLW  C0
0150:  IORWF  0B,F
....................  
....................    delay_ms(1000); 
0151:  MOVLW  04
0152:  MOVWF  34
0153:  MOVLW  FA
0154:  MOVWF  35
0155:  CALL   0CE
0156:  DECFSZ 34,F
0157:  GOTO   153
....................  
....................    output_high(MOT_DIR_L);     // Oba motory vpred 
0158:  BCF    33.0
0159:  MOVF   33,W
015A:  BSF    03.5
015B:  MOVWF  07
015C:  BCF    03.5
015D:  BSF    07.0
....................    output_high(MOT_DIR_R); 
015E:  BCF    33.3
015F:  MOVF   33,W
0160:  BSF    03.5
0161:  MOVWF  07
0162:  BCF    03.5
0163:  BSF    07.3
....................  
.................... while(true); 
0164:  GOTO   164
.................... } 
0165:  SLEEP

Configuration Fuses:
   Word  1: 3F39   XT NOWDT NOPUT NOPROTECT NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG