0,0 → 1,601 |
CCS PCM C Compiler, Version 3.221, 27853 28-VIII-05 19:00 |
|
Filename: D:\KAKLIK\programy\PIC_C\roboti\solarni\2005\jump\menic.LST |
|
ROM used: 433 words (11%) |
Largest free fragment is 2048 |
RAM used: 18 (10%) at main() level |
19 (11%) worst case |
Stack: 2 worst case (1 in main + 1 for interrupts) |
|
* |
0000: MOVLW 00 |
0001: MOVWF 0A |
0002: GOTO 090 |
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 |
.................... #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=4000000) |
* |
0048: MOVLW 2D |
0049: MOVWF 04 |
004A: MOVF 00,W |
004B: BTFSC 03.2 |
004C: GOTO 05C |
004D: MOVLW 01 |
004E: MOVWF 78 |
004F: CLRF 77 |
0050: DECFSZ 77,F |
0051: GOTO 050 |
0052: DECFSZ 78,F |
0053: GOTO 04F |
0054: MOVLW 4A |
0055: MOVWF 77 |
0056: DECFSZ 77,F |
0057: GOTO 056 |
0058: NOP |
0059: NOP |
005A: DECFSZ 00,F |
005B: GOTO 04D |
005C: RETLW 00 |
.................... |
.................... |
.................... |
.................... #define RAZENI 60 // Po kolika ms se bude menit rychlost pro rozjizdeni |
.................... #define REFNOM 107 // Hodnota odpovidajici 1,2V pri nominalnim zatizeni |
.................... #define REFSTART 80 // Hodnota odpovidajici 1,2V pri nezatizenych clancich |
.................... |
.................... #define PIEZO PIN_A6 // Jeden pol piezo reproduktoru |
.................... #define LED PIN_A7 // LED |
.................... #define MENIC PIN_B3 // Spinani tranzistoru menice |
.................... #define REFPWR PIN_B1 // Napajeni zdroje referencniho napeti |
.................... #define MOTOR PIN_B2 // Spinani tranzistoru motoru |
.................... |
.................... #byte SSPBUF = 0x13 // Registry 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 29,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++) |
* |
006A: CLRF 2D |
006B: MOVF 2D,W |
006C: SUBLW F9 |
006D: BTFSS 03.0 |
006E: GOTO 087 |
.................... { |
.................... output_bit(PIEZO, beep); |
006F: BTFSC 2C.0 |
0070: GOTO 073 |
0071: BCF 05.6 |
0072: GOTO 074 |
0073: BSF 05.6 |
0074: BSF 03.5 |
0075: BCF 05.6 |
.................... beep=~beep; |
0076: MOVLW 01 |
0077: BCF 03.5 |
0078: XORWF 2C,F |
.................... output_bit(LED, beep); |
0079: BTFSC 2C.0 |
007A: GOTO 07D |
007B: BCF 05.7 |
007C: GOTO 07E |
007D: BSF 05.7 |
007E: BSF 03.5 |
007F: BCF 05.7 |
.................... delay_us(100); |
0080: MOVLW 21 |
0081: MOVWF 77 |
0082: DECFSZ 77,F |
0083: GOTO 082 |
.................... }; |
0084: BCF 03.5 |
0085: INCF 2D,F |
0086: GOTO 06B |
.................... output_high(PIEZO); |
0087: BSF 03.5 |
0088: BCF 05.6 |
0089: BCF 03.5 |
008A: BSF 05.6 |
.................... output_high(LED); |
008B: BSF 03.5 |
008C: BCF 05.7 |
008D: BCF 03.5 |
008E: BSF 05.7 |
.................... } |
008F: RETLW 00 |
.................... |
.................... void cvak() // pouze cvaknuti piezoelementem bez bliknuti |
.................... { |
.................... output_bit(PIEZO,~input(PIEZO)); |
* |
005D: BSF 03.5 |
005E: BSF 05.6 |
005F: BCF 03.5 |
0060: BTFSS 05.6 |
0061: GOTO 064 |
0062: BCF 05.6 |
0063: GOTO 065 |
0064: BSF 05.6 |
0065: BSF 03.5 |
0066: BCF 05.6 |
.................... } |
0067: BCF 03.5 |
0068: BCF 0A.3 |
0069: GOTO 106 (RETURN) |
.................... |
.................... void main() |
.................... { |
* |
0090: CLRF 04 |
0091: MOVLW 1F |
0092: ANDWF 03,F |
0093: BSF 03.5 |
0094: BCF 1F.4 |
0095: BCF 1F.5 |
0096: MOVF 1B,W |
0097: ANDLW 80 |
0098: MOVWF 1B |
0099: MOVLW 07 |
009A: MOVWF 1C |
009B: MOVF 1C,W |
009C: BCF 03.5 |
009D: BCF 0D.6 |
009E: MOVLW 60 |
009F: BSF 03.5 |
00A0: MOVWF 0F |
.................... int8 n; |
.................... int8 perioda; |
.................... |
.................... setup_adc_ports(ADC_CLOCK_INTERNAL|sAN4|VSS_VDD); |
00A1: BCF 1F.4 |
00A2: BCF 1F.5 |
00A3: MOVF 1B,W |
00A4: ANDLW 80 |
00A5: IORLW D0 |
00A6: MOVWF 1B |
.................... setup_adc(ADC_CLOCK_INTERNAL); |
00A7: BCF 1F.6 |
00A8: BCF 03.5 |
00A9: BSF 1F.6 |
00AA: BSF 1F.7 |
00AB: BSF 03.5 |
00AC: BCF 1F.7 |
00AD: BCF 03.5 |
00AE: BSF 1F.0 |
.................... setup_spi(FALSE); |
00AF: BCF 14.5 |
00B0: BSF 03.5 |
00B1: BCF 06.2 |
00B2: BSF 06.1 |
00B3: BCF 06.4 |
00B4: MOVLW 00 |
00B5: BCF 03.5 |
00B6: MOVWF 14 |
00B7: BSF 03.5 |
00B8: MOVWF 14 |
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); |
00B9: MOVF 01,W |
00BA: ANDLW C0 |
00BB: IORLW 07 |
00BC: MOVWF 01 |
.................... setup_timer_1(T1_DISABLED); |
00BD: BCF 03.5 |
00BE: CLRF 10 |
.................... setup_comparator(NC_NC_NC_NC); |
00BF: MOVLW 07 |
00C0: BSF 03.5 |
00C1: MOVWF 1C |
00C2: MOVF 05,W |
00C3: MOVLW 03 |
00C4: MOVWF 77 |
00C5: DECFSZ 77,F |
00C6: GOTO 0C5 |
00C7: MOVF 1C,W |
00C8: BCF 03.5 |
00C9: BCF 0D.6 |
.................... setup_vref(FALSE); |
00CA: BSF 03.5 |
00CB: CLRF 1D |
.................... |
.................... output_low(MENIC); // Vsechno zastav |
00CC: BCF 06.3 |
00CD: BCF 03.5 |
00CE: BCF 06.3 |
.................... output_low(MOTOR); |
00CF: BSF 03.5 |
00D0: BCF 06.2 |
00D1: BCF 03.5 |
00D2: BCF 06.2 |
.................... output_low(REFPWR); |
00D3: BSF 03.5 |
00D4: BCF 06.1 |
00D5: BCF 03.5 |
00D6: BCF 06.1 |
.................... output_high(LED); |
00D7: BSF 03.5 |
00D8: BCF 05.7 |
00D9: BCF 03.5 |
00DA: BSF 05.7 |
.................... output_high(PIEZO); |
00DB: BSF 03.5 |
00DC: BCF 05.6 |
00DD: BCF 03.5 |
00DE: BSF 05.6 |
.................... |
.................... set_adc_channel(4); // Vyber AD kanal pro pomerne mereni napeti |
00DF: MOVLW 20 |
00E0: MOVWF 78 |
00E1: MOVF 1F,W |
00E2: ANDLW C7 |
00E3: IORWF 78,W |
00E4: MOVWF 1F |
.................... set_pwm1_duty(0); // Spust PWM, ale zatim s trvalou 0 na vystupu |
00E5: CLRF 15 |
.................... setup_ccp1(CCP_PWM); // PWM pro zatizeni clanku v seru |
00E6: BSF 03.5 |
00E7: BCF 06.3 |
00E8: BCF 03.5 |
00E9: BCF 06.3 |
00EA: MOVLW 0C |
00EB: MOVWF 17 |
.................... setup_timer_2(T2_DIV_BY_1,100,1); // perioda |
00EC: MOVLW 00 |
00ED: MOVWF 78 |
00EE: IORLW 04 |
00EF: MOVWF 12 |
00F0: MOVLW 64 |
00F1: BSF 03.5 |
00F2: MOVWF 12 |
.................... |
.................... setup_oscillator(OSC_4MHZ|OSC_INTRC); // rozjed PIC (zvysi se odber) |
00F3: MOVLW 62 |
00F4: MOVWF 0F |
.................... |
.................... |
.................... // jsme v depu? |
.................... set_pwm1_duty(2); // PWM pro zatizeni clanku pri malem osvetleni |
00F5: MOVLW 02 |
00F6: BCF 03.5 |
00F7: MOVWF 15 |
.................... n=0; |
00F8: CLRF 2A |
.................... do |
.................... { |
.................... output_low(REFPWR); |
00F9: BSF 03.5 |
00FA: BCF 06.1 |
00FB: BCF 03.5 |
00FC: BCF 06.1 |
.................... delay_ms(100); |
00FD: MOVLW 64 |
00FE: MOVWF 2D |
00FF: CALL 048 |
.................... if (4==n++) {cvak(); n=0;}; |
0100: MOVF 2A,W |
0101: INCF 2A,F |
0102: SUBLW 04 |
0103: BTFSS 03.2 |
0104: GOTO 107 |
0105: GOTO 05D |
0106: CLRF 2A |
.................... output_high(REFPWR); // zapni napajeni napetove reference |
0107: BSF 03.5 |
0108: BCF 06.1 |
0109: BCF 03.5 |
010A: BSF 06.1 |
.................... delay_ms(1); |
010B: MOVLW 01 |
010C: MOVWF 2D |
010D: CALL 048 |
.................... } while (read_adc()>REFSTART); // Odkryl starter clanky? |
010E: BSF 1F.2 |
010F: BTFSC 1F.2 |
0110: GOTO 10F |
0111: MOVF 1E,W |
0112: SUBLW 50 |
0113: BTFSS 03.0 |
0114: GOTO 0F9 |
.................... output_low(REFPWR); |
0115: BSF 03.5 |
0116: BCF 06.1 |
0117: BCF 03.5 |
0118: BCF 06.1 |
.................... |
.................... pip(); // potvrzeni odstartovani |
0119: CALL 06A |
.................... |
.................... // regulace |
.................... perioda=100; // nastav optimalni periodu pri jedne 500W zarovce |
011A: MOVLW 64 |
011B: MOVWF 2B |
.................... for(n=0;n<=7;n++) |
011C: CLRF 2A |
011D: MOVF 2A,W |
011E: SUBLW 07 |
011F: BTFSS 03.0 |
0120: GOTO 143 |
.................... { |
.................... set_pwm1_duty(0); |
0121: CLRF 15 |
.................... setup_timer_2(T2_DIV_BY_1,perioda,1); // perioda |
0122: MOVLW 00 |
0123: MOVWF 78 |
0124: IORLW 04 |
0125: MOVWF 12 |
0126: MOVF 2B,W |
0127: BSF 03.5 |
0128: MOVWF 12 |
.................... set_pwm1_duty(19); // delka sepnuti |
0129: MOVLW 13 |
012A: BCF 03.5 |
012B: MOVWF 15 |
.................... delay_ms(100); |
012C: MOVLW 64 |
012D: MOVWF 2D |
012E: CALL 048 |
.................... output_high(REFPWR); // zapni napajeni napetove reference |
012F: BSF 03.5 |
0130: BCF 06.1 |
0131: BCF 03.5 |
0132: BSF 06.1 |
.................... delay_ms(1); |
0133: MOVLW 01 |
0134: MOVWF 2D |
0135: CALL 048 |
.................... if (read_adc()<REFNOM) perioda--; // zvyseni zatizeni menice |
0136: BSF 1F.2 |
0137: BTFSC 1F.2 |
0138: GOTO 137 |
0139: MOVF 1E,W |
013A: SUBLW 6A |
013B: BTFSC 03.0 |
013C: DECF 2B,F |
.................... output_low(REFPWR); // konec mereni, odpoj napajeni reference |
013D: BSF 03.5 |
013E: BCF 06.1 |
013F: BCF 03.5 |
0140: BCF 06.1 |
.................... }; |
0141: INCF 2A,F |
0142: GOTO 11D |
.................... |
.................... // nabíjíme |
.................... delay_ms(14000); |
0143: MOVLW 38 |
0144: MOVWF 2C |
0145: MOVLW FA |
0146: MOVWF 2D |
0147: CALL 048 |
0148: DECFSZ 2C,F |
0149: GOTO 145 |
.................... |
.................... // rozjezd |
.................... SSPSTAT = 0; |
014A: BSF 03.5 |
014B: CLRF 14 |
.................... SSPCON1 = 0x22; // SPI OSC/64 |
014C: MOVLW 22 |
014D: BCF 03.5 |
014E: MOVWF 14 |
.................... MotorPattern=0x02; // prvni data pro vyslani |
014F: MOVLW 02 |
0150: MOVWF 29 |
.................... SSPBUF=MotorPattern; // data pro vyslani |
0151: MOVF 29,W |
0152: MOVWF 13 |
.................... enable_interrupts(global); |
0153: MOVLW C0 |
0154: IORWF 0B,F |
.................... enable_interrupts(INT_SSP); // az budou vyslana, prijde interrupt od SSP |
0155: BSF 03.5 |
0156: BSF 0C.3 |
.................... |
.................... for(n=0; n<=7; n++) // razeni osmi rychlostnich stupnu |
0157: BCF 03.5 |
0158: CLRF 2A |
0159: MOVF 2A,W |
015A: SUBLW 07 |
015B: BTFSS 03.0 |
015C: GOTO 166 |
.................... { |
.................... MotorPattern=Pattern[n]; |
015D: MOVF 2A,W |
015E: CALL 037 |
015F: MOVWF 78 |
0160: MOVWF 29 |
.................... delay_ms(RAZENI); // Pockej na dalsi razeni |
0161: MOVLW 3C |
0162: MOVWF 2D |
0163: CALL 048 |
.................... }; |
0164: INCF 2A,F |
0165: GOTO 159 |
.................... SSPSTAT = 0; |
0166: BSF 03.5 |
0167: CLRF 14 |
.................... SSPCON1 = 0; // SPI stop |
0168: BCF 03.5 |
0169: CLRF 14 |
.................... disable_interrupts(INT_SSP); // zastav preruseni od SSP |
016A: BSF 03.5 |
016B: BCF 0C.3 |
.................... |
.................... // jedem co to da |
.................... output_high(MOTOR); |
016C: BCF 06.2 |
016D: BCF 03.5 |
016E: BSF 06.2 |
.................... delay_ms(1000); |
016F: MOVLW 04 |
0170: MOVWF 2C |
0171: MOVLW FA |
0172: MOVWF 2D |
0173: CALL 048 |
0174: DECFSZ 2C,F |
0175: GOTO 171 |
.................... output_low(MOTOR); |
0176: BSF 03.5 |
0177: BCF 06.2 |
0178: BCF 03.5 |
0179: BCF 06.2 |
.................... set_pwm1_duty(0); // zastav menic |
017A: CLRF 15 |
.................... |
.................... // vybiti kondenzatoru pro ucely mereni |
.................... pip(); |
017B: CALL 06A |
.................... delay_ms(2000); |
017C: MOVLW 08 |
017D: MOVWF 2C |
017E: MOVLW FA |
017F: MOVWF 2D |
0180: CALL 048 |
0181: DECFSZ 2C,F |
0182: GOTO 17E |
.................... pip(); |
0183: CALL 06A |
.................... output_high(MOTOR); |
0184: BSF 03.5 |
0185: BCF 06.2 |
0186: BCF 03.5 |
0187: BSF 06.2 |
.................... |
.................... while(true) |
.................... { |
.................... output_high(LED); |
0188: BSF 03.5 |
0189: BCF 05.7 |
018A: BCF 03.5 |
018B: BSF 05.7 |
.................... output_low(PIEZO); |
018C: BSF 03.5 |
018D: BCF 05.6 |
018E: BCF 03.5 |
018F: BCF 05.6 |
.................... delay_ms(300); |
0190: MOVLW 02 |
0191: MOVWF 2C |
0192: MOVLW 96 |
0193: MOVWF 2D |
0194: CALL 048 |
0195: DECFSZ 2C,F |
0196: GOTO 192 |
.................... output_low(LED); |
0197: BSF 03.5 |
0198: BCF 05.7 |
0199: BCF 03.5 |
019A: BCF 05.7 |
.................... output_high(PIEZO); |
019B: BSF 03.5 |
019C: BCF 05.6 |
019D: BCF 03.5 |
019E: BSF 05.6 |
.................... delay_ms(300); |
019F: MOVLW 02 |
01A0: MOVWF 2C |
01A1: MOVLW 96 |
01A2: MOVWF 2D |
01A3: CALL 048 |
01A4: DECFSZ 2C,F |
01A5: GOTO 1A1 |
.................... } |
01A6: GOTO 188 |
.................... // priprava na dalsi jizdu |
.................... delay_ms(5000); |
01A7: MOVLW 14 |
01A8: MOVWF 2C |
01A9: MOVLW FA |
01AA: MOVWF 2D |
01AB: CALL 048 |
01AC: DECFSZ 2C,F |
01AD: GOTO 1A9 |
.................... reset_cpu(); |
01AE: CLRF 0A |
01AF: GOTO 000 |
.................... } |
.................... |
01B0: SLEEP |
|
Configuration Fuses: |
Word 1: 2738 NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT DEBUG CCPB3 NOPROTECT INTRC_IO |
Word 2: 3FFC NOFCMEN NOIESO |