CCS PCM C Compiler, Version 4.058s, 42064 07-V-08 16:06Filename: main.lstROM used: 1821 words (22%)Largest free fragment is 2048RAM used: 114 (31%) at main() level291 (79%) worst caseStack: 4 locations*0000: MOVLW 000001: MOVWF 0A0002: GOTO 2F10003: NOP.................... #include ".\main.h".................... #include <16F876A.h>.................... //////// Standard Header file for the PIC16F876A device ////////////////.................... #device PIC16F876A.................... #list........................................ #device adc=8........................................ #FUSES NOWDT //Watch Dog Timer.................... #FUSES HS//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=18432000,RESTART_WDT)*0119: MOVLW 9A011A: MOVWF 04011B: BSF 03.7011C: MOVF 00,W011D: BTFSC 03.2011E: GOTO 12F011F: MOVLW 050120: MOVWF 780121: MOVLW BF0122: MOVWF 770123: CLRWDT0124: DECFSZ 77,F0125: GOTO 1230126: DECFSZ 78,F0127: GOTO 1210128: MOVLW F90129: MOVWF 77012A: DECFSZ 77,F012B: GOTO 12A012C: CLRWDT012D: DECFSZ 00,F012E: GOTO 11F012F: RETLW 00*016E: MOVLW 04016F: SUBWF 20,F0170: BTFSS 03.00171: GOTO 1860172: MOVLW A00173: MOVWF 040174: BSF 03.70175: MOVLW F80176: ANDWF 00,F0177: BCF 03.00178: RRF 00,F0179: RRF 00,F017A: RRF 00,F017B: MOVF 00,W017C: BTFSC 03.2017D: GOTO 186017E: MOVLW 0A017F: MOVWF 770180: DECFSZ 77,F0181: GOTO 1800182: GOTO 1830183: CLRWDT0184: DECFSZ 00,F0185: GOTO 17E.................... #use rs232(STREAM=MOBIL,baud=19200,force_sw,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)*01E4: BCF 20.601E5: MOVF 20,W01E6: BSF 03.501E7: MOVWF 0701E8: BCF 03.501E9: BCF 07.601EA: MOVLW 0801EB: MOVWF 7801EC: GOTO 1ED01ED: NOP01EE: BSF 78.701EF: GOTO 20201F0: BCF 78.701F1: BSF 03.501F2: BSF 03.601F3: RRF 18,F01F4: BCF 03.501F5: BCF 03.601F6: BTFSC 03.001F7: BSF 07.601F8: BTFSS 03.001F9: BCF 07.601FA: BSF 78.601FB: GOTO 20201FC: BCF 78.601FD: DECFSZ 78,F01FE: GOTO 1F101FF: GOTO 2000200: NOP0201: BSF 07.60202: MOVLW 490203: MOVWF 040204: DECFSZ 04,F0205: GOTO 2040206: GOTO 2070207: NOP0208: BTFSC 78.70209: GOTO 1F0020A: BTFSC 78.6020B: GOTO 1FC020C: BCF 0A.3020D: BCF 0A.4020E: GOTO 38B (RETURN)020F: BSF 20.70210: MOVF 20,W0211: BSF 03.50212: MOVWF 070213: BCF 03.50214: BTFSC 07.70215: GOTO 2140216: MOVLW 080217: MOVWF 770218: BSF 03.50219: BSF 03.6021A: CLRF 17021B: BSF 77.7021C: GOTO 22F021D: BCF 77.7021E: GOTO 22F021F: BCF 03.00220: BCF 03.50221: BCF 03.60222: BTFSC 07.70223: BSF 03.00224: BSF 03.50225: BSF 03.60226: RRF 17,F0227: BSF 77.60228: GOTO 22F0229: BCF 77.6022A: DECFSZ 77,F022B: GOTO 21F022C: MOVF 17,W022D: MOVWF 78022E: GOTO 23B022F: MOVLW 490230: BTFSC 77.70231: MOVLW 140232: MOVWF 780233: DECFSZ 78,F0234: GOTO 2330235: GOTO 2360236: BTFSC 77.70237: GOTO 21D0238: BTFSC 77.60239: GOTO 229023A: GOTO 21F023B: BCF 03.5023C: BCF 03.6023D: RETLW 00*0306: MOVLW FF0307: BCF 03.50308: MOVWF 20.................... #use rs232(STREAM=VRTULE,baud=600,parity=N,xmit=PIN_B2,rcv=PIN_B4,bits=8)*02C2: BSF 03.502C3: BCF 06.202C4: BCF 03.502C5: BCF 06.202C6: MOVLW 0802C7: MOVWF 7802C8: GOTO 2C902C9: NOP02CA: BSF 78.702CB: GOTO 2DE02CC: BCF 78.702CD: BSF 03.502CE: BSF 03.602CF: RRF 19,F02D0: BCF 03.502D1: BCF 03.602D2: BTFSC 03.002D3: BSF 06.202D4: BTFSS 03.002D5: BCF 06.202D6: BSF 78.602D7: GOTO 2DE02D8: BCF 78.602D9: DECFSZ 78,F02DA: GOTO 2CD02DB: GOTO 2DC02DC: NOP02DD: BSF 06.202DE: MOVLW 0902DF: MOVWF 7702E0: CLRF 0402E1: DECFSZ 04,F02E2: GOTO 2E102E3: DECFSZ 77,F02E4: GOTO 2E002E5: MOVLW F002E6: MOVWF 0402E7: DECFSZ 04,F02E8: GOTO 2E702E9: GOTO 2EA02EA: BTFSC 78.702EB: GOTO 2CC02EC: BTFSC 78.602ED: GOTO 2D802EE: BCF 0A.302EF: BCF 0A.402F0: GOTO 620 (RETURN)................................................................................ #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........................................ #bit SPEN=0x18.7.................... #bit RCIF=0x0C.5........................................ #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 zachovej*0130: MOVF 07,W0131: ANDLW F00132: BSF 03.50133: BSF 03.60134: MOVWF 210135: MOVF 20,W0136: ANDLW 0F0137: IORWF 21,W0138: BCF 03.50139: BCF 03.6013A: MOVWF 07.................... output_bit(LCD_E,1); // vzestupna hrana013B: BSF 06.0013C: BSF 03.5013D: BCF 06.0.................... delay_us(100); // pockej alespon 450ns od e nebo alespon 195ns od dat013E: CLRWDT013F: MOVLW 980140: MOVWF 770141: DECFSZ 77,F0142: GOTO 1410143: GOTO 144.................... output_bit(LCD_E,0); // sestupna hrana (minimalni perioda e je 1us)0144: BCF 03.50145: BCF 06.00146: BSF 03.50147: BCF 06.0.................... }0148: BCF 03.50149: 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 registr014A: BSF 03.5014B: BSF 03.6014C: MOVF 1E,F014D: BTFSS 03.2014E: GOTO 155014F: BCF 03.50150: BCF 03.60151: BCF 06.10152: GOTO 1580153: BSF 03.50154: BSF 03.60155: BCF 03.50156: BCF 03.60157: BSF 06.10158: BSF 03.50159: BCF 06.1.................... swap(n);015A: BSF 03.6015B: SWAPF 1F,F.................... lcd_send_nibble(n); // posli horni pulku bajtu015C: MOVF 1F,W015D: MOVWF 20015E: BCF 03.5015F: BCF 03.60160: CALL 130.................... swap(n);0161: BSF 03.50162: BSF 03.60163: SWAPF 1F,F.................... lcd_send_nibble(n); // posli spodni pulku bajtu0164: MOVF 1F,W0165: MOVWF 200166: BCF 03.50167: BCF 03.60168: CALL 130.................... delay_us(200); // minimalni doba na provedeni prikazu0169: CLRWDT016A: MOVLW C7016B: BSF 03.5016C: BSF 03.6016D: MOVWF 20.................... }*0186: BCF 03.50187: BCF 03.60188: 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 napajeni0189: MOVLW 14018A: BSF 03.5018B: BSF 03.6018C: MOVWF 1A018D: BCF 03.5018E: BCF 03.6018F: CALL 119........................................ *LCD_TRIS = *LCD_TRIS & ~LCD_MASK; // nuluj odpovidajici bity tris registru datoveho portu LCD0190: MOVLW F00191: BSF 03.50192: ANDWF 07,F........................................ output_bit(LCD_RS,0); // nastav jako vystup a nastav klidovy stav0193: BCF 03.50194: BCF 06.10195: BSF 03.50196: BCF 06.1.................... output_bit(LCD_E,0); // nastav jako vystup a nastav klidovy stav0197: BCF 03.50198: BCF 06.00199: BSF 03.5019A: BCF 06.0........................................ for (i=0; i<3; i++) // nastav lcd do rezimu 8 bitu sbernice019B: BSF 03.6019C: CLRF 17019D: MOVF 17,W019E: SUBLW 02019F: BTFSS 03.001A0: GOTO 1B1.................... {.................... delay_ms(2); // muze byt rozdelany prenos dat (2x 4 bity) nebo pomaly povel01A1: MOVLW 0201A2: MOVWF 1A01A3: BCF 03.501A4: BCF 03.601A5: CALL 119.................... lcd_send_nibble(3); // rezim 8 bitu01A6: MOVLW 0301A7: BSF 03.501A8: BSF 03.601A9: MOVWF 2001AA: BCF 03.501AB: BCF 03.601AC: CALL 130.................... }01AD: BSF 03.501AE: BSF 03.601AF: INCF 17,F01B0: GOTO 19D........................................ delay_us(40); // cas na zpracovani01B1: CLRWDT01B2: MOVLW 3C01B3: MOVWF 7701B4: DECFSZ 77,F01B5: GOTO 1B401B6: GOTO 1B7.................... lcd_send_nibble(2); // nastav rezim 4 bitu (plati od nasledujiciho prenosu)01B7: MOVLW 0201B8: MOVWF 2001B9: BCF 03.501BA: BCF 03.601BB: CALL 130.................... delay_us(40); // cas na zpracovani01BC: CLRWDT01BD: MOVLW 3C01BE: MOVWF 7701BF: DECFSZ 77,F01C0: GOTO 1BF01C1: GOTO 1C2........................................ for (i=0;i<3;i++) // proved inicializaci (nastaveni modu, smazani apod)01C2: BSF 03.501C3: BSF 03.601C4: CLRF 1701C5: MOVF 17,W01C6: SUBLW 0201C7: BTFSS 03.001C8: GOTO 1E1.................... {.................... lcd_send_byte(0,LCD_INIT_STRING[i]);01C9: MOVF 17,W01CA: BCF 03.501CB: BCF 03.601CC: CALL 00401CD: BSF 03.501CE: BSF 03.601CF: MOVWF 1801D0: CLRF 1E01D1: MOVF 18,W01D2: MOVWF 1F01D3: BCF 03.501D4: BCF 03.601D5: CALL 14A.................... delay_ms(2);01D6: MOVLW 0201D7: BSF 03.501D8: BSF 03.601D9: MOVWF 1A01DA: BCF 03.501DB: BCF 03.601DC: CALL 119.................... }01DD: BSF 03.501DE: BSF 03.601DF: INCF 17,F01E0: GOTO 1C5.................... }01E1: BCF 03.501E2: BCF 03.601E3: RETLW 00............................................................ // Proved presun kurzoru.................... //.................... // Pozice 1.1 je domu.................... //.................... #separate.................... void lcd_gotoxy( BYTE x, BYTE y).................... {........................................ BYTE Adr;........................................ switch(y).................... {*023E: MOVLW 01023F: BSF 03.50240: BSF 03.60241: SUBWF 1B,W0242: ADDLW FC0243: BTFSC 03.00244: GOTO 25E0245: ADDLW 040246: BCF 03.50247: BCF 03.60248: GOTO 26B.................... case 1: Adr=0; break;0249: BSF 03.5024A: BSF 03.6024B: CLRF 1C024C: GOTO 25E.................... case 2: Adr=0x40; break;024D: MOVLW 40024E: BSF 03.5024F: BSF 03.60250: MOVWF 1C0251: GOTO 25E.................... case 3: Adr=0x14; break;0252: MOVLW 140253: BSF 03.50254: BSF 03.60255: MOVWF 1C0256: GOTO 25E.................... case 4: Adr=0x54; break;0257: MOVLW 540258: BSF 03.50259: BSF 03.6025A: MOVWF 1C025B: GOTO 25E025C: BSF 03.5025D: BSF 03.6.................... }.................... Adr+=x-1;025E: MOVLW 01025F: SUBWF 1A,W0260: ADDWF 1C,F........................................ lcd_send_byte(0,0x80|Adr);0261: MOVF 1C,W0262: IORLW 800263: MOVWF 1D0264: CLRF 1E0265: MOVF 1D,W0266: MOVWF 1F0267: BCF 03.50268: BCF 03.60269: CALL 14A.................... }026A: RETLW 00............................................................ // Zapis znaku na displej, zpracovani ridicich znaku.................... //.................... #separate.................... void lcd_putc( char c).................... {........................................ switch (c).................... {*0273: BSF 03.50274: BSF 03.60275: MOVF 19,W0276: XORLW 0C0277: BCF 03.50278: BCF 03.60279: BTFSC 03.2027A: GOTO 285027B: XORLW 06027C: BTFSC 03.2027D: GOTO 295027E: XORLW 07027F: BTFSC 03.20280: GOTO 29F0281: XORLW 050282: BTFSC 03.20283: GOTO 2A80284: GOTO 2B1.................... case '\f' : lcd_send_byte(0,1); // smaz displej0285: BSF 03.50286: BSF 03.60287: CLRF 1E0288: MOVLW 010289: MOVWF 1F028A: BCF 03.5028B: BCF 03.6028C: CALL 14A.................... delay_ms(2);028D: MOVLW 02028E: BSF 03.5028F: BSF 03.60290: MOVWF 1A0291: BCF 03.50292: BCF 03.60293: CALL 119.................... break;0294: GOTO 2C1.................... case '\n' : lcd_gotoxy(1,2); break; // presun se na 1. znak 2. radky0295: MOVLW 010296: BSF 03.50297: BSF 03.60298: MOVWF 1A0299: MOVLW 02029A: MOVWF 1B029B: BCF 03.5029C: BCF 03.6029D: CALL 23E029E: GOTO 2C1.................... case '\r' : lcd_gotoxy(1,1); break; // presun home029F: MOVLW 0102A0: BSF 03.502A1: BSF 03.602A2: MOVWF 1A02A3: MOVWF 1B02A4: BCF 03.502A5: BCF 03.602A6: CALL 23E02A7: GOTO 2C1.................... case '\b' : lcd_send_byte(0,0x10); break; // posun kurzor o 1 zpet02A8: BSF 03.502A9: BSF 03.602AA: CLRF 1E02AB: MOVLW 1002AC: MOVWF 1F02AD: BCF 03.502AE: BCF 03.602AF: CALL 14A02B0: GOTO 2C1.................... default : if (c<0x20) c&=0x7; // preklopeni definovatelnych znaku na rozsah 0 az 0x1F02B1: BSF 03.502B2: BSF 03.602B3: MOVF 19,W02B4: SUBLW 1F02B5: BTFSS 03.002B6: GOTO 2B902B7: MOVLW 0702B8: ANDWF 19,F.................... lcd_send_byte(1,c); break; // zapis znak02B9: MOVLW 0102BA: MOVWF 1E02BB: MOVF 19,W02BC: MOVWF 1F02BD: BCF 03.502BE: BCF 03.602BF: CALL 14A02C0: GOTO 2C1.................... }.................... }02C1: 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().................... {*02F1: CLRF 0402F2: BCF 03.702F3: MOVLW 1F02F4: ANDWF 03,F02F5: BCF 20.602F6: MOVF 20,W02F7: BSF 03.502F8: MOVWF 0702F9: BCF 03.502FA: BSF 07.602FB: BSF 03.502FC: BCF 06.202FD: BCF 03.502FE: BSF 06.202FF: BSF 03.50300: BSF 1F.00301: BSF 1F.10302: BSF 1F.20303: BCF 1F.30304: MOVLW 070305: MOVWF 1C.................... char odp[96];.................... int pom,pom2,pom3,odkl,odkl2,maskovadlo,status;........................................ setup_adc_ports(NO_ANALOGS);*0309: BSF 03.5030A: BSF 1F.0030B: BSF 1F.1030C: BSF 1F.2030D: BCF 1F.3.................... setup_adc(ADC_OFF);030E: BCF 03.5030F: BCF 1F.0.................... setup_spi(SPI_SS_DISABLED);0310: BCF 14.50311: BCF 20.50312: MOVF 20,W0313: BSF 03.50314: MOVWF 070315: BCF 03.50316: BSF 20.40317: MOVF 20,W0318: BSF 03.50319: MOVWF 07031A: BCF 03.5031B: BCF 20.3031C: MOVF 20,W031D: BSF 03.5031E: MOVWF 07031F: MOVLW 010320: BCF 03.50321: MOVWF 140322: MOVLW 000323: BSF 03.50324: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);0325: MOVF 01,W0326: ANDLW C70327: IORLW 080328: MOVWF 01.................... setup_timer_1(T1_DISABLED);0329: BCF 03.5032A: CLRF 10.................... setup_timer_2(T2_DISABLED,0,1);032B: MOVLW 00032C: MOVWF 78032D: MOVWF 12032E: MOVLW 00032F: BSF 03.50330: MOVWF 12.................... setup_comparator(NC_NC_NC_NC);0331: MOVLW 070332: MOVWF 1C0333: MOVF 05,W0334: CLRWDT0335: MOVLW 0E0336: MOVWF 770337: DECFSZ 77,F0338: GOTO 3370339: GOTO 33A033A: MOVF 1C,W033B: BCF 03.5033C: BCF 0D.6.................... setup_vref(FALSE);033D: BSF 03.5033E: CLRF 1D.................... setup_wdt(WDT_2304MS);033F: MOVLW 0F0340: MOVWF 770341: MOVLW 070342: BCF 03.50343: CLRF 010344: MOVLW 810345: MOVWF 040346: BCF 03.70347: MOVF 00,W0348: ANDLW F00349: IORLW 07034A: MOVWF 00034B: CLRWDT034C: MOVF 00,W034D: ANDLW F7034E: BTFSC 77.3034F: ANDLW F00350: IORWF 77,W0351: MOVWF 00.................... lcd_init();0352: CALL 189........................................ /*.................... 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();0353: CLRWDT........................................ output_low(PIN_A4) ;0354: BSF 03.50355: BCF 05.40356: BCF 03.50357: BCF 05.4.................... delay_ms(150);0358: MOVLW 960359: BSF 03.5035A: BSF 03.6035B: MOVWF 1A035C: BCF 03.5035D: BCF 03.6035E: CALL 119.................... output_high(PIN_A4);035F: BSF 03.50360: BCF 05.40361: BCF 03.50362: BSF 05.4.................... delay_ms(150);0363: MOVLW 960364: BSF 03.50365: BSF 03.60366: MOVWF 1A0367: BCF 03.50368: BCF 03.60369: CALL 119.................... output_low(PIN_A4) ;036A: BSF 03.5036B: BCF 05.4036C: BCF 03.5036D: BCF 05.4.................... delay_ms(150);036E: MOVLW 96036F: BSF 03.50370: BSF 03.60371: MOVWF 1A0372: BCF 03.50373: BCF 03.60374: CALL 119.................... output_high(PIN_A4);0375: BSF 03.50376: BCF 05.40377: BCF 03.50378: BSF 05.4.................... delay_ms(150);0379: MOVLW 96037A: BSF 03.5037B: BSF 03.6037C: MOVWF 1A037D: BCF 03.5037E: BCF 03.6037F: CALL 119........................................ /*.................... while(kbhit(MOBIL)) {fgetc(MOBIL); delay_ms(100);} // Preskoc zbytek radku.................... fprintf(MOBIL,"AT\r"); //vycti prijate SMS.................... while(fgetc(MOBIL)!=0x0A); // predkoc prvni radek odpovedi........................................ delay_ms(500);.................... for(pom=0;pom<80;pom++) odp[pom]=0;.................... fprintf(MOBIL,"AT\r"); //vycti prijate SMS.................... odp[0]=fgetc(MOBIL);.................... odp[1]=fgetc(MOBIL);.................... odp[2]=fgetc(MOBIL);........................................ fprintf(VRTULE,"*%s*\n\r",odp);.................... fgetc(MOBIL);.................... output_low(PIN_A4);.................... fgetc(MOBIL);.................... fgetc(MOBIL);........................................ delay_ms(1000);.................... continue;.................... */.................... fprintf(MOBIL,"AT+CMGL=1\r"); //vycti prijate SMS (0=nove;1=vsechny)0380: CLRF 280381: MOVF 28,W0382: CALL 00C0383: INCF 28,F0384: MOVWF 770385: BSF 03.50386: BSF 03.60387: MOVWF 180388: BCF 03.50389: BCF 03.6038A: GOTO 1E4038B: MOVLW 0A038C: SUBWF 28,W038D: BTFSS 03.2038E: GOTO 381.................... //SPEN=1;............................................................ while(fgetc(MOBIL)!=0x0A); // predkoc prvni radek odpovedi038F: CALL 20F0390: MOVF 78,W0391: SUBLW 0A0392: BTFSS 03.20393: GOTO 38F........................................ odp[0]=fgetc(MOBIL); // Nacti prvni dva znaky druheho radku odpovedi0394: CALL 20F0395: MOVF 78,W0396: BSF 03.60397: MOVWF 10.................... odp[1]=fgetc(MOBIL);0398: BCF 03.60399: CALL 20F039A: MOVF 78,W039B: BSF 03.6039C: MOVWF 11.................... while(fgetc(MOBIL)!=0x0A); // Preskoc zbytek radku039D: BCF 03.6039E: CALL 20F039F: MOVF 78,W03A0: SUBLW 0A03A1: BTFSS 03.203A2: GOTO 39E........................................ while(kbhit(MOBIL)) {fgetc(MOBIL); delay_ms(100);} // Preskoc zbytek radku03A3: BTFSC 07.703A4: GOTO 3AE03A5: CALL 20F03A6: MOVLW 6403A7: BSF 03.503A8: BSF 03.603A9: MOVWF 1A03AA: BCF 03.503AB: BCF 03.603AC: CALL 11903AD: GOTO 3A3.................... output_high(PIN_A4) ;03AE: BSF 03.503AF: BCF 05.403B0: BCF 03.503B1: BSF 05.4............................................................ if(odp[0] == 79 && odp[1] ==75) // Je odpoved "OK"?03B2: BSF 03.603B3: MOVF 10,W03B4: SUBLW 4F03B5: BTFSS 03.203B6: GOTO 41703B7: MOVF 11,W03B8: SUBLW 4B03B9: BTFSS 03.203BA: GOTO 417.................... {.................... lcd_gotoxy(1,1);03BB: MOVLW 0103BC: BSF 03.503BD: MOVWF 1A03BE: MOVWF 1B03BF: BCF 03.503C0: BCF 03.603C1: CALL 23E.................... printf(lcd_putc,"\fNeni nova SMS zprava");03C2: CLRF 2803C3: MOVF 28,W03C4: CALL 01B03C5: INCF 28,F03C6: MOVWF 7703C7: BSF 03.503C8: BSF 03.603C9: MOVWF 1903CA: BCF 03.503CB: BCF 03.603CC: CALL 27303CD: MOVLW 1503CE: SUBWF 28,W03CF: BTFSS 03.203D0: GOTO 3C3.................... lcd_gotoxy(1,2);03D1: MOVLW 0103D2: BSF 03.503D3: BSF 03.603D4: MOVWF 1A03D5: MOVLW 0203D6: MOVWF 1B03D7: BCF 03.503D8: BCF 03.603D9: CALL 23E.................... printf(lcd_putc,"");.................... lcd_gotoxy(1,3);03DA: MOVLW 0103DB: BSF 03.503DC: BSF 03.603DD: MOVWF 1A03DE: MOVLW 0303DF: MOVWF 1B03E0: BCF 03.503E1: BCF 03.603E2: CALL 23E.................... printf(lcd_putc,"Zaslete SMS na cislo");03E3: CLRF 2803E4: MOVF 28,W03E5: CALL 03503E6: INCF 28,F03E7: MOVWF 7703E8: BSF 03.503E9: BSF 03.603EA: MOVWF 1903EB: BCF 03.503EC: BCF 03.603ED: CALL 27303EE: MOVLW 1403EF: SUBWF 28,W03F0: BTFSS 03.203F1: GOTO 3E4.................... lcd_gotoxy(1,4);03F2: MOVLW 0103F3: BSF 03.503F4: BSF 03.603F5: MOVWF 1A03F6: MOVLW 0403F7: MOVWF 1B03F8: BCF 03.503F9: BCF 03.603FA: CALL 23E.................... printf(lcd_putc," 736 655 250");03FB: CLRF 2803FC: MOVF 28,W03FD: CALL 04E03FE: INCF 28,F03FF: MOVWF 770400: BSF 03.50401: BSF 03.60402: MOVWF 190403: BCF 03.50404: BCF 03.60405: CALL 2730406: MOVLW 0F0407: SUBWF 28,W0408: BTFSS 03.20409: GOTO 3FC.................... delay_ms(5000);040A: MOVLW 14040B: MOVWF 28040C: MOVLW FA040D: BSF 03.5040E: BSF 03.6040F: MOVWF 1A0410: BCF 03.50411: BCF 03.60412: CALL 1190413: DECFSZ 28,F0414: GOTO 40C.................... }.................... else0415: GOTO 71B0416: BSF 03.6.................... {.................... //!!!KAKL for(pom=0;pom<55;pom++) //preskoc nedulezite informace.................... for(pom=0;pom<54;pom++) //preskoc nedulezite informace0417: BCF 03.60418: CLRF 210419: MOVF 21,W041A: SUBLW 35041B: BTFSS 03.0041C: GOTO 420.................... {.................... fgetc(MOBIL);041D: CALL 20F.................... }041E: INCF 21,F041F: GOTO 419........................................ //gets(odp); //uloz zakodovany text SMS........................................ odp[0]=fgetc(MOBIL);0420: CALL 20F0421: MOVF 78,W0422: BSF 03.60423: MOVWF 10.................... odp[1]=fgetc(MOBIL);0424: BCF 03.60425: CALL 20F0426: MOVF 78,W0427: BSF 03.60428: MOVWF 11.................... odp[2]=fgetc(MOBIL);0429: BCF 03.6042A: CALL 20F042B: MOVF 78,W042C: BSF 03.6042D: MOVWF 12.................... odp[3]=fgetc(MOBIL);042E: BCF 03.6042F: CALL 20F0430: MOVF 78,W0431: BSF 03.60432: MOVWF 13.................... odp[4]=fgetc(MOBIL);0433: BCF 03.60434: CALL 20F0435: MOVF 78,W0436: BSF 03.60437: MOVWF 14.................... odp[5]=fgetc(MOBIL);0438: BCF 03.60439: CALL 20F043A: MOVF 78,W043B: BSF 03.6043C: MOVWF 15.................... odp[6]=fgetc(MOBIL);043D: BCF 03.6043E: CALL 20F043F: MOVF 78,W0440: BSF 03.60441: MOVWF 16.................... odp[7]=fgetc(MOBIL);0442: BCF 03.60443: CALL 20F0444: MOVF 78,W0445: BSF 03.60446: MOVWF 17........................................ /*lcd_gotoxy(1,1);.................... printf(lcd_putc,"\f%s\n",odp);*/........................................ if(odp[0]==0) odp[1]='0'; // Prevod z ASCII do BIN0447: MOVF 10,F0448: BTFSS 03.20449: GOTO 44C044A: MOVLW 30044B: MOVWF 11.................... odp[0]=odp[0] - '0';044C: MOVLW 30044D: SUBWF 10,F.................... odp[1]=odp[1] - '0';044E: SUBWF 11,F.................... if(odp[0]>9) odp[0]=odp[0]-7;044F: MOVF 10,W0450: SUBLW 090451: BTFSC 03.00452: GOTO 4550453: MOVLW 070454: SUBWF 10,F.................... if(odp[1]>9) odp[1]=odp[1]-7;0455: MOVF 11,W0456: SUBLW 090457: BTFSC 03.00458: GOTO 45B0459: MOVLW 07045A: SUBWF 11,F.................... odp[0]=odp[0] << 4;045B: SWAPF 10,F045C: MOVLW F0045D: ANDWF 10,F.................... odp[0] |= odp[1];045E: MOVF 11,W045F: IORWF 10,F........................................ if(odp[2]==0) odp[3]='0';0460: MOVF 12,F0461: BTFSS 03.20462: GOTO 4650463: MOVLW 300464: MOVWF 13.................... odp[2]=odp[2] - '0';0465: MOVLW 300466: SUBWF 12,F.................... odp[3]=odp[3] - '0';0467: SUBWF 13,F.................... if(odp[2]>9) odp[2]=odp[2]-7;0468: MOVF 12,W0469: SUBLW 09046A: BTFSC 03.0046B: GOTO 46E046C: MOVLW 07046D: SUBWF 12,F.................... if(odp[3]>9) odp[3]=odp[3]-7;046E: MOVF 13,W046F: SUBLW 090470: BTFSC 03.00471: GOTO 4740472: MOVLW 070473: SUBWF 13,F.................... odp[2]=odp[2] << 4;0474: SWAPF 12,F0475: MOVLW F00476: ANDWF 12,F.................... odp[2] |= odp[3];0477: MOVF 13,W0478: IORWF 12,F........................................ if(odp[4]==0) odp[5]='0';0479: MOVF 14,F047A: BTFSS 03.2047B: GOTO 47E047C: MOVLW 30047D: MOVWF 15.................... odp[4]=odp[4] - '0';047E: MOVLW 30047F: SUBWF 14,F.................... odp[5]=odp[5] - '0';0480: SUBWF 15,F.................... if(odp[4]>9) odp[4]=odp[4]-7;0481: MOVF 14,W0482: SUBLW 090483: BTFSC 03.00484: GOTO 4870485: MOVLW 070486: SUBWF 14,F.................... if(odp[5]>9) odp[5]=odp[5]-7;0487: MOVF 15,W0488: SUBLW 090489: BTFSC 03.0048A: GOTO 48D048B: MOVLW 07048C: SUBWF 15,F.................... odp[4]=odp[4] << 4;048D: SWAPF 14,F048E: MOVLW F0048F: ANDWF 14,F.................... odp[4] |= odp[5];0490: MOVF 15,W0491: IORWF 14,F........................................ if(odp[6]==0) odp[7]='0';0492: MOVF 16,F0493: BTFSS 03.20494: GOTO 4970495: MOVLW 300496: MOVWF 17.................... odp[6]=odp[6] - '0';0497: MOVLW 300498: SUBWF 16,F.................... odp[7]=odp[7] - '0';0499: SUBWF 17,F.................... if(odp[6]>9) odp[6]=odp[6]-7;049A: MOVF 16,W049B: SUBLW 09049C: BTFSC 03.0049D: GOTO 4A0049E: MOVLW 07049F: SUBWF 16,F.................... if(odp[7]>9) odp[7]=odp[7]-7;04A0: MOVF 17,W04A1: SUBLW 0904A2: BTFSC 03.004A3: GOTO 4A604A4: MOVLW 0704A5: SUBWF 17,F.................... odp[6]=odp[6] << 4;04A6: SWAPF 16,F04A7: MOVLW F004A8: ANDWF 16,F.................... odp[6] |= odp[7];04A9: MOVF 17,W04AA: IORWF 16,F........................................ odp[1]=odp[2];04AB: MOVF 12,W04AC: MOVWF 11.................... odp[2]=odp[4];04AD: MOVF 14,W04AE: MOVWF 12.................... odp[3]=odp[6];04AF: MOVF 16,W04B0: MOVWF 13.................... odp[4],odp[5],odp[6]="";04B1: CLRF 16........................................ /*lcd_gotoxy(1,2);.................... printf(lcd_putc,"%u %u %u %u",odp[0],odp[1],odp[2]odp[3]); */........................................ pom3=0;04B2: BCF 03.604B3: CLRF 23.................... for (pom = 0; pom < 4;pom++)04B4: CLRF 2104B5: MOVF 21,W04B6: SUBLW 0304B7: BTFSS 03.004B8: GOTO 52A.................... {.................... maskovadlo = maskovadlo >> 1; //rotace promene urcene pro maskovani04B9: BCF 03.004BA: RRF 26,F.................... maskovadlo = maskovadlo | 0x80;04BB: BSF 26.7.................... odkl = odp[pom] & maskovadlo; //odlozeni "prenosu" do odkl pomoci maskovadla04BC: MOVLW 1004BD: ADDWF 21,W04BE: MOVWF 0404BF: BSF 03.704C0: MOVF 00,W04C1: ANDWF 26,W04C2: MOVWF 24.................... odp[pom] = odp[pom] << pom3; //rotace znaku04C3: MOVLW 1004C4: ADDWF 21,W04C5: MOVWF 7804C6: MOVLW 0104C7: MOVWF 7A04C8: BTFSC 03.004C9: INCF 7A,F04CA: MOVF 78,W04CB: MOVWF 2804CC: MOVF 7A,W04CD: MOVWF 2904CE: MOVLW 1004CF: ADDWF 21,W04D0: MOVWF 0404D1: BSF 03.704D2: MOVF 00,W04D3: MOVWF 7704D4: MOVF 23,W04D5: MOVWF 7804D6: BTFSC 03.204D7: GOTO 4DC04D8: BCF 03.004D9: RLF 77,F04DA: DECFSZ 78,F04DB: GOTO 4D804DC: MOVF 28,W04DD: MOVWF 0404DE: BCF 03.704DF: BTFSC 29.004E0: BSF 03.704E1: MOVF 77,W04E2: MOVWF 00.................... for (pom2 = 0; pom2 < (8-pom3);pom2++) //rotace odkl204E3: CLRF 2204E4: MOVF 23,W04E5: SUBLW 0804E6: SUBWF 22,W04E7: BTFSC 03.004E8: GOTO 4EE.................... {.................... odkl2 = odkl2 >> 1;04E9: BCF 03.004EA: RRF 25,F.................... odkl2 = odkl2 & 127;04EB: BCF 25.7.................... }04EC: INCF 22,F04ED: GOTO 4E4.................... odp[pom] = odp[pom] | odkl2; //pridani odkl2 ke znaku04EE: MOVLW 1004EF: ADDWF 21,W04F0: MOVWF 7804F1: MOVLW 0104F2: MOVWF 7A04F3: BTFSC 03.004F4: INCF 7A,F04F5: MOVLW 1004F6: ADDWF 21,W04F7: MOVWF 0404F8: BSF 03.704F9: MOVF 00,W04FA: IORWF 25,W04FB: MOVWF 2B04FC: MOVF 78,W04FD: MOVWF 0404FE: BCF 03.704FF: BTFSC 7A.00500: BSF 03.70501: MOVF 2B,W0502: MOVWF 00.................... odp[pom] = odp[pom] & 127; //smazani nejvysiho bitu0503: MOVLW 100504: ADDWF 21,W0505: MOVWF 780506: MOVLW 010507: MOVWF 7A0508: BTFSC 03.00509: INCF 7A,F050A: MOVLW 10050B: ADDWF 21,W050C: MOVWF 04050D: BSF 03.7050E: MOVF 00,W050F: ANDLW 7F0510: MOVWF 2B0511: MOVF 78,W0512: MOVWF 040513: BCF 03.70514: BTFSC 7A.00515: BSF 03.70516: MOVF 2B,W0517: MOVWF 00.................... odkl2 = odkl; //ulozeni odlk na dalsi pruchod0518: MOVF 24,W0519: MOVWF 25.................... pom3++; //inkrementace citace rotace051A: INCF 23,F.................... if (pom3 == 8) //kazdy 8my znak051B: MOVF 23,W051C: SUBLW 08051D: BTFSS 03.2051E: GOTO 528.................... {.................... pom3 = 0; //smaz citac051F: CLRF 23.................... odp[pom+1] = odkl2; //uloz 8my znak vznikly z "prenosu"0520: MOVLW 010521: ADDWF 21,W0522: ADDLW 100523: MOVWF 040524: BSF 03.70525: MOVF 25,W0526: MOVWF 00.................... maskovadlo = 0; //smaz maskovadlo0527: CLRF 26.................... }.................... }0528: INCF 21,F0529: GOTO 4B5.................... odp[pom]='\0';052A: MOVLW 10052B: ADDWF 21,W052C: MOVWF 04052D: BSF 03.7052E: CLRF 00........................................ /*lcd_gotoxy(1,3);.................... printf(lcd_putc,"%u %u %u %u",odp[0],odp[1],odp[2],odp[3]); */.................... lcd_init();052F: CALL 189.................... lcd_gotoxy(1,1);0530: MOVLW 010531: BSF 03.50532: BSF 03.60533: MOVWF 1A0534: MOVWF 1B0535: BCF 03.50536: BCF 03.60537: CALL 23E.................... printf(lcd_putc,"\fPrijata SMS s textem",);0538: CLRF 280539: MOVF 28,W053A: CALL 062053B: INCF 28,F053C: MOVWF 77053D: BSF 03.5053E: BSF 03.6053F: MOVWF 190540: BCF 03.50541: BCF 03.60542: CALL 2730543: MOVLW 150544: SUBWF 28,W0545: BTFSS 03.20546: GOTO 539.................... lcd_gotoxy(9,3);0547: MOVLW 090548: BSF 03.50549: BSF 03.6054A: MOVWF 1A054B: MOVLW 03054C: MOVWF 1B054D: BCF 03.5054E: BCF 03.6054F: CALL 23E.................... printf(lcd_putc,"%s",odp);0550: MOVLW 100551: MOVWF 040552: BSF 03.70553: MOVLW 000554: IORWF 00,W0555: BTFSC 03.20556: GOTO 56B0557: CLRF 290558: MOVF 04,W0559: MOVWF 28055A: BCF 29.0055B: BTFSC 03.7055C: BSF 29.0055D: MOVF 00,W055E: BSF 03.5055F: BSF 03.60560: MOVWF 190561: BCF 03.50562: BCF 03.60563: CALL 2730564: MOVF 28,W0565: MOVWF 040566: BCF 03.70567: BTFSC 29.00568: BSF 03.70569: INCF 04,F056A: GOTO 553.................... output_low(PIN_A4) ;056B: BSF 03.5056C: BCF 05.4056D: BCF 03.5056E: BCF 05.4.................... delay_ms(1000);056F: MOVLW 040570: MOVWF 280571: MOVLW FA0572: BSF 03.50573: BSF 03.60574: MOVWF 1A0575: BCF 03.50576: BCF 03.60577: CALL 1190578: DECFSZ 28,F0579: GOTO 571.................... output_high(PIN_A4);057A: BSF 03.5057B: BCF 05.4057C: BCF 03.5057D: BSF 05.4........................................ //!!! fprintf(MOBIL,"AT+CMGD=1\r"); //smaz prijatou SMSku........................................ if (odp[0] > 64 && odp[0] < 91 )057E: BSF 03.6057F: MOVF 10,W0580: SUBLW 400581: BTFSC 03.00582: GOTO 5890583: MOVF 10,W0584: SUBLW 5A0585: BTFSS 03.00586: GOTO 589.................... {.................... odp[0] += 32;0587: MOVLW 200588: ADDWF 10,F.................... }........................................ if (odp[1] > 64 && odp[1] < 91 )0589: MOVF 11,W058A: SUBLW 40058B: BTFSC 03.0058C: GOTO 593058D: MOVF 11,W058E: SUBLW 5A058F: BTFSS 03.00590: GOTO 593.................... {.................... odp[1] += 32;0591: MOVLW 200592: ADDWF 11,F.................... }........................................ if (odp[2] > 64 && odp[2] < 91 )0593: MOVF 12,W0594: SUBLW 400595: BTFSC 03.00596: GOTO 59D0597: MOVF 12,W0598: SUBLW 5A0599: BTFSS 03.0059A: GOTO 59D.................... {.................... odp[2] += 32;059B: MOVLW 20059C: ADDWF 12,F.................... }........................................ if (odp[3] > 64 && odp[3] < 91 )059D: MOVF 13,W059E: SUBLW 40059F: BTFSC 03.005A0: GOTO 5A705A1: MOVF 13,W05A2: SUBLW 5A05A3: BTFSS 03.005A4: GOTO 5A7.................... {.................... odp[3] += 32;05A5: MOVLW 2005A6: ADDWF 13,F.................... }........................................ lcd_gotoxy(1,1);05A7: MOVLW 0105A8: BSF 03.505A9: MOVWF 1A05AA: MOVWF 1B05AB: BCF 03.505AC: BCF 03.605AD: CALL 23E.................... printf(lcd_putc,"\f Odstraneni velkych",);05AE: CLRF 2805AF: MOVF 28,W05B0: CALL 07C05B1: INCF 28,F05B2: MOVWF 7705B3: BSF 03.505B4: BSF 03.605B5: MOVWF 1905B6: BCF 03.505B7: BCF 03.605B8: CALL 27305B9: MOVLW 1405BA: SUBWF 28,W05BB: BTFSS 03.205BC: GOTO 5AF.................... lcd_gotoxy(1,2);05BD: MOVLW 0105BE: BSF 03.505BF: BSF 03.605C0: MOVWF 1A05C1: MOVLW 0205C2: MOVWF 1B05C3: BCF 03.505C4: BCF 03.605C5: CALL 23E.................... printf(lcd_putc," pismen");05C6: CLRF 2805C7: MOVF 28,W05C8: CALL 09505C9: INCF 28,F05CA: MOVWF 7705CB: BSF 03.505CC: BSF 03.605CD: MOVWF 1905CE: BCF 03.505CF: BCF 03.605D0: CALL 27305D1: MOVLW 0D05D2: SUBWF 28,W05D3: BTFSS 03.205D4: GOTO 5C7.................... lcd_gotoxy(9,4);05D5: MOVLW 0905D6: BSF 03.505D7: BSF 03.605D8: MOVWF 1A05D9: MOVLW 0405DA: MOVWF 1B05DB: BCF 03.505DC: BCF 03.605DD: CALL 23E.................... printf(lcd_putc,"%s",odp);05DE: MOVLW 1005DF: MOVWF 0405E0: BSF 03.705E1: MOVLW 0005E2: IORWF 00,W05E3: BTFSC 03.205E4: GOTO 5F905E5: CLRF 2905E6: MOVF 04,W05E7: MOVWF 2805E8: BCF 29.005E9: BTFSC 03.705EA: BSF 29.005EB: MOVF 00,W05EC: BSF 03.505ED: BSF 03.605EE: MOVWF 1905EF: BCF 03.505F0: BCF 03.605F1: CALL 27305F2: MOVF 28,W05F3: MOVWF 0405F4: BCF 03.705F5: BTFSC 29.005F6: BSF 03.705F7: INCF 04,F05F8: GOTO 5E1.................... output_low(PIN_A4) ;05F9: BSF 03.505FA: BCF 05.405FB: BCF 03.505FC: BCF 05.4.................... delay_ms(1000);05FD: MOVLW 0405FE: MOVWF 2805FF: MOVLW FA0600: BSF 03.50601: BSF 03.60602: MOVWF 1A0603: BCF 03.50604: BCF 03.60605: CALL 1190606: DECFSZ 28,F0607: GOTO 5FF.................... output_high(PIN_A4);0608: BSF 03.50609: BCF 05.4060A: BCF 03.5060B: BSF 05.4............................................................ //!!!KAKL.................... fprintf(VRTULE,"%s",odp);060C: MOVLW 10060D: MOVWF 04060E: BSF 03.7060F: MOVLW 000610: IORWF 00,W0611: BTFSC 03.20612: GOTO 6270613: CLRF 290614: MOVF 04,W0615: MOVWF 280616: BCF 29.00617: BTFSC 03.70618: BSF 29.00619: MOVF 00,W061A: BSF 03.5061B: BSF 03.6061C: MOVWF 19061D: BCF 03.5061E: BCF 03.6061F: GOTO 2C20620: MOVF 28,W0621: MOVWF 040622: BCF 03.70623: BTFSC 29.00624: BSF 03.70625: INCF 04,F0626: GOTO 60F............................................................ if (odp[0] == 122 && odp[1] == 97 && odp[2] == 112 && odp[3] == 49) //odp=="zap1"0627: BSF 03.60628: MOVF 10,W0629: SUBLW 7A062A: BTFSS 03.2062B: GOTO 63C062C: MOVF 11,W062D: SUBLW 61062E: BTFSS 03.2062F: GOTO 63C0630: MOVF 12,W0631: SUBLW 700632: BTFSS 03.20633: GOTO 63C0634: MOVF 13,W0635: SUBLW 310636: BTFSS 03.20637: GOTO 63C.................... {.................... status=1;0638: MOVLW 010639: BCF 03.6063A: MOVWF 27063B: BSF 03.6.................... }........................................ if (odp[0] == 118 && odp[1] == 121 && odp[2] == 112 && odp[3]== 49) //odp=="vyp1"063C: MOVF 10,W063D: SUBLW 76063E: BTFSS 03.2063F: GOTO 6500640: MOVF 11,W0641: SUBLW 790642: BTFSS 03.20643: GOTO 6500644: MOVF 12,W0645: SUBLW 700646: BTFSS 03.20647: GOTO 6500648: MOVF 13,W0649: SUBLW 31064A: BTFSS 03.2064B: GOTO 650.................... {.................... status=2;064C: MOVLW 02064D: BCF 03.6064E: MOVWF 27064F: BSF 03.6.................... }........................................ if (odp[0] == 97 && odp[1] == 104 && odp[2] == 111 && odp[3]== 106) //odp=="ahoj"0650: MOVF 10,W0651: SUBLW 610652: BTFSS 03.20653: GOTO 6640654: MOVF 11,W0655: SUBLW 680656: BTFSS 03.20657: GOTO 6640658: MOVF 12,W0659: SUBLW 6F065A: BTFSS 03.2065B: GOTO 664065C: MOVF 13,W065D: SUBLW 6A065E: BTFSS 03.2065F: GOTO 664.................... {.................... status=3;0660: MOVLW 030661: BCF 03.60662: MOVWF 270663: BSF 03.6.................... }........................................ switch (status).................... {0664: BCF 03.60665: MOVF 27,W0666: XORLW 010667: BTFSC 03.20668: GOTO 6700669: XORLW 03066A: BTFSC 03.2066B: GOTO 694066C: XORLW 01066D: BTFSC 03.2066E: GOTO 6B8066F: GOTO 6D8........................................ case 1: output_low(zar1);0670: BSF 03.50671: BCF 05.30672: BCF 03.50673: BCF 05.3.................... printf(lcd_putc,"\f");0674: MOVLW 0C0675: BSF 03.50676: BSF 03.60677: MOVWF 190678: BCF 03.50679: BCF 03.6067A: CALL 273.................... lcd_gotoxy(1,2);067B: MOVLW 01067C: BSF 03.5067D: BSF 03.6067E: MOVWF 1A067F: MOVLW 020680: MOVWF 1B0681: BCF 03.50682: BCF 03.60683: CALL 23E.................... printf(lcd_putc," Zapnuto zarizeni 1");0684: CLRF 280685: MOVF 28,W0686: CALL 0A70687: INCF 28,F0688: MOVWF 770689: BSF 03.5068A: BSF 03.6068B: MOVWF 19068C: BCF 03.5068D: BCF 03.6068E: CALL 273068F: MOVLW 130690: SUBWF 28,W0691: BTFSS 03.20692: GOTO 685.................... break;0693: GOTO 710........................................ case 2: output_high(zar1);0694: BSF 03.50695: BCF 05.30696: BCF 03.50697: BSF 05.3.................... printf(lcd_putc,"\f");0698: MOVLW 0C0699: BSF 03.5069A: BSF 03.6069B: MOVWF 19069C: BCF 03.5069D: BCF 03.6069E: CALL 273.................... lcd_gotoxy(1,2);069F: MOVLW 0106A0: BSF 03.506A1: BSF 03.606A2: MOVWF 1A06A3: MOVLW 0206A4: MOVWF 1B06A5: BCF 03.506A6: BCF 03.606A7: CALL 23E.................... printf(lcd_putc," Vypnuto zarizeni 1");06A8: CLRF 2806A9: MOVF 28,W06AA: CALL 0BF06AB: INCF 28,F06AC: MOVWF 7706AD: BSF 03.506AE: BSF 03.606AF: MOVWF 1906B0: BCF 03.506B1: BCF 03.606B2: CALL 27306B3: MOVLW 1306B4: SUBWF 28,W06B5: BTFSS 03.206B6: GOTO 6A9.................... break;06B7: GOTO 710........................................ case 3: printf(lcd_putc,"\f");06B8: MOVLW 0C06B9: BSF 03.506BA: BSF 03.606BB: MOVWF 1906BC: BCF 03.506BD: BCF 03.606BE: CALL 273.................... lcd_gotoxy(1,2);06BF: MOVLW 0106C0: BSF 03.506C1: BSF 03.606C2: MOVWF 1A06C3: MOVLW 0206C4: MOVWF 1B06C5: BCF 03.506C6: BCF 03.606C7: CALL 23E.................... printf(lcd_putc," Preji hezky den!");06C8: CLRF 2806C9: MOVF 28,W06CA: CALL 0D706CB: INCF 28,F06CC: MOVWF 7706CD: BSF 03.506CE: BSF 03.606CF: MOVWF 1906D0: BCF 03.506D1: BCF 03.606D2: CALL 27306D3: MOVLW 1206D4: SUBWF 28,W06D5: BTFSS 03.206D6: GOTO 6C9.................... break;06D7: GOTO 710........................................ default: printf(lcd_putc,"\f");06D8: MOVLW 0C06D9: BSF 03.506DA: BSF 03.606DB: MOVWF 1906DC: BCF 03.506DD: BCF 03.606DE: CALL 273.................... lcd_gotoxy(1,2);06DF: MOVLW 0106E0: BSF 03.506E1: BSF 03.606E2: MOVWF 1A06E3: MOVLW 0206E4: MOVWF 1B06E5: BCF 03.506E6: BCF 03.606E7: CALL 23E.................... printf(lcd_putc," Prikaz nebyl");06E8: CLRF 2806E9: MOVF 28,W06EA: CALL 0EE06EB: INCF 28,F06EC: MOVWF 7706ED: BSF 03.506EE: BSF 03.606EF: MOVWF 1906F0: BCF 03.506F1: BCF 03.606F2: CALL 27306F3: MOVLW 1006F4: SUBWF 28,W06F5: BTFSS 03.206F6: GOTO 6E9.................... lcd_gotoxy(1,3);06F7: MOVLW 0106F8: BSF 03.506F9: BSF 03.606FA: MOVWF 1A06FB: MOVLW 0306FC: MOVWF 1B06FD: BCF 03.506FE: BCF 03.606FF: CALL 23E.................... printf(lcd_putc," rozeznan");0700: CLRF 280701: MOVF 28,W0702: CALL 1060703: INCF 28,F0704: MOVWF 770705: BSF 03.50706: BSF 03.60707: MOVWF 190708: BCF 03.50709: BCF 03.6070A: CALL 273070B: MOVLW 0E070C: SUBWF 28,W070D: BTFSS 03.2070E: GOTO 701.................... break;070F: GOTO 710.................... }.................... delay_ms(1000);0710: MOVLW 040711: MOVWF 280712: MOVLW FA0713: BSF 03.50714: BSF 03.60715: MOVWF 1A0716: BCF 03.50717: BCF 03.60718: CALL 1190719: DECFSZ 28,F071A: GOTO 712.................... }........................................ }071B: GOTO 353.................... }071C: SLEEPConfiguration Fuses:Word 1: 3F3A HS NOWDT NOPUT NODEBUG NOPROTECT NOBROWNOUT NOLVP NOCPD NOWRT