CCS PCM C Compiler, Version 4.059d, 15399 02-I-08 17:54Filename: main.lstROM used: 1318 words (64%)Largest free fragment is 730RAM used: 15 (4%) at main() level40 (11%) worst caseStack: 5 locations*0000: MOVLW 000001: MOVWF 0A0002: GOTO 36E0003: NOP.................... #include "C:\RS\Lux10b\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)*00ED: MOVLW 3600EE: MOVWF 0400EF: BCF 03.700F0: MOVF 00,W00F1: BTFSC 03.200F2: GOTO 10400F3: MOVLW 0100F4: MOVWF 7800F5: MOVLW BF00F6: MOVWF 7700F7: CLRWDT00F8: DECFSZ 77,F00F9: GOTO 0F700FA: DECFSZ 78,F00FB: GOTO 0F500FC: MOVLW 4A00FD: MOVWF 7700FE: DECFSZ 77,F00FF: GOTO 0FE0100: NOP0101: CLRWDT0102: DECFSZ 00,F0103: GOTO 0F30104: 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 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 zachovej0105: MOVF 07,W0106: ANDLW 0F0107: MOVWF 3D0108: SWAPF 3C,W0109: MOVWF 77010A: MOVLW F0010B: ANDWF 77,F010C: MOVF 77,W010D: ANDLW F0010E: IORWF 3D,W010F: 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 hrana0110: BSF 06.00111: BSF 03.50112: BCF 06.0.................... delay_us(1); // pockej alespon 450ns od e nebo alespon 195ns od dat0113: CLRWDT.................... output_bit(LCD_E,0); // sestupna hrana (minimalni perioda e je 1us)0114: BCF 03.50115: BCF 06.00116: BSF 03.50117: BCF 06.0.................... }0118: BCF 03.50119: 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 registr011A: MOVF 3A,F011B: BTFSS 03.2011C: GOTO 11F011D: BCF 06.1011E: GOTO 120011F: BSF 06.10120: BSF 03.50121: BCF 06.1.................... swap(n);0122: BCF 03.50123: SWAPF 3B,F.................... lcd_send_nibble(n); // posli horni pulku bajtu0124: MOVF 3B,W0125: MOVWF 3C0126: CALL 105.................... swap(n);0127: SWAPF 3B,F.................... lcd_send_nibble(n); // posli spodni pulku bajtu0128: MOVF 3B,W0129: MOVWF 3C012A: CALL 105.................... delay_us(40); // minimalni doba na provedeni prikazu012B: CLRWDT012C: MOVLW 0C012D: MOVWF 77012E: DECFSZ 77,F012F: GOTO 12E0130: GOTO 131.................... }0131: 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 napajeni0132: MOVLW 140133: MOVWF 360134: CALL 0ED........................................ #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 LCD0135: MOVLW 0F0136: BSF 03.50137: ANDWF 07,F.................... #endif........................................ output_bit(LCD_RS,0); // nastav jako vystup a nastav klidovy stav0138: BCF 03.50139: BCF 06.1013A: BSF 03.5013B: BCF 06.1.................... output_bit(LCD_E, 0); // nastav jako vystup a nastav klidovy stav013C: BCF 03.5013D: BCF 06.0013E: BSF 03.5013F: BCF 06.0........................................ for (i=0; i<3; i++) // nastav lcd do rezimu 8 bitu sbernice0140: BCF 03.50141: CLRF 270142: MOVF 27,W0143: SUBLW 020144: BTFSS 03.00145: GOTO 14E.................... {.................... delay_ms(2); // muze byt rozdelany prenos dat (2x 4 bity) nebo pomaly povel0146: MOVLW 020147: MOVWF 360148: CALL 0ED.................... lcd_send_nibble(3); // rezim 8 bitu0149: MOVLW 03014A: MOVWF 3C014B: CALL 105.................... }014C: INCF 27,F014D: GOTO 142........................................ delay_us(40); // cas na zpracovani014E: CLRWDT014F: MOVLW 0C0150: MOVWF 770151: DECFSZ 77,F0152: GOTO 1510153: GOTO 154.................... lcd_send_nibble(2); // nastav rezim 4 bitu (plati od nasledujiciho prenosu)0154: MOVLW 020155: MOVWF 3C0156: CALL 105.................... delay_us(40); // cas na zpracovani0157: CLRWDT0158: MOVLW 0C0159: MOVWF 77015A: DECFSZ 77,F015B: GOTO 15A015C: GOTO 15D........................................ for (i=0;i<3;i++) // proved inicializaci (nastaveni modu, smazani apod)015D: CLRF 27015E: MOVF 27,W015F: SUBLW 020160: BTFSS 03.00161: GOTO 16E.................... {.................... lcd_send_byte(0,LCD_INIT_STRING[i]);0162: MOVF 27,W0163: CALL 0040164: MOVWF 280165: CLRF 3A0166: MOVF 28,W0167: MOVWF 3B0168: CALL 11A.................... delay_ms(2);0169: MOVLW 02016A: MOVWF 36016B: CALL 0ED.................... }016C: INCF 27,F016D: GOTO 15E.................... }016E: GOTO 3C8 (RETURN)............................................................ // Proved presun kurzoru.................... //.................... // Pozice 1.1 je domu.................... //.................... void lcd_gotoxy( BYTE x, BYTE y).................... {........................................ BYTE Adr;........................................ Adr=x-1;*0201: MOVLW 010202: SUBWF 36,W0203: MOVWF 38.................... if(y==2)0204: MOVF 37,W0205: SUBLW 020206: BTFSS 03.20207: GOTO 20A.................... Adr+=LCD_LINE_2;0208: MOVLW 400209: ADDWF 38,F........................................ lcd_send_byte(0,0x80|Adr);020A: MOVF 38,W020B: IORLW 80020C: MOVWF 39020D: CLRF 3A020E: MOVF 39,W020F: MOVWF 3B0210: CALL 11A.................... }0211: RETLW 00............................................................ // Zapis znaku na displej, zpracovani ridicich znaku.................... //.................... void lcd_putc( char c).................... {........................................ switch (c).................... {0212: MOVF 35,W0213: XORLW 0C0214: BTFSC 03.20215: GOTO 2200216: XORLW 060217: BTFSC 03.20218: GOTO 2280219: XORLW 07021A: BTFSC 03.2021B: GOTO 22E021C: XORLW 05021D: BTFSC 03.2021E: GOTO 233021F: GOTO 238.................... case '\f' : lcd_send_byte(0,1); // smaz displej0220: CLRF 3A0221: MOVLW 010222: MOVWF 3B0223: CALL 11A.................... delay_ms(2);0224: MOVLW 020225: MOVWF 360226: CALL 0ED.................... break;0227: GOTO 244.................... case '\n' : lcd_gotoxy(1,2); break; // presun se na 1. znak 2. radky0228: MOVLW 010229: MOVWF 36022A: MOVLW 02022B: MOVWF 37022C: CALL 201022D: GOTO 244.................... case '\r' : lcd_gotoxy(1,1); break; // presun home022E: MOVLW 01022F: MOVWF 360230: MOVWF 370231: CALL 2010232: GOTO 244.................... case '\b' : lcd_send_byte(0,0x10); break; // posun kurzor o 1 zpet0233: CLRF 3A0234: MOVLW 100235: MOVWF 3B0236: CALL 11A0237: GOTO 244.................... default : if (c<0x20) c&=0x7; // preklopeni definovatelnych znaku na rozsah 0 az 0x1F0238: MOVF 35,W0239: SUBLW 1F023A: BTFSS 03.0023B: GOTO 23E023C: MOVLW 07023D: ANDWF 35,F.................... lcd_send_byte(1,c); break; // zapis znak023E: MOVLW 01023F: MOVWF 3A0240: MOVF 35,W0241: MOVWF 3B0242: CALL 11A0243: GOTO 244.................... }.................... }0244: 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().................... {*036E: CLRF 04036F: BCF 03.70370: MOVLW 1F0371: ANDWF 03,F0372: BSF 03.50373: BSF 1F.00374: BSF 1F.10375: BSF 1F.20376: BCF 1F.30377: MOVLW 070378: MOVWF 1C.................... unsigned int16 I;.................... float E;........................................ setup_adc_ports(AN0);*037C: BSF 03.5037D: BCF 1F.0037E: BSF 1F.1037F: BSF 1F.20380: BSF 1F.3.................... setup_adc(ADC_CLOCK_DIV_32);0381: BCF 1F.60382: BCF 03.50383: BCF 1F.60384: BSF 1F.70385: BSF 03.50386: BSF 1F.70387: BCF 03.50388: BSF 1F.0.................... setup_psp(PSP_DISABLED);0389: BSF 03.5038A: BCF 09.4.................... setup_spi(SPI_SS_DISABLED);*0379: MOVLW FF037A: BCF 03.5037B: MOVWF 20*038B: BCF 03.5038C: BCF 14.5038D: BCF 20.5038E: MOVF 20,W038F: BSF 03.50390: MOVWF 070391: BCF 03.50392: BSF 20.40393: MOVF 20,W0394: BSF 03.50395: MOVWF 070396: BCF 03.50397: BCF 20.30398: MOVF 20,W0399: BSF 03.5039A: MOVWF 07039B: MOVLW 01039C: BCF 03.5039D: MOVWF 14039E: MOVLW 00039F: BSF 03.503A0: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);03A1: MOVF 01,W03A2: ANDLW C703A3: IORLW 0803A4: MOVWF 01.................... setup_timer_1(T1_DISABLED);03A5: BCF 03.503A6: CLRF 10.................... setup_timer_2(T2_DISABLED,0,1);03A7: MOVLW 0003A8: MOVWF 7803A9: MOVWF 1203AA: MOVLW 0003AB: BSF 03.503AC: MOVWF 12.................... setup_comparator(NC_NC_NC_NC);03AD: MOVLW 0703AE: MOVWF 1C03AF: MOVF 05,W03B0: CLRWDT03B1: MOVLW 0203B2: MOVWF 7703B3: DECFSZ 77,F03B4: GOTO 3B303B5: GOTO 3B603B6: MOVF 1C,W03B7: BCF 03.503B8: BCF 0D.6.................... setup_vref(FALSE);03B9: BSF 03.503BA: CLRF 1D........................................ set_adc_channel (IN);03BB: MOVLW 0003BC: MOVWF 7803BD: BCF 03.503BE: MOVF 1F,W03BF: ANDLW C703C0: IORWF 78,W03C1: MOVWF 1F.................... delay_us(20);03C2: CLRWDT03C3: MOVLW 0603C4: MOVWF 7703C5: DECFSZ 77,F03C6: GOTO 3C5.................... lcd_init();03C7: GOTO 132........................................ while(TRUE).................... {........................................ I=read_adc();03C8: BSF 1F.203C9: BTFSC 1F.203CA: GOTO 3C903CB: BSF 03.503CC: MOVF 1E,W03CD: BCF 03.503CE: MOVWF 2103CF: MOVF 1E,W03D0: MOVWF 22.................... delay_us(600);03D1: CLRWDT03D2: MOVLW C703D3: MOVWF 7703D4: DECFSZ 77,F03D5: GOTO 3D403D6: NOP.................... E=0.0577*I;03D7: MOVF 22,W03D8: MOVWF 2803D9: MOVF 21,W03DA: MOVWF 2703DB: GOTO 16F03DC: MOVLW D603DD: MOVWF 3803DE: MOVLW 5603DF: MOVWF 3703E0: MOVLW 6C03E1: MOVWF 3603E2: MOVLW 7A03E3: MOVWF 3503E4: MOVF 7A,W03E5: MOVWF 3C03E6: MOVF 79,W03E7: MOVWF 3B03E8: MOVF 78,W03E9: MOVWF 3A03EA: MOVF 77,W03EB: MOVWF 3903EC: CALL 18C03ED: MOVF 7A,W03EE: MOVWF 2603EF: MOVF 79,W03F0: MOVWF 2503F1: MOVF 78,W03F2: MOVWF 2403F3: MOVF 77,W03F4: MOVWF 23........................................ printf(lcd_putc," E=%2.2f lx \n",E);03F5: CLRF 2703F6: MOVF 27,W03F7: CALL 00C03F8: INCF 27,F03F9: MOVWF 7703FA: MOVWF 3503FB: CALL 21203FC: MOVLW 0403FD: SUBWF 27,W03FE: BTFSS 03.203FF: GOTO 3F60400: MOVLW 890401: MOVWF 040402: MOVF 26,W0403: MOVWF 2B0404: MOVF 25,W0405: MOVWF 2A0406: MOVF 24,W0407: MOVWF 290408: MOVF 23,W0409: MOVWF 28040A: MOVLW 02040B: MOVWF 2C040C: GOTO 287040D: MOVLW 09040E: MOVWF 28040F: MOVF 28,W0410: CALL 00C0411: INCF 28,F0412: MOVWF 770413: MOVWF 350414: CALL 2120415: MOVLW 160416: SUBWF 28,W0417: BTFSS 03.20418: GOTO 40F.................... if(I<=128)0419: MOVF 22,F041A: BTFSS 03.2041B: GOTO 42B041C: MOVF 21,W041D: SUBLW 80041E: BTFSS 03.0041F: GOTO 42B.................... printf(lcd_putc,"** \r");0420: CLRF 270421: MOVF 27,W0422: CALL 0270423: INCF 27,F0424: MOVWF 770425: MOVWF 350426: CALL 2120427: MOVLW 110428: SUBWF 27,W0429: BTFSS 03.2042A: GOTO 421.................... if(I>128&&I<=256)042B: MOVF 22,F042C: BTFSS 03.2042D: GOTO 432042E: MOVF 21,W042F: SUBLW 800430: BTFSC 03.00431: GOTO 4470432: MOVF 22,W0433: SUBLW 010434: BTFSS 03.00435: GOTO 4470436: BTFSS 03.20437: GOTO 43C0438: MOVF 21,W0439: SUBLW 00043A: BTFSS 03.0043B: GOTO 447.................... printf(lcd_putc,"**** \r");043C: CLRF 27043D: MOVF 27,W043E: CALL 03D043F: INCF 27,F0440: MOVWF 770441: MOVWF 350442: CALL 2120443: MOVLW 110444: SUBWF 27,W0445: BTFSS 03.20446: GOTO 43D.................... if(I>256&&I<=384)0447: MOVF 22,W0448: SUBLW 000449: BTFSC 03.0044A: GOTO 467044B: XORLW FF044C: BTFSS 03.2044D: GOTO 452044E: MOVF 21,W044F: SUBLW 000450: BTFSC 03.00451: GOTO 4670452: MOVF 22,W0453: SUBLW 010454: BTFSS 03.00455: GOTO 4670456: BTFSS 03.20457: GOTO 45C0458: MOVF 21,W0459: SUBLW 80045A: BTFSS 03.0045B: GOTO 467.................... printf(lcd_putc,"****** \r");045C: CLRF 27045D: MOVF 27,W045E: CALL 053045F: INCF 27,F0460: MOVWF 770461: MOVWF 350462: CALL 2120463: MOVLW 110464: SUBWF 27,W0465: BTFSS 03.20466: GOTO 45D.................... if(I>384&&I<=512)0467: MOVF 22,W0468: SUBLW 000469: BTFSC 03.0046A: GOTO 487046B: XORLW FF046C: BTFSS 03.2046D: GOTO 472046E: MOVF 21,W046F: SUBLW 800470: BTFSC 03.00471: GOTO 4870472: MOVF 22,W0473: SUBLW 020474: BTFSS 03.00475: GOTO 4870476: BTFSS 03.20477: GOTO 47C0478: MOVF 21,W0479: SUBLW 00047A: BTFSS 03.0047B: GOTO 487.................... printf(lcd_putc,"******** \r");047C: CLRF 27047D: MOVF 27,W047E: CALL 069047F: INCF 27,F0480: MOVWF 770481: MOVWF 350482: CALL 2120483: MOVLW 110484: SUBWF 27,W0485: BTFSS 03.20486: GOTO 47D.................... if(I>512&&I<=640)0487: MOVF 22,W0488: SUBLW 010489: BTFSC 03.0048A: GOTO 4A7048B: XORLW FF048C: BTFSS 03.2048D: GOTO 492048E: MOVF 21,W048F: SUBLW 000490: BTFSC 03.00491: GOTO 4A70492: MOVF 22,W0493: SUBLW 020494: BTFSS 03.00495: GOTO 4A70496: BTFSS 03.20497: GOTO 49C0498: MOVF 21,W0499: SUBLW 80049A: BTFSS 03.0049B: GOTO 4A7.................... printf(lcd_putc,"********** \r");049C: CLRF 27049D: MOVF 27,W049E: CALL 07F049F: INCF 27,F04A0: MOVWF 7704A1: MOVWF 3504A2: CALL 21204A3: MOVLW 1104A4: SUBWF 27,W04A5: BTFSS 03.204A6: GOTO 49D.................... if(I>640&&I<=768)04A7: MOVF 22,W04A8: SUBLW 0104A9: BTFSC 03.004AA: GOTO 4C704AB: XORLW FF04AC: BTFSS 03.204AD: GOTO 4B204AE: MOVF 21,W04AF: SUBLW 8004B0: BTFSC 03.004B1: GOTO 4C704B2: MOVF 22,W04B3: SUBLW 0304B4: BTFSS 03.004B5: GOTO 4C704B6: BTFSS 03.204B7: GOTO 4BC04B8: MOVF 21,W04B9: SUBLW 0004BA: BTFSS 03.004BB: GOTO 4C7.................... printf(lcd_putc,"************ \r");04BC: CLRF 2704BD: MOVF 27,W04BE: CALL 09504BF: INCF 27,F04C0: MOVWF 7704C1: MOVWF 3504C2: CALL 21204C3: MOVLW 1104C4: SUBWF 27,W04C5: BTFSS 03.204C6: GOTO 4BD.................... if(I>768&&I<=896)04C7: MOVF 22,W04C8: SUBLW 0204C9: BTFSC 03.004CA: GOTO 4E704CB: XORLW FF04CC: BTFSS 03.204CD: GOTO 4D204CE: MOVF 21,W04CF: SUBLW 0004D0: BTFSC 03.004D1: GOTO 4E704D2: MOVF 22,W04D3: SUBLW 0304D4: BTFSS 03.004D5: GOTO 4E704D6: BTFSS 03.204D7: GOTO 4DC04D8: MOVF 21,W04D9: SUBLW 8004DA: BTFSS 03.004DB: GOTO 4E7.................... printf(lcd_putc,"************** \r");04DC: CLRF 2704DD: MOVF 27,W04DE: CALL 0AB04DF: INCF 27,F04E0: MOVWF 7704E1: MOVWF 3504E2: CALL 21204E3: MOVLW 1104E4: SUBWF 27,W04E5: BTFSS 03.204E6: GOTO 4DD.................... if(I>896&&I<=1016)04E7: MOVF 22,W04E8: SUBLW 0204E9: BTFSC 03.004EA: GOTO 50704EB: XORLW FF04EC: BTFSS 03.204ED: GOTO 4F204EE: MOVF 21,W04EF: SUBLW 8004F0: BTFSC 03.004F1: GOTO 50704F2: MOVF 22,W04F3: SUBLW 0304F4: BTFSS 03.004F5: GOTO 50704F6: BTFSS 03.204F7: GOTO 4FC04F8: MOVF 21,W04F9: SUBLW F804FA: BTFSS 03.004FB: GOTO 507.................... printf(lcd_putc,"****************\r");04FC: CLRF 2704FD: MOVF 27,W04FE: CALL 0C104FF: INCF 27,F0500: MOVWF 770501: MOVWF 350502: CALL 2120503: MOVLW 110504: SUBWF 27,W0505: BTFSS 03.20506: GOTO 4FD.................... if(I>1016)0507: MOVF 22,W0508: SUBLW 020509: BTFSC 03.0050A: GOTO 51D050B: XORLW FF050C: BTFSS 03.2050D: GOTO 512050E: MOVF 21,W050F: SUBLW F80510: BTFSC 03.00511: GOTO 51D.................... printf(lcd_putc," *** high *** \r");0512: CLRF 270513: MOVF 27,W0514: CALL 0D70515: INCF 27,F0516: MOVWF 770517: MOVWF 350518: CALL 2120519: MOVLW 11051A: SUBWF 27,W051B: BTFSS 03.2051C: GOTO 513........................................ delay_ms(600);051D: MOVLW 03051E: MOVWF 27051F: MOVLW C80520: MOVWF 360521: CALL 0ED0522: DECFSZ 27,F0523: GOTO 51F.................... }0524: GOTO 3C8.................... }0525: SLEEPConfiguration Fuses:Word 1: 3F39 XT NOWDT NOPUT NODEBUG NOPROTECT NOBROWNOUT NOLVP NOCPD NOWRT