CCS PCM C Compiler, Version 4.059d, 15399 04-V-07 12:10Filename: main.lstROM used: 1664 words (81%)Largest free fragment is 384RAM used: 114 (31%) at main() level291 (79%) worst caseStack: 4 locations*0000: MOVLW 000001: MOVWF 0A0002: GOTO 25B0003: NOP.................... #include ".\main.h".................... #include <16F877A.h>.................... //////// Standard Header file for the PIC16F877A device ////////////////.................... #device PIC16F877A.................... #list........................................ #device adc=8........................................ #FUSES WDT //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)*0125: MOVLW 9A0126: MOVWF 040127: BSF 03.70128: MOVF 00,W0129: BTFSC 03.2012A: GOTO 13C012B: MOVLW 01012C: MOVWF 78012D: MOVLW BF012E: MOVWF 77012F: CLRWDT0130: DECFSZ 77,F0131: GOTO 12F0132: DECFSZ 78,F0133: GOTO 12D0134: MOVLW 4A0135: MOVWF 770136: DECFSZ 77,F0137: GOTO 1360138: NOP0139: CLRWDT013A: DECFSZ 00,F013B: GOTO 12B013C: RETLW 00.................... #use rs232(baud=19200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)................................................................................ #define LCD_RS PIN_B1 // rizeni registru LCD displeje.................... #define LCD_E PIN_B0 // enable LCD displeje.................... #define LCD_DATA_LSB PIN_C0 // pripojeni LSB bitu datoveho portu LCD displeje (celkem 4 bity vzestupne za sebou).................... #define zar1 PIN_A3........................................ #include "mylcd.c".................... // LCD modul pro ovladani dvouradkoveho LCD modulu se standardnim Hitachi radicem.................... // (c)miho 2002.................... //.................... // Historie:.................... //.................... // 0.0 Uvodni verze se snadnou definici portu LCD 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_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:.................... //.................... // #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).................................................................................................... // Privatni sekce, cist jen v pripade, ze neco nefunguje.................................................................................................... // 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 dataoveho 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............................................................ // 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 ).................... {.................... *LCD_PORT = (*LCD_PORT & ~LCD_MASK) | ((n << LCD_SHIFT) & LCD_MASK); // nastav datove bity portu a ostatni zachovej013D: MOVF 07,W013E: ANDLW F0013F: BSF 03.50140: BSF 03.60141: MOVWF 210142: MOVF 20,W0143: ANDLW 0F0144: IORWF 21,W0145: BCF 03.50146: BCF 03.60147: MOVWF 07.................... output_bit(LCD_E,1); // vzestupna hrana0148: BSF 06.00149: BSF 03.5014A: BCF 06.0.................... delay_us(100); // pockej alespon 450ns od e nebo alespon 195ns od dat014B: CLRWDT014C: MOVLW 20014D: MOVWF 77014E: DECFSZ 77,F014F: GOTO 14E0150: GOTO 151.................... output_bit(LCD_E,0); // sestupna hrana (minimalni perioda e je 1us)0151: BCF 03.50152: BCF 06.00153: BSF 03.50154: BCF 06.0.................... }0155: BCF 03.50156: 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 registr0157: BSF 03.50158: BSF 03.60159: MOVF 1E,F015A: BTFSS 03.2015B: GOTO 162015C: BCF 03.5015D: BCF 03.6015E: BCF 06.1015F: GOTO 1650160: BSF 03.50161: BSF 03.60162: BCF 03.50163: BCF 03.60164: BSF 06.10165: BSF 03.50166: BCF 06.1.................... swap(n);0167: BSF 03.60168: SWAPF 1F,F.................... lcd_send_nibble(n); // posli horni pulku bajtu0169: MOVF 1F,W016A: MOVWF 20016B: BCF 03.5016C: BCF 03.6016D: CALL 13D.................... swap(n);016E: BSF 03.5016F: BSF 03.60170: SWAPF 1F,F.................... lcd_send_nibble(n); // posli spodni pulku bajtu0171: MOVF 1F,W0172: MOVWF 200173: BCF 03.50174: BCF 03.60175: CALL 13D.................... delay_us(200); // minimalni doba na provedeni prikazu0176: CLRWDT0177: MOVLW 420178: MOVWF 770179: DECFSZ 77,F017A: GOTO 179.................... }017B: 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 napajeni017C: MOVLW 14017D: BSF 03.5017E: BSF 03.6017F: MOVWF 1A0180: BCF 03.50181: BCF 03.60182: CALL 125........................................ *LCD_TRIS = *LCD_TRIS & ~LCD_MASK; // nuluj odpovidajici bity tris registru datoveho portu LCD0183: MOVLW F00184: BSF 03.50185: ANDWF 07,F........................................ output_bit(LCD_RS,0); // nastav jako vystup a nastav klidovy stav0186: BCF 03.50187: BCF 06.10188: BSF 03.50189: BCF 06.1.................... output_bit(LCD_E,0); // nastav jako vystup a nastav klidovy stav018A: BCF 03.5018B: BCF 06.0018C: BSF 03.5018D: BCF 06.0........................................ for (i=0; i<3; i++) // nastav lcd do rezimu 8 bitu sbernice018E: BSF 03.6018F: CLRF 170190: MOVF 17,W0191: SUBLW 020192: BTFSS 03.00193: GOTO 1A4.................... {.................... delay_ms(2); // muze byt rozdelany prenos dat (2x 4 bity) nebo pomaly povel0194: MOVLW 020195: MOVWF 1A0196: BCF 03.50197: BCF 03.60198: CALL 125.................... lcd_send_nibble(3); // rezim 8 bitu0199: MOVLW 03019A: BSF 03.5019B: BSF 03.6019C: MOVWF 20019D: BCF 03.5019E: BCF 03.6019F: CALL 13D.................... }01A0: BSF 03.501A1: BSF 03.601A2: INCF 17,F01A3: GOTO 190........................................ delay_us(40); // cas na zpracovani01A4: CLRWDT01A5: MOVLW 0C01A6: MOVWF 7701A7: DECFSZ 77,F01A8: GOTO 1A701A9: GOTO 1AA.................... lcd_send_nibble(2); // nastav rezim 4 bitu (plati od nasledujiciho prenosu)01AA: MOVLW 0201AB: MOVWF 2001AC: BCF 03.501AD: BCF 03.601AE: CALL 13D.................... delay_us(40); // cas na zpracovani01AF: CLRWDT01B0: MOVLW 0C01B1: MOVWF 7701B2: DECFSZ 77,F01B3: GOTO 1B201B4: GOTO 1B5........................................ for (i=0;i<3;i++) // proved inicializaci (nastaveni modu, smazani apod)01B5: BSF 03.501B6: BSF 03.601B7: CLRF 1701B8: MOVF 17,W01B9: SUBLW 0201BA: BTFSS 03.001BB: GOTO 1D4.................... {.................... lcd_send_byte(0,LCD_INIT_STRING[i]);01BC: MOVF 17,W01BD: BCF 03.501BE: BCF 03.601BF: CALL 00401C0: BSF 03.501C1: BSF 03.601C2: MOVWF 1801C3: CLRF 1E01C4: MOVF 18,W01C5: MOVWF 1F01C6: BCF 03.501C7: BCF 03.601C8: CALL 157.................... delay_ms(2);01C9: MOVLW 0201CA: BSF 03.501CB: BSF 03.601CC: MOVWF 1A01CD: BCF 03.501CE: BCF 03.601CF: CALL 125.................... }01D0: BSF 03.501D1: BSF 03.601D2: INCF 17,F01D3: GOTO 1B8.................... }01D4: BCF 03.501D5: BCF 03.601D6: GOTO 2BE (RETURN)............................................................ // Proved presun kurzoru.................... //.................... // Pozice 1.1 je domu.................... //.................... #separate.................... void lcd_gotoxy( BYTE x, BYTE y).................... {........................................ BYTE Adr;........................................ switch(y).................... {01D7: MOVLW 0101D8: BSF 03.501D9: BSF 03.601DA: SUBWF 1B,W01DB: ADDLW FC01DC: BTFSC 03.001DD: GOTO 1F701DE: ADDLW 0401DF: BCF 03.501E0: BCF 03.601E1: GOTO 204.................... case 1: Adr=0; break;01E2: BSF 03.501E3: BSF 03.601E4: CLRF 1C01E5: GOTO 1F7.................... case 2: Adr=0x40; break;01E6: MOVLW 4001E7: BSF 03.501E8: BSF 03.601E9: MOVWF 1C01EA: GOTO 1F7.................... case 3: Adr=0x14; break;01EB: MOVLW 1401EC: BSF 03.501ED: BSF 03.601EE: MOVWF 1C01EF: GOTO 1F7.................... case 4: Adr=0x54; break;01F0: MOVLW 5401F1: BSF 03.501F2: BSF 03.601F3: MOVWF 1C01F4: GOTO 1F701F5: BSF 03.501F6: BSF 03.6.................... }.................... Adr+=x-1;01F7: MOVLW 0101F8: SUBWF 1A,W01F9: ADDWF 1C,F........................................ lcd_send_byte(0,0x80|Adr);01FA: MOVF 1C,W01FB: IORLW 8001FC: MOVWF 1D01FD: CLRF 1E01FE: MOVF 1D,W01FF: MOVWF 1F0200: BCF 03.50201: BCF 03.60202: CALL 157.................... }0203: RETLW 00............................................................ // Zapis znaku na displej, zpracovani ridicich znaku.................... //.................... #separate.................... void lcd_putc( char c).................... {........................................ switch (c).................... {*020C: BSF 03.5020D: BSF 03.6020E: MOVF 19,W020F: XORLW 0C0210: BCF 03.50211: BCF 03.60212: BTFSC 03.20213: GOTO 21E0214: XORLW 060215: BTFSC 03.20216: GOTO 22E0217: XORLW 070218: BTFSC 03.20219: GOTO 238021A: XORLW 05021B: BTFSC 03.2021C: GOTO 241021D: GOTO 24A.................... case '\f' : lcd_send_byte(0,1); // smaz displej021E: BSF 03.5021F: BSF 03.60220: CLRF 1E0221: MOVLW 010222: MOVWF 1F0223: BCF 03.50224: BCF 03.60225: CALL 157.................... delay_ms(2);0226: MOVLW 020227: BSF 03.50228: BSF 03.60229: MOVWF 1A022A: BCF 03.5022B: BCF 03.6022C: CALL 125.................... break;022D: GOTO 25A.................... case '\n' : lcd_gotoxy(1,2); break; // presun se na 1. znak 2. radky022E: MOVLW 01022F: BSF 03.50230: BSF 03.60231: MOVWF 1A0232: MOVLW 020233: MOVWF 1B0234: BCF 03.50235: BCF 03.60236: CALL 1D70237: GOTO 25A.................... case '\r' : lcd_gotoxy(1,1); break; // presun home0238: MOVLW 010239: BSF 03.5023A: BSF 03.6023B: MOVWF 1A023C: MOVWF 1B023D: BCF 03.5023E: BCF 03.6023F: CALL 1D70240: GOTO 25A.................... case '\b' : lcd_send_byte(0,0x10); break; // posun kurzor o 1 zpet0241: BSF 03.50242: BSF 03.60243: CLRF 1E0244: MOVLW 100245: MOVWF 1F0246: BCF 03.50247: BCF 03.60248: CALL 1570249: GOTO 25A.................... default : if (c<0x20) c&=0x7; // preklopeni definovatelnych znaku na rozsah 0 az 0x1F024A: BSF 03.5024B: BSF 03.6024C: MOVF 19,W024D: SUBLW 1F024E: BTFSS 03.0024F: GOTO 2520250: MOVLW 070251: ANDWF 19,F.................... lcd_send_byte(1,c); break; // zapis znak0252: MOVLW 010253: MOVWF 1E0254: MOVF 19,W0255: MOVWF 1F0256: BCF 03.50257: BCF 03.60258: CALL 1570259: GOTO 25A.................... }.................... }025A: 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_);.................... }............................................................ // 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_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().................... {025B: CLRF 04025C: BCF 03.7025D: MOVLW 1F025E: ANDWF 03,F025F: MOVLW 0C0260: BSF 03.50261: MOVWF 190262: MOVLW A60263: MOVWF 180264: MOVLW 900265: BCF 03.50266: MOVWF 180267: BSF 03.50268: BSF 1F.00269: BSF 1F.1026A: BSF 1F.2026B: BCF 1F.3026C: MOVLW 07026D: MOVWF 1C.................... char odp[96];.................... int pom,pom2,pom3,odkl,odkl2,maskovadlo,status;........................................ setup_adc_ports(NO_ANALOGS);*0271: BSF 03.50272: BSF 1F.00273: BSF 1F.10274: BSF 1F.20275: BCF 1F.3.................... setup_adc(ADC_OFF);0276: BCF 03.50277: BCF 1F.0.................... setup_psp(PSP_DISABLED);0278: BSF 03.50279: BCF 09.4.................... setup_spi(SPI_SS_DISABLED);*026E: MOVLW FF026F: BCF 03.50270: MOVWF 20*027A: BCF 03.5027B: BCF 14.5027C: BCF 20.5027D: MOVF 20,W027E: BSF 03.5027F: MOVWF 070280: BCF 03.50281: BSF 20.40282: MOVF 20,W0283: BSF 03.50284: MOVWF 070285: BCF 03.50286: BCF 20.30287: MOVF 20,W0288: BSF 03.50289: MOVWF 07028A: MOVLW 01028B: BCF 03.5028C: MOVWF 14028D: MOVLW 00028E: BSF 03.5028F: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);0290: MOVF 01,W0291: ANDLW C70292: IORLW 080293: MOVWF 01.................... setup_timer_1(T1_DISABLED);0294: BCF 03.50295: CLRF 10.................... setup_timer_2(T2_DISABLED,0,1);0296: MOVLW 000297: MOVWF 780298: MOVWF 120299: MOVLW 00029A: BSF 03.5029B: MOVWF 12.................... setup_comparator(NC_NC_NC_NC);029C: MOVLW 07029D: MOVWF 1C029E: MOVF 05,W029F: CLRWDT02A0: MOVLW 0202A1: MOVWF 7702A2: DECFSZ 77,F02A3: GOTO 2A202A4: GOTO 2A502A5: MOVF 1C,W02A6: BCF 03.502A7: BCF 0D.6.................... setup_vref(FALSE);02A8: BSF 03.502A9: CLRF 1D.................... setup_wdt(WDT_2304MS);02AA: MOVLW 0F02AB: MOVWF 7702AC: MOVLW 0702AD: BCF 03.502AE: CLRF 0102AF: MOVLW 8102B0: MOVWF 0402B1: BCF 03.702B2: MOVF 00,W02B3: ANDLW F002B4: IORLW 0702B5: MOVWF 0002B6: CLRWDT02B7: MOVF 00,W02B8: ANDLW F702B9: BTFSC 77.302BA: ANDLW F002BB: IORWF 77,W02BC: MOVWF 00.................... lcd_init();02BD: GOTO 17C........................................ /*.................... delay_us(10);.................... lcd_gotoxy(1,1);.................... printf(lcd_putc," Ovladani mobilem");.................... lcd_gotoxy(1,2);.................... printf(lcd_putc,"");.................... lcd_gotoxy(1,3);.................... printf(lcd_putc," autor: Tomas Kapl");.................... lcd_gotoxy(1,4);.................... printf(lcd_putc," www.kapl.cz");.................... delay_ms(5000);.................... */........................................ while(TRUE).................... {.................... restart_wdt();02BE: CLRWDT........................................ output_low(PIN_A4) ;02BF: BSF 03.502C0: BCF 05.402C1: BCF 03.502C2: BCF 05.4.................... delay_ms(150);02C3: MOVLW 9602C4: BSF 03.502C5: BSF 03.602C6: MOVWF 1A02C7: BCF 03.502C8: BCF 03.602C9: CALL 125.................... output_high(PIN_A4);02CA: BSF 03.502CB: BCF 05.402CC: BCF 03.502CD: BSF 05.4.................... delay_ms(150);02CE: MOVLW 9602CF: BSF 03.502D0: BSF 03.602D1: MOVWF 1A02D2: BCF 03.502D3: BCF 03.602D4: CALL 125.................... output_low(PIN_A4) ;02D5: BSF 03.502D6: BCF 05.402D7: BCF 03.502D8: BCF 05.4.................... delay_ms(150);02D9: MOVLW 9602DA: BSF 03.502DB: BSF 03.602DC: MOVWF 1A02DD: BCF 03.502DE: BCF 03.602DF: CALL 125.................... output_high(PIN_A4);02E0: BSF 03.502E1: BCF 05.402E2: BCF 03.502E3: BSF 05.4.................... delay_ms(150);02E4: MOVLW 9602E5: BSF 03.502E6: BSF 03.602E7: MOVWF 1A02E8: BCF 03.502E9: BCF 03.602EA: CALL 125........................................ printf("AT+CMGL=0\r"); //vycti prijate SMS02EB: CLRF 2802EC: MOVF 28,W02ED: CALL 00C02EE: INCF 28,F02EF: MOVWF 7702F0: MOVF 77,W02F1: BTFSS 0C.402F2: GOTO 2F102F3: MOVWF 1902F4: MOVLW 0A02F5: SUBWF 28,W02F6: BTFSS 03.202F7: GOTO 2EC............................................................ gets(odp); //uloz odpoved prikazu do odp02F8: MOVLW 1002F9: MOVWF 0402FA: BSF 03.702FB: DECF 04,F02FC: INCF 04,F02FD: BTFSS 0C.502FE: GOTO 2FD02FF: MOVF 1A,W0300: MOVWF 000301: MOVLW 0D0302: SUBWF 00,W0303: BTFSS 03.20304: GOTO 2FC0305: CLRF 00.................... getc(); //preskoc 0A0306: BTFSS 0C.50307: GOTO 3060308: MOVF 1A,W.................... getc(); //preskoc 0D0309: BTFSS 0C.5030A: GOTO 309030B: MOVF 1A,W.................... gets(odp); //uloz pocatek odpovedi do odp030C: MOVLW 10030D: MOVWF 04030E: BSF 03.7030F: DECF 04,F0310: INCF 04,F0311: BTFSS 0C.50312: GOTO 3110313: MOVF 1A,W0314: MOVWF 000315: MOVLW 0D0316: SUBWF 00,W0317: BTFSS 03.20318: GOTO 3100319: CLRF 00............................................................ if(odp[0] == 79 && odp[1] ==75)031A: BSF 03.6031B: MOVF 10,W031C: SUBLW 4F031D: BTFSS 03.2031E: GOTO 37F031F: MOVF 11,W0320: SUBLW 4B0321: BTFSS 03.20322: GOTO 37F.................... {.................... lcd_gotoxy(1,1);0323: MOVLW 010324: BSF 03.50325: MOVWF 1A0326: MOVWF 1B0327: BCF 03.50328: BCF 03.60329: CALL 1D7.................... printf(lcd_putc,"\fNeni nova SMS zprava");032A: CLRF 28032B: MOVF 28,W032C: CALL 01B032D: INCF 28,F032E: MOVWF 77032F: BSF 03.50330: BSF 03.60331: MOVWF 190332: BCF 03.50333: BCF 03.60334: CALL 20C0335: MOVLW 150336: SUBWF 28,W0337: BTFSS 03.20338: GOTO 32B.................... lcd_gotoxy(1,2);0339: MOVLW 01033A: BSF 03.5033B: BSF 03.6033C: MOVWF 1A033D: MOVLW 02033E: MOVWF 1B033F: BCF 03.50340: BCF 03.60341: CALL 1D7.................... printf(lcd_putc,"");.................... lcd_gotoxy(1,3);0342: MOVLW 010343: BSF 03.50344: BSF 03.60345: MOVWF 1A0346: MOVLW 030347: MOVWF 1B0348: BCF 03.50349: BCF 03.6034A: CALL 1D7.................... printf(lcd_putc,"Zaslete SMS na cislo");034B: CLRF 28034C: MOVF 28,W034D: CALL 035034E: INCF 28,F034F: MOVWF 770350: BSF 03.50351: BSF 03.60352: MOVWF 190353: BCF 03.50354: BCF 03.60355: CALL 20C0356: MOVLW 140357: SUBWF 28,W0358: BTFSS 03.20359: GOTO 34C.................... lcd_gotoxy(1,4);035A: MOVLW 01035B: BSF 03.5035C: BSF 03.6035D: MOVWF 1A035E: MOVLW 04035F: MOVWF 1B0360: BCF 03.50361: BCF 03.60362: CALL 1D7.................... printf(lcd_putc," 736 655 250");0363: CLRF 280364: MOVF 28,W0365: CALL 04E0366: INCF 28,F0367: MOVWF 770368: BSF 03.50369: BSF 03.6036A: MOVWF 19036B: BCF 03.5036C: BCF 03.6036D: CALL 20C036E: MOVLW 0F036F: SUBWF 28,W0370: BTFSS 03.20371: GOTO 364.................... delay_ms(5000);0372: MOVLW 140373: MOVWF 280374: MOVLW FA0375: BSF 03.50376: BSF 03.60377: MOVWF 1A0378: BCF 03.50379: BCF 03.6037A: CALL 125037B: DECFSZ 28,F037C: GOTO 374.................... }else037D: GOTO 67E037E: BSF 03.6.................... {........................................ for(pom=0;pom<55;pom++) //preskoc nedulezite informace037F: BCF 03.60380: CLRF 210381: MOVF 21,W0382: SUBLW 360383: BTFSS 03.00384: GOTO 38A.................... {.................... getc();0385: BTFSS 0C.50386: GOTO 3850387: MOVF 1A,W.................... }0388: INCF 21,F0389: GOTO 381........................................ //gets(odp); //uloz zakodovany text SMS........................................ odp[0]=getc();038A: BTFSS 0C.5038B: GOTO 38A038C: MOVF 1A,W038D: BSF 03.6038E: MOVWF 10.................... odp[1]=getc();038F: BCF 03.60390: BTFSS 0C.50391: GOTO 3900392: MOVF 1A,W0393: BSF 03.60394: MOVWF 11.................... odp[2]=getc();0395: BCF 03.60396: BTFSS 0C.50397: GOTO 3960398: MOVF 1A,W0399: BSF 03.6039A: MOVWF 12.................... odp[3]=getc();039B: BCF 03.6039C: BTFSS 0C.5039D: GOTO 39C039E: MOVF 1A,W039F: BSF 03.603A0: MOVWF 13.................... odp[4]=getc();03A1: BCF 03.603A2: BTFSS 0C.503A3: GOTO 3A203A4: MOVF 1A,W03A5: BSF 03.603A6: MOVWF 14.................... odp[5]=getc();03A7: BCF 03.603A8: BTFSS 0C.503A9: GOTO 3A803AA: MOVF 1A,W03AB: BSF 03.603AC: MOVWF 15.................... odp[6]=getc();03AD: BCF 03.603AE: BTFSS 0C.503AF: GOTO 3AE03B0: MOVF 1A,W03B1: BSF 03.603B2: MOVWF 16.................... odp[7]=getc();03B3: BCF 03.603B4: BTFSS 0C.503B5: GOTO 3B403B6: MOVF 1A,W03B7: BSF 03.603B8: MOVWF 17........................................ /*lcd_gotoxy(1,1);.................... printf(lcd_putc,"\f%s\n",odp);*/........................................ if(odp[0]==0) odp[1]='0'; // Prevod z ASCII do BIN03B9: MOVF 10,F03BA: BTFSS 03.203BB: GOTO 3BE03BC: MOVLW 3003BD: MOVWF 11.................... odp[0]=odp[0] - '0';03BE: MOVLW 3003BF: SUBWF 10,F.................... odp[1]=odp[1] - '0';03C0: SUBWF 11,F.................... if(odp[0]>9) odp[0]=odp[0]-7;03C1: MOVF 10,W03C2: SUBLW 0903C3: BTFSC 03.003C4: GOTO 3C703C5: MOVLW 0703C6: SUBWF 10,F.................... if(odp[1]>9) odp[1]=odp[1]-7;03C7: MOVF 11,W03C8: SUBLW 0903C9: BTFSC 03.003CA: GOTO 3CD03CB: MOVLW 0703CC: SUBWF 11,F.................... odp[0]=odp[0] << 4;03CD: SWAPF 10,F03CE: MOVLW F003CF: ANDWF 10,F.................... odp[0] |= odp[1];03D0: MOVF 11,W03D1: IORWF 10,F........................................ if(odp[2]==0) odp[3]='0';03D2: MOVF 12,F03D3: BTFSS 03.203D4: GOTO 3D703D5: MOVLW 3003D6: MOVWF 13.................... odp[2]=odp[2] - '0';03D7: MOVLW 3003D8: SUBWF 12,F.................... odp[3]=odp[3] - '0';03D9: SUBWF 13,F.................... if(odp[2]>9) odp[2]=odp[2]-7;03DA: MOVF 12,W03DB: SUBLW 0903DC: BTFSC 03.003DD: GOTO 3E003DE: MOVLW 0703DF: SUBWF 12,F.................... if(odp[3]>9) odp[3]=odp[3]-7;03E0: MOVF 13,W03E1: SUBLW 0903E2: BTFSC 03.003E3: GOTO 3E603E4: MOVLW 0703E5: SUBWF 13,F.................... odp[2]=odp[2] << 4;03E6: SWAPF 12,F03E7: MOVLW F003E8: ANDWF 12,F.................... odp[2] |= odp[3];03E9: MOVF 13,W03EA: IORWF 12,F........................................ if(odp[4]==0) odp[5]='0';03EB: MOVF 14,F03EC: BTFSS 03.203ED: GOTO 3F003EE: MOVLW 3003EF: MOVWF 15.................... odp[4]=odp[4] - '0';03F0: MOVLW 3003F1: SUBWF 14,F.................... odp[5]=odp[5] - '0';03F2: SUBWF 15,F.................... if(odp[4]>9) odp[4]=odp[4]-7;03F3: MOVF 14,W03F4: SUBLW 0903F5: BTFSC 03.003F6: GOTO 3F903F7: MOVLW 0703F8: SUBWF 14,F.................... if(odp[5]>9) odp[5]=odp[5]-7;03F9: MOVF 15,W03FA: SUBLW 0903FB: BTFSC 03.003FC: GOTO 3FF03FD: MOVLW 0703FE: SUBWF 15,F.................... odp[4]=odp[4] << 4;03FF: SWAPF 14,F0400: MOVLW F00401: ANDWF 14,F.................... odp[4] |= odp[5];0402: MOVF 15,W0403: IORWF 14,F........................................ if(odp[6]==0) odp[7]='0';0404: MOVF 16,F0405: BTFSS 03.20406: GOTO 4090407: MOVLW 300408: MOVWF 17.................... odp[6]=odp[6] - '0';0409: MOVLW 30040A: SUBWF 16,F.................... odp[7]=odp[7] - '0';040B: SUBWF 17,F.................... if(odp[6]>9) odp[6]=odp[6]-7;040C: MOVF 16,W040D: SUBLW 09040E: BTFSC 03.0040F: GOTO 4120410: MOVLW 070411: SUBWF 16,F.................... if(odp[7]>9) odp[7]=odp[7]-7;0412: MOVF 17,W0413: SUBLW 090414: BTFSC 03.00415: GOTO 4180416: MOVLW 070417: SUBWF 17,F.................... odp[6]=odp[6] << 4;0418: SWAPF 16,F0419: MOVLW F0041A: ANDWF 16,F.................... odp[6] |= odp[7];041B: MOVF 17,W041C: IORWF 16,F........................................ odp[1]=odp[2];041D: MOVF 12,W041E: MOVWF 11.................... odp[2]=odp[4];041F: MOVF 14,W0420: MOVWF 12.................... odp[3]=odp[6];0421: MOVF 16,W0422: MOVWF 13.................... odp[4],odp[5],odp[6]="";0423: CLRF 16........................................ /*lcd_gotoxy(1,2);.................... printf(lcd_putc,"%u %u %u %u",odp[0],odp[1],odp[2]odp[3]); */........................................ pom3=0;0424: BCF 03.60425: CLRF 23.................... for (pom = 0; pom < 4;pom++)0426: CLRF 210427: MOVF 21,W0428: SUBLW 030429: BTFSS 03.0042A: GOTO 49C.................... {.................... maskovadlo = maskovadlo >> 1; //rotace promene urcene pro maskovani042B: BCF 03.0042C: RRF 26,F.................... maskovadlo = maskovadlo | 0x80;042D: BSF 26.7.................... odkl = odp[pom] & maskovadlo; //odlozeni "prenosu" do odkl pomoci maskovadla042E: MOVLW 10042F: ADDWF 21,W0430: MOVWF 040431: BSF 03.70432: MOVF 00,W0433: ANDWF 26,W0434: MOVWF 24.................... odp[pom] = odp[pom] << pom3; //rotace znaku0435: MOVLW 100436: ADDWF 21,W0437: MOVWF 780438: MOVLW 010439: MOVWF 7A043A: BTFSC 03.0043B: INCF 7A,F043C: MOVF 78,W043D: MOVWF 28043E: MOVF 7A,W043F: MOVWF 290440: MOVLW 100441: ADDWF 21,W0442: MOVWF 040443: BSF 03.70444: MOVF 00,W0445: MOVWF 770446: MOVF 23,W0447: MOVWF 780448: BTFSC 03.20449: GOTO 44E044A: BCF 03.0044B: RLF 77,F044C: DECFSZ 78,F044D: GOTO 44A044E: MOVF 28,W044F: MOVWF 040450: BCF 03.70451: BTFSC 29.00452: BSF 03.70453: MOVF 77,W0454: MOVWF 00.................... for (pom2 = 0; pom2 < (8-pom3);pom2++) //rotace odkl20455: CLRF 220456: MOVF 23,W0457: SUBLW 080458: SUBWF 22,W0459: BTFSC 03.0045A: GOTO 460.................... {.................... odkl2 = odkl2 >> 1;045B: BCF 03.0045C: RRF 25,F.................... odkl2 = odkl2 & 127;045D: BCF 25.7.................... }045E: INCF 22,F045F: GOTO 456.................... odp[pom] = odp[pom] | odkl2; //pridani odkl2 ke znaku0460: MOVLW 100461: ADDWF 21,W0462: MOVWF 780463: MOVLW 010464: MOVWF 7A0465: BTFSC 03.00466: INCF 7A,F0467: MOVLW 100468: ADDWF 21,W0469: MOVWF 04046A: BSF 03.7046B: MOVF 00,W046C: IORWF 25,W046D: MOVWF 2B046E: MOVF 78,W046F: MOVWF 040470: BCF 03.70471: BTFSC 7A.00472: BSF 03.70473: MOVF 2B,W0474: MOVWF 00.................... odp[pom] = odp[pom] & 127; //smazani nejvysiho bitu0475: MOVLW 100476: ADDWF 21,W0477: MOVWF 780478: MOVLW 010479: MOVWF 7A047A: BTFSC 03.0047B: INCF 7A,F047C: MOVLW 10047D: ADDWF 21,W047E: MOVWF 04047F: BSF 03.70480: MOVF 00,W0481: ANDLW 7F0482: MOVWF 2B0483: MOVF 78,W0484: MOVWF 040485: BCF 03.70486: BTFSC 7A.00487: BSF 03.70488: MOVF 2B,W0489: MOVWF 00.................... odkl2 = odkl; //ulozeni odlk na dalsi pruchod048A: MOVF 24,W048B: MOVWF 25.................... pom3++; //inkrementace citace rotace048C: INCF 23,F.................... if (pom3 == 8) //kazdy 8my znak048D: MOVF 23,W048E: SUBLW 08048F: BTFSS 03.20490: GOTO 49A.................... {.................... pom3 = 0; //smaz citac0491: CLRF 23.................... odp[pom+1] = odkl2; //uloz 8my znak vznikly z "prenosu"0492: MOVLW 010493: ADDWF 21,W0494: ADDLW 100495: MOVWF 040496: BSF 03.70497: MOVF 25,W0498: MOVWF 00.................... maskovadlo = 0; //smaz maskovadlo0499: CLRF 26.................... }.................... }049A: INCF 21,F049B: GOTO 427.................... odp[pom]='\0';049C: MOVLW 10049D: ADDWF 21,W049E: MOVWF 04049F: BSF 03.704A0: CLRF 00.................... /*lcd_gotoxy(1,3);.................... printf(lcd_putc,"%u %u %u %u",odp[0],odp[1],odp[2],odp[3]); */.................... lcd_gotoxy(1,1);04A1: MOVLW 0104A2: BSF 03.504A3: BSF 03.604A4: MOVWF 1A04A5: MOVWF 1B04A6: BCF 03.504A7: BCF 03.604A8: CALL 1D7.................... printf(lcd_putc,"\fPrijata SMS s textem",);04A9: CLRF 2804AA: MOVF 28,W04AB: CALL 06204AC: INCF 28,F04AD: MOVWF 7704AE: BSF 03.504AF: BSF 03.604B0: MOVWF 1904B1: BCF 03.504B2: BCF 03.604B3: CALL 20C04B4: MOVLW 1504B5: SUBWF 28,W04B6: BTFSS 03.204B7: GOTO 4AA.................... lcd_gotoxy(9,3);04B8: MOVLW 0904B9: BSF 03.504BA: BSF 03.604BB: MOVWF 1A04BC: MOVLW 0304BD: MOVWF 1B04BE: BCF 03.504BF: BCF 03.604C0: CALL 1D7.................... printf(lcd_putc,"%s",odp);04C1: MOVLW 1004C2: MOVWF 0404C3: BSF 03.704C4: MOVLW 0004C5: IORWF 00,W04C6: BTFSC 03.204C7: GOTO 4DC04C8: CLRF 2904C9: MOVF 04,W04CA: MOVWF 2804CB: BCF 29.004CC: BTFSC 03.704CD: BSF 29.004CE: MOVF 00,W04CF: BSF 03.504D0: BSF 03.604D1: MOVWF 1904D2: BCF 03.504D3: BCF 03.604D4: CALL 20C04D5: MOVF 28,W04D6: MOVWF 0404D7: BCF 03.704D8: BTFSC 29.004D9: BSF 03.704DA: INCF 04,F04DB: GOTO 4C4.................... output_low(PIN_A4) ;04DC: BSF 03.504DD: BCF 05.404DE: BCF 03.504DF: BCF 05.4.................... delay_ms(5000);04E0: MOVLW 1404E1: MOVWF 2804E2: MOVLW FA04E3: BSF 03.504E4: BSF 03.604E5: MOVWF 1A04E6: BCF 03.504E7: BCF 03.604E8: CALL 12504E9: DECFSZ 28,F04EA: GOTO 4E2.................... output_high(PIN_A4);04EB: BSF 03.504EC: BCF 05.404ED: BCF 03.504EE: BSF 05.4.................... printf("AT+CMGD=1\r"); //smaz prijatou SMSku04EF: CLRF 2804F0: MOVF 28,W04F1: CALL 07C04F2: INCF 28,F04F3: MOVWF 7704F4: MOVF 77,W04F5: BTFSS 0C.404F6: GOTO 4F504F7: MOVWF 1904F8: MOVLW 0A04F9: SUBWF 28,W04FA: BTFSS 03.204FB: GOTO 4F0........................................ if (odp[0] > 64 && odp[0] < 91 )04FC: BSF 03.604FD: MOVF 10,W04FE: SUBLW 4004FF: BTFSC 03.00500: GOTO 5070501: MOVF 10,W0502: SUBLW 5A0503: BTFSS 03.00504: GOTO 507.................... {.................... odp[0] += 32;0505: MOVLW 200506: ADDWF 10,F.................... }........................................ if (odp[1] > 64 && odp[1] < 91 )0507: MOVF 11,W0508: SUBLW 400509: BTFSC 03.0050A: GOTO 511050B: MOVF 11,W050C: SUBLW 5A050D: BTFSS 03.0050E: GOTO 511.................... {.................... odp[1] += 32;050F: MOVLW 200510: ADDWF 11,F.................... }........................................ if (odp[2] > 64 && odp[2] < 91 )0511: MOVF 12,W0512: SUBLW 400513: BTFSC 03.00514: GOTO 51B0515: MOVF 12,W0516: SUBLW 5A0517: BTFSS 03.00518: GOTO 51B.................... {.................... odp[2] += 32;0519: MOVLW 20051A: ADDWF 12,F.................... }........................................ if (odp[3] > 64 && odp[3] < 91 )051B: MOVF 13,W051C: SUBLW 40051D: BTFSC 03.0051E: GOTO 525051F: MOVF 13,W0520: SUBLW 5A0521: BTFSS 03.00522: GOTO 525.................... {.................... odp[3] += 32;0523: MOVLW 200524: ADDWF 13,F.................... }........................................ lcd_gotoxy(1,1);0525: MOVLW 010526: BSF 03.50527: MOVWF 1A0528: MOVWF 1B0529: BCF 03.5052A: BCF 03.6052B: CALL 1D7.................... printf(lcd_putc,"\f Odstraneni velkych",);052C: CLRF 28052D: MOVF 28,W052E: CALL 08B052F: INCF 28,F0530: MOVWF 770531: BSF 03.50532: BSF 03.60533: MOVWF 190534: BCF 03.50535: BCF 03.60536: CALL 20C0537: MOVLW 140538: SUBWF 28,W0539: BTFSS 03.2053A: GOTO 52D.................... lcd_gotoxy(1,2);053B: MOVLW 01053C: BSF 03.5053D: BSF 03.6053E: MOVWF 1A053F: MOVLW 020540: MOVWF 1B0541: BCF 03.50542: BCF 03.60543: CALL 1D7.................... printf(lcd_putc," pismen");0544: CLRF 280545: MOVF 28,W0546: CALL 0A40547: INCF 28,F0548: MOVWF 770549: BSF 03.5054A: BSF 03.6054B: MOVWF 19054C: BCF 03.5054D: BCF 03.6054E: CALL 20C054F: MOVLW 0D0550: SUBWF 28,W0551: BTFSS 03.20552: GOTO 545.................... lcd_gotoxy(9,4);0553: MOVLW 090554: BSF 03.50555: BSF 03.60556: MOVWF 1A0557: MOVLW 040558: MOVWF 1B0559: BCF 03.5055A: BCF 03.6055B: CALL 1D7.................... printf(lcd_putc,"%s",odp);055C: MOVLW 10055D: MOVWF 04055E: BSF 03.7055F: MOVLW 000560: IORWF 00,W0561: BTFSC 03.20562: GOTO 5770563: CLRF 290564: MOVF 04,W0565: MOVWF 280566: BCF 29.00567: BTFSC 03.70568: BSF 29.00569: MOVF 00,W056A: BSF 03.5056B: BSF 03.6056C: MOVWF 19056D: BCF 03.5056E: BCF 03.6056F: CALL 20C0570: MOVF 28,W0571: MOVWF 040572: BCF 03.70573: BTFSC 29.00574: BSF 03.70575: INCF 04,F0576: GOTO 55F.................... output_low(PIN_A4) ;0577: BSF 03.50578: BCF 05.40579: BCF 03.5057A: BCF 05.4.................... delay_ms(5000);057B: MOVLW 14057C: MOVWF 28057D: MOVLW FA057E: BSF 03.5057F: BSF 03.60580: MOVWF 1A0581: BCF 03.50582: BCF 03.60583: CALL 1250584: DECFSZ 28,F0585: GOTO 57D.................... output_high(PIN_A4);0586: BSF 03.50587: BCF 05.40588: BCF 03.50589: BSF 05.4............................................................ if (odp[0] == 122 && odp[1] == 97 && odp[2] == 112 && odp[3] == 49) //odp=="zap1"058A: BSF 03.6058B: MOVF 10,W058C: SUBLW 7A058D: BTFSS 03.2058E: GOTO 59F058F: MOVF 11,W0590: SUBLW 610591: BTFSS 03.20592: GOTO 59F0593: MOVF 12,W0594: SUBLW 700595: BTFSS 03.20596: GOTO 59F0597: MOVF 13,W0598: SUBLW 310599: BTFSS 03.2059A: GOTO 59F.................... {.................... status=1;059B: MOVLW 01059C: BCF 03.6059D: MOVWF 27059E: BSF 03.6.................... }........................................ if (odp[0] == 118 && odp[1] == 121 && odp[2] == 112 && odp[3]== 49) //odp=="vyp1"059F: MOVF 10,W05A0: SUBLW 7605A1: BTFSS 03.205A2: GOTO 5B305A3: MOVF 11,W05A4: SUBLW 7905A5: BTFSS 03.205A6: GOTO 5B305A7: MOVF 12,W05A8: SUBLW 7005A9: BTFSS 03.205AA: GOTO 5B305AB: MOVF 13,W05AC: SUBLW 3105AD: BTFSS 03.205AE: GOTO 5B3.................... {.................... status=2;05AF: MOVLW 0205B0: BCF 03.605B1: MOVWF 2705B2: BSF 03.6.................... }........................................ if (odp[0] == 97 && odp[1] == 104 && odp[2] == 111 && odp[3]== 106) //odp=="ahoj"05B3: MOVF 10,W05B4: SUBLW 6105B5: BTFSS 03.205B6: GOTO 5C705B7: MOVF 11,W05B8: SUBLW 6805B9: BTFSS 03.205BA: GOTO 5C705BB: MOVF 12,W05BC: SUBLW 6F05BD: BTFSS 03.205BE: GOTO 5C705BF: MOVF 13,W05C0: SUBLW 6A05C1: BTFSS 03.205C2: GOTO 5C7.................... {.................... status=3;05C3: MOVLW 0305C4: BCF 03.605C5: MOVWF 2705C6: BSF 03.6.................... }........................................ switch (status) {05C7: BCF 03.605C8: MOVF 27,W05C9: XORLW 0105CA: BTFSC 03.205CB: GOTO 5D305CC: XORLW 0305CD: BTFSC 03.205CE: GOTO 5F705CF: XORLW 0105D0: BTFSC 03.205D1: GOTO 61B05D2: GOTO 63B........................................ case 1: output_low(zar1);05D3: BSF 03.505D4: BCF 05.305D5: BCF 03.505D6: BCF 05.3.................... printf(lcd_putc,"\f");05D7: MOVLW 0C05D8: BSF 03.505D9: BSF 03.605DA: MOVWF 1905DB: BCF 03.505DC: BCF 03.605DD: CALL 20C.................... lcd_gotoxy(1,2);05DE: MOVLW 0105DF: BSF 03.505E0: BSF 03.605E1: MOVWF 1A05E2: MOVLW 0205E3: MOVWF 1B05E4: BCF 03.505E5: BCF 03.605E6: CALL 1D7.................... printf(lcd_putc," Zapnuto zarizeni 1");05E7: CLRF 2805E8: MOVF 28,W05E9: CALL 0B605EA: INCF 28,F05EB: MOVWF 7705EC: BSF 03.505ED: BSF 03.605EE: MOVWF 1905EF: BCF 03.505F0: BCF 03.605F1: CALL 20C05F2: MOVLW 1305F3: SUBWF 28,W05F4: BTFSS 03.205F5: GOTO 5E8.................... break;05F6: GOTO 673........................................ case 2: output_high(zar1);05F7: BSF 03.505F8: BCF 05.305F9: BCF 03.505FA: BSF 05.3.................... printf(lcd_putc,"\f");05FB: MOVLW 0C05FC: BSF 03.505FD: BSF 03.605FE: MOVWF 1905FF: BCF 03.50600: BCF 03.60601: CALL 20C.................... lcd_gotoxy(1,2);0602: MOVLW 010603: BSF 03.50604: BSF 03.60605: MOVWF 1A0606: MOVLW 020607: MOVWF 1B0608: BCF 03.50609: BCF 03.6060A: CALL 1D7.................... printf(lcd_putc," Vypnuto zarizeni 1");060B: CLRF 28060C: MOVF 28,W060D: CALL 0CE060E: INCF 28,F060F: MOVWF 770610: BSF 03.50611: BSF 03.60612: MOVWF 190613: BCF 03.50614: BCF 03.60615: CALL 20C0616: MOVLW 130617: SUBWF 28,W0618: BTFSS 03.20619: GOTO 60C.................... break;061A: GOTO 673........................................ case 3: printf(lcd_putc,"\f");061B: MOVLW 0C061C: BSF 03.5061D: BSF 03.6061E: MOVWF 19061F: BCF 03.50620: BCF 03.60621: CALL 20C.................... lcd_gotoxy(1,2);0622: MOVLW 010623: BSF 03.50624: BSF 03.60625: MOVWF 1A0626: MOVLW 020627: MOVWF 1B0628: BCF 03.50629: BCF 03.6062A: CALL 1D7.................... printf(lcd_putc," Preji hezky den!");062B: CLRF 28062C: MOVF 28,W062D: CALL 0E6062E: INCF 28,F062F: MOVWF 770630: BSF 03.50631: BSF 03.60632: MOVWF 190633: BCF 03.50634: BCF 03.60635: CALL 20C0636: MOVLW 120637: SUBWF 28,W0638: BTFSS 03.20639: GOTO 62C.................... break;063A: GOTO 673........................................ default: printf(lcd_putc,"\f");063B: MOVLW 0C063C: BSF 03.5063D: BSF 03.6063E: MOVWF 19063F: BCF 03.50640: BCF 03.60641: CALL 20C.................... lcd_gotoxy(1,2);0642: MOVLW 010643: BSF 03.50644: BSF 03.60645: MOVWF 1A0646: MOVLW 020647: MOVWF 1B0648: BCF 03.50649: BCF 03.6064A: CALL 1D7.................... printf(lcd_putc," Prikaz nebyl");064B: CLRF 28064C: MOVF 28,W064D: CALL 0FD064E: INCF 28,F064F: MOVWF 770650: BSF 03.50651: BSF 03.60652: MOVWF 190653: BCF 03.50654: BCF 03.60655: CALL 20C0656: MOVLW 100657: SUBWF 28,W0658: BTFSS 03.20659: GOTO 64C.................... lcd_gotoxy(1,3);065A: MOVLW 01065B: BSF 03.5065C: BSF 03.6065D: MOVWF 1A065E: MOVLW 03065F: MOVWF 1B0660: BCF 03.50661: BCF 03.60662: CALL 1D7.................... printf(lcd_putc," rozeznan");0663: CLRF 280664: MOVF 28,W0665: CALL 1120666: INCF 28,F0667: MOVWF 770668: BSF 03.50669: BSF 03.6066A: MOVWF 19066B: BCF 03.5066C: BCF 03.6066D: CALL 20C066E: MOVLW 0E066F: SUBWF 28,W0670: BTFSS 03.20671: GOTO 664.................... break; }0672: GOTO 673........................................ delay_ms(5000);0673: MOVLW 140674: MOVWF 280675: MOVLW FA0676: BSF 03.50677: BSF 03.60678: MOVWF 1A0679: BCF 03.5067A: BCF 03.6067B: CALL 125067C: DECFSZ 28,F067D: GOTO 675.................... }.................... }067E: GOTO 2BE.................... }067F: SLEEPConfiguration Fuses:Word 1: 3F3D XT WDT NOPUT NODEBUG NOPROTECT NOBROWNOUT NOLVP NOCPD NOWRT