Rev 410 | Blame | Compare with Previous | Last modification | View Log | Download
CCS PCM C Compiler, Version 3.234, 27853 16-X-05 21:12Filename: C:\MIHO_DAT\KROKAC\krokac.LSTROM used: 321 words (8%)Largest free fragment is 2048RAM used: 21 (12%) at main() level24 (14%) worst caseStack: 3 worst case (1 in main + 2 for interrupts)*0000: MOVLW 000001: MOVWF 0A0002: GOTO 0980003: NOP0004: MOVWF 7F0005: SWAPF 03,W0006: CLRF 030007: MOVWF 210008: MOVF 7F,W0009: MOVWF 20000A: MOVF 0A,W000B: MOVWF 28000C: CLRF 0A000D: SWAPF 20,F000E: MOVF 04,W000F: MOVWF 220010: MOVF 77,W0011: MOVWF 230012: MOVF 78,W0013: MOVWF 240014: MOVF 79,W0015: MOVWF 250016: MOVF 7A,W0017: MOVWF 260018: MOVF 7B,W0019: MOVWF 27001A: BCF 03.7001B: BCF 03.5001C: MOVLW 8C001D: MOVWF 04001E: BTFSS 00.1001F: GOTO 0220020: BTFSC 0C.10021: GOTO 0350022: MOVF 22,W0023: MOVWF 040024: MOVF 23,W0025: MOVWF 770026: MOVF 24,W0027: MOVWF 780028: MOVF 25,W0029: MOVWF 79002A: MOVF 26,W002B: MOVWF 7A002C: MOVF 27,W002D: MOVWF 7B002E: MOVF 28,W002F: MOVWF 0A0030: SWAPF 21,W0031: MOVWF 030032: SWAPF 7F,F0033: SWAPF 7F,W0034: RETFIE0035: BCF 0A.30036: 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 310083: MOVWF 040084: MOVF 00,W0085: BTFSC 03.20086: GOTO 0960087: MOVLW 010088: MOVWF 780089: CLRF 77008A: DECFSZ 77,F008B: GOTO 08A008C: DECFSZ 78,F008D: GOTO 089008E: MOVLW 4A008F: MOVWF 770090: DECFSZ 77,F0091: GOTO 0900092: NOP0093: NOP0094: DECFSZ 00,F0095: GOTO 0870096: BCF 0A.30097: 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,W0044: ADDWF 29,W0045: MOVWF 29.................... i=StepState&0b111; // vezmi spodni 3 bity stavu0046: MOVF 29,W0047: ANDLW 070048: MOVWF 32.................... i=StepTab[i]; // prekoduj pomoci tabulky0049: MOVF 32,W004A: CALL 037004B: MOVWF 78004C: MOVWF 32.................... output_bit(MOTORA,i&0b0001); // aktivuj jednotlive vystupy004D: BTFSC 32.0004E: GOTO 051004F: BCF 06.00050: GOTO 0520051: BSF 06.00052: BSF 03.50053: BCF 06.0.................... output_bit(MOTORB,i&0b0010);0054: BCF 03.50055: BTFSC 32.10056: GOTO 0590057: BCF 06.10058: GOTO 05A0059: BSF 06.1005A: BSF 03.5005B: BCF 06.1.................... output_bit(MOTORC,i&0b0100);005C: BCF 03.5005D: BTFSC 32.2005E: GOTO 061005F: BCF 06.20060: GOTO 0620061: BSF 06.20062: BSF 03.50063: BCF 06.2.................... output_bit(MOTORD,i&0b1000);0064: BCF 03.50065: BTFSC 32.30066: GOTO 0690067: BCF 06.30068: GOTO 06A0069: BSF 06.3006A: BSF 03.5006B: BCF 06.3.................... }........................................006C: BCF 03.5006D: BCF 0C.1006E: BCF 0A.3006F: GOTO 022.................... void StepSetDirection(signed int Direction).................... {.................... if(Direction> 1) Direction= 1;0070: BTFSC 30.70071: GOTO 0780072: MOVF 30,W0073: SUBLW 010074: BTFSC 03.00075: GOTO 0780076: MOVLW 010077: MOVWF 30.................... if(Direction<-1) Direction=-1;0078: MOVF 30,W0079: XORLW 80007A: SUBLW 7E007B: BTFSS 03.0007C: GOTO 07F007D: MOVLW FF007E: MOVWF 30.................... StepDirection=Direction;007F: MOVF 30,W0080: 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 040099: MOVLW 1F009A: ANDWF 03,F009B: BSF 03.5009C: BCF 1F.4009D: BCF 1F.5009E: MOVF 1B,W009F: ANDLW 8000A0: MOVWF 1B00A1: MOVLW 0700A2: MOVWF 1C00A3: MOVF 1C,W00A4: BCF 03.500A5: BCF 0D.6.................... unsigned int16 T;.................... unsigned long int i;........................................ // Nastav pracovni frekvenci procesoru.................... setup_oscillator(OSC_4MHZ);00A6: MOVLW 6000A7: BSF 03.500A8: MOVWF 0F........................................ // Vypni motorovy vystup.................... output_low(MOTORA);00A9: BCF 06.000AA: BCF 03.500AB: BCF 06.0.................... output_low(MOTORB);00AC: BSF 03.500AD: BCF 06.100AE: BCF 03.500AF: BCF 06.1.................... output_low(MOTORC);00B0: BSF 03.500B1: BCF 06.200B2: BCF 03.500B3: BCF 06.2.................... output_low(MOTORD);00B4: BSF 03.500B5: BCF 06.300B6: BCF 03.500B7: BCF 06.3........................................ // Vstupy s pull-up odporem.................... port_b_pullups(TRUE);00B8: BSF 03.500B9: BCF 01.7........................................ // Inicializace A/D prevodniku.................... setup_adc_ports(sAN0|VSS_VDD);00BA: BCF 1F.400BB: BCF 1F.500BC: MOVF 1B,W00BD: ANDLW 8000BE: IORLW 0100BF: MOVWF 1B.................... setup_adc(ADC_CLOCK_INTERNAL);00C0: BCF 1F.600C1: BCF 03.500C2: BSF 1F.600C3: BSF 1F.700C4: BSF 03.500C5: BCF 1F.700C6: BCF 03.500C7: BSF 1F.0.................... set_adc_channel(0);00C8: MOVLW 0000C9: MOVWF 7800CA: MOVF 1F,W00CB: ANDLW C700CC: IORWF 78,W00CD: MOVWF 1F........................................ // Dalsi inicializace.................... setup_spi(FALSE);00CE: BCF 14.500CF: BSF 03.500D0: BCF 06.200D1: BSF 06.100D2: BCF 06.400D3: MOVLW 0000D4: BCF 03.500D5: MOVWF 1400D6: BSF 03.500D7: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);00D8: MOVF 01,W00D9: ANDLW C700DA: IORLW 0800DB: MOVWF 01.................... setup_timer_1(T1_DISABLED);00DC: BCF 03.500DD: CLRF 10.................... setup_comparator(NC_NC_NC_NC);00DE: MOVLW 0700DF: BSF 03.500E0: MOVWF 1C00E1: MOVF 05,W00E2: MOVLW 0300E3: MOVWF 7700E4: DECFSZ 77,F00E5: GOTO 0E400E6: MOVF 1C,W00E7: BCF 03.500E8: BCF 0D.6.................... setup_vref(FALSE);00E9: BSF 03.500EA: CLRF 1D........................................ // Inicializace stavovych promennych.................... StepState=0;00EB: BCF 03.500EC: CLRF 29........................................ // Nastaveni casovace.................... setup_timer_2(T2_DIV_BY_16,0xFF,1);00ED: MOVLW 0000EE: MOVWF 7800EF: IORLW 0600F0: MOVWF 1200F1: MOVLW FF00F2: BSF 03.500F3: MOVWF 12........................................ // Nastveni preruseni od casovace.................... enable_interrupts(global);00F4: MOVLW C000F5: BCF 03.500F6: IORWF 0B,F.................... enable_interrupts(int_timer2);00F7: BSF 03.500F8: BSF 0C.1........................................ for(;;).................... {........................................ T=read_adc(ADC_READ_ONLY); // Prectu hodnotu00F9: BCF 03.500FA: BTFSS 1F.200FB: GOTO 0FE00FC: BSF 03.500FD: GOTO 0F900FE: MOVF 1E,W00FF: CLRF 2C0100: 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 casovace0102: MOVF 2B,F0103: BTFSS 03.20104: GOTO 1080105: MOVF 2C,F0106: BTFSC 03.20107: GOTO 10C0108: MOVF 2B,W0109: BSF 03.5010A: MOVWF 12010B: BCF 03.5........................................ // Podle prepinacu se hybu.................... if(input(PIN_B5))010C: BSF 03.5010D: BSF 06.5010E: BCF 03.5010F: BTFSS 06.50110: GOTO 11E.................... {.................... if(input(PIN_B4)) StepSetDirection(1); else StepSetDirection(-1);0111: BSF 03.50112: BSF 06.40113: BCF 03.50114: BTFSS 06.40115: GOTO 11A0116: MOVLW 010117: MOVWF 300118: CALL 0700119: GOTO 11D011A: MOVLW FF011B: MOVWF 30011C: CALL 070.................... }.................... else011D: GOTO 13E.................... { int1 x; // pomocna promenna aby se volalo spozdeni jen 1x.................... if (StepState>230) {011E: MOVF 29,W011F: SUBLW E60120: BTFSC 03.00121: GOTO 136.................... if (!input(PIN_B4) && (x))0122: BSF 03.50123: BSF 06.40124: BCF 03.50125: BTFSC 06.40126: GOTO 1330127: BTFSS 2F.00128: GOTO 133.................... {.................... StepSetDirection(0);0129: CLRF 30012A: CALL 070.................... delay_ms(500);012B: MOVLW 02012C: MOVWF 30012D: MOVLW FA012E: MOVWF 31012F: GOTO 0820130: DECFSZ 30,F0131: GOTO 12D.................... x=0;0132: BCF 2F.0.................... };.................... StepSetDirection(-1);0133: MOVLW FF0134: MOVWF 300135: CALL 070.................... }.................... if (StepState<30) {0136: MOVF 29,W0137: SUBLW 1D0138: BTFSS 03.00139: GOTO 13E.................... StepSetDirection( 1);013A: MOVLW 01013B: MOVWF 30013C: 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 for013E: BSF 03.5013F: GOTO 0F9........................................ }....................0140: SLEEPConfiguration Fuses:Word 1: 3F3B NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT RCWord 2: 3FFF FCMEN IESO