CCS PCM C Compiler, Version 4.059d, 15399 13-II-07 23:16Filename: main.lstROM used: 1704 words (83%)Largest free fragment is 344RAM used: 32 (9%) at main() level58 (16%) worst caseStack: 5 locations*0000: MOVLW 000001: MOVWF 0A0002: GOTO 59C0003: NOP.................... #include "C:\Rs\zdrojáky\projekt\Posledni\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 WRT_50% //Lower half of Program Memory is Write Protected........................................ #use delay(clock=4000000,RESTART_WDT)*008B: MOVLW 48008C: MOVWF 04008D: BCF 03.7008E: MOVF 00,W008F: BTFSC 03.20090: GOTO 0A20091: MOVLW 010092: MOVWF 780093: MOVLW BF0094: MOVWF 770095: CLRWDT0096: DECFSZ 77,F0097: GOTO 0950098: DECFSZ 78,F0099: GOTO 093009A: MOVLW 4A009B: MOVWF 77009C: DECFSZ 77,F009D: GOTO 09C009E: NOP009F: CLRWDT00A0: DECFSZ 00,F00A1: GOTO 09100A2: RETLW 00................................................................................ #define LCD_RS PIN_C7 // rizeni registru LCD displeje <lcd.c>.................... #define LCD_E PIN_B7 // enable LCD displeje <lcd.c>.................... #define LCD_D0 PIN_B3 // data LCD <lcd.c>.................... #define LCD_D1 PIN_B2.................... #define LCD_D2 PIN_B1.................... #define LCD_D3 PIN_B0........................................ #include "LCD.C" //pro LCD.................... // 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.................... #else.................... // data jsou na libovolnych 4 bitech libovolnych portu.................... output_bit(LCD_D0,bit_test(n,0));*01FA: BTFSC 4E.001FB: GOTO 1FE01FC: BCF 06.301FD: GOTO 1FF01FE: BSF 06.301FF: BSF 03.50200: BCF 06.3.................... output_bit(LCD_D1,bit_test(n,1));0201: BCF 03.50202: BTFSC 4E.10203: GOTO 2060204: BCF 06.20205: GOTO 2070206: BSF 06.20207: BSF 03.50208: BCF 06.2.................... output_bit(LCD_D2,bit_test(n,2));0209: BCF 03.5020A: BTFSC 4E.2020B: GOTO 20E020C: BCF 06.1020D: GOTO 20F020E: BSF 06.1020F: BSF 03.50210: BCF 06.1.................... output_bit(LCD_D3,bit_test(n,3));0211: BCF 03.50212: BTFSC 4E.30213: GOTO 2160214: BCF 06.00215: GOTO 2170216: BSF 06.00217: BSF 03.50218: BCF 06.0.................... #endif.................... output_bit(LCD_E,1); // vzestupna hrana0219: BCF 03.5021A: BSF 06.7021B: BSF 03.5021C: BCF 06.7.................... delay_us(1); // pockej alespon 450ns od e nebo alespon 195ns od dat021D: CLRWDT.................... output_bit(LCD_E,0); // sestupna hrana (minimalni perioda e je 1us)021E: BCF 03.5021F: BCF 06.70220: BSF 03.50221: BCF 06.7.................... }0222: BCF 03.50223: 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 registr0224: MOVF 4C,F0225: BTFSS 03.20226: GOTO 2290227: BCF 07.70228: GOTO 22A0229: BSF 07.7022A: BCF 20.7022B: MOVF 20,W022C: BSF 03.5022D: MOVWF 07*05A7: MOVLW FF05A8: BCF 03.505A9: MOVWF 20.................... swap(n);*022E: BCF 03.5022F: SWAPF 4D,F.................... lcd_send_nibble(n); // posli horni pulku bajtu0230: MOVF 4D,W0231: MOVWF 4E0232: CALL 1FA.................... swap(n);0233: SWAPF 4D,F.................... lcd_send_nibble(n); // posli spodni pulku bajtu0234: MOVF 4D,W0235: MOVWF 4E0236: CALL 1FA.................... delay_us(40); // minimalni doba na provedeni prikazu0237: CLRWDT0238: MOVLW 0C0239: MOVWF 77023A: DECFSZ 77,F023B: GOTO 23A023C: GOTO 23D.................... }023D: 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 napajeni023E: MOVLW 14023F: MOVWF 480240: CALL 08B........................................ #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.................... #endif........................................ output_bit(LCD_RS,0); // nastav jako vystup a nastav klidovy stav0241: BCF 07.70242: BCF 20.70243: MOVF 20,W0244: BSF 03.50245: MOVWF 07.................... output_bit(LCD_E, 0); // nastav jako vystup a nastav klidovy stav0246: BCF 03.50247: BCF 06.70248: BSF 03.50249: BCF 06.7........................................ for (i=0; i<3; i++) // nastav lcd do rezimu 8 bitu sbernice024A: BCF 03.5024B: CLRF 2D024C: MOVF 2D,W024D: SUBLW 02024E: BTFSS 03.0024F: GOTO 258.................... {.................... delay_ms(2); // muze byt rozdelany prenos dat (2x 4 bity) nebo pomaly povel0250: MOVLW 020251: MOVWF 480252: CALL 08B.................... lcd_send_nibble(3); // rezim 8 bitu0253: MOVLW 030254: MOVWF 4E0255: CALL 1FA.................... }0256: INCF 2D,F0257: GOTO 24C........................................ delay_us(40); // cas na zpracovani0258: CLRWDT0259: MOVLW 0C025A: MOVWF 77025B: DECFSZ 77,F025C: GOTO 25B025D: GOTO 25E.................... lcd_send_nibble(2); // nastav rezim 4 bitu (plati od nasledujiciho prenosu)025E: MOVLW 02025F: MOVWF 4E0260: CALL 1FA.................... delay_us(40); // cas na zpracovani0261: CLRWDT0262: MOVLW 0C0263: MOVWF 770264: DECFSZ 77,F0265: GOTO 2640266: GOTO 267........................................ for (i=0;i<3;i++) // proved inicializaci (nastaveni modu, smazani apod)0267: CLRF 2D0268: MOVF 2D,W0269: SUBLW 02026A: BTFSS 03.0026B: GOTO 278.................... {.................... lcd_send_byte(0,LCD_INIT_STRING[i]);026C: MOVF 2D,W026D: CALL 004026E: MOVWF 2E026F: CLRF 4C0270: MOVF 2E,W0271: MOVWF 4D0272: CALL 224.................... delay_ms(2);0273: MOVLW 020274: MOVWF 480275: CALL 08B.................... }0276: INCF 2D,F0277: GOTO 268.................... }0278: GOTO 610 (RETURN)............................................................ // Proved presun kurzoru.................... //.................... // Pozice 1.1 je domu.................... //.................... void lcd_gotoxy( BYTE x, BYTE y).................... {........................................ BYTE Adr;........................................ Adr=x-1;0279: MOVLW 01027A: SUBWF 48,W027B: MOVWF 4A.................... if(y==2)027C: MOVF 49,W027D: SUBLW 02027E: BTFSS 03.2027F: GOTO 282.................... Adr+=LCD_LINE_2;0280: MOVLW 400281: ADDWF 4A,F........................................ lcd_send_byte(0,0x80|Adr);0282: MOVF 4A,W0283: IORLW 800284: MOVWF 4B0285: CLRF 4C0286: MOVF 4B,W0287: MOVWF 4D0288: CALL 224.................... }0289: RETLW 00............................................................ // Zapis znaku na displej, zpracovani ridicich znaku.................... //.................... void lcd_putc( char c).................... {........................................ switch (c).................... {028A: MOVF 47,W028B: XORLW 0C028C: BTFSC 03.2028D: GOTO 298028E: XORLW 06028F: BTFSC 03.20290: GOTO 2A00291: XORLW 070292: BTFSC 03.20293: GOTO 2A60294: XORLW 050295: BTFSC 03.20296: GOTO 2AB0297: GOTO 2B0.................... case '\f' : lcd_send_byte(0,1); // smaz displej0298: CLRF 4C0299: MOVLW 01029A: MOVWF 4D029B: CALL 224.................... delay_ms(2);029C: MOVLW 02029D: MOVWF 48029E: CALL 08B.................... break;029F: GOTO 2BC.................... case '\n' : lcd_gotoxy(1,2); break; // presun se na 1. znak 2. radky02A0: MOVLW 0102A1: MOVWF 4802A2: MOVLW 0202A3: MOVWF 4902A4: CALL 27902A5: GOTO 2BC.................... case '\r' : lcd_gotoxy(1,1); break; // presun home02A6: MOVLW 0102A7: MOVWF 4802A8: MOVWF 4902A9: CALL 27902AA: GOTO 2BC.................... case '\b' : lcd_send_byte(0,0x10); break; // posun kurzor o 1 zpet02AB: CLRF 4C02AC: MOVLW 1002AD: MOVWF 4D02AE: CALL 22402AF: GOTO 2BC.................... default : if (c<0x20) c&=0x7; // preklopeni definovatelnych znaku na rozsah 0 az 0x1F02B0: MOVF 47,W02B1: SUBLW 1F02B2: BTFSS 03.002B3: GOTO 2B602B4: MOVLW 0702B5: ANDWF 47,F.................... lcd_send_byte(1,c); break; // zapis znak02B6: MOVLW 0102B7: MOVWF 4C02B8: MOVF 47,W02B9: MOVWF 4D02BA: CALL 22402BB: GOTO 2BC.................... }.................... }02BC: 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);.................... //}............................................................ #include "1wire.c" //pro mìøení teploty.................... #define ONE_WIRE_PIN PIN_A1........................................ void onewire_reset()................................................................................ {.................... output_low(ONE_WIRE_PIN);*0032: BSF 03.50033: BCF 05.10034: BCF 03.50035: BCF 05.1.................... delay_us(500);0036: CLRWDT0037: MOVLW A60038: MOVWF 770039: DECFSZ 77,F003A: GOTO 039.................... output_float(ONE_WIRE_PIN);003B: BSF 03.5003C: BSF 05.1.................... delay_us(500);003D: CLRWDT003E: MOVLW A6003F: MOVWF 770040: DECFSZ 77,F0041: GOTO 040.................... output_float(ONE_WIRE_PIN);0042: BSF 05.1.................... }0043: BCF 03.50044: RETLW 00............................................................ void onewire_write(int data).................... {.................... int count;........................................ for (count=0; count<8; ++count)0045: CLRF 370046: MOVF 37,W0047: SUBLW 070048: BTFSS 03.00049: GOTO 065.................... {.................... output_low(ONE_WIRE_PIN);004A: BSF 03.5004B: BCF 05.1004C: BCF 03.5004D: BCF 05.1.................... delay_us( 2 );004E: CLRWDT004F: NOP.................... output_bit(ONE_WIRE_PIN, shift_right(&data,1,1));0050: BSF 03.00051: RRF 36,F0052: BTFSC 03.00053: GOTO 0560054: BCF 05.10055: GOTO 0570056: BSF 05.10057: BSF 03.50058: BCF 05.1........................................ delay_us( 60 );0059: CLRWDT005A: MOVLW 13005B: MOVWF 77005C: DECFSZ 77,F005D: GOTO 05C005E: NOP.................... output_float(ONE_WIRE_PIN);005F: BSF 05.1.................... delay_us( 2 );0060: CLRWDT0061: NOP.................... }0062: BCF 03.50063: INCF 37,F0064: GOTO 046.................... }0065: RETLW 00............................................................ int onewire_read().................... {.................... int count, data;........................................ for (count=0; count<8; ++count)0066: CLRF 360067: MOVF 36,W0068: SUBLW 070069: BTFSS 03.0006A: GOTO 088.................... {.................... output_low(ONE_WIRE_PIN);006B: BSF 03.5006C: BCF 05.1006D: BCF 03.5006E: BCF 05.1.................... delay_us( 2 );006F: CLRWDT0070: NOP.................... output_float(ONE_WIRE_PIN);0071: BSF 03.50072: BSF 05.1.................... delay_us( 8 );0073: CLRWDT0074: MOVLW 020075: MOVWF 770076: DECFSZ 77,F0077: GOTO 076.................... shift_right(&data,1,input(ONE_WIRE_PIN));0078: BSF 05.10079: BCF 03.5007A: BTFSC 05.1007B: GOTO 07E007C: BCF 03.0007D: GOTO 07F007E: BSF 03.0007F: RRF 37,F.................... delay_us( 120 );0080: CLRWDT0081: MOVLW 270082: MOVWF 770083: DECFSZ 77,F0084: GOTO 0830085: NOP.................... }0086: INCF 36,F0087: GOTO 067........................................ return( data );0088: MOVF 37,W0089: MOVWF 78.................... }008A: RETLW 00........................................ #include "ds1820.c" //pro mìøení teploty........................................ float ds1820_read().................... {.................... int8 busy=0, temp1, temp2;*00A3: CLRF 2D.................... signed int16 temp3;.................... float result;........................................ onewire_reset();00A4: CALL 032.................... onewire_write(0xCC);00A5: MOVLW CC00A6: MOVWF 3600A7: CALL 045.................... onewire_write(0x44);00A8: MOVLW 4400A9: MOVWF 3600AA: CALL 045........................................ while (busy == 0).................... busy = onewire_read();00AB: MOVF 2D,F00AC: BTFSS 03.200AD: GOTO 0B200AE: CALL 06600AF: MOVF 78,W00B0: MOVWF 2D00B1: GOTO 0AB........................................ onewire_reset();00B2: CALL 032.................... onewire_write(0xCC);00B3: MOVLW CC00B4: MOVWF 3600B5: CALL 045.................... onewire_write(0xBE);00B6: MOVLW BE00B7: MOVWF 3600B8: CALL 045.................... temp1 = onewire_read();00B9: CALL 06600BA: MOVF 78,W00BB: MOVWF 2E.................... temp2 = onewire_read();00BC: CALL 06600BD: MOVF 78,W00BE: MOVWF 2F.................... temp3 = make16(temp2, temp1);00BF: MOVF 2F,W00C0: MOVWF 3100C1: MOVF 2E,W00C2: MOVWF 30........................................ result = (float) temp3 / 16.0; //calculation pro DS18B20 with 0.1 deg C00C3: MOVF 31,W00C4: MOVWF 3700C5: MOVF 30,W00C6: MOVWF 36*00EB: MOVF 77,W00EC: MOVWF 3600ED: MOVF 78,W00EE: MOVWF 3700EF: MOVF 79,W00F0: MOVWF 3800F1: MOVF 7A,W00F2: MOVWF 3900F3: MOVF 39,W00F4: MOVWF 3D00F5: MOVF 38,W00F6: MOVWF 3C00F7: MOVF 37,W00F8: MOVWF 3B00F9: MOVF 36,W00FA: MOVWF 3A00FB: CLRF 4100FC: CLRF 4000FD: CLRF 3F00FE: MOVLW 8300FF: MOVWF 3E*01C9: MOVF 7A,W01CA: MOVWF 3501CB: MOVF 79,W01CC: MOVWF 3401CD: MOVF 78,W01CE: MOVWF 3301CF: MOVF 77,W01D0: MOVWF 32............................................................ delay_ms(200);01D1: MOVLW C801D2: MOVWF 4801D3: CALL 08B.................... return(result);01D4: MOVF 32,W01D5: MOVWF 7701D6: MOVF 33,W01D7: MOVWF 7801D8: MOVF 34,W01D9: MOVWF 7901DA: MOVF 35,W01DB: MOVWF 7A........................................ }01DC: GOTO 5EB (RETURN)............................................................ void main().................... {*059C: CLRF 04059D: BCF 03.7059E: MOVLW 1F059F: ANDWF 03,F05A0: BSF 03.505A1: BSF 1F.005A2: BSF 1F.105A3: BSF 1F.205A4: BCF 1F.305A5: MOVLW 0705A6: MOVWF 1C........................................ double t; // promena pro hodnotu z A/D pro tlak.................... double a; // konstanta pro vypocet tlaku........................................ float temperature; //pro mìøení teploty........................................ setup_adc_ports(AN0);*05AA: BSF 03.505AB: BCF 1F.005AC: BSF 1F.105AD: BSF 1F.205AE: BSF 1F.3.................... setup_adc(ADC_CLOCK_INTERNAL);05AF: BCF 1F.605B0: BCF 03.505B1: BSF 1F.605B2: BSF 1F.705B3: BSF 03.505B4: BSF 1F.705B5: BCF 03.505B6: BSF 1F.0.................... setup_psp(PSP_DISABLED);05B7: BSF 03.505B8: BCF 09.4.................... setup_spi(SPI_SS_DISABLED);05B9: BCF 03.505BA: BCF 14.505BB: BCF 20.505BC: MOVF 20,W05BD: BSF 03.505BE: MOVWF 0705BF: BCF 03.505C0: BSF 20.405C1: MOVF 20,W05C2: BSF 03.505C3: MOVWF 0705C4: BCF 03.505C5: BCF 20.305C6: MOVF 20,W05C7: BSF 03.505C8: MOVWF 0705C9: MOVLW 0105CA: BCF 03.505CB: MOVWF 1405CC: MOVLW 0005CD: BSF 03.505CE: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);05CF: MOVF 01,W05D0: ANDLW C705D1: IORLW 0805D2: MOVWF 01.................... setup_timer_1(T1_DISABLED);05D3: BCF 03.505D4: CLRF 10.................... setup_timer_2(T2_DISABLED,0,1);05D5: MOVLW 0005D6: MOVWF 7805D7: MOVWF 1205D8: MOVLW 0005D9: BSF 03.505DA: MOVWF 12.................... setup_comparator(NC_NC_NC_NC);05DB: MOVLW 0705DC: MOVWF 1C05DD: MOVF 05,W05DE: CLRWDT05DF: MOVLW 0205E0: MOVWF 7705E1: DECFSZ 77,F05E2: GOTO 5E105E3: GOTO 5E405E4: MOVF 1C,W05E5: BCF 03.505E6: BCF 0D.6.................... setup_vref(FALSE);05E7: BSF 03.505E8: CLRF 1D........................................ // TODO: USER CODE!!........................................ while(true).................... {.................... temperature = ds1820_read(); //naètení teploty z èidla05E9: BCF 03.505EA: GOTO 0A305EB: MOVF 7A,W05EC: MOVWF 2C05ED: MOVF 79,W05EE: MOVWF 2B05EF: MOVF 78,W05F0: MOVWF 2A05F1: MOVF 77,W05F2: MOVWF 29........................................ a = 0.10850694; //konstantak pro tlak05F3: MOVLW E305F4: MOVWF 2805F5: MOVLW 3805F6: MOVWF 2705F7: MOVLW 5E05F8: MOVWF 2605F9: MOVLW 7B05FA: MOVWF 25.................... t = read_adc(); //za t dosazení hodnoty z a/d pro tlak05FB: BSF 1F.205FC: BTFSC 1F.205FD: GOTO 5FC05FE: MOVF 1E,W05FF: MOVWF 7A0600: BSF 03.50601: MOVF 1E,W0602: BCF 03.50603: MOVWF 2D0604: MOVF 1E,W0605: MOVWF 2E0606: GOTO 1DD0607: MOVF 7A,W0608: MOVWF 240609: MOVF 79,W060A: MOVWF 23060B: MOVF 78,W060C: MOVWF 22060D: MOVF 77,W060E: MOVWF 21................................................................................ lcd_init(); //inicializuje LCD060F: GOTO 23E.................... LCD_gotoxy(1,1); //na LCD 1bunka 1øadek0610: MOVLW 010611: MOVWF 480612: MOVWF 490613: CALL 279.................... printf(lcd_putc,"Temp: %5.3f°C ", temperature); //teplota v °C0614: CLRF 2D0615: MOVF 2D,W0616: CALL 00C0617: INCF 2D,F0618: MOVWF 770619: MOVWF 47061A: CALL 28A061B: MOVLW 06061C: SUBWF 2D,W061D: BTFSS 03.2061E: GOTO 615061F: MOVLW 040620: MOVWF 040621: MOVF 2C,W0622: MOVWF 3D0623: MOVF 2B,W0624: MOVWF 3C0625: MOVF 2A,W0626: MOVWF 3B0627: MOVF 29,W0628: MOVWF 3A0629: MOVLW 03062A: MOVWF 3E062B: CALL 374062C: MOVLW B0062D: MOVWF 47062E: CALL 28A062F: MOVLW 430630: MOVWF 470631: CALL 28A0632: MOVLW 200633: MOVWF 470634: CALL 28A........................................ LCD_gotoxy(1,2); //na LCD 1bunka 2øadek0635: MOVLW 010636: MOVWF 480637: MOVLW 020638: MOVWF 490639: CALL 279.................... printf(lcd_putc,"Tlak: %5.3fkPa", ((t-41)*a)+15 ); //tiska tlaku v kPa063A: BSF 03.1063B: MOVF 24,W063C: MOVWF 38063D: MOVF 23,W063E: MOVWF 37063F: MOVF 22,W0640: MOVWF 360641: MOVF 21,W0642: MOVWF 350643: CLRF 3C0644: CLRF 3B0645: MOVLW 240646: MOVWF 3A0647: MOVLW 840648: MOVWF 390649: CALL 45B064A: MOVF 77,W064B: MOVWF 2D064C: MOVF 78,W064D: MOVWF 2E064E: MOVF 79,W064F: MOVWF 2F0650: MOVF 7A,W0651: MOVWF 300652: MOVWF 4A0653: MOVF 79,W0654: MOVWF 490655: MOVF 78,W0656: MOVWF 480657: MOVF 77,W0658: MOVWF 470659: MOVF 28,W065A: MOVWF 4E065B: MOVF 27,W065C: MOVWF 4D065D: MOVF 26,W065E: MOVWF 4C065F: MOVF 25,W0660: MOVWF 4B0661: CALL 2BD0662: MOVF 77,W0663: MOVWF 310664: MOVF 78,W0665: MOVWF 320666: MOVF 79,W0667: MOVWF 330668: MOVF 7A,W0669: MOVWF 34066A: BCF 03.1066B: MOVF 7A,W066C: MOVWF 38066D: MOVF 79,W066E: MOVWF 37066F: MOVF 78,W0670: MOVWF 360671: MOVF 77,W0672: MOVWF 350673: CLRF 3C0674: CLRF 3B0675: MOVLW 700676: MOVWF 3A0677: MOVLW 820678: MOVWF 390679: CALL 45B067A: MOVF 77,W067B: MOVWF 35067C: MOVF 78,W067D: MOVWF 36067E: MOVF 79,W067F: MOVWF 370680: MOVF 7A,W0681: MOVWF 380682: CLRF 390683: MOVF 39,W0684: CALL 01F0685: INCF 39,F0686: MOVWF 770687: MOVWF 470688: CALL 28A0689: MOVLW 06068A: SUBWF 39,W068B: BTFSS 03.2068C: GOTO 683068D: MOVLW 04068E: MOVWF 04068F: MOVF 38,W0690: MOVWF 3D0691: MOVF 37,W0692: MOVWF 3C0693: MOVF 36,W0694: MOVWF 3B0695: MOVF 35,W0696: MOVWF 3A0697: MOVLW 030698: MOVWF 3E0699: CALL 374069A: MOVLW 6B069B: MOVWF 47069C: CALL 28A069D: MOVLW 50069E: MOVWF 47069F: CALL 28A06A0: MOVLW 6106A1: MOVWF 4706A2: CALL 28A........................................ Delay_ms(100);06A3: MOVLW 6406A4: MOVWF 4806A5: CALL 08B.................... }06A6: GOTO 5EA............................................................ }06A7: SLEEPConfiguration Fuses:Word 1: 3939 XT NOWDT NOPUT NODEBUG NOPROTECT NOBROWNOUT NOLVP NOCPD WRT_50%