Go to most recent revision | Blame | Last modification | View Log | Download
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