CCS PCM C Compiler, Version 4.059d, 15399 04-IV-07 20:22Filename: main.lstROM used: 1242 words (61%)Largest free fragment is 806RAM used: 19 (5%) at main() level44 (12%) worst caseStack: 5 locations*0000: MOVLW 000001: MOVWF 0A0002: GOTO 3300003: NOP.................... #include "C:\RS\Lux10brf\main.h".................... #include <16F877A.h>.................... //////// Standard Header file for the PIC16F877A device ////////////////.................... #device PIC16F877A.................... #list........................................ #device adc=10........................................ #FUSES NOWDT //No Watch Dog Timer.................... #FUSES XT //Crystal osc <= 4mhz.................... #FUSES NOPUT //No Power Up Timer.................... #FUSES NOPROTECT //Code not protected from reading.................... #FUSES NODEBUG //No Debug mode for ICD.................... #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........................................ #use delay(clock=4000000,RESTART_WDT)*00AF: MOVLW 3A00B0: MOVWF 0400B1: BCF 03.700B2: MOVF 00,W00B3: BTFSC 03.200B4: GOTO 0C600B5: MOVLW 0100B6: MOVWF 7800B7: MOVLW BF00B8: MOVWF 7700B9: CLRWDT00BA: DECFSZ 77,F00BB: GOTO 0B900BC: DECFSZ 78,F00BD: GOTO 0B700BE: MOVLW 4A00BF: MOVWF 7700C0: DECFSZ 77,F00C1: GOTO 0C000C2: NOP00C3: CLRWDT00C4: DECFSZ 00,F00C5: GOTO 0B500C6: RETLW 00................................................................................ #define LCD_RS PIN_B0 // rizeni registru LCD displeje.................... #define LCD_E PIN_B1 // enable LCD displeje.................... #define LCD_DATA_LSB PIN_C4 // pripojeni LSB bitu datoveho portu LCD displeje (celkem 4 bity vzestupne za sebou).................... #define LUX1 PIN_B2.................... #define LUX2 PIN_B3.................... #define LUX3 PIN_B4.................... #define LUX4 PIN_B5.................... #define HOLD PIN_B6.................... #define IN 0.................... #include "lcd.c".................... // LCD modul pro ovladani dvouradkoveho LCD modulu se standardnim Hitachi radicem.................... // (c)miho 2002,2005.................... //.................... // Historie:.................... //.................... // 0.00 Uvodni verze se snadnou definici portu LCD displeje.................... // 0.01 Oprava portu (zapomenute stare identifikatory).................... // 0.02 Doplnena moznost pripojeni datoveho portu LCD na libovolne porty.................... // 0.03 Doplnena procedura lcd_clr pro smazani displeje.................... //.................... //.................... // Funkce:.................... //.................... // lcd_init() inicializuje LCD displej a porty, nutno volat jako prvni.................... //.................... // lcd_putc(c) zapis snaku do lcd displeje, zpracovava nasledujici ridici znaky.................... // \f = \x0C - nova stranka - smazani displeje.................... // \n = \x0A - odradkovani (prechod na druhou radku).................... // \b = \x08 - backspace - posunuti kurzoru o 1 pozici zpet.................... // \r = \x0D - goto home to position 1,1.................... // \0 .. \7 - definovatelne znaky v pozicich 0 az 7 v CGRAM.................... // \20 .. \27 - alternativne zapsane znaky (oktalove) v pozicich 0 az 7 CGRAM.................... // Pozor na to, ze funkce printf konci tisk pokud narazi na \0 (konec retezce).................... //.................... // lcd_gotoxy(x,y) presune kurzor na uvedenou adresu.................... // nekontroluje parametry.................... //.................... // lcd_cursor_on zapne kurzor.................... // lcd_cursor_off vypne kurzor.................... //.................... // lcd_clr smaze displej.................... //.................... // lcd_define_char(Index, Def) Makro, ktere definuje znaky od pozice Index obsahem definicniho.................... // retezce Def. Kazdych 8 znaku retezce Def definuje dalsi znak v CGRAM..................... // Kapacita CGRAM je celkem 8 znaku s indexem 0 az 7..................... // Na konci se provede lcd_gotoxy(1,1)..................... // Na konci teto knihovny je priklad pouziti definovanych znaku.................... //.................... //.................... // Definice portu: // Datovy port displeje pripojeny na 4 bity za sebou na jeden port.................... //.................... // #define LCD_RS PIN_B2 // rizeni registru LCD displeje.................... // #define LCD_E PIN_B1 // enable LCD displeje.................... // #define LCD_DATA_LSB PIN_C2 // pripojeni LSB bitu datoveho portu LCD displeje (celkem 4 bity vzestupne za sebou).................... //.................... //.................... // Alternativni definice: // Datovy port displeje pripojeny na libovolne 4 bitove porty (vede na kod delsi asi o 25 slov).................... //.................... // #define LCD_RS PIN_B2 // rizeni registru LCD displeje.................... // #define LCD_E PIN_B1 // enable LCD displeje.................... // #define LCD_D0 PIN_C2 // D0 - datove bity pripojene na libovolne porty.................... // #define LCD_D1 PIN_C3 // D1.................... // #define LCD_D2 PIN_C4 // D2.................... // #define LCD_D3 PIN_C5 // D3.................................................................................................... // Privatni sekce, cist jen v pripade, ze neco nefunguje.................................................................................................... #ifdef LCD_DATA_LSB.................... // Generovane defince portu pro ucely teto knihovny aby kod generoval spravne IO operace a soucasne.................... // bylo mozne jednoduse deklarovat pripojene piny LCD displeje pri pouziti teto knihovny. Problem spociva.................... // v tom, ze se musi spravne ridit smery portu a soucasne datovy port zabira jen 4 bity ze zadaneho portu.................... //.................... #define LCD_SHIFT (LCD_DATA_LSB&7) // pocet bitu posuvu datoveho kanalu v datovem portu.................... #define LCD_PORT (LCD_DATA_LSB>>3) // adresa LCD datoveho portu.................... #define LCD_TRIS (LCD_PORT+0x80) // adresa prislusneho TRIS registru.................... #define LCD_MASK (0xF<<LCD_SHIFT) // maska platnych bitu.................... //.................... #if LCD_SHIFT>4 // kontrola mezi.................... #error LCD data port LSB bit not in range 0..4.................... #endif.................... #endif............................................................ // Definice konstant pro LCD display.................... //.................... #define LCD_CURSOR_ON_ 0x0E // kurzor jako blikajici radka pod znakem.................... #define LCD_CURSOR_OFF_ 0x0C // zadny kurzor.................... #define LCD_LINE_2 0x40 // adresa 1. znaku 2. radky............................................................ // Definice rezimu LCD displeje.................... //.................... BYTE const LCD_INIT_STRING[4] =.................... {.................... 0x28, // intrfejs 4 bity, 2 radky, font 5x7.................... LCD_CURSOR_OFF_, // display on, kurzor off,.................... 0x01, // clear displeje.................... 0x06 // inkrement pozice kurzoru (posun kurzoru doprava).................... };............................................................ // Odesle nibble do displeje (posle data a klikne signalem e).................... //.................... void lcd_send_nibble( BYTE n ).................... {.................... #ifdef LCD_DATA_LSB.................... // data jsou za sebou na 4 bitech jednoho portu.................... *LCD_PORT = (*LCD_PORT & ~LCD_MASK) | ((n << LCD_SHIFT) & LCD_MASK); // nastav datove bity portu a ostatni zachovej00C7: MOVF 07,W00C8: ANDLW 0F00C9: MOVWF 4200CA: SWAPF 40,W00CB: MOVWF 7700CC: MOVLW F000CD: ANDWF 77,F00CE: MOVF 77,W00CF: ANDLW F000D0: IORWF 42,W00D1: MOVWF 07.................... #else.................... // data jsou na libovolnych 4 bitech libovolnych portu.................... output_bit(LCD_D0,bit_test(n,0));.................... output_bit(LCD_D1,bit_test(n,1));.................... output_bit(LCD_D2,bit_test(n,2));.................... output_bit(LCD_D3,bit_test(n,3));.................... #endif.................... output_bit(LCD_E,1); // vzestupna hrana00D2: BSF 06.100D3: BSF 03.500D4: BCF 06.1.................... delay_us(1); // pockej alespon 450ns od e nebo alespon 195ns od dat00D5: CLRWDT.................... output_bit(LCD_E,0); // sestupna hrana (minimalni perioda e je 1us)00D6: BCF 03.500D7: BCF 06.100D8: BSF 03.500D9: BCF 06.1.................... }00DA: BCF 03.500DB: RETLW 00............................................................ // Odesle bajt do registru LCD.................... //.................... // Pokud je Adr=0 .. instrukcni registr.................... // Pokud je Adr=1 .. datovy registr.................... //.................... void lcd_send_byte( BOOLEAN Adr, BYTE n ).................... {.................... output_bit(LCD_RS,Adr); // vyber registr00DC: MOVF 3E,F00DD: BTFSS 03.200DE: GOTO 0E100DF: BCF 06.000E0: GOTO 0E200E1: BSF 06.000E2: BSF 03.500E3: BCF 06.0.................... swap(n);00E4: BCF 03.500E5: SWAPF 3F,F.................... lcd_send_nibble(n); // posli horni pulku bajtu00E6: MOVF 3F,W00E7: MOVWF 4000E8: CALL 0C7.................... swap(n);00E9: SWAPF 3F,F.................... lcd_send_nibble(n); // posli spodni pulku bajtu00EA: MOVF 3F,W00EB: MOVWF 4000EC: CALL 0C7.................... delay_us(40); // minimalni doba na provedeni prikazu00ED: CLRWDT00EE: MOVLW 0C00EF: MOVWF 7700F0: DECFSZ 77,F00F1: GOTO 0F000F2: GOTO 0F3.................... }00F3: RETLW 00............................................................ // Provede inicializaci LCD displeje, smaze obsah a nastavi mod displeje.................... //.................... // Tato procedura se musi volat pred pouzitim ostatnich lcd_ procedur.................... //.................... void lcd_init().................... {........................................ int i; // pocitadlo cyklu........................................ delay_ms(20); // spozdeni pro provedeni startu displeje po zapnuti napajeni00F4: MOVLW 1400F5: MOVWF 3A00F6: CALL 0AF........................................ #ifdef LCD_DATA_LSB.................... // data jsou na 4 bitech za sebou, nastav smer pro vsechny dalsi prenosy.................... *LCD_TRIS = *LCD_TRIS & ~LCD_MASK; // nuluj odpovidajici bity tris registru datoveho portu LCD00F7: MOVLW 0F00F8: BSF 03.500F9: ANDWF 07,F.................... #endif........................................ output_bit(LCD_RS,0); // nastav jako vystup a nastav klidovy stav00FA: BCF 03.500FB: BCF 06.000FC: BSF 03.500FD: BCF 06.0.................... output_bit(LCD_E, 0); // nastav jako vystup a nastav klidovy stav00FE: BCF 03.500FF: BCF 06.10100: BSF 03.50101: BCF 06.1........................................ for (i=0; i<3; i++) // nastav lcd do rezimu 8 bitu sbernice0102: BCF 03.50103: CLRF 270104: MOVF 27,W0105: SUBLW 020106: BTFSS 03.00107: GOTO 110.................... {.................... delay_ms(2); // muze byt rozdelany prenos dat (2x 4 bity) nebo pomaly povel0108: MOVLW 020109: MOVWF 3A010A: CALL 0AF.................... lcd_send_nibble(3); // rezim 8 bitu010B: MOVLW 03010C: MOVWF 40010D: CALL 0C7.................... }010E: INCF 27,F010F: GOTO 104........................................ delay_us(40); // cas na zpracovani0110: CLRWDT0111: MOVLW 0C0112: MOVWF 770113: DECFSZ 77,F0114: GOTO 1130115: GOTO 116.................... lcd_send_nibble(2); // nastav rezim 4 bitu (plati od nasledujiciho prenosu)0116: MOVLW 020117: MOVWF 400118: CALL 0C7.................... delay_us(40); // cas na zpracovani0119: CLRWDT011A: MOVLW 0C011B: MOVWF 77011C: DECFSZ 77,F011D: GOTO 11C011E: GOTO 11F........................................ for (i=0;i<3;i++) // proved inicializaci (nastaveni modu, smazani apod)011F: CLRF 270120: MOVF 27,W0121: SUBLW 020122: BTFSS 03.00123: GOTO 130.................... {.................... lcd_send_byte(0,LCD_INIT_STRING[i]);0124: MOVF 27,W0125: CALL 0040126: MOVWF 280127: CLRF 3E0128: MOVF 28,W0129: MOVWF 3F012A: CALL 0DC.................... delay_ms(2);012B: MOVLW 02012C: MOVWF 3A012D: CALL 0AF.................... }012E: INCF 27,F012F: GOTO 120.................... }0130: GOTO 38B (RETURN)............................................................ // Proved presun kurzoru.................... //.................... // Pozice 1.1 je domu.................... //.................... void lcd_gotoxy( BYTE x, BYTE y).................... {........................................ BYTE Adr;........................................ Adr=x-1;*01C3: MOVLW 0101C4: SUBWF 3A,W01C5: MOVWF 3C.................... if(y==2)01C6: MOVF 3B,W01C7: SUBLW 0201C8: BTFSS 03.201C9: GOTO 1CC.................... Adr+=LCD_LINE_2;01CA: MOVLW 4001CB: ADDWF 3C,F........................................ lcd_send_byte(0,0x80|Adr);01CC: MOVF 3C,W01CD: IORLW 8001CE: MOVWF 3D01CF: CLRF 3E01D0: MOVF 3D,W01D1: MOVWF 3F01D2: CALL 0DC.................... }01D3: RETLW 00............................................................ // Zapis znaku na displej, zpracovani ridicich znaku.................... //.................... void lcd_putc( char c).................... {........................................ switch (c).................... {01D4: MOVF 39,W01D5: XORLW 0C01D6: BTFSC 03.201D7: GOTO 1E201D8: XORLW 0601D9: BTFSC 03.201DA: GOTO 1EA01DB: XORLW 0701DC: BTFSC 03.201DD: GOTO 1F001DE: XORLW 0501DF: BTFSC 03.201E0: GOTO 1F501E1: GOTO 1FA.................... case '\f' : lcd_send_byte(0,1); // smaz displej01E2: CLRF 3E01E3: MOVLW 0101E4: MOVWF 3F01E5: CALL 0DC.................... delay_ms(2);01E6: MOVLW 0201E7: MOVWF 3A01E8: CALL 0AF.................... break;01E9: GOTO 206.................... case '\n' : lcd_gotoxy(1,2); break; // presun se na 1. znak 2. radky01EA: MOVLW 0101EB: MOVWF 3A01EC: MOVLW 0201ED: MOVWF 3B01EE: CALL 1C301EF: GOTO 206.................... case '\r' : lcd_gotoxy(1,1); break; // presun home01F0: MOVLW 0101F1: MOVWF 3A01F2: MOVWF 3B01F3: CALL 1C301F4: GOTO 206.................... case '\b' : lcd_send_byte(0,0x10); break; // posun kurzor o 1 zpet01F5: CLRF 3E01F6: MOVLW 1001F7: MOVWF 3F01F8: CALL 0DC01F9: GOTO 206.................... default : if (c<0x20) c&=0x7; // preklopeni definovatelnych znaku na rozsah 0 az 0x1F01FA: MOVF 39,W01FB: SUBLW 1F01FC: BTFSS 03.001FD: GOTO 20001FE: MOVLW 0701FF: ANDWF 39,F.................... lcd_send_byte(1,c); break; // zapis znak0200: MOVLW 010201: MOVWF 3E0202: MOVF 39,W0203: MOVWF 3F0204: CALL 0DC0205: GOTO 206.................... }.................... }0206: RETLW 00............................................................ // Zapni kurzor.................... //.................... void lcd_cursor_on().................... {.................... lcd_send_byte(0,LCD_CURSOR_ON_);.................... }............................................................ // Vypni kurzor.................... //.................... void lcd_cursor_off().................... {.................... lcd_send_byte(0,LCD_CURSOR_OFF_);.................... }............................................................ // Smaz displej.................... //.................... void lcd_clr().................... {.................... lcd_putc('\f');.................... }............................................................ // Definice vlastnich fontu.................... //.................... // Vlastnich definic muze byt jen 8 do pozic 0 az 7 pameti CGRAM radice lcd displeje.................... // Pro snadne definovani jsou pripraveny nasledujici definice a na konci souboru je uveden.................... // priklad pouziti definovanych znaku............................................................. // Pomocna procedura pro posilani ridicich dat do radice displeje.................... //.................... void lcd_putc2(int Data).................... {.................... lcd_send_byte(1,Data);.................... }............................................................ // Pomocne definice pro programovani obsahu CGRAM.................... //.................... #define lcd_define_start(Code) lcd_send_byte(0,0x40+(Code<<3)); delay_ms(2).................... #define lcd_define_def(String) printf(lcd_putc2,String);.................... #define lcd_define_end() lcd_send_byte(0,3); delay_ms(2)............................................................ // Vlastni vykonne makro pro definovani fontu do pozice Index CGRAM s definicnim retezcem Def.................... //.................... #define lcd_define_char(Index, Def) lcd_define_start(Index); lcd_define_def(Def); lcd_define_end();............................................................ // Pripravene definice fontu vybranych znaku.................... // V tabulce nesmi byt 00 (konec retezce v printf()), misto toho davame 80.................... //.................... #define LCD_CHAR_BAT100 "\x0E\x1F\x1F\x1F\x1F\x1F\x1F\x1F" /* symbol plne baterie */.................... #define LCD_CHAR_BAT50 "\x0E\x1F\x11\x11\x13\x17\x1F\x1F" /* symbol polovicni baterie */.................... #define LCD_CHAR_BAT0 "\x0E\x1F\x11\x11\x11\x11\x11\x1F" /* symbol vybite baterie */.................... #define LCD_CHAR_UP "\x80\x04\x0E\x15\x04\x04\x04\x80" /* symbol sipka nahoru */.................... #define LCD_CHAR_DOWN "\x80\x04\x04\x04\x15\x0E\x04\x80" /* symbol Sipka dolu */.................... #define LCD_CHAR_LUA "\x04\x0E\x11\x11\x1F\x11\x11\x80" /* A s carkou */.................... #define LCD_CHAR_LLA "\x01\x02\x0E\x01\x1F\x11\x0F\x80" /* a s carkou */.................... #define LCD_CHAR_HUC "\x0A\x0E\x11\x10\x10\x11\x0E\x80" /* C s hackem */.................... #define LCD_CHAR_HLC "\x0A\x04\x0E\x10\x10\x11\x0E\x80" /* c s hackem */.................... #define LCD_CHAR_HUD "\x0A\x1C\x12\x11\x11\x12\x1C\x80" /* D s hackem */.................... #define LCD_CHAR_HLD "\x05\x03\x0D\x13\x11\x11\x0F\x80" /* d s hackem */.................... #define LCD_CHAR_LUE "\x04\x1F\x10\x10\x1E\x10\x1F\x80" /* E s carkou */.................... #define LCD_CHAR_LLE "\x01\x02\x0E\x11\x1F\x10\x0E\x80" /* e s carkou */.................... #define LCD_CHAR_HUE "\x0A\x1F\x10\x1E\x10\x10\x1F\x80" /* E s hackem */.................... #define LCD_CHAR_HLE "\x0A\x04\x0E\x11\x1F\x10\x0E\x80" /* e s hackem */.................... #define LCD_CHAR_LUI "\x04\x0E\x04\x04\x04\x04\x0E\x80" /* I s carkou */.................... #define LCD_CHAR_LLI "\x02\x04\x80\x0C\x04\x04\x0E\x80" /* i s carkou */.................... #define LCD_CHAR_HUN "\x0A\x15\x11\x19\x15\x13\x11\x80" /* N s hackem */.................... #define LCD_CHAR_HLN "\x0A\x04\x16\x19\x11\x11\x11\x80" /* n s hackem */.................... #define LCD_CHAR_LUO "\x04\x0E\x11\x11\x11\x11\x0E\x80" /* O s carkou */.................... #define LCD_CHAR_LLO "\x02\x04\x0E\x11\x11\x11\x0E\x80" /* o s carkou */.................... #define LCD_CHAR_HUR "\x0A\x1E\x11\x1E\x14\x12\x11\x80" /* R s hackem */.................... #define LCD_CHAR_HLR "\x0A\x04\x16\x19\x10\x10\x10\x80" /* r s hackem */.................... #define LCD_CHAR_HUS "\x0A\x0F\x10\x0E\x01\x01\x1E\x80" /* S s hackem */.................... #define LCD_CHAR_HLS "\x0A\x04\x0E\x10\x0E\x01\x1E\x80" /* s s hackem */.................... #define LCD_CHAR_HUT "\x0A\x1F\x04\x04\x04\x04\x04\x80" /* T s hackem */.................... #define LCD_CHAR_HLT "\x0A\x0C\x1C\x08\x08\x09\x06\x80" /* t s hackem */.................... #define LCD_CHAR_LUU "\x02\x15\x11\x11\x11\x11\x0E\x80" /* U s carkou */.................... #define LCD_CHAR_LLU "\x02\x04\x11\x11\x11\x13\x0D\x80" /* u s carkou */.................... #define LCD_CHAR_CUU "\x06\x17\x11\x11\x11\x11\x0E\x80" /* U s krouzkem */.................... #define LCD_CHAR_CLU "\x06\x06\x11\x11\x11\x11\x0E\x80" /* u s krouzkem */.................... #define LCD_CHAR_LUY "\x02\x15\x11\x0A\x04\x04\x04\x80" /* Y s carkou */.................... #define LCD_CHAR_LLY "\x02\x04\x11\x11\x0F\x01\x0E\x80" /* y s carkou */.................... #define LCD_CHAR_HUZ "\x0A\x1F\x01\x02\x04\x08\x1F\x80" /* Z s hackem */.................... #define LCD_CHAR_HLZ "\x0A\x04\x1F\x02\x04\x08\x1F\x80" /* z s hackem */............................................................ // Priklad pouziti definovanych znaku.................... //.................... //.................... //void lcd_sample().................... //{.................... // lcd_define_char(0,LCD_CHAR_BAT50); // Priklad definice znaku baterie do pozice 0.................... // lcd_define_char(2,LCD_CHAR_HLE LCD_CHAR_LUI); // Priklad definice znaku e s hackem a I s carkou od pozice 2.................... // // vsimnete si, ze neni carka mezi retezci s definici (oba retezce definuji.................... // // jediny definicni retezec).................... // printf(lcd_putc,"\fZnaky:\20\22\23"); // priklad vypisu znaku z pozice 0, 2 a 3.................... // delay_ms(1000);.................... // lcd_define_char(0,LCD_CHAR_BAT0); // Predefinovani tvaru znaku v pozici 0.................... // delay_ms(1000);.................... //}............................................................ void main().................... {*0330: CLRF 040331: BCF 03.70332: MOVLW 1F0333: ANDWF 03,F0334: BSF 03.50335: BSF 1F.00336: BSF 1F.10337: BSF 1F.20338: BCF 1F.30339: MOVLW 07033A: MOVWF 1C.................... unsigned int16 I;.................... float E;........................................ port_b_pullups(TRUE);*033E: BSF 03.5033F: BCF 01.7.................... setup_adc_ports(AN0_VREF_VREF);0340: BSF 1F.00341: BSF 1F.10342: BSF 1F.20343: BSF 1F.3.................... setup_adc(ADC_CLOCK_DIV_32);0344: BCF 1F.60345: BCF 03.50346: BCF 1F.60347: BSF 1F.70348: BSF 03.50349: BSF 1F.7034A: BCF 03.5034B: BSF 1F.0.................... setup_psp(PSP_DISABLED);034C: BSF 03.5034D: BCF 09.4.................... setup_spi(SPI_SS_DISABLED);*033B: MOVLW FF033C: BCF 03.5033D: MOVWF 20*034E: BCF 03.5034F: BCF 14.50350: BCF 20.50351: MOVF 20,W0352: BSF 03.50353: MOVWF 070354: BCF 03.50355: BSF 20.40356: MOVF 20,W0357: BSF 03.50358: MOVWF 070359: BCF 03.5035A: BCF 20.3035B: MOVF 20,W035C: BSF 03.5035D: MOVWF 07035E: MOVLW 01035F: BCF 03.50360: MOVWF 140361: MOVLW 000362: BSF 03.50363: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);0364: MOVF 01,W0365: ANDLW C70366: IORLW 080367: MOVWF 01.................... setup_timer_1(T1_DISABLED);0368: BCF 03.50369: CLRF 10.................... setup_timer_2(T2_DISABLED,0,1);036A: MOVLW 00036B: MOVWF 78036C: MOVWF 12036D: MOVLW 00036E: BSF 03.5036F: MOVWF 12.................... setup_comparator(NC_NC_NC_NC);0370: MOVLW 070371: MOVWF 1C0372: MOVF 05,W0373: CLRWDT0374: MOVLW 020375: MOVWF 770376: DECFSZ 77,F0377: GOTO 3760378: GOTO 3790379: MOVF 1C,W037A: BCF 03.5037B: BCF 0D.6.................... setup_vref(FALSE);037C: BSF 03.5037D: CLRF 1D........................................ set_adc_channel (IN);037E: MOVLW 00037F: MOVWF 780380: BCF 03.50381: MOVF 1F,W0382: ANDLW C70383: IORWF 78,W0384: MOVWF 1F.................... delay_us(20);0385: CLRWDT0386: MOVLW 060387: MOVWF 770388: DECFSZ 77,F0389: GOTO 388.................... lcd_init();038A: GOTO 0F4............................................................ while(TRUE).................... {.................... I=read_adc(); //pøeètení hodnoty z A/D pøevodníku038B: BSF 1F.2038C: BTFSC 1F.2038D: GOTO 38C038E: BSF 03.5038F: MOVF 1E,W0390: BCF 03.50391: MOVWF 210392: MOVF 1E,W0393: MOVWF 22.................... delay_us(600);0394: CLRWDT0395: MOVLW C70396: MOVWF 770397: DECFSZ 77,F0398: GOTO 3970399: NOP.................... E=0.009775*I; //výpoèet osvìtlení k=10.0/1023039A: MOVF 22,W039B: MOVWF 28039C: MOVF 21,W039D: MOVWF 27039E: GOTO 131039F: MOVLW 5203A0: MOVWF 3C03A1: MOVLW 2703A2: MOVWF 3B03A3: MOVLW 2003A4: MOVWF 3A03A5: MOVLW 7803A6: MOVWF 3903A7: MOVF 7A,W03A8: MOVWF 4003A9: MOVF 79,W03AA: MOVWF 3F03AB: MOVF 78,W03AC: MOVWF 3E03AD: MOVF 77,W03AE: MOVWF 3D03AF: CALL 14E03B0: MOVF 7A,W03B1: MOVWF 2603B2: MOVF 79,W03B3: MOVWF 2503B4: MOVF 78,W03B5: MOVWF 2403B6: MOVF 77,W03B7: MOVWF 23............................................................ if(!input(LUX1))03B8: BSF 03.503B9: BSF 06.203BA: BCF 03.503BB: BTFSC 06.203BC: GOTO 403.................... {.................... printf(lcd_putc," E=%3.1f lx \n",10*E);03BD: CLRF 3C03BE: CLRF 3B03BF: MOVLW 2003C0: MOVWF 3A03C1: MOVLW 8203C2: MOVWF 3903C3: MOVF 26,W03C4: MOVWF 4003C5: MOVF 25,W03C6: MOVWF 3F03C7: MOVF 24,W03C8: MOVWF 3E03C9: MOVF 23,W03CA: MOVWF 3D03CB: CALL 14E03CC: MOVF 77,W03CD: MOVWF 2703CE: MOVF 78,W03CF: MOVWF 2803D0: MOVF 79,W03D1: MOVWF 2903D2: MOVF 7A,W03D3: MOVWF 2A03D4: CLRF 2B03D5: MOVF 2B,W03D6: CALL 00C03D7: INCF 2B,F03D8: MOVWF 7703D9: MOVWF 3903DA: CALL 1D403DB: MOVLW 0403DC: SUBWF 2B,W03DD: BTFSS 03.203DE: GOTO 3D503DF: MOVLW 0203E0: MOVWF 0403E1: MOVF 2A,W03E2: MOVWF 2F03E3: MOVF 29,W03E4: MOVWF 2E03E5: MOVF 28,W03E6: MOVWF 2D03E7: MOVF 27,W03E8: MOVWF 2C03E9: MOVLW 0103EA: MOVWF 3003EB: CALL 24903EC: MOVLW 0903ED: MOVWF 2C03EE: MOVF 2C,W03EF: CALL 00C03F0: INCF 2C,F03F1: MOVWF 7703F2: MOVWF 3903F3: CALL 1D403F4: MOVLW 0F03F5: SUBWF 2C,W03F6: BTFSS 03.203F7: GOTO 3EE.................... printf(lcd_putc," rozsah k1 \n\r");03F8: CLRF 2703F9: MOVF 27,W03FA: CALL 02003FB: INCF 27,F03FC: MOVWF 7703FD: MOVWF 3903FE: CALL 1D403FF: MOVLW 0E0400: SUBWF 27,W0401: BTFSS 03.20402: GOTO 3F9.................... //delay_ms(300);.................... }.................... if(!input(LUX2))0403: BSF 03.50404: BSF 06.30405: BCF 03.50406: BTFSC 06.30407: GOTO 44D.................... {.................... printf(lcd_putc," E=%3.0f lx \n",100*E);0408: CLRF 3C0409: CLRF 3B040A: MOVLW 48040B: MOVWF 3A040C: MOVLW 85040D: MOVWF 39040E: MOVF 26,W040F: MOVWF 400410: MOVF 25,W0411: MOVWF 3F0412: MOVF 24,W0413: MOVWF 3E0414: MOVF 23,W0415: MOVWF 3D0416: CALL 14E0417: MOVF 77,W0418: MOVWF 270419: MOVF 78,W041A: MOVWF 28041B: MOVF 79,W041C: MOVWF 29041D: MOVF 7A,W041E: MOVWF 2A041F: CLRF 2B0420: MOVF 2B,W0421: CALL 0330422: INCF 2B,F0423: MOVWF 770424: MOVWF 390425: CALL 1D40426: MOVLW 040427: SUBWF 2B,W0428: BTFSS 03.20429: GOTO 420042A: MOVLW 02042B: MOVWF 04042C: MOVF 2A,W042D: MOVWF 2F042E: MOVF 29,W042F: MOVWF 2E0430: MOVF 28,W0431: MOVWF 2D0432: MOVF 27,W0433: MOVWF 2C0434: CLRF 300435: CALL 2490436: MOVLW 090437: MOVWF 2C0438: MOVF 2C,W0439: CALL 033043A: INCF 2C,F043B: MOVWF 77043C: MOVWF 39043D: CALL 1D4043E: MOVLW 0F043F: SUBWF 2C,W0440: BTFSS 03.20441: GOTO 438.................... printf(lcd_putc," rozsah 1k \n\r");0442: CLRF 270443: MOVF 27,W0444: CALL 0470445: INCF 27,F0446: MOVWF 770447: MOVWF 390448: CALL 1D40449: MOVLW 0F044A: SUBWF 27,W044B: BTFSS 03.2044C: GOTO 443.................... //delay_ms(300);.................... }.................... if(!input(LUX3))044D: BSF 03.5044E: BSF 06.4044F: BCF 03.50450: BTFSC 06.40451: GOTO 481.................... {.................... printf(lcd_putc," E=%3.2f klx \n",E);0452: CLRF 270453: MOVF 27,W0454: CALL 05B0455: INCF 27,F0456: MOVWF 770457: MOVWF 390458: CALL 1D40459: MOVLW 04045A: SUBWF 27,W045B: BTFSS 03.2045C: GOTO 453045D: MOVLW 02045E: MOVWF 04045F: MOVF 26,W0460: MOVWF 2F0461: MOVF 25,W0462: MOVWF 2E0463: MOVF 24,W0464: MOVWF 2D0465: MOVF 23,W0466: MOVWF 2C0467: MOVLW 020468: MOVWF 300469: CALL 249046A: MOVLW 09046B: MOVWF 28046C: MOVF 28,W046D: CALL 05B046E: INCF 28,F046F: MOVWF 770470: MOVWF 390471: CALL 1D40472: MOVLW 100473: SUBWF 28,W0474: BTFSS 03.20475: GOTO 46C.................... printf(lcd_putc," rozsah 10k \n\r");0476: CLRF 270477: MOVF 27,W0478: CALL 0700479: INCF 27,F047A: MOVWF 77047B: MOVWF 39047C: CALL 1D4047D: MOVLW 10047E: SUBWF 27,W047F: BTFSS 03.20480: GOTO 477.................... //delay_ms(300);.................... }.................... if(!input(LUX4))0481: BSF 03.50482: BSF 06.50483: BCF 03.50484: BTFSC 06.50485: GOTO 4CC.................... {.................... printf(lcd_putc," E=%3.1f klx \n",10*E);0486: CLRF 3C0487: CLRF 3B0488: MOVLW 200489: MOVWF 3A048A: MOVLW 82048B: MOVWF 39048C: MOVF 26,W048D: MOVWF 40048E: MOVF 25,W048F: MOVWF 3F0490: MOVF 24,W0491: MOVWF 3E0492: MOVF 23,W0493: MOVWF 3D0494: CALL 14E0495: MOVF 77,W0496: MOVWF 270497: MOVF 78,W0498: MOVWF 280499: MOVF 79,W049A: MOVWF 29049B: MOVF 7A,W049C: MOVWF 2A049D: CLRF 2B049E: MOVF 2B,W049F: CALL 08504A0: INCF 2B,F04A1: MOVWF 7704A2: MOVWF 3904A3: CALL 1D404A4: MOVLW 0404A5: SUBWF 2B,W04A6: BTFSS 03.204A7: GOTO 49E04A8: MOVLW 0204A9: MOVWF 0404AA: MOVF 2A,W04AB: MOVWF 2F04AC: MOVF 29,W04AD: MOVWF 2E04AE: MOVF 28,W04AF: MOVWF 2D04B0: MOVF 27,W04B1: MOVWF 2C04B2: MOVLW 0104B3: MOVWF 3004B4: CALL 24904B5: MOVLW 0904B6: MOVWF 2C04B7: MOVF 2C,W04B8: CALL 08504B9: INCF 2C,F04BA: MOVWF 7704BB: MOVWF 3904BC: CALL 1D404BD: MOVLW 1004BE: SUBWF 2C,W04BF: BTFSS 03.204C0: GOTO 4B7.................... printf(lcd_putc," rozsah 100k \n\r");04C1: CLRF 2704C2: MOVF 27,W04C3: CALL 09A04C4: INCF 27,F04C5: MOVWF 7704C6: MOVWF 3904C7: CALL 1D404C8: MOVLW 1004C9: SUBWF 27,W04CA: BTFSS 03.204CB: GOTO 4C2.................... //delay_ms(300);.................... }.................... delay_ms(300);04CC: MOVLW 0204CD: MOVWF 2704CE: MOVLW 9604CF: MOVWF 3A04D0: CALL 0AF04D1: DECFSZ 27,F04D2: GOTO 4CE.................... while(!input(HOLD)); //podrení hodnoty04D3: BSF 03.504D4: BSF 06.604D5: BCF 03.504D6: BTFSS 06.604D7: GOTO 4D3.................... }04D8: GOTO 38B.................... }04D9: SLEEPConfiguration Fuses:Word 1: 3F39 XT NOWDT NOPUT NODEBUG NOPROTECT NOBROWNOUT NOLVP NOCPD NOWRT