0,0 → 1,495 |
CCS PCM C Compiler, Version 3.234, 27853 16-X-05 21:12 |
|
Filename: C:\MIHO_DAT\KROKAC\krokac.LST |
|
ROM used: 321 words (8%) |
Largest free fragment is 2048 |
RAM used: 21 (12%) at main() level |
24 (14%) worst case |
Stack: 3 worst case (1 in main + 2 for interrupts) |
|
* |
0000: MOVLW 00 |
0001: MOVWF 0A |
0002: GOTO 098 |
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.1 |
001F: GOTO 022 |
0020: BTFSC 0C.1 |
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 "C:\MIHO_DAT\KROKAC\krokac.h" |
.................... #include <16F88.h> |
.................... //////// Standard Header file for the PIC16F88 device //////////////// |
.................... #device PIC16F88 |
.................... #list |
.................... |
.................... //#device ICD=TRUE |
.................... #device adc=8 |
.................... |
.................... #FUSES NOWDT //No Watch Dog Timer |
.................... #FUSES RC //Resistor/Capacitor Osc with CLKOUT |
.................... #FUSES NOPUT //No Power Up Timer |
.................... #FUSES MCLR //Master Clear pin enabled |
.................... #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 DEBUG //Debug mode for use with ICD |
.................... #FUSES NOPROTECT //Code not protected from reading |
.................... #FUSES FCMEN //Fail-safe clock monitor enabled |
.................... #FUSES IESO //Internal External Switch Over mode enabled |
.................... |
.................... #use delay(clock=4000000) |
* |
0082: MOVLW 31 |
0083: MOVWF 04 |
0084: MOVF 00,W |
0085: BTFSC 03.2 |
0086: GOTO 096 |
0087: MOVLW 01 |
0088: MOVWF 78 |
0089: CLRF 77 |
008A: DECFSZ 77,F |
008B: GOTO 08A |
008C: DECFSZ 78,F |
008D: GOTO 089 |
008E: MOVLW 4A |
008F: MOVWF 77 |
0090: DECFSZ 77,F |
0091: GOTO 090 |
0092: NOP |
0093: NOP |
0094: DECFSZ 00,F |
0095: GOTO 087 |
0096: BCF 0A.3 |
0097: GOTO 130 (RETURN) |
.................... #define MOTORA PIN_B0 |
.................... #define MOTORB PIN_B1 |
.................... #define MOTORC PIN_B2 |
.................... #define MOTORD PIN_B3 |
.................... |
.................... |
.................... |
.................... |
.................... unsigned int StepState; // Vnitrni promenna kroku |
.................... signed int StepDirection; // Smer +1/0/-1 |
.................... |
.................... byte const StepTab[8]={ // Tabulka pro krokovy motor |
.................... 0b0001, // 0 |
.................... 0b0101, // 1 |
.................... 0b0100, // 2 |
.................... 0b0110, // 3 |
.................... 0b0010, // 4 |
.................... 0b1010, // 5 |
.................... 0b1000 // 6 |
.................... 0b1001, // 7 |
.................... }; |
.................... |
.................... #INT_TIMER2 |
.................... void StepNext() |
.................... { |
.................... unsigned int i; |
.................... |
.................... StepState+=StepDirection; // posun se na dalsi krok |
* |
0043: MOVF 2A,W |
0044: ADDWF 29,W |
0045: MOVWF 29 |
.................... i=StepState&0b111; // vezmi spodni 3 bity stavu |
0046: MOVF 29,W |
0047: ANDLW 07 |
0048: MOVWF 32 |
.................... i=StepTab[i]; // prekoduj pomoci tabulky |
0049: MOVF 32,W |
004A: CALL 037 |
004B: MOVWF 78 |
004C: MOVWF 32 |
.................... output_bit(MOTORA,i&0b0001); // aktivuj jednotlive vystupy |
004D: BTFSC 32.0 |
004E: GOTO 051 |
004F: BCF 06.0 |
0050: GOTO 052 |
0051: BSF 06.0 |
0052: BSF 03.5 |
0053: BCF 06.0 |
.................... output_bit(MOTORB,i&0b0010); |
0054: BCF 03.5 |
0055: BTFSC 32.1 |
0056: GOTO 059 |
0057: BCF 06.1 |
0058: GOTO 05A |
0059: BSF 06.1 |
005A: BSF 03.5 |
005B: BCF 06.1 |
.................... output_bit(MOTORC,i&0b0100); |
005C: BCF 03.5 |
005D: BTFSC 32.2 |
005E: GOTO 061 |
005F: BCF 06.2 |
0060: GOTO 062 |
0061: BSF 06.2 |
0062: BSF 03.5 |
0063: BCF 06.2 |
.................... output_bit(MOTORD,i&0b1000); |
0064: BCF 03.5 |
0065: BTFSC 32.3 |
0066: GOTO 069 |
0067: BCF 06.3 |
0068: GOTO 06A |
0069: BSF 06.3 |
006A: BSF 03.5 |
006B: BCF 06.3 |
.................... } |
.................... |
.................... |
006C: BCF 03.5 |
006D: BCF 0C.1 |
006E: BCF 0A.3 |
006F: GOTO 022 |
.................... void StepSetDirection(signed int Direction) |
.................... { |
.................... if(Direction> 1) Direction= 1; |
0070: BTFSC 30.7 |
0071: GOTO 078 |
0072: MOVF 30,W |
0073: SUBLW 01 |
0074: BTFSC 03.0 |
0075: GOTO 078 |
0076: MOVLW 01 |
0077: MOVWF 30 |
.................... if(Direction<-1) Direction=-1; |
0078: MOVF 30,W |
0079: XORLW 80 |
007A: SUBLW 7E |
007B: BTFSS 03.0 |
007C: GOTO 07F |
007D: MOVLW FF |
007E: MOVWF 30 |
.................... StepDirection=Direction; |
007F: MOVF 30,W |
0080: MOVWF 2A |
.................... } |
0081: RETLW 00 |
.................... |
.................... |
.................... void StepSetTime(unsigned int16 Time) |
.................... { |
.................... |
.................... } |
.................... |
.................... void Delay(unsigned int16 Time) |
.................... { |
.................... while(Time>255) {Time-=256;delay_us(256);}; |
.................... if(Time!=0) delay_us(Time); |
.................... } |
.................... |
.................... |
.................... void main() |
.................... { |
* |
0098: CLRF 04 |
0099: MOVLW 1F |
009A: ANDWF 03,F |
009B: BSF 03.5 |
009C: BCF 1F.4 |
009D: BCF 1F.5 |
009E: MOVF 1B,W |
009F: ANDLW 80 |
00A0: MOVWF 1B |
00A1: MOVLW 07 |
00A2: MOVWF 1C |
00A3: MOVF 1C,W |
00A4: BCF 03.5 |
00A5: BCF 0D.6 |
.................... unsigned int16 T; |
.................... unsigned long int i; |
.................... |
.................... // Nastav pracovni frekvenci procesoru |
.................... setup_oscillator(OSC_4MHZ); |
00A6: MOVLW 60 |
00A7: BSF 03.5 |
00A8: MOVWF 0F |
.................... |
.................... // Vypni motorovy vystup |
.................... output_low(MOTORA); |
00A9: BCF 06.0 |
00AA: BCF 03.5 |
00AB: BCF 06.0 |
.................... output_low(MOTORB); |
00AC: BSF 03.5 |
00AD: BCF 06.1 |
00AE: BCF 03.5 |
00AF: BCF 06.1 |
.................... output_low(MOTORC); |
00B0: BSF 03.5 |
00B1: BCF 06.2 |
00B2: BCF 03.5 |
00B3: BCF 06.2 |
.................... output_low(MOTORD); |
00B4: BSF 03.5 |
00B5: BCF 06.3 |
00B6: BCF 03.5 |
00B7: BCF 06.3 |
.................... |
.................... // Vstupy s pull-up odporem |
.................... port_b_pullups(TRUE); |
00B8: BSF 03.5 |
00B9: BCF 01.7 |
.................... |
.................... // Inicializace A/D prevodniku |
.................... setup_adc_ports(sAN0|VSS_VDD); |
00BA: BCF 1F.4 |
00BB: BCF 1F.5 |
00BC: MOVF 1B,W |
00BD: ANDLW 80 |
00BE: IORLW 01 |
00BF: MOVWF 1B |
.................... setup_adc(ADC_CLOCK_INTERNAL); |
00C0: BCF 1F.6 |
00C1: BCF 03.5 |
00C2: BSF 1F.6 |
00C3: BSF 1F.7 |
00C4: BSF 03.5 |
00C5: BCF 1F.7 |
00C6: BCF 03.5 |
00C7: BSF 1F.0 |
.................... set_adc_channel(0); |
00C8: MOVLW 00 |
00C9: MOVWF 78 |
00CA: MOVF 1F,W |
00CB: ANDLW C7 |
00CC: IORWF 78,W |
00CD: MOVWF 1F |
.................... |
.................... // Dalsi inicializace |
.................... setup_spi(FALSE); |
00CE: BCF 14.5 |
00CF: BSF 03.5 |
00D0: BCF 06.2 |
00D1: BSF 06.1 |
00D2: BCF 06.4 |
00D3: MOVLW 00 |
00D4: BCF 03.5 |
00D5: MOVWF 14 |
00D6: BSF 03.5 |
00D7: MOVWF 14 |
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
00D8: MOVF 01,W |
00D9: ANDLW C7 |
00DA: IORLW 08 |
00DB: MOVWF 01 |
.................... setup_timer_1(T1_DISABLED); |
00DC: BCF 03.5 |
00DD: CLRF 10 |
.................... setup_comparator(NC_NC_NC_NC); |
00DE: MOVLW 07 |
00DF: BSF 03.5 |
00E0: MOVWF 1C |
00E1: MOVF 05,W |
00E2: MOVLW 03 |
00E3: MOVWF 77 |
00E4: DECFSZ 77,F |
00E5: GOTO 0E4 |
00E6: MOVF 1C,W |
00E7: BCF 03.5 |
00E8: BCF 0D.6 |
.................... setup_vref(FALSE); |
00E9: BSF 03.5 |
00EA: CLRF 1D |
.................... |
.................... // Inicializace stavovych promennych |
.................... StepState=0; |
00EB: BCF 03.5 |
00EC: CLRF 29 |
.................... |
.................... // Nastaveni casovace |
.................... setup_timer_2(T2_DIV_BY_16,0xFF,1); |
00ED: MOVLW 00 |
00EE: MOVWF 78 |
00EF: IORLW 06 |
00F0: MOVWF 12 |
00F1: MOVLW FF |
00F2: BSF 03.5 |
00F3: MOVWF 12 |
.................... |
.................... // Nastveni preruseni od casovace |
.................... enable_interrupts(global); |
00F4: MOVLW C0 |
00F5: BCF 03.5 |
00F6: IORWF 0B,F |
.................... enable_interrupts(int_timer2); |
00F7: BSF 03.5 |
00F8: BSF 0C.1 |
.................... |
.................... for(;;) |
.................... { |
.................... |
.................... T=read_adc(ADC_READ_ONLY); // Prectu hodnotu |
00F9: BCF 03.5 |
00FA: BTFSS 1F.2 |
00FB: GOTO 0FE |
00FC: BSF 03.5 |
00FD: GOTO 0F9 |
00FE: MOVF 1E,W |
00FF: CLRF 2C |
0100: MOVWF 2B |
.................... read_adc(ADC_START_ONLY); // Ostartuji dalsi prevod (na pozadi) |
0101: BSF 1F.2 |
.................... |
.................... //setup_timer_2(T2_DIV_BY_16,T,1); |
.................... if(T>0) *0x92=T; // Preload register casovace |
0102: MOVF 2B,F |
0103: BTFSS 03.2 |
0104: GOTO 108 |
0105: MOVF 2C,F |
0106: BTFSC 03.2 |
0107: GOTO 10C |
0108: MOVF 2B,W |
0109: BSF 03.5 |
010A: MOVWF 12 |
010B: BCF 03.5 |
.................... |
.................... // Podle prepinacu se hybu |
.................... if(input(PIN_B5)) |
010C: BSF 03.5 |
010D: BSF 06.5 |
010E: BCF 03.5 |
010F: BTFSS 06.5 |
0110: GOTO 11E |
.................... { |
.................... if(input(PIN_B4)) StepSetDirection(1); else StepSetDirection(-1); |
0111: BSF 03.5 |
0112: BSF 06.4 |
0113: BCF 03.5 |
0114: BTFSS 06.4 |
0115: GOTO 11A |
0116: MOVLW 01 |
0117: MOVWF 30 |
0118: CALL 070 |
0119: GOTO 11D |
011A: MOVLW FF |
011B: MOVWF 30 |
011C: CALL 070 |
.................... } |
.................... else |
011D: GOTO 13E |
.................... { int1 x; // pomocna promenna aby se volalo spozdeni jen 1x |
.................... if (StepState>230) { |
011E: MOVF 29,W |
011F: SUBLW E6 |
0120: BTFSC 03.0 |
0121: GOTO 136 |
.................... if (!input(PIN_B4) && (x)) |
0122: BSF 03.5 |
0123: BSF 06.4 |
0124: BCF 03.5 |
0125: BTFSC 06.4 |
0126: GOTO 133 |
0127: BTFSS 2F.0 |
0128: GOTO 133 |
.................... { |
.................... StepSetDirection(0); |
0129: CLRF 30 |
012A: CALL 070 |
.................... delay_ms(500); |
012B: MOVLW 02 |
012C: MOVWF 30 |
012D: MOVLW FA |
012E: MOVWF 31 |
012F: GOTO 082 |
0130: DECFSZ 30,F |
0131: GOTO 12D |
.................... x=0; |
0132: BCF 2F.0 |
.................... }; |
.................... StepSetDirection(-1); |
0133: MOVLW FF |
0134: MOVWF 30 |
0135: CALL 070 |
.................... } |
.................... if (StepState<30) { |
0136: MOVF 29,W |
0137: SUBLW 1D |
0138: BTFSS 03.0 |
0139: GOTO 13E |
.................... StepSetDirection( 1); |
013A: MOVLW 01 |
013B: MOVWF 30 |
013C: CALL 070 |
.................... x=1; |
013D: BSF 2F.0 |
.................... } |
.................... } |
.................... //StepDirection=2; |
.................... //for(i=0;i<800;i++) |
.................... //{ |
.................... // StepNext(); |
.................... // Delay(T); |
.................... //} |
.................... //delay_ms(10); |
.................... //StepDirection=-1; |
.................... //for(i=0;i<800;i++) |
.................... //{ |
.................... // StepNext(); |
.................... // Delay(T); |
.................... //} |
.................... //delay_ms(10); |
.................... |
.................... } // Cyklus for |
013E: BSF 03.5 |
013F: GOTO 0F9 |
.................... |
.................... } |
.................... |
0140: SLEEP |
|
Configuration Fuses: |
Word 1: 3F3B NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT RC |
Word 2: 3FFF FCMEN IESO |