CCS PCM C Compiler, Version 4.059d, 15399 01-III-07 20:10Filename: main.lstROM used: 1222 words (60%)Largest free fragment is 826RAM used: 19 (5%) at main() level44 (12%) worst caseStack: 5 locations*0000: MOVLW 000001: MOVWF 0A0002: GOTO 31E0003: 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)*009D: MOVLW 3A009E: MOVWF 04009F: BCF 03.700A0: MOVF 00,W00A1: BTFSC 03.200A2: GOTO 0B400A3: MOVLW 0100A4: MOVWF 7800A5: MOVLW BF00A6: MOVWF 7700A7: CLRWDT00A8: DECFSZ 77,F00A9: GOTO 0A700AA: DECFSZ 78,F00AB: GOTO 0A500AC: MOVLW 4A00AD: MOVWF 7700AE: DECFSZ 77,F00AF: GOTO 0AE00B0: NOP00B1: CLRWDT00B2: DECFSZ 00,F00B3: GOTO 0A300B4: RETLW 00................................................................................ #define LCD_RS PIN_B1 // rizeni registru LCD displeje.................... #define LCD_E PIN_B0 // 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 zachovej00B5: MOVF 07,W00B6: ANDLW 0F00B7: MOVWF 4200B8: SWAPF 40,W00B9: MOVWF 7700BA: MOVLW F000BB: ANDWF 77,F00BC: MOVF 77,W00BD: ANDLW F000BE: IORWF 42,W00BF: 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 hrana00C0: BSF 06.000C1: BSF 03.500C2: BCF 06.0.................... delay_us(1); // pockej alespon 450ns od e nebo alespon 195ns od dat00C3: CLRWDT.................... output_bit(LCD_E,0); // sestupna hrana (minimalni perioda e je 1us)00C4: BCF 03.500C5: BCF 06.000C6: BSF 03.500C7: BCF 06.0.................... }00C8: BCF 03.500C9: 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 registr00CA: MOVF 3E,F00CB: BTFSS 03.200CC: GOTO 0CF00CD: BCF 06.100CE: GOTO 0D000CF: BSF 06.100D0: BSF 03.500D1: BCF 06.1.................... swap(n);00D2: BCF 03.500D3: SWAPF 3F,F.................... lcd_send_nibble(n); // posli horni pulku bajtu00D4: MOVF 3F,W00D5: MOVWF 4000D6: CALL 0B5.................... swap(n);00D7: SWAPF 3F,F.................... lcd_send_nibble(n); // posli spodni pulku bajtu00D8: MOVF 3F,W00D9: MOVWF 4000DA: CALL 0B5.................... delay_us(40); // minimalni doba na provedeni prikazu00DB: CLRWDT00DC: MOVLW 0C00DD: MOVWF 7700DE: DECFSZ 77,F00DF: GOTO 0DE00E0: GOTO 0E1.................... }00E1: 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 napajeni00E2: MOVLW 1400E3: MOVWF 3A00E4: CALL 09D........................................ #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 LCD00E5: MOVLW 0F00E6: BSF 03.500E7: ANDWF 07,F.................... #endif........................................ output_bit(LCD_RS,0); // nastav jako vystup a nastav klidovy stav00E8: BCF 03.500E9: BCF 06.100EA: BSF 03.500EB: BCF 06.1.................... output_bit(LCD_E, 0); // nastav jako vystup a nastav klidovy stav00EC: BCF 03.500ED: BCF 06.000EE: BSF 03.500EF: BCF 06.0........................................ for (i=0; i<3; i++) // nastav lcd do rezimu 8 bitu sbernice00F0: BCF 03.500F1: CLRF 2700F2: MOVF 27,W00F3: SUBLW 0200F4: BTFSS 03.000F5: GOTO 0FE.................... {.................... delay_ms(2); // muze byt rozdelany prenos dat (2x 4 bity) nebo pomaly povel00F6: MOVLW 0200F7: MOVWF 3A00F8: CALL 09D.................... lcd_send_nibble(3); // rezim 8 bitu00F9: MOVLW 0300FA: MOVWF 4000FB: CALL 0B5.................... }00FC: INCF 27,F00FD: GOTO 0F2........................................ delay_us(40); // cas na zpracovani00FE: CLRWDT00FF: MOVLW 0C0100: MOVWF 770101: DECFSZ 77,F0102: GOTO 1010103: GOTO 104.................... lcd_send_nibble(2); // nastav rezim 4 bitu (plati od nasledujiciho prenosu)0104: MOVLW 020105: MOVWF 400106: CALL 0B5.................... delay_us(40); // cas na zpracovani0107: CLRWDT0108: MOVLW 0C0109: MOVWF 77010A: DECFSZ 77,F010B: GOTO 10A010C: GOTO 10D........................................ for (i=0;i<3;i++) // proved inicializaci (nastaveni modu, smazani apod)010D: CLRF 27010E: MOVF 27,W010F: SUBLW 020110: BTFSS 03.00111: GOTO 11E.................... {.................... lcd_send_byte(0,LCD_INIT_STRING[i]);0112: MOVF 27,W0113: CALL 0040114: MOVWF 280115: CLRF 3E0116: MOVF 28,W0117: MOVWF 3F0118: CALL 0CA.................... delay_ms(2);0119: MOVLW 02011A: MOVWF 3A011B: CALL 09D.................... }011C: INCF 27,F011D: GOTO 10E.................... }011E: GOTO 379 (RETURN)............................................................ // Proved presun kurzoru.................... //.................... // Pozice 1.1 je domu.................... //.................... void lcd_gotoxy( BYTE x, BYTE y).................... {........................................ BYTE Adr;........................................ Adr=x-1;*01B1: MOVLW 0101B2: SUBWF 3A,W01B3: MOVWF 3C.................... if(y==2)01B4: MOVF 3B,W01B5: SUBLW 0201B6: BTFSS 03.201B7: GOTO 1BA.................... Adr+=LCD_LINE_2;01B8: MOVLW 4001B9: ADDWF 3C,F........................................ lcd_send_byte(0,0x80|Adr);01BA: MOVF 3C,W01BB: IORLW 8001BC: MOVWF 3D01BD: CLRF 3E01BE: MOVF 3D,W01BF: MOVWF 3F01C0: CALL 0CA.................... }01C1: RETLW 00............................................................ // Zapis znaku na displej, zpracovani ridicich znaku.................... //.................... void lcd_putc( char c).................... {........................................ switch (c).................... {01C2: MOVF 39,W01C3: XORLW 0C01C4: BTFSC 03.201C5: GOTO 1D001C6: XORLW 0601C7: BTFSC 03.201C8: GOTO 1D801C9: XORLW 0701CA: BTFSC 03.201CB: GOTO 1DE01CC: XORLW 0501CD: BTFSC 03.201CE: GOTO 1E301CF: GOTO 1E8.................... case '\f' : lcd_send_byte(0,1); // smaz displej01D0: CLRF 3E01D1: MOVLW 0101D2: MOVWF 3F01D3: CALL 0CA.................... delay_ms(2);01D4: MOVLW 0201D5: MOVWF 3A01D6: CALL 09D.................... break;01D7: GOTO 1F4.................... case '\n' : lcd_gotoxy(1,2); break; // presun se na 1. znak 2. radky01D8: MOVLW 0101D9: MOVWF 3A01DA: MOVLW 0201DB: MOVWF 3B01DC: CALL 1B101DD: GOTO 1F4.................... case '\r' : lcd_gotoxy(1,1); break; // presun home01DE: MOVLW 0101DF: MOVWF 3A01E0: MOVWF 3B01E1: CALL 1B101E2: GOTO 1F4.................... case '\b' : lcd_send_byte(0,0x10); break; // posun kurzor o 1 zpet01E3: CLRF 3E01E4: MOVLW 1001E5: MOVWF 3F01E6: CALL 0CA01E7: GOTO 1F4.................... default : if (c<0x20) c&=0x7; // preklopeni definovatelnych znaku na rozsah 0 az 0x1F01E8: MOVF 39,W01E9: SUBLW 1F01EA: BTFSS 03.001EB: GOTO 1EE01EC: MOVLW 0701ED: ANDWF 39,F.................... lcd_send_byte(1,c); break; // zapis znak01EE: MOVLW 0101EF: MOVWF 3E01F0: MOVF 39,W01F1: MOVWF 3F01F2: CALL 0CA01F3: GOTO 1F4.................... }.................... }01F4: 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().................... {*031E: CLRF 04031F: BCF 03.70320: MOVLW 1F0321: ANDWF 03,F0322: BSF 03.50323: BSF 1F.00324: BSF 1F.10325: BSF 1F.20326: BCF 1F.30327: MOVLW 070328: MOVWF 1C.................... unsigned int16 I;.................... float E;........................................ port_b_pullups(TRUE);*032C: BSF 03.5032D: BCF 01.7.................... setup_adc_ports(AN0_VREF_VREF);032E: BSF 1F.0032F: BSF 1F.10330: BSF 1F.20331: BSF 1F.3.................... setup_adc(ADC_CLOCK_DIV_32);0332: BCF 1F.60333: BCF 03.50334: BCF 1F.60335: BSF 1F.70336: BSF 03.50337: BSF 1F.70338: BCF 03.50339: BSF 1F.0.................... setup_psp(PSP_DISABLED);033A: BSF 03.5033B: BCF 09.4.................... setup_spi(SPI_SS_DISABLED);*0329: MOVLW FF032A: BCF 03.5032B: MOVWF 20*033C: BCF 03.5033D: BCF 14.5033E: BCF 20.5033F: MOVF 20,W0340: BSF 03.50341: MOVWF 070342: BCF 03.50343: BSF 20.40344: MOVF 20,W0345: BSF 03.50346: MOVWF 070347: BCF 03.50348: BCF 20.30349: MOVF 20,W034A: BSF 03.5034B: MOVWF 07034C: MOVLW 01034D: BCF 03.5034E: MOVWF 14034F: MOVLW 000350: BSF 03.50351: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);0352: MOVF 01,W0353: ANDLW C70354: IORLW 080355: MOVWF 01.................... setup_timer_1(T1_DISABLED);0356: BCF 03.50357: CLRF 10.................... setup_timer_2(T2_DISABLED,0,1);0358: MOVLW 000359: MOVWF 78035A: MOVWF 12035B: MOVLW 00035C: BSF 03.5035D: MOVWF 12.................... setup_comparator(NC_NC_NC_NC);035E: MOVLW 07035F: MOVWF 1C0360: MOVF 05,W0361: CLRWDT0362: MOVLW 020363: MOVWF 770364: DECFSZ 77,F0365: GOTO 3640366: GOTO 3670367: MOVF 1C,W0368: BCF 03.50369: BCF 0D.6.................... setup_vref(FALSE);036A: BSF 03.5036B: CLRF 1D........................................ set_adc_channel (IN);036C: MOVLW 00036D: MOVWF 78036E: BCF 03.5036F: MOVF 1F,W0370: ANDLW C70371: IORWF 78,W0372: MOVWF 1F.................... delay_us(20);0373: CLRWDT0374: MOVLW 060375: MOVWF 770376: DECFSZ 77,F0377: GOTO 376.................... lcd_init();0378: GOTO 0E2........................................ while(TRUE).................... {.................... I=read_adc();0379: BSF 1F.2037A: BTFSC 1F.2037B: GOTO 37A037C: BSF 03.5037D: MOVF 1E,W037E: BCF 03.5037F: MOVWF 210380: MOVF 1E,W0381: MOVWF 22.................... delay_us(600);0382: CLRWDT0383: MOVLW C70384: MOVWF 770385: DECFSZ 77,F0386: GOTO 3850387: NOP.................... E=0.019531*I;0388: MOVF 22,W0389: MOVWF 28038A: MOVF 21,W038B: MOVWF 27038C: GOTO 11F038D: MOVLW 7A038E: MOVWF 3C038F: MOVLW FF0390: MOVWF 3B0391: MOVLW 1F0392: MOVWF 3A0393: MOVLW 790394: MOVWF 390395: MOVF 7A,W0396: MOVWF 400397: MOVF 79,W0398: MOVWF 3F0399: MOVF 78,W039A: MOVWF 3E039B: MOVF 77,W039C: MOVWF 3D039D: CALL 13C039E: MOVF 7A,W039F: MOVWF 2603A0: MOVF 79,W03A1: MOVWF 2503A2: MOVF 78,W03A3: MOVWF 2403A4: MOVF 77,W03A5: MOVWF 23.................... if(!input(LUX1))03A6: BSF 03.503A7: BSF 06.203A8: BCF 03.503A9: BTFSC 06.203AA: GOTO 3E1.................... {.................... printf(lcd_putc," E=%4.2f lx \n",E);03AB: CLRF 2703AC: MOVF 27,W03AD: CALL 00C03AE: INCF 27,F03AF: MOVWF 7703B0: MOVWF 3903B1: CALL 1C203B2: MOVLW 0403B3: SUBWF 27,W03B4: BTFSS 03.203B5: GOTO 3AC03B6: MOVLW 0303B7: MOVWF 0403B8: MOVF 26,W03B9: MOVWF 2F03BA: MOVF 25,W03BB: MOVWF 2E03BC: MOVF 24,W03BD: MOVWF 2D03BE: MOVF 23,W03BF: MOVWF 2C03C0: MOVLW 0203C1: MOVWF 3003C2: CALL 23703C3: MOVLW 0903C4: MOVWF 2803C5: MOVF 28,W03C6: CALL 00C03C7: INCF 28,F03C8: MOVWF 7703C9: MOVWF 3903CA: CALL 1C203CB: MOVLW 0E03CC: SUBWF 28,W03CD: BTFSS 03.203CE: GOTO 3C5.................... printf(lcd_putc," rozsah 1\n\r");03CF: CLRF 2703D0: MOVF 27,W03D1: CALL 01F03D2: INCF 27,F03D3: MOVWF 7703D4: MOVWF 3903D5: CALL 1C203D6: MOVLW 0C03D7: SUBWF 27,W03D8: BTFSS 03.203D9: GOTO 3D0.................... delay_ms(300);03DA: MOVLW 0203DB: MOVWF 2703DC: MOVLW 9603DD: MOVWF 3A03DE: CALL 09D03DF: DECFSZ 27,F03E0: GOTO 3DC.................... }.................... if(!input(LUX2))03E1: BSF 03.503E2: BSF 06.303E3: BCF 03.503E4: BTFSC 06.303E5: GOTO 433.................... {.................... printf(lcd_putc," E=%3.1f lx \n",10*E);03E6: CLRF 3C03E7: CLRF 3B03E8: MOVLW 2003E9: MOVWF 3A03EA: MOVLW 8203EB: MOVWF 3903EC: MOVF 26,W03ED: MOVWF 4003EE: MOVF 25,W03EF: MOVWF 3F03F0: MOVF 24,W03F1: MOVWF 3E03F2: MOVF 23,W03F3: MOVWF 3D03F4: CALL 13C03F5: MOVF 77,W03F6: MOVWF 2703F7: MOVF 78,W03F8: MOVWF 2803F9: MOVF 79,W03FA: MOVWF 2903FB: MOVF 7A,W03FC: MOVWF 2A03FD: CLRF 2B03FE: MOVF 2B,W03FF: CALL 0300400: INCF 2B,F0401: MOVWF 770402: MOVWF 390403: CALL 1C20404: MOVLW 040405: SUBWF 2B,W0406: BTFSS 03.20407: GOTO 3FE0408: MOVLW 020409: MOVWF 04040A: MOVF 2A,W040B: MOVWF 2F040C: MOVF 29,W040D: MOVWF 2E040E: MOVF 28,W040F: MOVWF 2D0410: MOVF 27,W0411: MOVWF 2C0412: MOVLW 010413: MOVWF 300414: CALL 2370415: MOVLW 090416: MOVWF 2C0417: MOVF 2C,W0418: CALL 0300419: INCF 2C,F041A: MOVWF 77041B: MOVWF 39041C: CALL 1C2041D: MOVLW 0E041E: SUBWF 2C,W041F: BTFSS 03.20420: GOTO 417.................... printf(lcd_putc," rozsah 2\n\r");0421: CLRF 270422: MOVF 27,W0423: CALL 0430424: INCF 27,F0425: MOVWF 770426: MOVWF 390427: CALL 1C20428: MOVLW 0C0429: SUBWF 27,W042A: BTFSS 03.2042B: GOTO 422.................... delay_ms(300);042C: MOVLW 02042D: MOVWF 27042E: MOVLW 96042F: MOVWF 3A0430: CALL 09D0431: DECFSZ 27,F0432: GOTO 42E.................... }.................... if(!input(LUX3))0433: BSF 03.50434: BSF 06.40435: BCF 03.50436: BTFSC 06.40437: GOTO 484.................... {.................... printf(lcd_putc," E=%4.0f lx \n",100*E);0438: CLRF 3C0439: CLRF 3B043A: MOVLW 48043B: MOVWF 3A043C: MOVLW 85043D: MOVWF 39043E: MOVF 26,W043F: MOVWF 400440: MOVF 25,W0441: MOVWF 3F0442: MOVF 24,W0443: MOVWF 3E0444: MOVF 23,W0445: MOVWF 3D0446: CALL 13C0447: MOVF 77,W0448: MOVWF 270449: MOVF 78,W044A: MOVWF 28044B: MOVF 79,W044C: MOVWF 29044D: MOVF 7A,W044E: MOVWF 2A044F: CLRF 2B0450: MOVF 2B,W0451: CALL 0540452: INCF 2B,F0453: MOVWF 770454: MOVWF 390455: CALL 1C20456: MOVLW 040457: SUBWF 2B,W0458: BTFSS 03.20459: GOTO 450045A: MOVLW 03045B: MOVWF 04045C: MOVF 2A,W045D: MOVWF 2F045E: MOVF 29,W045F: MOVWF 2E0460: MOVF 28,W0461: MOVWF 2D0462: MOVF 27,W0463: MOVWF 2C0464: CLRF 300465: CALL 2370466: MOVLW 090467: MOVWF 2C0468: MOVF 2C,W0469: CALL 054046A: INCF 2C,F046B: MOVWF 77046C: MOVWF 39046D: CALL 1C2046E: MOVLW 0E046F: SUBWF 2C,W0470: BTFSS 03.20471: GOTO 468.................... printf(lcd_putc," rozsah 3\n\r");0472: CLRF 270473: MOVF 27,W0474: CALL 0670475: INCF 27,F0476: MOVWF 770477: MOVWF 390478: CALL 1C20479: MOVLW 0C047A: SUBWF 27,W047B: BTFSS 03.2047C: GOTO 473.................... delay_ms(300);047D: MOVLW 02047E: MOVWF 27047F: MOVLW 960480: MOVWF 3A0481: CALL 09D0482: DECFSZ 27,F0483: GOTO 47F.................... }.................... if(!input(LUX4))0484: BSF 03.50485: BSF 06.50486: BCF 03.50487: BTFSC 06.50488: GOTO 4BF.................... {.................... printf(lcd_putc," E=%3.1f klx \n",E);0489: CLRF 27048A: MOVF 27,W048B: CALL 078048C: INCF 27,F048D: MOVWF 77048E: MOVWF 39048F: CALL 1C20490: MOVLW 040491: SUBWF 27,W0492: BTFSS 03.20493: GOTO 48A0494: MOVLW 020495: MOVWF 040496: MOVF 26,W0497: MOVWF 2F0498: MOVF 25,W0499: MOVWF 2E049A: MOVF 24,W049B: MOVWF 2D049C: MOVF 23,W049D: MOVWF 2C049E: MOVLW 01049F: MOVWF 3004A0: CALL 23704A1: MOVLW 0904A2: MOVWF 2804A3: MOVF 28,W04A4: CALL 07804A5: INCF 28,F04A6: MOVWF 7704A7: MOVWF 3904A8: CALL 1C204A9: MOVLW 0F04AA: SUBWF 28,W04AB: BTFSS 03.204AC: GOTO 4A3.................... printf(lcd_putc," rozsah 4\n\r");04AD: CLRF 2704AE: MOVF 27,W04AF: CALL 08C04B0: INCF 27,F04B1: MOVWF 7704B2: MOVWF 3904B3: CALL 1C204B4: MOVLW 0C04B5: SUBWF 27,W04B6: BTFSS 03.204B7: GOTO 4AE.................... delay_ms(300);04B8: MOVLW 0204B9: MOVWF 2704BA: MOVLW 9604BB: MOVWF 3A04BC: CALL 09D04BD: DECFSZ 27,F04BE: GOTO 4BA.................... }.................... while(!input(HOLD));04BF: BSF 03.504C0: BSF 06.604C1: BCF 03.504C2: BTFSS 06.604C3: GOTO 4BF.................... }04C4: GOTO 379.................... }04C5: SLEEPConfiguration Fuses:Word 1: 3F39 XT NOWDT NOPUT NODEBUG NOPROTECT NOBROWNOUT NOLVP NOCPD NOWRT