CCS PCM C Compiler, Version 4.106, 47914 06-X-13 22:07Filename: Z:\home\kaklik\svnMLAB\Designs\Measuring_instruments\GM_counter\SW\PIC16F887\main.lstROM used: 3009 words (37%)Largest free fragment is 2048RAM used: 37 (10%) at main() level56 (15%) worst caseStack: 6 worst case (5 in main + 1 for interrupts)*0000: MOVLW 080001: MOVWF 0A0002: GOTO 0000003: NOP0004: MOVWF 7F0005: SWAPF 03,W0006: CLRF 030007: MOVWF 210008: MOVF 0A,W0009: MOVWF 20000A: CLRF 0A000B: MOVF 04,W000C: MOVWF 22000D: MOVF 77,W000E: MOVWF 23000F: MOVF 78,W0010: MOVWF 240011: MOVF 79,W0012: MOVWF 250013: MOVF 7A,W0014: MOVWF 260015: BCF 03.70016: BCF 03.50017: BTFSS 0B.50018: GOTO 01B0019: BTFSC 0B.2001A: GOTO 032001B: MOVLW 8C001C: MOVWF 04001D: BTFSS 00.0001E: GOTO 021001F: BTFSC 0C.00020: GOTO 0350021: MOVF 22,W0022: MOVWF 040023: MOVF 23,W0024: MOVWF 770025: MOVF 24,W0026: MOVWF 780027: MOVF 25,W0028: MOVWF 790029: MOVF 26,W002A: MOVWF 7A002B: MOVF 20,W002C: MOVWF 0A002D: SWAPF 21,W002E: MOVWF 03002F: SWAPF 7F,F0030: SWAPF 7F,W0031: RETFIE0032: BCF 0A.30033: BCF 0A.40034: GOTO 0400035: BCF 0A.30036: BCF 0A.40037: GOTO 047.................... #include ".\main.h".................... #include <16F887.h>.................... //////// Standard Header file for the PIC16F887 device ////////////////.................... #device PIC16F887.................... #list........................................ #device adc=10........................................ #FUSES NOWDT //No Watch Dog Timer.................... #FUSES INTRC //Internal RC Osc.................... #FUSES NOPUT //No Power Up Timer.................... #FUSES MCLR //Master Clear pin enabled.................... #FUSES NOPROTECT //Code not protected from reading.................... #FUSES NOCPD //No EE protection.................... #FUSES NOBROWNOUT //No brownout reset.................... #FUSES IESO //Internal External Switch Over mode enabled.................... #FUSES FCMEN //Fail-safe clock monitor enabled.................... #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O.................... #FUSES NODEBUG //No Debug mode for ICD.................... #FUSES NOWRT //Program memory not write protected.................... #FUSES BORV40 //Brownout reset at 4.0V........................................ #use delay(clock=8000000)*00A4: MOVLW 4700A5: MOVWF 0400A6: BCF 03.700A7: MOVF 00,W00A8: BTFSC 03.200A9: GOTO 0B700AA: MOVLW 0200AB: MOVWF 7800AC: CLRF 7700AD: DECFSZ 77,F00AE: GOTO 0AD00AF: DECFSZ 78,F00B0: GOTO 0AC00B1: MOVLW 9700B2: MOVWF 7700B3: DECFSZ 77,F00B4: GOTO 0B300B5: DECFSZ 00,F00B6: GOTO 0AA00B7: RETURN*0643: MOVLW 080644: SUBWF 41,F0645: BTFSS 03.00646: GOTO 6530647: MOVLW 410648: MOVWF 040649: BCF 03.7064A: BCF 03.0064B: RRF 00,F064C: MOVF 00,W064D: BTFSC 03.2064E: GOTO 653064F: GOTO 6510650: NOP0651: DECFSZ 00,F0652: GOTO 6500653: RETURN.................... #use rs232(baud=9600,parity=N,xmit=PIN_B7,rcv=PIN_B6,bits=8)*0230: BSF 03.50231: BCF 06.70232: BCF 03.50233: BCF 06.70234: MOVLW 080235: MOVWF 780236: GOTO 2370237: NOP0238: BSF 78.70239: GOTO 248023A: BCF 78.7023B: RRF 46,F023C: BTFSC 03.0023D: BSF 06.7023E: BTFSS 03.0023F: BCF 06.70240: BSF 78.60241: GOTO 2480242: BCF 78.60243: DECFSZ 78,F0244: GOTO 23B0245: GOTO 2460246: NOP0247: BSF 06.70248: MOVLW 3F0249: MOVWF 04024A: DECFSZ 04,F024B: GOTO 24A024C: NOP024D: BTFSC 78.7024E: GOTO 23A024F: BTFSC 78.60250: GOTO 2420251: RETURN................................................................................ #define LED1 PIN_C6 //CHANGE PIN_XX TO YOUR LED PIN NUMBER, EX: PIN_A5.................... #define LED2 PIN_C5 //CHANGE PIN_XX TO YOUR LED PIN NUMBER, EX: PIN_A5.................... #define LED3 PIN_C4 // pulse detect.................... #define LED4 PIN_D3 //CHANGE PIN_XX TO YOUR LED PIN NUMBER........................................ #define S1 PIN_C2 // raw up.................... #define S2 PIN_C3 // raw down.................... #define S3 PIN_D0 // fine up.................... #define S4 PIN_D1 // fine down.................... #define S5 PIN_B1 // time setup.................... #define S6 PIN_B2 // treshold setup........................................ #define BEEP PIN_D2 //piezo beeper........................................ #define LCD_ENABLE_PIN PIN_E0 ////.................... #define LCD_RS_PIN PIN_E1 ////.................... #define LCD_RW_PIN PIN_E2 ////.................... #define LCD_DATA4 PIN_D4 ////.................... #define LCD_DATA5 PIN_D5 ////.................... #define LCD_DATA6 PIN_D6 ////.................... #define LCD_DATA7 PIN_D7.................... #include <lcd.c>.................... ///////////////////////////////////////////////////////////////////////////////.................... //// LCD.C ////.................... //// Driver for common LCD modules ////.................... //// ////.................... //// lcd_init() Must be called before any other function. ////.................... //// ////.................... //// lcd_putc(c) Will display c on the next position of the LCD. ////.................... //// \a Set cursor position to upper left ////.................... //// \f Clear display, set cursor to upper left ////.................... //// \n Go to start of second line ////.................... //// \b Move back one position ////.................... //// If LCD_EXTENDED_NEWLINE is defined, the \n character ////.................... //// will erase all remanining characters on the current ////.................... //// line, and move the cursor to the beginning of the next ////.................... //// line. ////.................... //// If LCD_EXTENDED_NEWLINE is defined, the \r character ////.................... //// will move the cursor to the start of the current ////.................... //// line. ////.................... //// ////.................... //// lcd_gotoxy(x,y) Set write position on LCD (upper left is 1,1) ////.................... //// ////.................... //// lcd_getc(x,y) Returns character at position x,y on LCD ////.................... //// ////.................... //// CONFIGURATION ////.................... //// The LCD can be configured in one of two ways: a.) port access or ////.................... //// b.) pin access. Port access requires the entire 7 bit interface ////.................... //// connected to one GPIO port, and the data bits (D4:D7 of the LCD) ////.................... //// connected to sequential pins on the GPIO. Pin access ////.................... //// has no requirements, all 7 bits of the control interface can ////.................... //// can be connected to any GPIO using several ports. ////.................... //// ////.................... //// To use port access, #define LCD_DATA_PORT to the SFR location of ////.................... //// of the GPIO port that holds the interface, -AND- edit LCD_PIN_MAP ////.................... //// of this file to configure the pin order. If you are using a ////.................... //// baseline PIC (PCB), then LCD_OUTPUT_MAP and LCD_INPUT_MAP also must ////.................... //// be defined. ////.................... //// ////.................... //// Example of port access: ////.................... //// #define LCD_DATA_PORT getenv("SFR:PORTD") ////.................... //// ////.................... //// To use pin access, the following pins must be defined: ////.................... //// LCD_ENABLE_PIN ////.................... //// LCD_RS_PIN ////.................... //// LCD_RW_PIN ////.................... //// LCD_DATA4 ////.................... //// LCD_DATA5 ////.................... //// LCD_DATA6 ////.................... //// LCD_DATA7 ////.................... //// ////.................... //// Example of pin access: ////.................... //// #define LCD_ENABLE_PIN PIN_E0 ////.................... //// #define LCD_RS_PIN PIN_E1 ////.................... //// #define LCD_RW_PIN PIN_E2 ////.................... //// #define LCD_DATA4 PIN_D4 ////.................... //// #define LCD_DATA5 PIN_D5 ////.................... //// #define LCD_DATA6 PIN_D6 ////.................... //// #define LCD_DATA7 PIN_D7 ////.................... //// ////.................... ///////////////////////////////////////////////////////////////////////////////.................... //// (C) Copyright 1996,2010 Custom Computer Services ////.................... //// This source code may only be used by licensed users of the CCS C ////.................... //// compiler. This source code may only be distributed to other ////.................... //// licensed users of the CCS C compiler. No other use, reproduction ////.................... //// or distribution is permitted without written permission. ////.................... //// Derivative programs created using this software in object code ////.................... //// form are not restricted in any way. ////.................... ///////////////////////////////////////////////////////////////////////////........................................ // define the pinout..................... // only required if port access is being used..................... typedef struct.................... { // This structure is overlayed.................... BOOLEAN enable; // on to an I/O port to gain.................... BOOLEAN rs; // access to the LCD pins..................... BOOLEAN rw; // The bits are allocated from.................... BOOLEAN unused; // low order up. ENABLE will.................... int data : 4; // be LSB pin of that port..................... #if defined(__PCD__) // The port used will be LCD_DATA_PORT..................... int reserved: 8;.................... #endif.................... } LCD_PIN_MAP;........................................ // this is to improve compatability with previous LCD drivers that accepted.................... // a define labeled 'use_portb_lcd' that configured the LCD onto port B..................... #if ((defined(use_portb_lcd)) && (use_portb_lcd==TRUE)).................... #define LCD_DATA_PORT getenv("SFR:PORTB").................... #endif........................................ #if defined(__PCB__).................... // these definitions only need to be modified for baseline PICs..................... // all other PICs use LCD_PIN_MAP or individual LCD_xxx pin definitions..................... /* EN, RS, RW, UNUSED, DATA */.................... const LCD_PIN_MAP LCD_OUTPUT_MAP = {0, 0, 0, 0, 0};.................... const LCD_PIN_MAP LCD_INPUT_MAP = {0, 0, 0, 0, 0xF};.................... #endif........................................ ////////////////////// END CONFIGURATION ///////////////////////////////////........................................ #ifndef LCD_ENABLE_PIN.................... #define lcd_output_enable(x) lcdlat.enable=x.................... #define lcd_enable_tris() lcdtris.enable=0.................... #else.................... #define lcd_output_enable(x) output_bit(LCD_ENABLE_PIN, x).................... #define lcd_enable_tris() output_drive(LCD_ENABLE_PIN).................... #endif........................................ #ifndef LCD_RS_PIN.................... #define lcd_output_rs(x) lcdlat.rs=x.................... #define lcd_rs_tris() lcdtris.rs=0.................... #else.................... #define lcd_output_rs(x) output_bit(LCD_RS_PIN, x).................... #define lcd_rs_tris() output_drive(LCD_RS_PIN).................... #endif........................................ #ifndef LCD_RW_PIN.................... #define lcd_output_rw(x) lcdlat.rw=x.................... #define lcd_rw_tris() lcdtris.rw=0.................... #else.................... #define lcd_output_rw(x) output_bit(LCD_RW_PIN, x).................... #define lcd_rw_tris() output_drive(LCD_RW_PIN).................... #endif........................................ // original version of this library incorrectly labeled LCD_DATA0 as LCD_DATA4,.................... // LCD_DATA1 as LCD_DATA5, and so on. this block of code makes the driver.................... // compatible with any code written for the original library.................... #if (defined(LCD_DATA0) && defined(LCD_DATA1) && defined(LCD_DATA2) && defined(LCD_DATA3) && !defined(LCD_DATA4) && !defined(LCD_DATA5) && !defined(LCD_DATA6) && !defined(LCD_DATA7)).................... #define LCD_DATA4 LCD_DATA0.................... #define LCD_DATA5 LCD_DATA1.................... #define LCD_DATA6 LCD_DATA2.................... #define LCD_DATA7 LCD_DATA3.................... #endif........................................ #ifndef LCD_DATA4.................... #ifndef LCD_DATA_PORT.................... #if defined(__PCB__).................... #define LCD_DATA_PORT 0x06 //portb.................... #define set_tris_lcd(x) set_tris_b(x).................... #else.................... #if defined(PIN_D0).................... #define LCD_DATA_PORT getenv("SFR:PORTD") //portd.................... #else.................... #define LCD_DATA_PORT getenv("SFR:PORTB") //portb.................... #endif.................... #endif.................... #endif........................................ #if defined(__PCB__).................... LCD_PIN_MAP lcd, lcdlat;.................... #byte lcd = LCD_DATA_PORT.................... #byte lcdlat = LCD_DATA_PORT.................... #elif defined(__PCM__).................... LCD_PIN_MAP lcd, lcdlat, lcdtris;.................... #byte lcd = LCD_DATA_PORT.................... #byte lcdlat = LCD_DATA_PORT.................... #byte lcdtris = LCD_DATA_PORT+0x80.................... #elif defined(__PCH__).................... LCD_PIN_MAP lcd, lcdlat, lcdtris;.................... #byte lcd = LCD_DATA_PORT.................... #byte lcdlat = LCD_DATA_PORT+9.................... #byte lcdtris = LCD_DATA_PORT+0x12.................... #elif defined(__PCD__).................... LCD_PIN_MAP lcd, lcdlat, lcdtris;.................... #word lcd = LCD_DATA_PORT.................... #word lcdlat = LCD_DATA_PORT+2.................... #word lcdtris = LCD_DATA_PORT-0x02.................... #endif.................... #endif //LCD_DATA4 not defined........................................ #ifndef LCD_TYPE.................... #define LCD_TYPE 2 // 0=5x7, 1=5x10, 2=2 lines.................... #endif........................................ #ifndef LCD_LINE_TWO.................... #define LCD_LINE_TWO 0x40 // LCD RAM address for the second line.................... #endif........................................ #ifndef LCD_LINE_LENGTH.................... #define LCD_LINE_LENGTH 20.................... #endif........................................ BYTE const LCD_INIT_STRING[4] = {0x20 | (LCD_TYPE << 2), 0xc, 1, 6};.................... // These bytes need to be sent to the LCD.................... // to start it up......................................... BYTE lcd_read_nibble(void);........................................ BYTE lcd_read_byte(void).................... {.................... BYTE low,high;........................................ #if defined(__PCB__).................... set_tris_lcd(LCD_INPUT_MAP);.................... #else.................... #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7)).................... output_float(LCD_DATA4);*011D: BSF 08.4.................... output_float(LCD_DATA5);011E: BSF 08.5.................... output_float(LCD_DATA6);011F: BSF 08.6.................... output_float(LCD_DATA7);0120: BSF 08.7.................... #else.................... lcdtris.data = 0xF;.................... #endif.................... #endif........................................ lcd_output_rw(1);0121: BCF 03.50122: BSF 09.20123: BSF 03.50124: BCF 09.2.................... delay_cycles(1);0125: NOP.................... lcd_output_enable(1);0126: BCF 03.50127: BSF 09.00128: BSF 03.50129: BCF 09.0.................... delay_cycles(1);012A: NOP.................... high = lcd_read_nibble();012B: BCF 03.5012C: CALL 0E4012D: MOVF 78,W012E: MOVWF 4E........................................ lcd_output_enable(0);012F: BCF 09.00130: BSF 03.50131: BCF 09.0.................... delay_cycles(1);0132: NOP.................... lcd_output_enable(1);0133: BCF 03.50134: BSF 09.00135: BSF 03.50136: BCF 09.0.................... delay_us(1);0137: GOTO 138.................... low = lcd_read_nibble();0138: BCF 03.50139: CALL 0E4013A: MOVF 78,W013B: MOVWF 4D........................................ lcd_output_enable(0);013C: BCF 09.0013D: BSF 03.5013E: BCF 09.0........................................ #if defined(__PCB__).................... set_tris_lcd(LCD_OUTPUT_MAP);.................... #else.................... #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7)).................... output_drive(LCD_DATA4);013F: BCF 08.4.................... output_drive(LCD_DATA5);0140: BCF 08.5.................... output_drive(LCD_DATA6);0141: BCF 08.6.................... output_drive(LCD_DATA7);0142: BCF 08.7.................... #else.................... lcdtris.data = 0x0;.................... #endif.................... #endif........................................ return( (high<<4) | low);0143: BCF 03.50144: SWAPF 4E,W0145: MOVWF 770146: MOVLW F00147: ANDWF 77,F0148: MOVF 77,W0149: IORWF 4D,W014A: MOVWF 78.................... }........................................ BYTE lcd_read_nibble(void).................... {.................... #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7))*00E4: CLRF 4F.................... BYTE n = 0x00;........................................ /* Read the data port */.................... n |= input(LCD_DATA4);00E5: BSF 03.500E6: BSF 08.400E7: MOVLW 0000E8: BCF 03.500E9: BTFSC 08.400EA: MOVLW 0100EB: IORWF 4F,F.................... n |= input(LCD_DATA5) << 1;00EC: BSF 03.500ED: BSF 08.500EE: MOVLW 0000EF: BCF 03.500F0: BTFSC 08.500F1: MOVLW 0100F2: MOVWF 7700F3: BCF 03.000F4: RLF 77,F00F5: MOVF 77,W00F6: IORWF 4F,F.................... n |= input(LCD_DATA6) << 2;00F7: BSF 03.500F8: BSF 08.600F9: MOVLW 0000FA: BCF 03.500FB: BTFSC 08.600FC: MOVLW 0100FD: MOVWF 7700FE: RLF 77,F00FF: RLF 77,F0100: MOVLW FC0101: ANDWF 77,F0102: MOVF 77,W0103: IORWF 4F,F.................... n |= input(LCD_DATA7) << 3;0104: BSF 03.50105: BSF 08.70106: MOVLW 000107: BCF 03.50108: BTFSC 08.70109: MOVLW 01010A: MOVWF 77010B: RLF 77,F010C: RLF 77,F010D: RLF 77,F010E: MOVLW F8010F: ANDWF 77,F0110: MOVF 77,W0111: IORWF 4F,F........................................ return(n);0112: MOVF 4F,W0113: MOVWF 78.................... #else.................... return(lcd.data);.................... #endif.................... }0114: RETURN........................................ void lcd_send_nibble(BYTE n).................... {.................... #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7)).................... /* Write to the data port */.................... output_bit(LCD_DATA4, bit_test(n, 0));*00B8: BTFSC 4E.000B9: GOTO 0BC00BA: BCF 08.400BB: GOTO 0BD00BC: BSF 08.400BD: BSF 03.500BE: BCF 08.4.................... output_bit(LCD_DATA5, bit_test(n, 1));00BF: BCF 03.500C0: BTFSC 4E.100C1: GOTO 0C400C2: BCF 08.500C3: GOTO 0C500C4: BSF 08.500C5: BSF 03.500C6: BCF 08.5.................... output_bit(LCD_DATA6, bit_test(n, 2));00C7: BCF 03.500C8: BTFSC 4E.200C9: GOTO 0CC00CA: BCF 08.600CB: GOTO 0CD00CC: BSF 08.600CD: BSF 03.500CE: BCF 08.6.................... output_bit(LCD_DATA7, bit_test(n, 3));00CF: BCF 03.500D0: BTFSC 4E.300D1: GOTO 0D400D2: BCF 08.700D3: GOTO 0D500D4: BSF 08.700D5: BSF 03.500D6: BCF 08.7.................... #else.................... lcdlat.data = n;.................... #endif........................................ delay_cycles(1);00D7: NOP.................... lcd_output_enable(1);00D8: BCF 03.500D9: BSF 09.000DA: BSF 03.500DB: BCF 09.0.................... delay_us(2);00DC: GOTO 0DD00DD: GOTO 0DE.................... lcd_output_enable(0);00DE: BCF 03.500DF: BCF 09.000E0: BSF 03.500E1: BCF 09.0.................... }00E2: BCF 03.500E3: RETURN........................................ void lcd_send_byte(BYTE address, BYTE n).................... {.................... #if defined(__PCB__).................... set_tris_lcd(LCD_OUTPUT_MAP);.................... #else.................... lcd_enable_tris();*0115: BSF 03.50116: BCF 09.0.................... lcd_rs_tris();0117: BCF 09.1.................... lcd_rw_tris();0118: BCF 09.2.................... #endif........................................ lcd_output_rs(0);0119: BCF 03.5011A: BCF 09.1011B: BSF 03.5011C: BCF 09.1.................... while ( bit_test(lcd_read_byte(),7) ) ;*014B: MOVF 78,W014C: MOVWF 4D014D: BTFSS 4D.7014E: GOTO 151014F: BSF 03.50150: GOTO 11D.................... lcd_output_rs(address);0151: MOVF 4B,F0152: BTFSS 03.20153: GOTO 1560154: BCF 09.10155: GOTO 1570156: BSF 09.10157: BSF 03.50158: BCF 09.1.................... delay_cycles(1);0159: NOP.................... lcd_output_rw(0);015A: BCF 03.5015B: BCF 09.2015C: BSF 03.5015D: BCF 09.2.................... delay_cycles(1);015E: NOP.................... lcd_output_enable(0);015F: BCF 03.50160: BCF 09.00161: BSF 03.50162: BCF 09.0.................... lcd_send_nibble(n >> 4);0163: BCF 03.50164: SWAPF 4C,W0165: MOVWF 4D0166: MOVLW 0F0167: ANDWF 4D,F0168: MOVF 4D,W0169: MOVWF 4E016A: CALL 0B8.................... lcd_send_nibble(n & 0xf);016B: MOVF 4C,W016C: ANDLW 0F016D: MOVWF 4D016E: MOVWF 4E016F: CALL 0B8.................... }0170: RETURN........................................ #if defined(LCD_EXTENDED_NEWLINE).................... unsigned int8 g_LcdX, g_LcdY;.................... #endif........................................ void lcd_init(void).................... {.................... BYTE i;........................................ #if defined(__PCB__).................... set_tris_lcd(LCD_OUTPUT_MAP);.................... #else.................... #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7)).................... output_drive(LCD_DATA4);0171: BSF 03.50172: BCF 08.4.................... output_drive(LCD_DATA5);0173: BCF 08.5.................... output_drive(LCD_DATA6);0174: BCF 08.6.................... output_drive(LCD_DATA7);0175: BCF 08.7.................... #else.................... lcdtris.data = 0x0;.................... #endif.................... lcd_enable_tris();0176: BCF 09.0.................... lcd_rs_tris();0177: BCF 09.1.................... lcd_rw_tris();0178: BCF 09.2.................... #endif........................................ lcd_output_rs(0);0179: BCF 03.5017A: BCF 09.1017B: BSF 03.5017C: BCF 09.1.................... lcd_output_rw(0);017D: BCF 03.5017E: BCF 09.2017F: BSF 03.50180: BCF 09.2.................... lcd_output_enable(0);0181: BCF 03.50182: BCF 09.00183: BSF 03.50184: BCF 09.0........................................ delay_ms(15);0185: MOVLW 0F0186: BCF 03.50187: MOVWF 470188: CALL 0A4.................... for(i=1;i<=3;++i)0189: MOVLW 01018A: MOVWF 3A018B: MOVF 3A,W018C: SUBLW 03018D: BTFSS 03.0018E: GOTO 197.................... {.................... lcd_send_nibble(3);018F: MOVLW 030190: MOVWF 4E0191: CALL 0B8.................... delay_ms(5);0192: MOVLW 050193: MOVWF 470194: CALL 0A4.................... }0195: INCF 3A,F0196: GOTO 18B........................................ lcd_send_nibble(2);0197: MOVLW 020198: MOVWF 4E0199: CALL 0B8.................... for(i=0;i<=3;++i)019A: CLRF 3A019B: MOVF 3A,W019C: SUBLW 03019D: BTFSS 03.0019E: GOTO 1A8.................... lcd_send_byte(0,LCD_INIT_STRING[i]);019F: MOVF 3A,W01A0: CALL 03801A1: MOVWF 3B01A2: CLRF 4B01A3: MOVF 3B,W01A4: MOVWF 4C01A5: CALL 115........................................ #if defined(LCD_EXTENDED_NEWLINE)01A6: INCF 3A,F01A7: GOTO 19B.................... g_LcdX = 0;.................... g_LcdY = 0;.................... #endif.................... }01A8: BSF 0A.301A9: BCF 0A.401AA: GOTO 0BA (RETURN)........................................ void lcd_gotoxy(BYTE x, BYTE y).................... {.................... BYTE address;........................................ if(y!=1)01AB: DECFSZ 48,W01AC: GOTO 1AE01AD: GOTO 1B1.................... address=LCD_LINE_TWO;01AE: MOVLW 4001AF: MOVWF 49.................... else01B0: GOTO 1B2.................... address=0;01B1: CLRF 49........................................ address+=x-1;01B2: MOVLW 0101B3: SUBWF 47,W01B4: ADDWF 49,F.................... lcd_send_byte(0,0x80|address);01B5: MOVF 49,W01B6: IORLW 8001B7: MOVWF 4A01B8: CLRF 4B01B9: MOVF 4A,W01BA: MOVWF 4C01BB: CALL 115........................................ #if defined(LCD_EXTENDED_NEWLINE).................... g_LcdX = x - 1;.................... g_LcdY = y - 1;.................... #endif.................... }01BC: RETURN........................................ void lcd_putc(char c).................... {.................... switch (c).................... {01BD: MOVF 46,W01BE: XORLW 0701BF: BTFSC 03.201C0: GOTO 1CB01C1: XORLW 0B01C2: BTFSC 03.201C3: GOTO 1D001C4: XORLW 0601C5: BTFSC 03.201C6: GOTO 1D801C7: XORLW 0201C8: BTFSC 03.201C9: GOTO 1DE01CA: GOTO 1E3.................... case '\a' : lcd_gotoxy(1,1); break;01CB: MOVLW 0101CC: MOVWF 4701CD: MOVWF 4801CE: CALL 1AB01CF: GOTO 1E9........................................ case '\f' : lcd_send_byte(0,1);01D0: CLRF 4B01D1: MOVLW 0101D2: MOVWF 4C01D3: CALL 115.................... delay_ms(2);01D4: MOVLW 0201D5: MOVWF 4701D6: CALL 0A4.................... #if defined(LCD_EXTENDED_NEWLINE).................... g_LcdX = 0;.................... g_LcdY = 0;.................... #endif.................... break;01D7: GOTO 1E9........................................ #if defined(LCD_EXTENDED_NEWLINE).................... case '\r' : lcd_gotoxy(1, g_LcdY+1); break;.................... case '\n' :.................... while (g_LcdX++ < LCD_LINE_LENGTH).................... {.................... lcd_send_byte(1, ' ');.................... }.................... lcd_gotoxy(1, g_LcdY+2);.................... break;.................... #else.................... case '\n' : lcd_gotoxy(1,2); break;01D8: MOVLW 0101D9: MOVWF 4701DA: MOVLW 0201DB: MOVWF 4801DC: CALL 1AB01DD: GOTO 1E9.................... #endif........................................ case '\b' : lcd_send_byte(0,0x10); break;01DE: CLRF 4B01DF: MOVLW 1001E0: MOVWF 4C01E1: CALL 11501E2: GOTO 1E9........................................ #if defined(LCD_EXTENDED_NEWLINE).................... default :.................... if (g_LcdX < LCD_LINE_LENGTH).................... {.................... lcd_send_byte(1, c);.................... g_LcdX++;.................... }.................... break;.................... #else.................... default : lcd_send_byte(1,c); break;01E3: MOVLW 0101E4: MOVWF 4B01E5: MOVF 46,W01E6: MOVWF 4C01E7: CALL 11501E8: GOTO 1E9.................... #endif.................... }.................... }01E9: RETURN........................................ char lcd_getc(BYTE x, BYTE y).................... {.................... char value;........................................ lcd_gotoxy(x,y);.................... while ( bit_test(lcd_read_byte(),7) ); // wait until busy flag is low.................... lcd_output_rs(1);.................... value = lcd_read_byte();.................... lcd_output_rs(0);........................................ return(value);.................... }................................................................................ unsigned int32 pulse_count=0;.................... unsigned int16 overflow_count=0;.................... unsigned int16 time_overflow_count=0;............................................................ #int_RTCC.................... void RTCC_isr(void).................... {.................... time_overflow_count++;*0040: INCF 2D,F0041: BTFSC 03.20042: INCF 2E,F.................... }....................0043: BCF 0B.20044: BCF 0A.30045: BCF 0A.40046: GOTO 021.................... #int_TIMER1.................... void TIMER1_isr(void).................... {.................... overflow_count++;0047: INCF 2B,F0048: BTFSC 03.20049: INCF 2C,F.................... output_toggle(LED3);004A: BCF 2F.4004B: MOVF 2F,W004C: BSF 03.5004D: MOVWF 07004E: MOVLW 10004F: BCF 03.50050: XORWF 07,F.................... output_toggle(BEEP);0051: BSF 03.50052: BCF 08.20053: MOVLW 040054: BCF 03.50055: XORWF 08,F.................... }....................0056: BCF 0C.00057: BCF 0A.30058: BCF 0A.40059: GOTO 021.................... void sound_beep( unsigned int lenght, int16 frequency).................... {.................... unsigned int i;........................................ for(i=0;i<=lenght;i++)*0654: CLRF 3D0655: MOVF 3D,W0656: SUBWF 3A,W0657: BTFSS 03.00658: GOTO 69C.................... {.................... output_toggle(BEEP);0659: BSF 03.5065A: BCF 08.2065B: MOVLW 04065C: BCF 03.5065D: XORWF 08,F.................... delay_us(1/frequency);065E: CLRF 3F065F: MOVLW 010660: MOVWF 3E0661: MOVF 3C,W0662: MOVWF 410663: MOVF 3B,W0664: MOVWF 40*0689: MOVF 79,W068A: MOVWF 3F068B: MOVF 78,W068C: MOVWF 3E068D: MOVF 3F,W068E: MOVWF 40068F: INCF 40,F0690: DECF 40,F0691: BTFSC 03.20692: GOTO 6970693: MOVLW FF0694: MOVWF 410695: CALL 6430696: GOTO 6900697: MOVF 3E,W0698: MOVWF 410699: CALL 643.................... }069A: INCF 3D,F069B: GOTO 655.................... }069C: RETURN........................................ #define TRESHOLD_setup 1.................... #define INTERVAL_setup 0............................................................ void main().................... {*0800: CLRF 040801: BCF 03.70802: MOVLW 1F0803: ANDWF 03,F0804: MOVLW 710805: BSF 03.50806: MOVWF 0F0807: MOVF 0F,W0808: BCF 06.70809: BCF 03.5080A: BSF 06.7080B: CLRF 2A080C: CLRF 29080D: CLRF 28080E: CLRF 27080F: CLRF 2C0810: CLRF 2B0811: CLRF 2E0812: CLRF 2D0813: BSF 03.50814: BSF 03.60815: MOVF 09,W0816: ANDLW C00817: MOVWF 090818: BCF 03.60819: BCF 1F.4081A: BCF 1F.5081B: MOVLW 00081C: BSF 03.6081D: MOVWF 08081E: BCF 03.5081F: CLRF 070820: CLRF 080821: CLRF 09*0825: CLRF 310826: MOVLW 3C0827: MOVWF 300828: BCF 36.10829: CLRF 38082A: CLRF 37082B: MOVLW 06082C: MOVWF 39.................... unsigned int16 integration_time=60;.................... unsigned int16 time;.................... unsigned int16 last_timer; // promena pro praskani.................... unsigned int1 button_press,setup_mode=INTERVAL_setup; // semafor pro cteni tlacitek.................... unsigned int16 measurement_number=0;.................... unsigned int8 treshold=6;........................................ setup_adc_ports(sAN0|VSS_VDD);082D: BSF 03.5082E: BSF 03.6082F: MOVF 09,W0830: ANDLW C00831: MOVWF 090832: BCF 03.60833: BCF 1F.40834: BCF 1F.50835: MOVLW 010836: BSF 03.60837: MOVWF 08.................... setup_adc(ADC_CLOCK_DIV_32);0838: BCF 03.50839: BCF 03.6083A: BCF 1F.6083B: BSF 1F.7083C: BSF 03.5083D: BSF 1F.7083E: BCF 03.5083F: BSF 1F.0.................... setup_spi(SPI_SS_DISABLED);0840: BCF 14.50841: BCF 2F.50842: MOVF 2F,W0843: BSF 03.50844: MOVWF 070845: BCF 03.50846: BSF 2F.40847: MOVF 2F,W0848: BSF 03.50849: MOVWF 07084A: BCF 03.5084B: BCF 2F.3084C: MOVF 2F,W084D: BSF 03.5084E: MOVWF 07084F: MOVLW 010850: BCF 03.50851: MOVWF 140852: MOVLW 000853: BSF 03.50854: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);0855: MOVF 01,W0856: ANDLW C00857: IORLW 070858: MOVWF 01.................... setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);0859: MOVLW 07085A: BCF 03.5085B: MOVWF 10.................... setup_timer_2(T2_DISABLED,0,1);085C: MOVLW 00085D: MOVWF 78085E: MOVWF 12085F: MOVLW 000860: BSF 03.50861: MOVWF 12.................... setup_ccp1(CCP_PWM);0862: BCF 03.50863: BCF 2F.20864: MOVF 2F,W0865: BSF 03.50866: MOVWF 070867: BCF 03.50868: BCF 07.20869: BSF 03.5086A: BCF 09.6086B: MOVLW 0C086C: BCF 03.5086D: MOVWF 17086E: BSF 03.5086F: CLRF 1B0870: CLRF 1C0871: MOVLW 010872: MOVWF 1D.................... setup_ccp2(CCP_PWM);0873: BCF 03.50874: BCF 2F.10875: MOVF 2F,W0876: BSF 03.50877: MOVWF 070878: BCF 03.50879: BCF 07.1087A: MOVLW 0C087B: MOVWF 1D087C: MOVLW 01087D: MOVWF 00.................... setup_oscillator(OSC_8MHZ);087E: MOVLW 71087F: BSF 03.50880: MOVWF 0F0881: MOVF 0F,W........................................ set_pwm1_duty(0);0882: BCF 03.50883: CLRF 15.................... set_pwm2_duty(0);0884: CLRF 1B........................................ output_high(LED1);0885: BCF 2F.60886: MOVF 2F,W0887: BSF 03.50888: MOVWF 070889: BCF 03.5088A: BSF 07.6.................... output_high(LED2);088B: BCF 2F.5088C: MOVF 2F,W088D: BSF 03.5088E: MOVWF 07088F: BCF 03.50890: BSF 07.5.................... output_high(LED3);0891: BCF 2F.40892: MOVF 2F,W0893: BSF 03.50894: MOVWF 070895: BCF 03.50896: BSF 07.4.................... output_high(LED4);0897: BSF 03.50898: BCF 08.30899: BCF 03.5089A: BSF 08.3.................... output_low(BEEP);089B: BSF 03.5089C: BCF 08.2089D: BCF 03.5089E: BCF 08.2........................................ setup_comparator(CP2_A0_VREF|CP2_OUT_ON_A5); // sets two comparators(A1 and VR and A2 as the output)089F: BSF 03.608A0: CLRF 0708A1: MOVLW A408A2: MOVWF 0808A3: MOVLW 1008A4: MOVWF 0908A5: BSF 03.508A6: BCF 03.608A7: BCF 05.508A8: BSF 05.0.................... setup_vref(VREF_HIGH|treshold); //sets 3.6(vdd *value/32 +vdd/4) if vdd is 5.0V08A9: BCF 03.508AA: MOVF 39,W08AB: IORLW 8008AC: MOVWF 3A08AD: BSF 03.508AE: MOVWF 17.................... enable_interrupts(INT_COMP); //enables the comparator interrupt08AF: BSF 0D.5.................... enable_interrupts(INT_RTCC);08B0: BCF 03.508B1: BSF 0B.5.................... enable_interrupts(INT_TIMER1);08B2: BSF 03.508B3: BSF 0C.0.................... enable_interrupts(INT_TIMER2);08B4: BSF 0C.1.................... enable_interrupts(GLOBAL);08B5: MOVLW C008B6: BCF 03.508B7: IORWF 0B,F.................... lcd_init();08B8: BCF 0A.308B9: GOTO 17108BA: BSF 0A.3........................................ lcd_putc("\fGM counter V1.0 \n 2013 MLAB");08BB: MOVLW 5A08BC: BSF 03.608BD: MOVWF 0D08BE: MOVLW 0008BF: MOVWF 0F08C0: BCF 0A.308C1: BCF 03.608C2: CALL 1EA08C3: BSF 0A.3.................... printf("Geiger-Muller Counter V1.0 \r\n");08C4: MOVLW 6A08C5: BSF 03.608C6: MOVWF 0D08C7: MOVLW 0008C8: MOVWF 0F08C9: BCF 0A.308CA: BCF 03.608CB: CALL 25208CC: BSF 0A.3.................... printf("(c) 2013 MLAB and UST.cz \r\n");08CD: MOVLW 7908CE: BSF 03.608CF: MOVWF 0D08D0: MOVLW 0008D1: MOVWF 0F08D2: BCF 0A.308D3: BCF 03.608D4: CALL 25208D5: BSF 0A.3.................... Delay_ms(1000);08D6: MOVLW 0408D7: MOVWF 3A08D8: MOVLW FA08D9: MOVWF 4708DA: BCF 0A.308DB: CALL 0A408DC: BSF 0A.308DD: DECFSZ 3A,F08DE: GOTO 0D8........................................ lcd_putc("\f");08DF: MOVLW 8708E0: BSF 03.608E1: MOVWF 0D08E2: MOVLW 0008E3: MOVWF 0F08E4: BCF 0A.308E5: BCF 03.608E6: CALL 1EA08E7: BSF 0A.3.................... printf("\r\n");08E8: MOVLW 0D08E9: MOVWF 4608EA: BCF 0A.308EB: CALL 23008EC: BSF 0A.308ED: MOVLW 0A08EE: MOVWF 4608EF: BCF 0A.308F0: CALL 23008F1: BSF 0A.3........................................ set_timer1(0);08F2: CLRF 0F08F3: CLRF 0E........................................ lcd_gotoxy(1,1); // vypsani hodnoty count, abz byla na LCD hned od zapnuti08F4: MOVLW 0108F5: MOVWF 4708F6: MOVWF 4808F7: BCF 0A.308F8: CALL 1AB08F9: BSF 0A.3.................... printf(lcd_putc,"Count:%lu ",pulse_count);08FA: MOVLW 8808FB: BSF 03.608FC: MOVWF 0D08FD: MOVLW 0008FE: MOVWF 0F08FF: BCF 03.00900: MOVLW 060901: BCF 03.60902: MOVWF 3A0903: BCF 0A.30904: CALL 2980905: BSF 0A.30906: MOVLW 410907: MOVWF 040908: MOVF 2A,W0909: MOVWF 3D090A: MOVF 29,W090B: MOVWF 3C090C: MOVF 28,W090D: MOVWF 3B090E: MOVF 27,W090F: MOVWF 3A0910: BCF 0A.30911: CALL 3290912: BSF 0A.30913: MOVLW 8C0914: BSF 03.60915: MOVWF 0D0916: MOVLW 000917: MOVWF 0F0918: BSF 03.00919: MOVLW 05091A: BCF 03.6091B: MOVWF 3A091C: BCF 0A.3091D: CALL 298091E: BSF 0A.3........................................ while(true).................... {.................... pulse_count = get_timer1() + (0xffff * overflow_count); // compute pulse count091F: MOVF 0F,W0920: MOVWF 7A0921: MOVF 0E,W0922: MOVWF 770923: MOVF 0F,W0924: SUBWF 7A,W0925: BTFSS 03.20926: GOTO 11F0927: MOVF 77,W0928: MOVWF 3A0929: MOVF 7A,W092A: MOVWF 3B092B: MOVLW FF092C: MOVWF 3D092D: MOVWF 3C092E: MOVF 2C,W092F: MOVWF 3F0930: MOVF 2B,W0931: MOVWF 3E0932: BCF 0A.30933: GOTO 3850934: BSF 0A.30935: MOVF 79,W0936: MOVWF 7A0937: MOVF 78,W0938: ADDWF 3A,W0939: MOVWF 27093A: MOVF 3B,W093B: MOVWF 28093C: MOVF 7A,W093D: BTFSC 03.0093E: INCFSZ 7A,W093F: ADDWF 28,F0940: CLRF 290941: CLRF 2A.................... time = integration_time + 1 - (time_overflow_count * 0.0327); // compute time interval0942: MOVLW 010943: ADDWF 30,W0944: MOVWF 3A0945: MOVF 31,W0946: MOVWF 3B0947: BTFSC 03.00948: INCF 3B,F0949: MOVF 2E,W094A: MOVWF 41094B: MOVF 2D,W094C: MOVWF 40094D: BCF 0A.3094E: CALL 39C094F: BSF 0A.30950: MOVF 7A,W0951: MOVWF 3F0952: MOVF 79,W0953: MOVWF 3E0954: MOVF 78,W0955: MOVWF 3D0956: MOVF 77,W0957: MOVWF 3C0958: MOVLW 6F0959: MOVWF 43095A: MOVLW F0095B: MOVWF 42095C: MOVLW 05095D: MOVWF 41095E: MOVLW 7A095F: MOVWF 400960: BCF 0A.30961: GOTO 3B90962: BSF 0A.30963: MOVF 77,W0964: MOVWF 3C0965: MOVF 78,W0966: MOVWF 3D0967: MOVF 79,W0968: MOVWF 3E0969: MOVF 7A,W096A: MOVWF 3F096B: MOVF 3B,W096C: MOVWF 41096D: MOVF 3A,W096E: MOVWF 40096F: BCF 0A.30970: CALL 39C0971: BSF 0A.30972: BSF 03.10973: MOVF 7A,W0974: MOVWF 430975: MOVF 79,W0976: MOVWF 420977: MOVF 78,W0978: MOVWF 410979: MOVF 77,W097A: MOVWF 40097B: MOVF 3F,W097C: MOVWF 47097D: MOVF 3E,W097E: MOVWF 46097F: MOVF 3D,W0980: MOVWF 450981: MOVF 3C,W0982: MOVWF 440983: BCF 0A.30984: GOTO 4300985: BSF 0A.30986: MOVF 7A,W0987: MOVWF 430988: MOVF 79,W0989: MOVWF 42098A: MOVF 78,W098B: MOVWF 41098C: MOVF 77,W098D: MOVWF 40098E: BCF 0A.3098F: GOTO 5730990: BSF 0A.30991: MOVF 79,W0992: MOVWF 330993: MOVF 78,W0994: MOVWF 32........................................ if(get_timer1() != last_timer) // timer count increment detection0995: MOVF 0F,W0996: MOVWF 7A0997: MOVF 0E,W0998: MOVWF 770999: MOVF 0F,W099A: SUBWF 7A,W099B: BTFSS 03.2099C: GOTO 195099D: MOVF 77,W099E: MOVWF 3A099F: MOVF 7A,W09A0: MOVWF 3B09A1: MOVF 34,W09A2: SUBWF 3A,W09A3: BTFSS 03.209A4: GOTO 1A909A5: MOVF 35,W09A6: SUBWF 3B,W09A7: BTFSC 03.209A8: GOTO 1F6.................... {.................... output_toggle(BEEP);09A9: BSF 03.509AA: BCF 08.209AB: MOVLW 0409AC: BCF 03.509AD: XORWF 08,F.................... delay_ms(1);09AE: MOVLW 0109AF: MOVWF 4709B0: BCF 0A.309B1: CALL 0A409B2: BSF 0A.3.................... output_toggle(BEEP);09B3: BSF 03.509B4: BCF 08.209B5: MOVLW 0409B6: BCF 03.509B7: XORWF 08,F.................... output_toggle(LED3);09B8: BCF 2F.409B9: MOVF 2F,W09BA: BSF 03.509BB: MOVWF 0709BC: MOVLW 1009BD: BCF 03.509BE: XORWF 07,F.................... last_timer=get_timer1();09BF: MOVF 0F,W09C0: MOVWF 7A09C1: MOVF 0E,W09C2: MOVWF 7709C3: MOVF 0F,W09C4: SUBWF 7A,W09C5: BTFSS 03.209C6: GOTO 1BF09C7: MOVF 77,W09C8: MOVWF 3409C9: MOVF 7A,W09CA: MOVWF 35.................... lcd_gotoxy(1,1); // prepsani dat na displeje09CB: MOVLW 0109CC: MOVWF 4709CD: MOVWF 4809CE: BCF 0A.309CF: CALL 1AB09D0: BSF 0A.3.................... printf(lcd_putc,"Count:%lu ",pulse_count);09D1: MOVLW 9009D2: BSF 03.609D3: MOVWF 0D09D4: MOVLW 0009D5: MOVWF 0F09D6: BCF 03.009D7: MOVLW 0609D8: BCF 03.609D9: MOVWF 3A09DA: BCF 0A.309DB: CALL 29809DC: BSF 0A.309DD: MOVLW 4109DE: MOVWF 0409DF: MOVF 2A,W09E0: MOVWF 3D09E1: MOVF 29,W09E2: MOVWF 3C09E3: MOVF 28,W09E4: MOVWF 3B09E5: MOVF 27,W09E6: MOVWF 3A09E7: BCF 0A.309E8: CALL 32909E9: BSF 0A.309EA: MOVLW 9409EB: BSF 03.609EC: MOVWF 0D09ED: MOVLW 0009EE: MOVWF 0F09EF: BSF 03.009F0: MOVLW 0509F1: BCF 03.609F2: MOVWF 3A09F3: BCF 0A.309F4: CALL 29809F5: BSF 0A.3.................... }........................................ lcd_gotoxy(1,2);09F6: MOVLW 0109F7: MOVWF 4709F8: MOVLW 0209F9: MOVWF 4809FA: BCF 0A.309FB: CALL 1AB09FC: BSF 0A.3.................... printf(lcd_putc,"T:%3lu I:%3lu U:%2u ",time,integration_time,treshold);09FD: MOVLW 5409FE: MOVWF 4609FF: BCF 0A.30A00: CALL 1BD0A01: BSF 0A.30A02: MOVLW 3A0A03: MOVWF 460A04: BCF 0A.30A05: CALL 1BD0A06: BSF 0A.30A07: MOVLW 020A08: MOVWF 040A09: MOVF 33,W0A0A: MOVWF 3B0A0B: MOVF 32,W0A0C: MOVWF 3A0A0D: BCF 0A.30A0E: CALL 5940A0F: BSF 0A.30A10: MOVLW 200A11: MOVWF 460A12: BCF 0A.30A13: CALL 1BD0A14: BSF 0A.30A15: MOVLW 490A16: MOVWF 460A17: BCF 0A.30A18: CALL 1BD0A19: BSF 0A.30A1A: MOVLW 3A0A1B: MOVWF 460A1C: BCF 0A.30A1D: CALL 1BD0A1E: BSF 0A.30A1F: MOVLW 020A20: MOVWF 040A21: MOVF 31,W0A22: MOVWF 3B0A23: MOVF 30,W0A24: MOVWF 3A0A25: BCF 0A.30A26: CALL 5940A27: BSF 0A.30A28: MOVLW 200A29: MOVWF 460A2A: BCF 0A.30A2B: CALL 1BD0A2C: BSF 0A.30A2D: MOVLW 550A2E: MOVWF 460A2F: BCF 0A.30A30: CALL 1BD0A31: BSF 0A.30A32: MOVLW 3A0A33: MOVWF 460A34: BCF 0A.30A35: CALL 1BD0A36: BSF 0A.30A37: MOVF 39,W0A38: MOVWF 3A0A39: MOVLW 110A3A: MOVWF 3B0A3B: BCF 0A.30A3C: GOTO 60C0A3D: BSF 0A.30A3E: MOVLW 200A3F: MOVWF 460A40: BCF 0A.30A41: CALL 1BD0A42: BSF 0A.3.................... // printf(lcd_putc,"I:%4lu ", integration_time);........................................ if(time == 0) // po uplynuti mereneho intervalu vypis na seriovku0A43: MOVF 32,F0A44: BTFSS 03.20A45: GOTO 29D0A46: MOVF 33,F0A47: BTFSS 03.20A48: GOTO 29D.................... {.................... set_timer0(0);0A49: CLRF 01.................... time_overflow_count=0;0A4A: CLRF 2E0A4B: CLRF 2D.................... sound_beep(1000,700);0A4C: MOVLW E80A4D: MOVWF 3A0A4E: MOVLW 020A4F: MOVWF 3C0A50: MOVLW BC0A51: MOVWF 3B0A52: BCF 0A.30A53: CALL 6540A54: BSF 0A.3.................... printf("$GMC1.0 %lu %lu %lu \r\n", measurement_number, integration_time, pulse_count);0A55: MOVLW 980A56: BSF 03.60A57: MOVWF 0D0A58: MOVLW 000A59: MOVWF 0F0A5A: BCF 03.00A5B: MOVLW 080A5C: BCF 03.60A5D: MOVWF 3A0A5E: BCF 0A.30A5F: CALL 69D0A60: BSF 0A.30A61: MOVLW 100A62: MOVWF 040A63: MOVF 38,W0A64: MOVWF 3B0A65: MOVF 37,W0A66: MOVWF 3A0A67: BCF 0A.30A68: CALL 6EC0A69: BSF 0A.30A6A: MOVLW 200A6B: MOVWF 460A6C: BCF 0A.30A6D: CALL 2300A6E: BSF 0A.30A6F: MOVLW 100A70: MOVWF 040A71: MOVF 31,W0A72: MOVWF 3B0A73: MOVF 30,W0A74: MOVWF 3A0A75: BCF 0A.30A76: CALL 6EC0A77: BSF 0A.30A78: MOVLW 200A79: MOVWF 460A7A: BCF 0A.30A7B: CALL 2300A7C: BSF 0A.30A7D: MOVLW 410A7E: MOVWF 040A7F: MOVF 2A,W0A80: MOVWF 3D0A81: MOVF 29,W0A82: MOVWF 3C0A83: MOVF 28,W0A84: MOVWF 3B0A85: MOVF 27,W0A86: MOVWF 3A0A87: BCF 0A.30A88: GOTO 74F0A89: BSF 0A.30A8A: MOVLW A10A8B: BSF 03.60A8C: MOVWF 0D0A8D: MOVLW 000A8E: MOVWF 0F0A8F: BSF 03.00A90: MOVLW 040A91: BCF 03.60A92: MOVWF 3A0A93: BCF 0A.30A94: CALL 69D0A95: BSF 0A.3.................... set_timer1(0);0A96: CLRF 0F0A97: CLRF 0E.................... overflow_count=0;0A98: CLRF 2C0A99: CLRF 2B.................... measurement_number++;0A9A: INCF 37,F0A9B: BTFSC 03.20A9C: INCF 38,F.................... }........................................ if(button_press==false ) // tlacitka se ctou znovu pouze pokud v redchozim cyklu nebyla zmacknuta.0A9D: BTFSC 36.00A9E: GOTO 3EF.................... {.................... if(!input(S1))0A9F: BSF 2F.20AA0: MOVF 2F,W0AA1: BSF 03.50AA2: MOVWF 070AA3: BCF 03.50AA4: BTFSC 07.20AA5: GOTO 2E2.................... {.................... delay_ms(20);0AA6: MOVLW 140AA7: MOVWF 470AA8: BCF 0A.30AA9: CALL 0A40AAA: BSF 0A.3.................... if(!input(S1))0AAB: BSF 2F.20AAC: MOVF 2F,W0AAD: BSF 03.50AAE: MOVWF 070AAF: BCF 03.50AB0: BTFSC 07.20AB1: GOTO 2E2.................... {.................... button_press=true;0AB2: BSF 36.0.................... sound_beep(100,700);0AB3: MOVLW 640AB4: MOVWF 3A0AB5: MOVLW 020AB6: MOVWF 3C0AB7: MOVLW BC0AB8: MOVWF 3B0AB9: BCF 0A.30ABA: CALL 6540ABB: BSF 0A.3.................... switch (setup_mode).................... {0ABC: MOVLW 000ABD: BTFSC 36.10ABE: MOVLW 010ABF: XORLW 000AC0: BTFSC 03.20AC1: GOTO 2C60AC2: XORLW 010AC3: BTFSC 03.20AC4: GOTO 2D50AC5: GOTO 2E2.................... case INTERVAL_setup:.................... if(integration_time < 0xfffa ) integration_time+=5;0AC6: MOVF 31,W0AC7: SUBLW FF0AC8: BTFSS 03.00AC9: GOTO 2D40ACA: BTFSS 03.20ACB: GOTO 2D00ACC: MOVF 30,W0ACD: SUBLW F90ACE: BTFSS 03.00ACF: GOTO 2D40AD0: MOVLW 050AD1: ADDWF 30,F0AD2: BTFSC 03.00AD3: INCF 31,F.................... break;0AD4: GOTO 2E2........................................ case TRESHOLD_setup:.................... if(treshold < 0x0a ) treshold +=5;0AD5: MOVF 39,W0AD6: SUBLW 090AD7: BTFSS 03.00AD8: GOTO 2DB0AD9: MOVLW 050ADA: ADDWF 39,F.................... setup_vref(VREF_HIGH|treshold); //sets 3.6(vdd *value/32 +vdd/4) if vdd is 5.0V0ADB: MOVF 39,W0ADC: IORLW 800ADD: MOVWF 3A0ADE: BSF 03.50ADF: MOVWF 17.................... break;0AE0: BCF 03.50AE1: GOTO 2E2.................... }.................... }.................... }........................................ if(!input(S2))0AE2: BSF 2F.30AE3: MOVF 2F,W0AE4: BSF 03.50AE5: MOVWF 070AE6: BCF 03.50AE7: BTFSC 07.30AE8: GOTO 32B.................... {.................... delay_ms(20);0AE9: MOVLW 140AEA: MOVWF 470AEB: BCF 0A.30AEC: CALL 0A40AED: BSF 0A.3.................... if(!input(S2))0AEE: BSF 2F.30AEF: MOVF 2F,W0AF0: BSF 03.50AF1: MOVWF 070AF2: BCF 03.50AF3: BTFSC 07.30AF4: GOTO 32B.................... {.................... button_press=true;0AF5: BSF 36.0.................... sound_beep(100,600);0AF6: MOVLW 640AF7: MOVWF 3A0AF8: MOVLW 020AF9: MOVWF 3C0AFA: MOVLW 580AFB: MOVWF 3B0AFC: BCF 0A.30AFD: CALL 6540AFE: BSF 0A.3.................... switch (setup_mode).................... {0AFF: MOVLW 000B00: BTFSC 36.10B01: MOVLW 010B02: XORLW 000B03: BTFSC 03.20B04: GOTO 3090B05: XORLW 010B06: BTFSC 03.20B07: GOTO 31E0B08: GOTO 32B.................... case INTERVAL_setup:.................... if(integration_time > 0x0005 ) integration_time-=5;0B09: MOVF 31,F0B0A: BTFSS 03.20B0B: GOTO 3100B0C: MOVF 30,W0B0D: SUBLW 050B0E: BTFSC 03.00B0F: GOTO 3160B10: MOVLW 050B11: SUBWF 30,F0B12: MOVLW 000B13: BTFSS 03.00B14: MOVLW 010B15: SUBWF 31,F.................... set_timer0(0); // vynulovani pocitadel, kdyz uzivatel sahne na tlacitka0B16: CLRF 01.................... time_overflow_count=0;0B17: CLRF 2E0B18: CLRF 2D.................... set_timer1(0);0B19: CLRF 0F0B1A: CLRF 0E.................... overflow_count=0;0B1B: CLRF 2C0B1C: CLRF 2B.................... break;0B1D: GOTO 32B.................... case TRESHOLD_setup:.................... if(treshold > 0x05 ) treshold -=5;0B1E: MOVF 39,W0B1F: SUBLW 050B20: BTFSC 03.00B21: GOTO 3240B22: MOVLW 050B23: SUBWF 39,F.................... setup_vref(VREF_HIGH|treshold); //sets 3.6(vdd *value/32 +vdd/4) if vdd is 5.0V0B24: MOVF 39,W0B25: IORLW 800B26: MOVWF 3A0B27: BSF 03.50B28: MOVWF 17.................... break;0B29: BCF 03.50B2A: GOTO 32B.................... }.................... }.................... }........................................ if(!input(S3))0B2B: BSF 03.50B2C: BSF 08.00B2D: BCF 03.50B2E: BTFSC 08.00B2F: GOTO 362.................... {.................... delay_ms(20);0B30: MOVLW 140B31: MOVWF 470B32: BCF 0A.30B33: CALL 0A40B34: BSF 0A.3.................... if(!input(S3))0B35: BSF 03.50B36: BSF 08.00B37: BCF 03.50B38: BTFSC 08.00B39: GOTO 362.................... {.................... button_press=true;0B3A: BSF 36.0.................... sound_beep(100,500);0B3B: MOVLW 640B3C: MOVWF 3A0B3D: MOVLW 010B3E: MOVWF 3C0B3F: MOVLW F40B40: MOVWF 3B0B41: BCF 0A.30B42: CALL 6540B43: BSF 0A.3.................... switch (setup_mode).................... {0B44: MOVLW 000B45: BTFSC 36.10B46: MOVLW 010B47: XORLW 000B48: BTFSC 03.20B49: GOTO 34E0B4A: XORLW 010B4B: BTFSC 03.20B4C: GOTO 3570B4D: GOTO 362.................... case INTERVAL_setup:.................... if(integration_time < 0xffff ) integration_time++;0B4E: INCFSZ 30,W0B4F: GOTO 3530B50: INCFSZ 31,W0B51: GOTO 3530B52: GOTO 3560B53: INCF 30,F0B54: BTFSC 03.20B55: INCF 31,F.................... break;0B56: GOTO 362........................................ case TRESHOLD_setup:.................... if(treshold < 0x0F ) treshold ++;0B57: MOVF 39,W0B58: SUBLW 0E0B59: BTFSC 03.00B5A: INCF 39,F.................... setup_vref(VREF_HIGH|treshold); //sets 3.6(vdd *value/32 +vdd/4) if vdd is 5.0V0B5B: MOVF 39,W0B5C: IORLW 800B5D: MOVWF 3A0B5E: BSF 03.50B5F: MOVWF 17.................... break;0B60: BCF 03.50B61: GOTO 362.................... }.................... }.................... }........................................ if(!input(S4))0B62: BSF 03.50B63: BSF 08.10B64: BCF 03.50B65: BTFSC 08.10B66: GOTO 3A3.................... {.................... delay_ms(20);0B67: MOVLW 140B68: MOVWF 470B69: BCF 0A.30B6A: CALL 0A40B6B: BSF 0A.3.................... if(!input(S4))0B6C: BSF 03.50B6D: BSF 08.10B6E: BCF 03.50B6F: BTFSC 08.10B70: GOTO 3A3.................... {.................... button_press=true;0B71: BSF 36.0.................... sound_beep(100,400);0B72: MOVLW 640B73: MOVWF 3A0B74: MOVLW 010B75: MOVWF 3C0B76: MOVLW 900B77: MOVWF 3B0B78: BCF 0A.30B79: CALL 6540B7A: BSF 0A.3.................... switch (setup_mode).................... {0B7B: MOVLW 000B7C: BTFSC 36.10B7D: MOVLW 010B7E: XORLW 000B7F: BTFSC 03.20B80: GOTO 3850B81: XORLW 010B82: BTFSC 03.20B83: GOTO 3980B84: GOTO 3A3.................... case INTERVAL_setup:........................................ if(integration_time > 0x0001 ) integration_time--;0B85: MOVF 31,F0B86: BTFSS 03.20B87: GOTO 38C0B88: MOVF 30,W0B89: SUBLW 010B8A: BTFSC 03.00B8B: GOTO 3900B8C: MOVF 30,W0B8D: BTFSC 03.20B8E: DECF 31,F0B8F: DECF 30,F........................................ set_timer0(0); // vynulovani pocitadel, kdyz uzivatel sahne na tlacitka0B90: CLRF 01.................... time_overflow_count=0;0B91: CLRF 2E0B92: CLRF 2D.................... set_timer1(0);0B93: CLRF 0F0B94: CLRF 0E.................... overflow_count=0;0B95: CLRF 2C0B96: CLRF 2B.................... break;0B97: GOTO 3A3.................... case TRESHOLD_setup:.................... if(treshold > 0x01 ) treshold--;0B98: MOVF 39,W0B99: SUBLW 010B9A: BTFSS 03.00B9B: DECF 39,F.................... setup_vref(VREF_HIGH|treshold); //sets 3.6(vdd *value/32 +vdd/4) if vdd is 5.0V0B9C: MOVF 39,W0B9D: IORLW 800B9E: MOVWF 3A0B9F: BSF 03.50BA0: MOVWF 17.................... break;0BA1: BCF 03.50BA2: GOTO 3A3.................... }.................... }.................... }........................................ if(!input(S5)) // prepnuti na nastavovani casu0BA3: BSF 03.50BA4: BSF 06.10BA5: BCF 03.50BA6: BTFSC 06.10BA7: GOTO 3C9.................... {.................... delay_ms(20);0BA8: MOVLW 140BA9: MOVWF 470BAA: BCF 0A.30BAB: CALL 0A40BAC: BSF 0A.3.................... if(!input(S5))0BAD: BSF 03.50BAE: BSF 06.10BAF: BCF 03.50BB0: BTFSC 06.10BB1: GOTO 3C9.................... {.................... button_press=true;0BB2: BSF 36.0.................... sound_beep(100,800);0BB3: MOVLW 640BB4: MOVWF 3A0BB5: MOVLW 030BB6: MOVWF 3C0BB7: MOVLW 200BB8: MOVWF 3B0BB9: BCF 0A.30BBA: CALL 6540BBB: BSF 0A.3.................... setup_mode=INTERVAL_setup;0BBC: BCF 36.1.................... lcd_gotoxy(16,1); // prepsani dat na displeje0BBD: MOVLW 100BBE: MOVWF 470BBF: MOVLW 010BC0: MOVWF 480BC1: BCF 0A.30BC2: CALL 1AB0BC3: BSF 0A.3.................... printf(lcd_putc,"I");0BC4: MOVLW 490BC5: MOVWF 460BC6: BCF 0A.30BC7: CALL 1BD0BC8: BSF 0A.3.................... }.................... }........................................ if(!input(S6)) // prepnuti na nastavovani napeti0BC9: BSF 03.50BCA: BSF 06.20BCB: BCF 03.50BCC: BTFSC 06.20BCD: GOTO 3EF.................... {.................... delay_ms(20);0BCE: MOVLW 140BCF: MOVWF 470BD0: BCF 0A.30BD1: CALL 0A40BD2: BSF 0A.3.................... if(!input(S6))0BD3: BSF 03.50BD4: BSF 06.20BD5: BCF 03.50BD6: BTFSC 06.20BD7: GOTO 3EF.................... {.................... button_press=true;0BD8: BSF 36.0.................... sound_beep(100,800);0BD9: MOVLW 640BDA: MOVWF 3A0BDB: MOVLW 030BDC: MOVWF 3C0BDD: MOVLW 200BDE: MOVWF 3B0BDF: BCF 0A.30BE0: CALL 6540BE1: BSF 0A.3.................... setup_mode=TRESHOLD_setup;0BE2: BSF 36.1.................... lcd_gotoxy(16,1); // prepsani dat na displeje0BE3: MOVLW 100BE4: MOVWF 470BE5: MOVLW 010BE6: MOVWF 480BE7: BCF 0A.30BE8: CALL 1AB0BE9: BSF 0A.3.................... printf(lcd_putc,"U");0BEA: MOVLW 550BEB: MOVWF 460BEC: BCF 0A.30BED: CALL 1BD0BEE: BSF 0A.3.................... }.................... }.................... }........................................ if ( input(S1) && input(S2) && input(S3) && input(S4) && input(S5) && input(S6)) // detekce pustenych tlacitek0BEF: BSF 2F.20BF0: MOVF 2F,W0BF1: BSF 03.50BF2: MOVWF 070BF3: BCF 03.50BF4: BTFSS 07.20BF5: GOTO 4120BF6: BSF 2F.30BF7: MOVF 2F,W0BF8: BSF 03.50BF9: MOVWF 070BFA: BCF 03.50BFB: BTFSS 07.30BFC: GOTO 4120BFD: BSF 03.50BFE: BSF 08.00BFF: BCF 03.50C00: BTFSS 08.00C01: GOTO 4120C02: BSF 03.50C03: BSF 08.10C04: BCF 03.50C05: BTFSS 08.10C06: GOTO 4120C07: BSF 03.50C08: BSF 06.10C09: BCF 03.50C0A: BTFSS 06.10C0B: GOTO 4120C0C: BSF 03.50C0D: BSF 06.20C0E: BCF 03.50C0F: BTFSS 06.20C10: GOTO 412.................... {.................... button_press=false;0C11: BCF 36.0.................... }.................... }0C12: GOTO 11F.................... }0C13: SLEEPConfiguration Fuses:Word 1: 2CF5 INTRC NOWDT NOPUT MCLR NOPROTECT NOCPD NOBROWNOUT IESO FCMEN NOLVP NODEBUGWord 2: 3FFF NOWRT BORV40