CCS PCM C Compiler, Version 4.059d, 15399 04-IV-07 20:22
Filename: main.lst
ROM used: 1242 words (61%)
Largest free fragment is 806
RAM used: 19 (5%) at main() level
44 (12%) worst case
Stack: 5 locations
*
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 330
0003: 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 3A
00B0: MOVWF 04
00B1: BCF 03.7
00B2: MOVF 00,W
00B3: BTFSC 03.2
00B4: GOTO 0C6
00B5: MOVLW 01
00B6: MOVWF 78
00B7: MOVLW BF
00B8: MOVWF 77
00B9: CLRWDT
00BA: DECFSZ 77,F
00BB: GOTO 0B9
00BC: DECFSZ 78,F
00BD: GOTO 0B7
00BE: MOVLW 4A
00BF: MOVWF 77
00C0: DECFSZ 77,F
00C1: GOTO 0C0
00C2: NOP
00C3: CLRWDT
00C4: DECFSZ 00,F
00C5: GOTO 0B5
00C6: 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 zachovej
00C7: MOVF 07,W
00C8: ANDLW 0F
00C9: MOVWF 42
00CA: SWAPF 40,W
00CB: MOVWF 77
00CC: MOVLW F0
00CD: ANDWF 77,F
00CE: MOVF 77,W
00CF: ANDLW F0
00D0: IORWF 42,W
00D1: 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 hrana
00D2: BSF 06.1
00D3: BSF 03.5
00D4: BCF 06.1
.................... delay_us(1); // pockej alespon 450ns od e nebo alespon 195ns od dat
00D5: CLRWDT
.................... output_bit(LCD_E,0); // sestupna hrana (minimalni perioda e je 1us)
00D6: BCF 03.5
00D7: BCF 06.1
00D8: BSF 03.5
00D9: BCF 06.1
.................... }
00DA: BCF 03.5
00DB: 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 registr
00DC: MOVF 3E,F
00DD: BTFSS 03.2
00DE: GOTO 0E1
00DF: BCF 06.0
00E0: GOTO 0E2
00E1: BSF 06.0
00E2: BSF 03.5
00E3: BCF 06.0
.................... swap(n);
00E4: BCF 03.5
00E5: SWAPF 3F,F
.................... lcd_send_nibble(n); // posli horni pulku bajtu
00E6: MOVF 3F,W
00E7: MOVWF 40
00E8: CALL 0C7
.................... swap(n);
00E9: SWAPF 3F,F
.................... lcd_send_nibble(n); // posli spodni pulku bajtu
00EA: MOVF 3F,W
00EB: MOVWF 40
00EC: CALL 0C7
.................... delay_us(40); // minimalni doba na provedeni prikazu
00ED: CLRWDT
00EE: MOVLW 0C
00EF: MOVWF 77
00F0: DECFSZ 77,F
00F1: GOTO 0F0
00F2: 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 napajeni
00F4: MOVLW 14
00F5: MOVWF 3A
00F6: 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 LCD
00F7: MOVLW 0F
00F8: BSF 03.5
00F9: ANDWF 07,F
.................... #endif
....................
.................... output_bit(LCD_RS,0); // nastav jako vystup a nastav klidovy stav
00FA: BCF 03.5
00FB: BCF 06.0
00FC: BSF 03.5
00FD: BCF 06.0
.................... output_bit(LCD_E, 0); // nastav jako vystup a nastav klidovy stav
00FE: BCF 03.5
00FF: BCF 06.1
0100: BSF 03.5
0101: BCF 06.1
....................
.................... for (i=0; i<3; i++) // nastav lcd do rezimu 8 bitu sbernice
0102: BCF 03.5
0103: CLRF 27
0104: MOVF 27,W
0105: SUBLW 02
0106: BTFSS 03.0
0107: GOTO 110
.................... {
.................... delay_ms(2); // muze byt rozdelany prenos dat (2x 4 bity) nebo pomaly povel
0108: MOVLW 02
0109: MOVWF 3A
010A: CALL 0AF
.................... lcd_send_nibble(3); // rezim 8 bitu
010B: MOVLW 03
010C: MOVWF 40
010D: CALL 0C7
.................... }
010E: INCF 27,F
010F: GOTO 104
....................
.................... delay_us(40); // cas na zpracovani
0110: CLRWDT
0111: MOVLW 0C
0112: MOVWF 77
0113: DECFSZ 77,F
0114: GOTO 113
0115: GOTO 116
.................... lcd_send_nibble(2); // nastav rezim 4 bitu (plati od nasledujiciho prenosu)
0116: MOVLW 02
0117: MOVWF 40
0118: CALL 0C7
.................... delay_us(40); // cas na zpracovani
0119: CLRWDT
011A: MOVLW 0C
011B: MOVWF 77
011C: DECFSZ 77,F
011D: GOTO 11C
011E: GOTO 11F
....................
.................... for (i=0;i<3;i++) // proved inicializaci (nastaveni modu, smazani apod)
011F: CLRF 27
0120: MOVF 27,W
0121: SUBLW 02
0122: BTFSS 03.0
0123: GOTO 130
.................... {
.................... lcd_send_byte(0,LCD_INIT_STRING[i]);
0124: MOVF 27,W
0125: CALL 004
0126: MOVWF 28
0127: CLRF 3E
0128: MOVF 28,W
0129: MOVWF 3F
012A: CALL 0DC
.................... delay_ms(2);
012B: MOVLW 02
012C: MOVWF 3A
012D: CALL 0AF
.................... }
012E: INCF 27,F
012F: 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 01
01C4: SUBWF 3A,W
01C5: MOVWF 3C
.................... if(y==2)
01C6: MOVF 3B,W
01C7: SUBLW 02
01C8: BTFSS 03.2
01C9: GOTO 1CC
.................... Adr+=LCD_LINE_2;
01CA: MOVLW 40
01CB: ADDWF 3C,F
....................
.................... lcd_send_byte(0,0x80|Adr);
01CC: MOVF 3C,W
01CD: IORLW 80
01CE: MOVWF 3D
01CF: CLRF 3E
01D0: MOVF 3D,W
01D1: MOVWF 3F
01D2: CALL 0DC
.................... }
01D3: RETLW 00
....................
....................
.................... // Zapis znaku na displej, zpracovani ridicich znaku
.................... //
.................... void lcd_putc( char c)
.................... {
....................
.................... switch (c)
.................... {
01D4: MOVF 39,W
01D5: XORLW 0C
01D6: BTFSC 03.2
01D7: GOTO 1E2
01D8: XORLW 06
01D9: BTFSC 03.2
01DA: GOTO 1EA
01DB: XORLW 07
01DC: BTFSC 03.2
01DD: GOTO 1F0
01DE: XORLW 05
01DF: BTFSC 03.2
01E0: GOTO 1F5
01E1: GOTO 1FA
.................... case '\f' : lcd_send_byte(0,1); // smaz displej
01E2: CLRF 3E
01E3: MOVLW 01
01E4: MOVWF 3F
01E5: CALL 0DC
.................... delay_ms(2);
01E6: MOVLW 02
01E7: MOVWF 3A
01E8: CALL 0AF
.................... break;
01E9: GOTO 206
.................... case '\n' : lcd_gotoxy(1,2); break; // presun se na 1. znak 2. radky
01EA: MOVLW 01
01EB: MOVWF 3A
01EC: MOVLW 02
01ED: MOVWF 3B
01EE: CALL 1C3
01EF: GOTO 206
.................... case '\r' : lcd_gotoxy(1,1); break; // presun home
01F0: MOVLW 01
01F1: MOVWF 3A
01F2: MOVWF 3B
01F3: CALL 1C3
01F4: GOTO 206
.................... case '\b' : lcd_send_byte(0,0x10); break; // posun kurzor o 1 zpet
01F5: CLRF 3E
01F6: MOVLW 10
01F7: MOVWF 3F
01F8: CALL 0DC
01F9: GOTO 206
.................... default : if (c<0x20) c&=0x7; // preklopeni definovatelnych znaku na rozsah 0 az 0x1F
01FA: MOVF 39,W
01FB: SUBLW 1F
01FC: BTFSS 03.0
01FD: GOTO 200
01FE: MOVLW 07
01FF: ANDWF 39,F
.................... lcd_send_byte(1,c); break; // zapis znak
0200: MOVLW 01
0201: MOVWF 3E
0202: MOVF 39,W
0203: MOVWF 3F
0204: CALL 0DC
0205: 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 04
0331: BCF 03.7
0332: MOVLW 1F
0333: ANDWF 03,F
0334: BSF 03.5
0335: BSF 1F.0
0336: BSF 1F.1
0337: BSF 1F.2
0338: BCF 1F.3
0339: MOVLW 07
033A: MOVWF 1C
.................... unsigned int16 I;
.................... float E;
....................
.................... port_b_pullups(TRUE);
*
033E: BSF 03.5
033F: BCF 01.7
.................... setup_adc_ports(AN0_VREF_VREF);
0340: BSF 1F.0
0341: BSF 1F.1
0342: BSF 1F.2
0343: BSF 1F.3
.................... setup_adc(ADC_CLOCK_DIV_32);
0344: BCF 1F.6
0345: BCF 03.5
0346: BCF 1F.6
0347: BSF 1F.7
0348: BSF 03.5
0349: BSF 1F.7
034A: BCF 03.5
034B: BSF 1F.0
.................... setup_psp(PSP_DISABLED);
034C: BSF 03.5
034D: BCF 09.4
.................... setup_spi(SPI_SS_DISABLED);
*
033B: MOVLW FF
033C: BCF 03.5
033D: MOVWF 20
*
034E: BCF 03.5
034F: BCF 14.5
0350: BCF 20.5
0351: MOVF 20,W
0352: BSF 03.5
0353: MOVWF 07
0354: BCF 03.5
0355: BSF 20.4
0356: MOVF 20,W
0357: BSF 03.5
0358: MOVWF 07
0359: BCF 03.5
035A: BCF 20.3
035B: MOVF 20,W
035C: BSF 03.5
035D: MOVWF 07
035E: MOVLW 01
035F: BCF 03.5
0360: MOVWF 14
0361: MOVLW 00
0362: BSF 03.5
0363: MOVWF 14
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
0364: MOVF 01,W
0365: ANDLW C7
0366: IORLW 08
0367: MOVWF 01
.................... setup_timer_1(T1_DISABLED);
0368: BCF 03.5
0369: CLRF 10
.................... setup_timer_2(T2_DISABLED,0,1);
036A: MOVLW 00
036B: MOVWF 78
036C: MOVWF 12
036D: MOVLW 00
036E: BSF 03.5
036F: MOVWF 12
.................... setup_comparator(NC_NC_NC_NC);
0370: MOVLW 07
0371: MOVWF 1C
0372: MOVF 05,W
0373: CLRWDT
0374: MOVLW 02
0375: MOVWF 77
0376: DECFSZ 77,F
0377: GOTO 376
0378: GOTO 379
0379: MOVF 1C,W
037A: BCF 03.5
037B: BCF 0D.6
.................... setup_vref(FALSE);
037C: BSF 03.5
037D: CLRF 1D
....................
.................... set_adc_channel (IN);
037E: MOVLW 00
037F: MOVWF 78
0380: BCF 03.5
0381: MOVF 1F,W
0382: ANDLW C7
0383: IORWF 78,W
0384: MOVWF 1F
.................... delay_us(20);
0385: CLRWDT
0386: MOVLW 06
0387: MOVWF 77
0388: DECFSZ 77,F
0389: GOTO 388
.................... lcd_init();
038A: GOTO 0F4
....................
....................
.................... while(TRUE)
.................... {
.................... I=read_adc(); //pøeètení hodnoty z A/D pøevodníku
038B: BSF 1F.2
038C: BTFSC 1F.2
038D: GOTO 38C
038E: BSF 03.5
038F: MOVF 1E,W
0390: BCF 03.5
0391: MOVWF 21
0392: MOVF 1E,W
0393: MOVWF 22
.................... delay_us(600);
0394: CLRWDT
0395: MOVLW C7
0396: MOVWF 77
0397: DECFSZ 77,F
0398: GOTO 397
0399: NOP
.................... E=0.009775*I; //výpoèet osvìtlení k=10.0/1023
039A: MOVF 22,W
039B: MOVWF 28
039C: MOVF 21,W
039D: MOVWF 27
039E: GOTO 131
039F: MOVLW 52
03A0: MOVWF 3C
03A1: MOVLW 27
03A2: MOVWF 3B
03A3: MOVLW 20
03A4: MOVWF 3A
03A5: MOVLW 78
03A6: MOVWF 39
03A7: MOVF 7A,W
03A8: MOVWF 40
03A9: MOVF 79,W
03AA: MOVWF 3F
03AB: MOVF 78,W
03AC: MOVWF 3E
03AD: MOVF 77,W
03AE: MOVWF 3D
03AF: CALL 14E
03B0: MOVF 7A,W
03B1: MOVWF 26
03B2: MOVF 79,W
03B3: MOVWF 25
03B4: MOVF 78,W
03B5: MOVWF 24
03B6: MOVF 77,W
03B7: MOVWF 23
....................
....................
.................... if(!input(LUX1))
03B8: BSF 03.5
03B9: BSF 06.2
03BA: BCF 03.5
03BB: BTFSC 06.2
03BC: GOTO 403
.................... {
.................... printf(lcd_putc," E=%3.1f lx \n",10*E);
03BD: CLRF 3C
03BE: CLRF 3B
03BF: MOVLW 20
03C0: MOVWF 3A
03C1: MOVLW 82
03C2: MOVWF 39
03C3: MOVF 26,W
03C4: MOVWF 40
03C5: MOVF 25,W
03C6: MOVWF 3F
03C7: MOVF 24,W
03C8: MOVWF 3E
03C9: MOVF 23,W
03CA: MOVWF 3D
03CB: CALL 14E
03CC: MOVF 77,W
03CD: MOVWF 27
03CE: MOVF 78,W
03CF: MOVWF 28
03D0: MOVF 79,W
03D1: MOVWF 29
03D2: MOVF 7A,W
03D3: MOVWF 2A
03D4: CLRF 2B
03D5: MOVF 2B,W
03D6: CALL 00C
03D7: INCF 2B,F
03D8: MOVWF 77
03D9: MOVWF 39
03DA: CALL 1D4
03DB: MOVLW 04
03DC: SUBWF 2B,W
03DD: BTFSS 03.2
03DE: GOTO 3D5
03DF: MOVLW 02
03E0: MOVWF 04
03E1: MOVF 2A,W
03E2: MOVWF 2F
03E3: MOVF 29,W
03E4: MOVWF 2E
03E5: MOVF 28,W
03E6: MOVWF 2D
03E7: MOVF 27,W
03E8: MOVWF 2C
03E9: MOVLW 01
03EA: MOVWF 30
03EB: CALL 249
03EC: MOVLW 09
03ED: MOVWF 2C
03EE: MOVF 2C,W
03EF: CALL 00C
03F0: INCF 2C,F
03F1: MOVWF 77
03F2: MOVWF 39
03F3: CALL 1D4
03F4: MOVLW 0F
03F5: SUBWF 2C,W
03F6: BTFSS 03.2
03F7: GOTO 3EE
.................... printf(lcd_putc," rozsah k1 \n\r");
03F8: CLRF 27
03F9: MOVF 27,W
03FA: CALL 020
03FB: INCF 27,F
03FC: MOVWF 77
03FD: MOVWF 39
03FE: CALL 1D4
03FF: MOVLW 0E
0400: SUBWF 27,W
0401: BTFSS 03.2
0402: GOTO 3F9
.................... //delay_ms(300);
.................... }
.................... if(!input(LUX2))
0403: BSF 03.5
0404: BSF 06.3
0405: BCF 03.5
0406: BTFSC 06.3
0407: GOTO 44D
.................... {
.................... printf(lcd_putc," E=%3.0f lx \n",100*E);
0408: CLRF 3C
0409: CLRF 3B
040A: MOVLW 48
040B: MOVWF 3A
040C: MOVLW 85
040D: MOVWF 39
040E: MOVF 26,W
040F: MOVWF 40
0410: MOVF 25,W
0411: MOVWF 3F
0412: MOVF 24,W
0413: MOVWF 3E
0414: MOVF 23,W
0415: MOVWF 3D
0416: CALL 14E
0417: MOVF 77,W
0418: MOVWF 27
0419: MOVF 78,W
041A: MOVWF 28
041B: MOVF 79,W
041C: MOVWF 29
041D: MOVF 7A,W
041E: MOVWF 2A
041F: CLRF 2B
0420: MOVF 2B,W
0421: CALL 033
0422: INCF 2B,F
0423: MOVWF 77
0424: MOVWF 39
0425: CALL 1D4
0426: MOVLW 04
0427: SUBWF 2B,W
0428: BTFSS 03.2
0429: GOTO 420
042A: MOVLW 02
042B: MOVWF 04
042C: MOVF 2A,W
042D: MOVWF 2F
042E: MOVF 29,W
042F: MOVWF 2E
0430: MOVF 28,W
0431: MOVWF 2D
0432: MOVF 27,W
0433: MOVWF 2C
0434: CLRF 30
0435: CALL 249
0436: MOVLW 09
0437: MOVWF 2C
0438: MOVF 2C,W
0439: CALL 033
043A: INCF 2C,F
043B: MOVWF 77
043C: MOVWF 39
043D: CALL 1D4
043E: MOVLW 0F
043F: SUBWF 2C,W
0440: BTFSS 03.2
0441: GOTO 438
.................... printf(lcd_putc," rozsah 1k \n\r");
0442: CLRF 27
0443: MOVF 27,W
0444: CALL 047
0445: INCF 27,F
0446: MOVWF 77
0447: MOVWF 39
0448: CALL 1D4
0449: MOVLW 0F
044A: SUBWF 27,W
044B: BTFSS 03.2
044C: GOTO 443
.................... //delay_ms(300);
.................... }
.................... if(!input(LUX3))
044D: BSF 03.5
044E: BSF 06.4
044F: BCF 03.5
0450: BTFSC 06.4
0451: GOTO 481
.................... {
.................... printf(lcd_putc," E=%3.2f klx \n",E);
0452: CLRF 27
0453: MOVF 27,W
0454: CALL 05B
0455: INCF 27,F
0456: MOVWF 77
0457: MOVWF 39
0458: CALL 1D4
0459: MOVLW 04
045A: SUBWF 27,W
045B: BTFSS 03.2
045C: GOTO 453
045D: MOVLW 02
045E: MOVWF 04
045F: MOVF 26,W
0460: MOVWF 2F
0461: MOVF 25,W
0462: MOVWF 2E
0463: MOVF 24,W
0464: MOVWF 2D
0465: MOVF 23,W
0466: MOVWF 2C
0467: MOVLW 02
0468: MOVWF 30
0469: CALL 249
046A: MOVLW 09
046B: MOVWF 28
046C: MOVF 28,W
046D: CALL 05B
046E: INCF 28,F
046F: MOVWF 77
0470: MOVWF 39
0471: CALL 1D4
0472: MOVLW 10
0473: SUBWF 28,W
0474: BTFSS 03.2
0475: GOTO 46C
.................... printf(lcd_putc," rozsah 10k \n\r");
0476: CLRF 27
0477: MOVF 27,W
0478: CALL 070
0479: INCF 27,F
047A: MOVWF 77
047B: MOVWF 39
047C: CALL 1D4
047D: MOVLW 10
047E: SUBWF 27,W
047F: BTFSS 03.2
0480: GOTO 477
.................... //delay_ms(300);
.................... }
.................... if(!input(LUX4))
0481: BSF 03.5
0482: BSF 06.5
0483: BCF 03.5
0484: BTFSC 06.5
0485: GOTO 4CC
.................... {
.................... printf(lcd_putc," E=%3.1f klx \n",10*E);
0486: CLRF 3C
0487: CLRF 3B
0488: MOVLW 20
0489: MOVWF 3A
048A: MOVLW 82
048B: MOVWF 39
048C: MOVF 26,W
048D: MOVWF 40
048E: MOVF 25,W
048F: MOVWF 3F
0490: MOVF 24,W
0491: MOVWF 3E
0492: MOVF 23,W
0493: MOVWF 3D
0494: CALL 14E
0495: MOVF 77,W
0496: MOVWF 27
0497: MOVF 78,W
0498: MOVWF 28
0499: MOVF 79,W
049A: MOVWF 29
049B: MOVF 7A,W
049C: MOVWF 2A
049D: CLRF 2B
049E: MOVF 2B,W
049F: CALL 085
04A0: INCF 2B,F
04A1: MOVWF 77
04A2: MOVWF 39
04A3: CALL 1D4
04A4: MOVLW 04
04A5: SUBWF 2B,W
04A6: BTFSS 03.2
04A7: GOTO 49E
04A8: MOVLW 02
04A9: MOVWF 04
04AA: MOVF 2A,W
04AB: MOVWF 2F
04AC: MOVF 29,W
04AD: MOVWF 2E
04AE: MOVF 28,W
04AF: MOVWF 2D
04B0: MOVF 27,W
04B1: MOVWF 2C
04B2: MOVLW 01
04B3: MOVWF 30
04B4: CALL 249
04B5: MOVLW 09
04B6: MOVWF 2C
04B7: MOVF 2C,W
04B8: CALL 085
04B9: INCF 2C,F
04BA: MOVWF 77
04BB: MOVWF 39
04BC: CALL 1D4
04BD: MOVLW 10
04BE: SUBWF 2C,W
04BF: BTFSS 03.2
04C0: GOTO 4B7
.................... printf(lcd_putc," rozsah 100k \n\r");
04C1: CLRF 27
04C2: MOVF 27,W
04C3: CALL 09A
04C4: INCF 27,F
04C5: MOVWF 77
04C6: MOVWF 39
04C7: CALL 1D4
04C8: MOVLW 10
04C9: SUBWF 27,W
04CA: BTFSS 03.2
04CB: GOTO 4C2
.................... //delay_ms(300);
.................... }
.................... delay_ms(300);
04CC: MOVLW 02
04CD: MOVWF 27
04CE: MOVLW 96
04CF: MOVWF 3A
04D0: CALL 0AF
04D1: DECFSZ 27,F
04D2: GOTO 4CE
.................... while(!input(HOLD)); //podrení hodnoty
04D3: BSF 03.5
04D4: BSF 06.6
04D5: BCF 03.5
04D6: BTFSS 06.6
04D7: GOTO 4D3
.................... }
04D8: GOTO 38B
.................... }
04D9: SLEEP
Configuration Fuses:
Word 1: 3F39 XT NOWDT NOPUT NODEBUG NOPROTECT NOBROWNOUT NOLVP NOCPD NOWRT