CCS PCW C Compiler, Version 3.084, 13881 Filename: c:\slavko\20052006\seminarska senzor vozila\senzor vozila\led1.LST ROM used: 238 (3%) Largest free fragment is 2048 RAM used: 9 (5%) at main() level 18 (10%) worst case Stack: 2 locations * 0000: MOVLW 00 0001: MOVWF 0A 0002: GOTO 06B 0003: NOP .................... .................... .................... .................... .................... #include <16f876.H> .................... //////// Standard Header file for the PIC16F876 device //////////////// .................... #device PIC16F876 .................... #list .................... .................... #device ADC=10 .................... #use delay(clock=4000000) * 0004: MOVLW 28 0005: MOVWF 04 0006: MOVF 00,W 0007: BTFSC 03.2 0008: GOTO 018 0009: MOVLW 01 000A: MOVWF 78 000B: CLRF 77 000C: DECFSZ 77,F 000D: GOTO 00C 000E: DECFSZ 78,F 000F: GOTO 00B 0010: MOVLW 4A 0011: MOVWF 77 0012: DECFSZ 77,F 0013: GOTO 012 0014: NOP 0015: NOP 0016: DECFSZ 00,F 0017: GOTO 009 0018: RETLW 00 .................... #fuses XT,NOWDT,PUT,BROWNOUT,NOPROTECT,NOLVP .................... #zero_ram .................... #USE STANDARD_IO (A) .................... #USE FAST_IO(B) .................... .................... .................... .................... //*********************************** .................... // RUTINE ZA AD .................... //----------------------------------- .................... .................... long read_adc_30x() { .................... long vsota,povprecje; .................... int i; .................... vsota=0; * 0041: CLRF 24 0042: CLRF 23 .................... for(i=0;i<30;++i) { 0043: CLRF 27 0044: MOVF 27,W 0045: SUBLW 1D 0046: BTFSS 03.0 0047: GOTO 058 .................... delay_ms(6); 0048: MOVLW 06 0049: MOVWF 28 004A: CALL 004 .................... vsota += read_adc(); 004B: BSF 1F.2 004C: BTFSC 1F.2 004D: GOTO 04C 004E: BSF 03.5 004F: MOVF 1E,W 0050: BCF 03.5 0051: ADDWF 23,F 0052: BTFSC 03.0 0053: INCF 24,F 0054: MOVF 1E,W 0055: ADDWF 24,F .................... } 0056: INCF 27,F 0057: GOTO 044 .................... povprecje =vsota/30; 0058: MOVF 24,W 0059: MOVWF 29 005A: MOVF 23,W 005B: MOVWF 28 005C: CLRF 2B 005D: MOVLW 1E 005E: MOVWF 2A 005F: GOTO 019 0060: MOVF 79,W 0061: MOVWF 26 0062: MOVF 78,W 0063: MOVWF 25 .................... return(povprecje); 0064: MOVF 25,W 0065: MOVWF 78 0066: MOVF 26,W 0067: MOVWF 79 0068: BCF 0A.3 0069: BCF 0A.4 006A: GOTO 0D0 (RETURN) .................... } .................... .................... .................... float iz_ad_v_stopinje_celzija(long ad_vrednost) { .................... float stopinje_c; .................... float stop_nad_25; .................... stop_nad_25=((float)ad_vrednost-536.0)/20; //536 je AD pri 2000 ohmov=25 stopinj (stmina 20 ad/stopinjo) .................... if (stop_nad_25>0) stop_nad_25=stop_nad_25*1.03; //nad 25 stopinj se strmina krvulje poveča za 3% .................... stopinje_c=stop_nad_25+25.0; .................... // printf(lcd_putc,"\r%3.3f;\n%ld; ",stopinje_c,ad_vrednost); .................... return(stopinje_c); .................... } .................... .................... float meri_stopinje_c() { .................... return(iz_ad_v_stopinje_celzija(read_adc_30x())); .................... } .................... .................... //*********************************** .................... // KONEC RUTIN ZA AD .................... //----------------------------------- .................... .................... .................... /***********/ .................... /* M A I N */ .................... /***********/ .................... main(void) { /* začetek programa */ .................... long napetost; 006B: MOVLW 57 006C: MOVWF 77 006D: MOVLW 20 006E: MOVWF 04 006F: CLRF 00 0070: INCF 04,F 0071: DECFSZ 77,F 0072: GOTO 06F 0073: CLRF 78 0074: CLRF 79 0075: CLRF 7A 0076: CLRF 7B 0077: CLRF 7C 0078: CLRF 7D 0079: CLRF 7E 007A: MOVLW 50 007B: MOVWF 77 007C: MOVLW A0 007D: MOVWF 04 007E: CLRF 00 007F: INCF 04,F 0080: DECFSZ 77,F 0081: GOTO 07E 0082: CLRF 20 0083: CLRF 04 0084: MOVLW 1F 0085: ANDWF 03,F 0086: MOVLW 07 0087: BSF 03.5 0088: MOVWF 1F 0089: MOVLW FF 008A: BCF 03.5 008B: MOVWF 20 .................... //INICIALIZACIJA .................... //ANALOGNO DIGITALNI PRETVORNIK .................... set_tris_a(0b11111111); 008C: MOVLW FF 008D: BSF 03.5 008E: MOVWF 05 .................... setup_adc_ports( ALL_ANALOG ); 008F: MOVLW 80 0090: MOVWF 1F .................... setup_adc( ADC_CLOCK_INTERNAL ); 0091: BCF 03.5 0092: MOVF 1F,W 0093: ANDLW 38 0094: IORLW C1 0095: MOVWF 1F .................... set_adc_channel( 0 ); 0096: MOVLW 00 0097: MOVWF 78 0098: MOVF 1F,W 0099: ANDLW C7 009A: IORWF 78,W 009B: MOVWF 1F .................... .................... // SET_TRIS_A( 0 ); .................... SET_TRIS_B(0Xff ); //11111111 vsi vhodi 009C: MOVLW FF 009D: BSF 03.5 009E: MOVWF 06 .................... SET_TRIS_C( 0 ); //vsi izhodi 009F: MOVLW 00 00A0: MOVWF 07 00A1: BCF 03.5 00A2: MOVWF 20 .................... .................... output_high(PIN_C3); 00A3: BCF 20.3 00A4: MOVF 20,W 00A5: BSF 03.5 00A6: MOVWF 07 00A7: BCF 03.5 00A8: BSF 07.3 .................... Delay_ms(100); 00A9: MOVLW 64 00AA: MOVWF 28 00AB: CALL 004 .................... output_low(PIN_C3); 00AC: BCF 20.3 00AD: MOVF 20,W 00AE: BSF 03.5 00AF: MOVWF 07 00B0: BCF 03.5 00B1: BCF 07.3 .................... Delay_ms(100); 00B2: MOVLW 64 00B3: MOVWF 28 00B4: CALL 004 .................... output_high(PIN_C3); 00B5: BCF 20.3 00B6: MOVF 20,W 00B7: BSF 03.5 00B8: MOVWF 07 00B9: BCF 03.5 00BA: BSF 07.3 .................... Delay_ms(500); 00BB: MOVLW 02 00BC: MOVWF 23 00BD: MOVLW FA 00BE: MOVWF 28 00BF: CALL 004 00C0: DECFSZ 23,F 00C1: GOTO 0BD .................... output_low(PIN_C3); 00C2: BCF 20.3 00C3: MOVF 20,W 00C4: BSF 03.5 00C5: MOVWF 07 00C6: BCF 03.5 00C7: BCF 07.3 .................... Delay_ms(500); 00C8: MOVLW 02 00C9: MOVWF 23 00CA: MOVLW FA 00CB: MOVWF 28 00CC: CALL 004 00CD: DECFSZ 23,F 00CE: GOTO 0CA .................... while (1) { /* v naskončni zanki utripa*/ .................... .................... napetost = read_adc_30x(); 00CF: GOTO 041 00D0: MOVF 79,W 00D1: MOVWF 22 00D2: MOVF 78,W 00D3: MOVWF 21 .................... if (napetost > 500) 00D4: MOVF 22,W 00D5: SUBLW 00 00D6: BTFSC 03.0 00D7: GOTO 0E6 00D8: XORLW FF 00D9: BTFSS 03.2 00DA: GOTO 0DF 00DB: MOVF 21,W 00DC: SUBLW F4 00DD: BTFSC 03.0 00DE: GOTO 0E6 .................... output_high(PIN_C3); 00DF: BCF 20.3 00E0: MOVF 20,W 00E1: BSF 03.5 00E2: MOVWF 07 00E3: BCF 03.5 00E4: BSF 07.3 .................... else 00E5: GOTO 0EC .................... output_low(PIN_C3); 00E6: BCF 20.3 00E7: MOVF 20,W 00E8: BSF 03.5 00E9: MOVWF 07 00EA: BCF 03.5 00EB: BCF 07.3 .................... .................... .................... } /* konec while zanke */ 00EC: GOTO 0CF .................... } /* konec funkcije main */ .................... 00ED: SLEEP ....................