Subversion Repositories svnkaklik

Compare Revisions

Ignore whitespace Rev 134 → Rev 135

/roboti/istrobot/laserus/873/laserus.lst
0,0 → 1,528
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