Blame | Last modification | View Log | Download
CCS PCM C Compiler, Version 3.245, 27853 23-IV-06 01:20Filename: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.lstROM used: 542 words (13%)Largest free fragment is 2048RAM used: 13 (7%) at main() level18 (10%) worst caseStack: 2 locations*0000: MOVLW 000001: MOVWF 0A0002: GOTO 0B10003: NOP.................... #include ".\cidla.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, NODEBUG, NOPROTECT, NOFCMEN, NOIESO.................... #use delay(clock=4000000,RESTART_WDT)*0050: MOVLW 270051: MOVWF 040052: MOVF 00,W0053: BTFSC 03.20054: GOTO 0660055: MOVLW 010056: MOVWF 780057: MOVLW BF0058: MOVWF 770059: CLRWDT005A: DECFSZ 77,F005B: GOTO 059005C: DECFSZ 78,F005D: GOTO 057005E: MOVLW 4A005F: MOVWF 770060: DECFSZ 77,F0061: GOTO 0600062: NOP0063: CLRWDT0064: DECFSZ 00,F0065: GOTO 0550066: RETLW 00............................................................ //#include <stdlib.h>........................................ #use rs232(baud=9600,parity=N,xmit=PIN_B3,bits=8,restart_wdt)*002A: BSF 03.5002B: BCF 06.3002C: BCF 03.5002D: BCF 06.3002E: MOVLW 08002F: MOVWF 780030: NOP0031: NOP0032: NOP0033: BSF 78.70034: GOTO 0440035: BCF 78.70036: RRF 2A,F0037: BTFSC 03.00038: BSF 06.30039: BTFSS 03.0003A: BCF 06.3003B: BSF 78.6003C: GOTO 044003D: BCF 78.6003E: DECFSZ 78,F003F: GOTO 0360040: NOP0041: NOP0042: NOP0043: BSF 06.30044: MOVLW 1C0045: MOVWF 040046: DECFSZ 04,F0047: GOTO 0460048: NOP0049: NOP004A: CLRWDT004B: BTFSC 78.7004C: GOTO 035004D: BTFSC 78.6004E: GOTO 03D004F: RETLW 00........................................ #define IRRX PIN_B0........................................ #define TRESHOLD_MAX 70 // rozhodovaci uroven pro cidla cerna/bila.................... #define TRESHOLD_MIN 50.................... #define CIHLA 10 // doba, po kterou musi byt detekovana cihla........................................ unsigned int8 radius; // co cidla vidi.................... unsigned int8 last_radius; // rozsah.................... unsigned int8 last_cidla; // co cidla videla minule.................... unsigned int8 shure; // citac doby, po kterou musi byt detekovana cihla........................................ //tuning.................... /*#define PULZACE 3 // urcuje rychlost pulzovani pomoci PWM........................................ //Vystup PWM je na PIN_B3.................... ////////////////////////////////////////////////////////////////////////////////.................... void pulzovani() // postupne rozsvecuje a zhasina podsvetleni.................... {.................... unsigned int8 i,n;.................... for(n=0;n<=3;n++).................... {.................... for(i=0;i<255;i++) {set_pwm1_duty(i); Delay_ms(PULZACE);} // rozsvecovani.................... for(i=255;i>0;i--) {set_pwm1_duty(i); Delay_ms(PULZACE);} // zhasinani.................... }.................... }.................... */.................... ////////////////////////////////////////////////////////////////////////////////.................... void main().................... {*00B1: CLRF 0400B2: MOVLW 1F00B3: ANDWF 03,F00B4: MOVLW 6000B5: BSF 03.500B6: MOVWF 0F00B7: BCF 06.300B8: BCF 03.500B9: BSF 06.300BA: BSF 03.500BB: BCF 1F.400BC: BCF 1F.500BD: MOVF 1B,W00BE: ANDLW 8000BF: MOVWF 1B00C0: MOVLW 0700C1: MOVWF 1C.................... int8 cidla;.................... unsigned int8 a;.................... unsigned int8 n;........................................ setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|VSS_VDD);00C2: BCF 1F.400C3: BCF 1F.500C4: MOVF 1B,W00C5: ANDLW 8000C6: IORLW 7F00C7: MOVWF 1B.................... setup_adc(ADC_CLOCK_INTERNAL);00C8: BCF 1F.600C9: BCF 03.500CA: BSF 1F.600CB: BSF 1F.700CC: BSF 03.500CD: BCF 1F.700CE: BCF 03.500CF: BSF 1F.0.................... setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED);00D0: BCF 14.500D1: BSF 03.500D2: BCF 06.200D3: BSF 06.100D4: BSF 06.400D5: MOVLW 3500D6: BCF 03.500D7: MOVWF 1400D8: MOVLW 4000D9: BSF 03.500DA: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);00DB: MOVF 01,W00DC: ANDLW C700DD: IORLW 0800DE: MOVWF 01.................... setup_timer_1(T1_DISABLED);00DF: BCF 03.500E0: CLRF 10.................... setup_timer_2(T2_DISABLED,0,1);00E1: MOVLW 0000E2: MOVWF 7800E3: MOVWF 1200E4: MOVLW 0000E5: BSF 03.500E6: MOVWF 12.................... setup_comparator(NC_NC_NC_NC);00E7: MOVLW 0700E8: MOVWF 1C00E9: MOVF 05,W00EA: CLRWDT00EB: MOVLW 0200EC: MOVWF 7700ED: DECFSZ 77,F00EE: GOTO 0ED00EF: NOP00F0: NOP00F1: MOVF 1C,W00F2: BCF 03.500F3: BCF 0D.6.................... setup_vref(FALSE);00F4: BSF 03.500F5: CLRF 1D........................................ last_radius=0b00001000; // minimalni rozsah snimani od stredu00F6: MOVLW 0800F7: BCF 03.500F8: MOVWF 21.................... last_cidla=0b00001000;00F9: MOVWF 22........................................ // diagnostika.................... printf("\n\r");00FA: CLRF 2700FB: MOVF 27,W00FC: CALL 00400FD: IORLW 0000FE: BTFSC 03.200FF: GOTO 1040100: INCF 27,F0101: MOVWF 2A0102: CALL 02A0103: GOTO 0FB.................... Delay_ms(100);0104: MOVLW 640105: MOVWF 270106: CALL 050.................... printf("***\n\r");0107: CLRF 270108: MOVF 27,W0109: CALL 00B010A: IORLW 00010B: BTFSC 03.2010C: GOTO 111010D: INCF 27,F010E: MOVWF 2A010F: CALL 02A0110: GOTO 108.................... Delay_ms(100);0111: MOVLW 640112: MOVWF 270113: CALL 050.................... for (n=0; n<=6; n++)0114: CLRF 260115: MOVF 26,W0116: SUBLW 060117: BTFSS 03.00118: GOTO 151.................... {.................... set_adc_channel(n);0119: RLF 26,W011A: MOVWF 77011B: RLF 77,F011C: RLF 77,F011D: MOVLW F8011E: ANDWF 77,F011F: MOVF 1F,W0120: ANDLW C70121: IORWF 77,W0122: MOVWF 1F.................... Delay_ms(100);0123: MOVLW 640124: MOVWF 270125: CALL 050.................... a=read_adc();0126: BSF 1F.20127: BTFSC 1F.20128: GOTO 1270129: MOVF 1E,W012A: MOVWF 25.................... printf("sensor %u - %u\n\r",n,a);012B: CLRF 27012C: MOVF 27,W012D: CALL 015012E: INCF 27,F012F: MOVWF 770130: MOVWF 2A0131: CALL 02A0132: MOVLW 070133: SUBWF 27,W0134: BTFSS 03.20135: GOTO 12C0136: MOVF 26,W0137: MOVWF 280138: MOVLW 1B0139: MOVWF 29013A: CALL 07C013B: MOVLW 20013C: MOVWF 2A013D: CALL 02A013E: MOVLW 2D013F: MOVWF 2A0140: CALL 02A0141: MOVLW 200142: MOVWF 2A0143: CALL 02A0144: MOVF 25,W0145: MOVWF 280146: MOVLW 1B0147: MOVWF 290148: CALL 07C0149: MOVLW 0A014A: MOVWF 2A014B: CALL 02A014C: MOVLW 0D014D: MOVWF 2A014E: CALL 02A.................... }014F: INCF 26,F0150: GOTO 115........................................ shure=0;0151: CLRF 23.................... while(true).................... {.................... set_adc_channel(0);0152: MOVLW 000153: MOVWF 780154: MOVF 1F,W0155: ANDLW C70156: IORWF 78,W0157: MOVWF 1F.................... cidla=0;0158: CLRF 24.................... Delay_us(10);0159: CLRWDT015A: MOVLW 02015B: MOVWF 77015C: DECFSZ 77,F015D: GOTO 15C015E: NOP015F: NOP.................... a=read_adc();0160: BSF 1F.20161: BTFSC 1F.20162: GOTO 1610163: MOVF 1E,W0164: MOVWF 25........................................ set_adc_channel(1);0165: MOVLW 080166: MOVWF 780167: MOVF 1F,W0168: ANDLW C70169: IORWF 78,W016A: MOVWF 1F.................... if(a<TRESHOLD_MAX) //hystereze cidel016B: MOVF 25,W016C: SUBLW 45016D: BTFSS 03.0016E: GOTO 178.................... {.................... if(a>TRESHOLD_MIN)016F: MOVF 25,W0170: SUBLW 320171: BTFSC 03.00172: GOTO 177.................... {.................... cidla |= (last_cidla & 0b00000001);0173: MOVF 22,W0174: ANDLW 010175: IORWF 24,F.................... }.................... else cidla |= 0b00000001;0176: GOTO 1780177: BSF 24.0.................... }........................................ a=read_adc();0178: BSF 1F.20179: BTFSC 1F.2017A: GOTO 179017B: MOVF 1E,W017C: MOVWF 25........................................ set_adc_channel(2);017D: MOVLW 10017E: MOVWF 78017F: MOVF 1F,W0180: ANDLW C70181: IORWF 78,W0182: MOVWF 1F.................... if(a<TRESHOLD_MAX)0183: MOVF 25,W0184: SUBLW 450185: BTFSS 03.00186: GOTO 190.................... {.................... if(a>TRESHOLD_MIN)0187: MOVF 25,W0188: SUBLW 320189: BTFSC 03.0018A: GOTO 18F.................... {.................... cidla |= (last_cidla & 0b00000010);018B: MOVF 22,W018C: ANDLW 02018D: IORWF 24,F.................... }.................... else cidla |= 0b00000010;018E: GOTO 190018F: BSF 24.1.................... }........................................ a=read_adc();0190: BSF 1F.20191: BTFSC 1F.20192: GOTO 1910193: MOVF 1E,W0194: MOVWF 25........................................ set_adc_channel(3);0195: MOVLW 180196: MOVWF 780197: MOVF 1F,W0198: ANDLW C70199: IORWF 78,W019A: MOVWF 1F.................... if(a<TRESHOLD_MAX)019B: MOVF 25,W019C: SUBLW 45019D: BTFSS 03.0019E: GOTO 1A8.................... {.................... if(a>TRESHOLD_MIN)019F: MOVF 25,W01A0: SUBLW 3201A1: BTFSC 03.001A2: GOTO 1A7.................... {.................... cidla |= (last_cidla & 0b00000100);01A3: MOVF 22,W01A4: ANDLW 0401A5: IORWF 24,F.................... }.................... else cidla |= 0b00000100;01A6: GOTO 1A801A7: BSF 24.2.................... }........................................ a=read_adc();01A8: BSF 1F.201A9: BTFSC 1F.201AA: GOTO 1A901AB: MOVF 1E,W01AC: MOVWF 25........................................ set_adc_channel(4);01AD: MOVLW 2001AE: MOVWF 7801AF: MOVF 1F,W01B0: ANDLW C701B1: IORWF 78,W01B2: MOVWF 1F.................... if(a<TRESHOLD_MAX)01B3: MOVF 25,W01B4: SUBLW 4501B5: BTFSS 03.001B6: GOTO 1C0.................... {.................... if(a>TRESHOLD_MIN)01B7: MOVF 25,W01B8: SUBLW 3201B9: BTFSC 03.001BA: GOTO 1BF.................... {.................... cidla |= (last_cidla & 0b00001000);01BB: MOVF 22,W01BC: ANDLW 0801BD: IORWF 24,F.................... }.................... else cidla |= 0b00001000;01BE: GOTO 1C001BF: BSF 24.3.................... }.................... a=read_adc();01C0: BSF 1F.201C1: BTFSC 1F.201C2: GOTO 1C101C3: MOVF 1E,W01C4: MOVWF 25........................................ set_adc_channel(5);01C5: MOVLW 2801C6: MOVWF 7801C7: MOVF 1F,W01C8: ANDLW C701C9: IORWF 78,W01CA: MOVWF 1F........................................ if(a<TRESHOLD_MAX)01CB: MOVF 25,W01CC: SUBLW 4501CD: BTFSS 03.001CE: GOTO 1D8.................... {.................... if(a>TRESHOLD_MIN)01CF: MOVF 25,W01D0: SUBLW 3201D1: BTFSC 03.001D2: GOTO 1D7.................... {.................... cidla |= (last_cidla & 0b00010000);01D3: MOVF 22,W01D4: ANDLW 1001D5: IORWF 24,F.................... }.................... else cidla |= 0b00010000;01D6: GOTO 1D801D7: BSF 24.4.................... }.................... a=read_adc();01D8: BSF 1F.201D9: BTFSC 1F.201DA: GOTO 1D901DB: MOVF 1E,W01DC: MOVWF 25........................................ set_adc_channel(6);01DD: MOVLW 3001DE: MOVWF 7801DF: MOVF 1F,W01E0: ANDLW C701E1: IORWF 78,W01E2: MOVWF 1F.................... if(a<TRESHOLD_MAX)01E3: MOVF 25,W01E4: SUBLW 4501E5: BTFSS 03.001E6: GOTO 1F0.................... {.................... if(a>TRESHOLD_MIN)01E7: MOVF 25,W01E8: SUBLW 3201E9: BTFSC 03.001EA: GOTO 1EF.................... {.................... cidla |= (last_cidla & 0b00100000);01EB: MOVF 22,W01EC: ANDLW 2001ED: IORWF 24,F.................... }.................... else cidla |= 0b00100000;01EE: GOTO 1F001EF: BSF 24.5.................... }.................... a=read_adc();01F0: BSF 1F.201F1: BTFSC 1F.201F2: GOTO 1F101F3: MOVF 1E,W01F4: MOVWF 25........................................ if(a<TRESHOLD_MAX)01F5: MOVF 25,W01F6: SUBLW 4501F7: BTFSS 03.001F8: GOTO 202.................... {.................... if(a>TRESHOLD_MIN)01F9: MOVF 25,W01FA: SUBLW 3201FB: BTFSC 03.001FC: GOTO 201.................... {.................... cidla |=(last_cidla & 0b01000000);01FD: MOVF 22,W01FE: ANDLW 4001FF: IORWF 24,F.................... }.................... else cidla |= 0b01000000;0200: GOTO 2020201: BSF 24.6.................... }........................................ last_cidla=cidla;0202: MOVF 24,W0203: MOVWF 22........................................ if (!input(IRRX)) {if (shure<255) shure++;} else {shure=0;};0204: BSF 03.50205: BSF 06.00206: BCF 03.50207: BTFSC 06.00208: GOTO 20E0209: INCFSZ 23,W020A: GOTO 20C020B: GOTO 20D020C: INCF 23,F020D: GOTO 20F020E: CLRF 23.................... if (shure>CIHLA) cidla|=0b10000000;020F: MOVF 23,W0210: SUBLW 0A0211: BTFSS 03.00212: BSF 24.7........................................ cidla=~cidla;0213: COMF 24,F.................... spi_write(cidla);0214: MOVF 24,W0215: MOVWF 130216: BSF 03.50217: BTFSC 14.00218: GOTO 21B0219: BCF 03.5021A: GOTO 216.................... }021B: BCF 03.5021C: GOTO 152.................... }021D: SLEEPConfiguration Fuses:Word 1: 3F38 NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT INTRC_IOWord 2: 3FFC NOFCMEN NOIESO