CCS PCM C Compiler, Version 4.059d, 15399 03-I-08 17:43Filename: C:\RS\projekty\lcdmob2\.\main.lstROM used: 1040 words (51%)Largest free fragment is 1008RAM used: 165 (45%) at main() level234 (64%) worst caseStack: 4 locations*0000: MOVLW 000001: MOVWF 0A0002: GOTO 14E0003: NOP.................... #include "main.h".................... #include <16F877A.h>.................... //////// Standard Header file for the PIC16F877A device ////////////////.................... #device PIC16F877A.................... #list........................................ #device adc=8........................................ #FUSES NOWDT //No Watch Dog Timer.................... #FUSES XT //Crystal osc <= 4mhz.................... #FUSES NOPUT //No Power Up Timer.................... #FUSES NOPROTECT //Code not protected from reading.................... #FUSES NODEBUG //No Debug mode for ICD.................... #FUSES NOBROWNOUT //No brownout reset.................... #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O.................... #FUSES NOCPD //No EE protection.................... #FUSES NOWRT //Program memory not write protected........................................ #use delay(clock=4000000,RESTART_WDT)0062: MOVLW 410063: MOVWF 040064: BSF 03.70065: MOVF 00,W0066: BTFSC 03.20067: GOTO 0790068: MOVLW 010069: MOVWF 78006A: MOVLW BF006B: MOVWF 77006C: CLRWDT006D: DECFSZ 77,F006E: GOTO 06C006F: DECFSZ 78,F0070: GOTO 06A0071: MOVLW 4A0072: MOVWF 770073: DECFSZ 77,F0074: GOTO 0730075: NOP0076: CLRWDT0077: DECFSZ 00,F0078: GOTO 0680079: 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)........................................ #include "lcd.c".................... // LCD modul pro ovladani dvouradkoveho LCD modulu se standardnim Hitachi radicem.................... // (c)miho 2002,2005.................... //.................... // Historie:.................... //.................... // 0.00 Uvodni verze se snadnou definici portu LCD displeje.................... // 0.01 Oprava portu (zapomenute stare identifikatory).................... // 0.02 Doplnena moznost pripojeni datoveho portu LCD na libovolne porty.................... // 0.03 Doplnena procedura lcd_clr pro smazani displeje.................... //.................... //.................... // Funkce:.................... //.................... // lcd_init() inicializuje LCD displej a porty, nutno volat jako prvni.................... //.................... // lcd_putc(c) zapis snaku do lcd displeje, zpracovava nasledujici ridici znaky.................... // \f = \x0C - nova stranka - smazani displeje.................... // \n = \x0A - odradkovani (prechod na druhou radku).................... // \b = \x08 - backspace - posunuti kurzoru o 1 pozici zpet.................... // \r = \x0D - goto home to position 1,1.................... // \0 .. \7 - definovatelne znaky v pozicich 0 az 7 v CGRAM.................... // \20 .. \27 - alternativne zapsane znaky (oktalove) v pozicich 0 az 7 CGRAM.................... // Pozor na to, ze funkce printf konci tisk pokud narazi na \0 (konec retezce).................... //.................... // lcd_gotoxy(x,y) presune kurzor na uvedenou adresu.................... // nekontroluje parametry.................... //.................... // lcd_cursor_on zapne kurzor.................... // lcd_cursor_off vypne kurzor.................... //.................... // lcd_clr smaze displej.................... //.................... // lcd_define_char(Index, Def) Makro, ktere definuje znaky od pozice Index obsahem definicniho.................... // retezce Def. Kazdych 8 znaku retezce Def definuje dalsi znak v CGRAM..................... // Kapacita CGRAM je celkem 8 znaku s indexem 0 az 7..................... // Na konci se provede lcd_gotoxy(1,1)..................... // Na konci teto knihovny je priklad pouziti definovanych znaku.................... //.................... //.................... // Definice portu: // Datovy port displeje pripojeny na 4 bity za sebou na jeden port.................... //.................... // #define LCD_RS PIN_B2 // rizeni registru LCD displeje.................... // #define LCD_E PIN_B1 // enable LCD displeje.................... // #define LCD_DATA_LSB PIN_C2 // pripojeni LSB bitu datoveho portu LCD displeje (celkem 4 bity vzestupne za sebou).................... //.................... //.................... // Alternativni definice: // Datovy port displeje pripojeny na libovolne 4 bitove porty (vede na kod delsi asi o 25 slov).................... //.................... // #define LCD_RS PIN_B2 // rizeni registru LCD displeje.................... // #define LCD_E PIN_B1 // enable LCD displeje.................... // #define LCD_D0 PIN_C2 // D0 - datove bity pripojene na libovolne porty.................... // #define LCD_D1 PIN_C3 // D1.................... // #define LCD_D2 PIN_C4 // D2.................... // #define LCD_D3 PIN_C5 // D3.................................................................................................... // Privatni sekce, cist jen v pripade, ze neco nefunguje.................................................................................................... #ifdef LCD_DATA_LSB.................... // Generovane defince portu pro ucely teto knihovny aby kod generoval spravne IO operace a soucasne.................... // bylo mozne jednoduse deklarovat pripojene piny LCD displeje pri pouziti teto knihovny. Problem spociva.................... // v tom, ze se musi spravne ridit smery portu a soucasne datovy port zabira jen 4 bity ze zadaneho portu.................... //.................... #define LCD_SHIFT (LCD_DATA_LSB&7) // pocet bitu posuvu datoveho kanalu v datovem portu.................... #define LCD_PORT (LCD_DATA_LSB>>3) // adresa LCD datoveho portu.................... #define LCD_TRIS (LCD_PORT+0x80) // adresa prislusneho TRIS registru.................... #define LCD_MASK (0xF<<LCD_SHIFT) // maska platnych bitu.................... //.................... #if LCD_SHIFT>4 // kontrola mezi.................... #error LCD data port LSB bit not in range 0..4.................... #endif.................... #endif............................................................ // Definice konstant pro LCD display.................... //.................... #define LCD_CURSOR_ON_ 0x0E // kurzor jako blikajici radka pod znakem.................... #define LCD_CURSOR_OFF_ 0x0C // zadny kurzor.................... #define LCD_LINE_2 0x40 // adresa 1. znaku 2. radky............................................................ // Definice rezimu LCD displeje.................... //.................... BYTE const LCD_INIT_STRING[4] =.................... {.................... 0x28, // intrfejs 4 bity, 2 radky, font 5x7.................... LCD_CURSOR_OFF_, // display on, kurzor off,.................... 0x01, // clear displeje.................... 0x06 // inkrement pozice kurzoru (posun kurzoru doprava).................... };............................................................ // Odesle nibble do displeje (posle data a klikne signalem e).................... //.................... void lcd_send_nibble( BYTE n ).................... {.................... #ifdef LCD_DATA_LSB.................... // data jsou za sebou na 4 bitech jednoho portu.................... *LCD_PORT = (*LCD_PORT & ~LCD_MASK) | ((n << LCD_SHIFT) & LCD_MASK); // nastav datove bity portu a ostatni zachovej007A: MOVF 07,W007B: ANDLW F0007C: BSF 03.6007D: MOVWF 48007E: MOVF 47,W007F: ANDLW 0F0080: IORWF 48,W0081: BCF 03.60082: MOVWF 07.................... #else.................... // data jsou na libovolnych 4 bitech libovolnych portu.................... output_bit(LCD_D0,bit_test(n,0));.................... output_bit(LCD_D1,bit_test(n,1));.................... output_bit(LCD_D2,bit_test(n,2));.................... output_bit(LCD_D3,bit_test(n,3));.................... #endif.................... output_bit(LCD_E,1); // vzestupna hrana0083: BSF 06.00084: BSF 03.50085: BCF 06.0.................... delay_us(1); // pockej alespon 450ns od e nebo alespon 195ns od dat0086: CLRWDT.................... output_bit(LCD_E,0); // sestupna hrana (minimalni perioda e je 1us)0087: BCF 03.50088: BCF 06.00089: BSF 03.5008A: BCF 06.0.................... }008B: BCF 03.5008C: 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 registr008D: BSF 03.6008E: MOVF 45,F008F: BTFSS 03.20090: GOTO 0950091: BCF 03.60092: BCF 06.10093: GOTO 0970094: BSF 03.60095: BCF 03.60096: BSF 06.10097: BSF 03.50098: BCF 06.1.................... swap(n);0099: BCF 03.5009A: BSF 03.6009B: SWAPF 46,F.................... lcd_send_nibble(n); // posli horni pulku bajtu009C: MOVF 46,W009D: MOVWF 47009E: BCF 03.6009F: CALL 07A.................... swap(n);00A0: BSF 03.600A1: SWAPF 46,F.................... lcd_send_nibble(n); // posli spodni pulku bajtu00A2: MOVF 46,W00A3: MOVWF 4700A4: BCF 03.600A5: CALL 07A.................... delay_us(40); // minimalni doba na provedeni prikazu00A6: CLRWDT00A7: MOVLW 0C00A8: MOVWF 7700A9: DECFSZ 77,F00AA: GOTO 0A900AB: GOTO 0AC.................... }00AC: 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 napajeni00AD: MOVLW 1400AE: BSF 03.600AF: MOVWF 4100B0: BCF 03.600B1: CALL 062........................................ #ifdef LCD_DATA_LSB.................... // data jsou na 4 bitech za sebou, nastav smer pro vsechny dalsi prenosy.................... *LCD_TRIS = *LCD_TRIS & ~LCD_MASK; // nuluj odpovidajici bity tris registru datoveho portu LCD00B2: MOVLW F000B3: BSF 03.500B4: ANDWF 07,F.................... #endif........................................ output_bit(LCD_RS,0); // nastav jako vystup a nastav klidovy stav00B5: BCF 03.500B6: BCF 06.100B7: BSF 03.500B8: BCF 06.1.................... output_bit(LCD_E, 0); // nastav jako vystup a nastav klidovy stav00B9: BCF 03.500BA: BCF 06.000BB: BSF 03.500BC: BCF 06.0........................................ for (i=0; i<3; i++) // nastav lcd do rezimu 8 bitu sbernice00BD: BCF 03.500BE: BSF 03.600BF: CLRF 3D00C0: MOVF 3D,W00C1: SUBLW 0200C2: BTFSS 03.000C3: GOTO 0D0.................... {.................... delay_ms(2); // muze byt rozdelany prenos dat (2x 4 bity) nebo pomaly povel00C4: MOVLW 0200C5: MOVWF 4100C6: BCF 03.600C7: CALL 062.................... lcd_send_nibble(3); // rezim 8 bitu00C8: MOVLW 0300C9: BSF 03.600CA: MOVWF 4700CB: BCF 03.600CC: CALL 07A.................... }00CD: BSF 03.600CE: INCF 3D,F00CF: GOTO 0C0........................................ delay_us(40); // cas na zpracovani00D0: CLRWDT00D1: MOVLW 0C00D2: MOVWF 7700D3: DECFSZ 77,F00D4: GOTO 0D300D5: GOTO 0D6.................... lcd_send_nibble(2); // nastav rezim 4 bitu (plati od nasledujiciho prenosu)00D6: MOVLW 0200D7: MOVWF 4700D8: BCF 03.600D9: CALL 07A.................... delay_us(40); // cas na zpracovani00DA: CLRWDT00DB: MOVLW 0C00DC: MOVWF 7700DD: DECFSZ 77,F00DE: GOTO 0DD00DF: GOTO 0E0........................................ for (i=0;i<3;i++) // proved inicializaci (nastaveni modu, smazani apod)00E0: BSF 03.600E1: CLRF 3D00E2: MOVF 3D,W00E3: SUBLW 0200E4: BTFSS 03.000E5: GOTO 0F8.................... {.................... lcd_send_byte(0,LCD_INIT_STRING[i]);00E6: MOVF 3D,W00E7: BCF 03.600E8: CALL 00400E9: BSF 03.600EA: MOVWF 3E00EB: CLRF 4500EC: MOVF 3E,W00ED: MOVWF 4600EE: BCF 03.600EF: CALL 08D.................... delay_ms(2);00F0: MOVLW 0200F1: BSF 03.600F2: MOVWF 4100F3: BCF 03.600F4: CALL 062.................... }00F5: BSF 03.600F6: INCF 3D,F00F7: GOTO 0E2.................... }00F8: BCF 03.600F9: GOTO 190 (RETURN)............................................................ // Proved presun kurzoru.................... //.................... // Pozice 1.1 je domu.................... //.................... void lcd_gotoxy( BYTE x, BYTE y).................... {........................................ BYTE Adr;........................................ Adr=x-1;00FA: MOVLW 0100FB: BSF 03.600FC: SUBWF 41,W00FD: MOVWF 43.................... if(y==2)00FE: MOVF 42,W00FF: SUBLW 020100: BTFSS 03.20101: GOTO 104.................... Adr+=LCD_LINE_2;0102: MOVLW 400103: ADDWF 43,F........................................ lcd_send_byte(0,0x80|Adr);0104: MOVF 43,W0105: IORLW 800106: MOVWF 440107: CLRF 450108: MOVF 44,W0109: MOVWF 46010A: BCF 03.6010B: CALL 08D.................... }010C: RETLW 00............................................................ // Zapis znaku na displej, zpracovani ridicich znaku.................... //.................... void lcd_putc( char c).................... {........................................ switch (c).................... {010D: BSF 03.6010E: MOVF 40,W010F: XORLW 0C0110: BCF 03.60111: BTFSC 03.20112: GOTO 11D0113: XORLW 060114: BTFSC 03.20115: GOTO 1290116: XORLW 070117: BTFSC 03.20118: GOTO 1310119: XORLW 05011A: BTFSC 03.2011B: GOTO 138011C: GOTO 13F.................... case '\f' : lcd_send_byte(0,1); // smaz displej011D: BSF 03.6011E: CLRF 45011F: MOVLW 010120: MOVWF 460121: BCF 03.60122: CALL 08D.................... delay_ms(2);0123: MOVLW 020124: BSF 03.60125: MOVWF 410126: BCF 03.60127: CALL 062.................... break;0128: GOTO 14D.................... case '\n' : lcd_gotoxy(1,2); break; // presun se na 1. znak 2. radky0129: MOVLW 01012A: BSF 03.6012B: MOVWF 41012C: MOVLW 02012D: MOVWF 42012E: BCF 03.6012F: CALL 0FA0130: GOTO 14D.................... case '\r' : lcd_gotoxy(1,1); break; // presun home0131: MOVLW 010132: BSF 03.60133: MOVWF 410134: MOVWF 420135: BCF 03.60136: CALL 0FA0137: GOTO 14D.................... case '\b' : lcd_send_byte(0,0x10); break; // posun kurzor o 1 zpet0138: BSF 03.60139: CLRF 45013A: MOVLW 10013B: MOVWF 46013C: BCF 03.6013D: CALL 08D013E: GOTO 14D.................... default : if (c<0x20) c&=0x7; // preklopeni definovatelnych znaku na rozsah 0 az 0x1F013F: BSF 03.60140: MOVF 40,W0141: SUBLW 1F0142: BTFSS 03.00143: GOTO 1460144: MOVLW 070145: ANDWF 40,F.................... lcd_send_byte(1,c); break; // zapis znak0146: MOVLW 010147: MOVWF 450148: MOVF 40,W0149: MOVWF 46014A: BCF 03.6014B: CALL 08D014C: GOTO 14D.................... }.................... }014D: RETLW 00............................................................ // Zapni kurzor.................... //.................... void lcd_cursor_on().................... {.................... lcd_send_byte(0,LCD_CURSOR_ON_);.................... }............................................................ // Vypni kurzor.................... //.................... void lcd_cursor_off().................... {.................... lcd_send_byte(0,LCD_CURSOR_OFF_);.................... }............................................................ // Smaz displej.................... //.................... void lcd_clr().................... {.................... lcd_putc('\f');.................... }............................................................ // Definice vlastnich fontu.................... //.................... // Vlastnich definic muze byt jen 8 do pozic 0 az 7 pameti CGRAM radice lcd displeje.................... // Pro snadne definovani jsou pripraveny nasledujici definice a na konci souboru je uveden.................... // priklad pouziti definovanych znaku............................................................. // Pomocna procedura pro posilani ridicich dat do radice displeje.................... //.................... void lcd_putc2(int Data).................... {.................... lcd_send_byte(1,Data);.................... }............................................................ // Pomocne definice pro programovani obsahu CGRAM.................... //.................... #define lcd_define_start(Code) lcd_send_byte(0,0x40+(Code<<3)); delay_ms(2).................... #define lcd_define_def(String) printf(lcd_putc2,String);.................... #define lcd_define_end() lcd_send_byte(0,3); delay_ms(2)............................................................ // Vlastni vykonne makro pro definovani fontu do pozice Index CGRAM s definicnim retezcem Def.................... //.................... #define lcd_define_char(Index, Def) lcd_define_start(Index); lcd_define_def(Def); lcd_define_end();............................................................ // Pripravene definice fontu vybranych znaku.................... // V tabulce nesmi byt 00 (konec retezce v printf()), misto toho davame 80.................... //.................... #define LCD_CHAR_BAT100 "\x0E\x1F\x1F\x1F\x1F\x1F\x1F\x1F" /* symbol plne baterie */.................... #define LCD_CHAR_BAT50 "\x0E\x1F\x11\x11\x13\x17\x1F\x1F" /* symbol polovicni baterie */.................... #define LCD_CHAR_BAT0 "\x0E\x1F\x11\x11\x11\x11\x11\x1F" /* symbol vybite baterie */.................... #define LCD_CHAR_UP "\x80\x04\x0E\x15\x04\x04\x04\x80" /* symbol sipka nahoru */.................... #define LCD_CHAR_DOWN "\x80\x04\x04\x04\x15\x0E\x04\x80" /* symbol Sipka dolu */.................... #define LCD_CHAR_LUA "\x04\x0E\x11\x11\x1F\x11\x11\x80" /* A s carkou */.................... #define LCD_CHAR_LLA "\x01\x02\x0E\x01\x1F\x11\x0F\x80" /* a s carkou */.................... #define LCD_CHAR_HUC "\x0A\x0E\x11\x10\x10\x11\x0E\x80" /* C s hackem */.................... #define LCD_CHAR_HLC "\x0A\x04\x0E\x10\x10\x11\x0E\x80" /* c s hackem */.................... #define LCD_CHAR_HUD "\x0A\x1C\x12\x11\x11\x12\x1C\x80" /* D s hackem */.................... #define LCD_CHAR_HLD "\x05\x03\x0D\x13\x11\x11\x0F\x80" /* d s hackem */.................... #define LCD_CHAR_LUE "\x04\x1F\x10\x10\x1E\x10\x1F\x80" /* E s carkou */.................... #define LCD_CHAR_LLE "\x01\x02\x0E\x11\x1F\x10\x0E\x80" /* e s carkou */.................... #define LCD_CHAR_HUE "\x0A\x1F\x10\x1E\x10\x10\x1F\x80" /* E s hackem */.................... #define LCD_CHAR_HLE "\x0A\x04\x0E\x11\x1F\x10\x0E\x80" /* e s hackem */.................... #define LCD_CHAR_LUI "\x04\x0E\x04\x04\x04\x04\x0E\x80" /* I s carkou */.................... #define LCD_CHAR_LLI "\x02\x04\x80\x0C\x04\x04\x0E\x80" /* i s carkou */.................... #define LCD_CHAR_HUN "\x0A\x15\x11\x19\x15\x13\x11\x80" /* N s hackem */.................... #define LCD_CHAR_HLN "\x0A\x04\x16\x19\x11\x11\x11\x80" /* n s hackem */.................... #define LCD_CHAR_LUO "\x04\x0E\x11\x11\x11\x11\x0E\x80" /* O s carkou */.................... #define LCD_CHAR_LLO "\x02\x04\x0E\x11\x11\x11\x0E\x80" /* o s carkou */.................... #define LCD_CHAR_HUR "\x0A\x1E\x11\x1E\x14\x12\x11\x80" /* R s hackem */.................... #define LCD_CHAR_HLR "\x0A\x04\x16\x19\x10\x10\x10\x80" /* r s hackem */.................... #define LCD_CHAR_HUS "\x0A\x0F\x10\x0E\x01\x01\x1E\x80" /* S s hackem */.................... #define LCD_CHAR_HLS "\x0A\x04\x0E\x10\x0E\x01\x1E\x80" /* s s hackem */.................... #define LCD_CHAR_HUT "\x0A\x1F\x04\x04\x04\x04\x04\x80" /* T s hackem */.................... #define LCD_CHAR_HLT "\x0A\x0C\x1C\x08\x08\x09\x06\x80" /* t s hackem */.................... #define LCD_CHAR_LUU "\x02\x15\x11\x11\x11\x11\x0E\x80" /* U s carkou */.................... #define LCD_CHAR_LLU "\x02\x04\x11\x11\x11\x13\x0D\x80" /* u s carkou */.................... #define LCD_CHAR_CUU "\x06\x17\x11\x11\x11\x11\x0E\x80" /* U s krouzkem */.................... #define LCD_CHAR_CLU "\x06\x06\x11\x11\x11\x11\x0E\x80" /* u s krouzkem */.................... #define LCD_CHAR_LUY "\x02\x15\x11\x0A\x04\x04\x04\x80" /* Y s carkou */.................... #define LCD_CHAR_LLY "\x02\x04\x11\x11\x0F\x01\x0E\x80" /* y s carkou */.................... #define LCD_CHAR_HUZ "\x0A\x1F\x01\x02\x04\x08\x1F\x80" /* Z s hackem */.................... #define LCD_CHAR_HLZ "\x0A\x04\x1F\x02\x04\x08\x1F\x80" /* z s hackem */............................................................ // Priklad pouziti definovanych znaku.................... //.................... //.................... //void lcd_sample().................... //{.................... // lcd_define_char(0,LCD_CHAR_BAT50); // Priklad definice znaku baterie do pozice 0.................... // lcd_define_char(2,LCD_CHAR_HLE LCD_CHAR_LUI); // Priklad definice znaku e s hackem a I s carkou od pozice 2.................... // // vsimnete si, ze neni carka mezi retezci s definici (oba retezce definuji.................... // // jediny definicni retezec).................... // printf(lcd_putc,"\fZnaky:\20\22\23"); // priklad vypisu znaku z pozice 0, 2 a 3.................... // delay_ms(1000);.................... // lcd_define_char(0,LCD_CHAR_BAT0); // Predefinovani tvaru znaku v pozici 0.................... // delay_ms(1000);.................... //}............................................................ void main().................... {014E: CLRF 04014F: BCF 03.70150: MOVLW 1F0151: ANDWF 03,F0152: MOVLW 0C0153: BSF 03.50154: MOVWF 190155: MOVLW A60156: MOVWF 180157: MOVLW 900158: BCF 03.50159: MOVWF 18015A: BSF 03.5015B: BSF 1F.0015C: BSF 1F.1015D: BSF 1F.2015E: BCF 1F.3015F: MOVLW 070160: MOVWF 1C.................... char odp1[45];.................... char odp2[10];.................... char odp3[45];.................... char odp4[10];.................... char odp5[45];................................................................................ setup_adc_ports(NO_ANALOGS);*0164: BSF 03.50165: BSF 1F.00166: BSF 1F.10167: BSF 1F.20168: BCF 1F.3.................... setup_adc(ADC_OFF);0169: BCF 03.5016A: BCF 1F.0.................... setup_psp(PSP_DISABLED);016B: BSF 03.5016C: BCF 09.4.................... setup_spi(FALSE);*0161: MOVLW FF0162: BCF 03.50163: MOVWF 20*016D: BCF 03.5016E: BCF 14.5016F: BCF 20.50170: MOVF 20,W0171: BSF 03.50172: MOVWF 070173: BCF 03.50174: BSF 20.40175: MOVF 20,W0176: BSF 03.50177: MOVWF 070178: BCF 03.50179: BCF 20.3017A: MOVF 20,W017B: BSF 03.5017C: MOVWF 07017D: MOVLW 00017E: BCF 03.5017F: MOVWF 140180: BSF 03.50181: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);0182: MOVF 01,W0183: ANDLW C70184: IORLW 080185: MOVWF 01.................... setup_timer_1(T1_DISABLED);0186: BCF 03.50187: CLRF 10.................... setup_timer_2(T2_DISABLED,0,1);0188: MOVLW 000189: MOVWF 78018A: MOVWF 12018B: MOVLW 00018C: BSF 03.5018D: MOVWF 12........................................ lcd_init();018E: BCF 03.5018F: GOTO 0AD........................................ delay_ms(2000);0190: MOVLW 080191: MOVWF 620192: MOVLW FA0193: BSF 03.60194: MOVWF 410195: BCF 03.60196: CALL 0620197: DECFSZ 62,F0198: GOTO 192........................................ printf(lcd_putc,"\f Z");0199: MOVLW 0C019A: BSF 03.6019B: MOVWF 40019C: BCF 03.6019D: CALL 10D019E: MOVLW 20019F: BSF 03.601A0: MOVWF 4001A1: BCF 03.601A2: CALL 10D01A3: MOVLW 5A01A4: BSF 03.601A5: MOVWF 4001A6: BCF 03.601A7: CALL 10D.................... delay_ms(100);01A8: MOVLW 6401A9: BSF 03.601AA: MOVWF 4101AB: BCF 03.601AC: CALL 062.................... printf(lcd_putc,"a");01AD: MOVLW 6101AE: BSF 03.601AF: MOVWF 4001B0: BCF 03.601B1: CALL 10D.................... delay_ms(50);01B2: MOVLW 3201B3: BSF 03.601B4: MOVWF 4101B5: BCF 03.601B6: CALL 062.................... printf(lcd_putc,"v");01B7: MOVLW 7601B8: BSF 03.601B9: MOVWF 4001BA: BCF 03.601BB: CALL 10D.................... delay_ms(50);01BC: MOVLW 3201BD: BSF 03.601BE: MOVWF 4101BF: BCF 03.601C0: CALL 062.................... printf(lcd_putc,"a");01C1: MOVLW 6101C2: BSF 03.601C3: MOVWF 4001C4: BCF 03.601C5: CALL 10D.................... delay_ms(50);01C6: MOVLW 3201C7: BSF 03.601C8: MOVWF 4101C9: BCF 03.601CA: CALL 062.................... printf(lcd_putc,"d");01CB: MOVLW 6401CC: BSF 03.601CD: MOVWF 4001CE: BCF 03.601CF: CALL 10D.................... delay_ms(50);01D0: MOVLW 3201D1: BSF 03.601D2: MOVWF 4101D3: BCF 03.601D4: CALL 062.................... printf(lcd_putc,"i");01D5: MOVLW 6901D6: BSF 03.601D7: MOVWF 4001D8: BCF 03.601D9: CALL 10D.................... delay_ms(50);01DA: MOVLW 3201DB: BSF 03.601DC: MOVWF 4101DD: BCF 03.601DE: CALL 062.................... printf(lcd_putc,"m");01DF: MOVLW 6D01E0: BSF 03.601E1: MOVWF 4001E2: BCF 03.601E3: CALL 10D.................... delay_ms(50);01E4: MOVLW 3201E5: BSF 03.601E6: MOVWF 4101E7: BCF 03.601E8: CALL 062.................... printf(lcd_putc," ");01E9: MOVLW 2001EA: BSF 03.601EB: MOVWF 4001EC: BCF 03.601ED: CALL 10D.................... delay_ms(50);01EE: MOVLW 3201EF: BSF 03.601F0: MOVWF 4101F1: BCF 03.601F2: CALL 062.................... printf(lcd_putc,"s");01F3: MOVLW 7301F4: BSF 03.601F5: MOVWF 4001F6: BCF 03.601F7: CALL 10D.................... delay_ms(50);01F8: MOVLW 3201F9: BSF 03.601FA: MOVWF 4101FB: BCF 03.601FC: CALL 062.................... printf(lcd_putc,"y");01FD: MOVLW 7901FE: BSF 03.601FF: MOVWF 400200: BCF 03.60201: CALL 10D.................... delay_ms(50);0202: MOVLW 320203: BSF 03.60204: MOVWF 410205: BCF 03.60206: CALL 062.................... printf(lcd_putc,"s");0207: MOVLW 730208: BSF 03.60209: MOVWF 40020A: BCF 03.6020B: CALL 10D.................... delay_ms(50);020C: MOVLW 32020D: BSF 03.6020E: MOVWF 41020F: BCF 03.60210: CALL 062.................... printf(lcd_putc,"t");0211: MOVLW 740212: BSF 03.60213: MOVWF 400214: BCF 03.60215: CALL 10D.................... delay_ms(50);0216: MOVLW 320217: BSF 03.60218: MOVWF 410219: BCF 03.6021A: CALL 062.................... printf(lcd_putc,"e");021B: MOVLW 65021C: BSF 03.6021D: MOVWF 40021E: BCF 03.6021F: CALL 10D.................... delay_ms(50);0220: MOVLW 320221: BSF 03.60222: MOVWF 410223: BCF 03.60224: CALL 062.................... printf(lcd_putc,"m\n");0225: MOVLW 6D0226: BSF 03.60227: MOVWF 400228: BCF 03.60229: CALL 10D022A: MOVLW 0A022B: BSF 03.6022C: MOVWF 40022D: BCF 03.6022E: CALL 10D.................... delay_ms(150);022F: MOVLW 960230: BSF 03.60231: MOVWF 410232: BCF 03.60233: CALL 062.................... printf(lcd_putc," .");0234: CLRF 620235: MOVF 62,W0236: CALL 00C0237: INCF 62,F0238: MOVWF 770239: BSF 03.6023A: MOVWF 40023B: BCF 03.6023C: CALL 10D023D: MOVLW 04023E: SUBWF 62,W023F: BTFSS 03.20240: GOTO 235.................... delay_ms(150);0241: MOVLW 960242: BSF 03.60243: MOVWF 410244: BCF 03.60245: CALL 062.................... printf(lcd_putc," .");0246: MOVLW 200247: BSF 03.60248: MOVWF 400249: BCF 03.6024A: CALL 10D024B: MOVLW 2E024C: BSF 03.6024D: MOVWF 40024E: BCF 03.6024F: CALL 10D.................... delay_ms(175);0250: MOVLW AF0251: BSF 03.60252: MOVWF 410253: BCF 03.60254: CALL 062.................... printf(lcd_putc," .");0255: MOVLW 200256: BSF 03.60257: MOVWF 400258: BCF 03.60259: CALL 10D025A: MOVLW 2E025B: BSF 03.6025C: MOVWF 40025D: BCF 03.6025E: CALL 10D.................... delay_ms(300);025F: MOVLW 020260: MOVWF 620261: MOVLW 960262: BSF 03.60263: MOVWF 410264: BCF 03.60265: CALL 0620266: DECFSZ 62,F0267: GOTO 261.................... printf(lcd_putc," .");0268: MOVLW 200269: BSF 03.6026A: MOVWF 40026B: BCF 03.6026C: CALL 10D026D: MOVLW 2E026E: BSF 03.6026F: MOVWF 400270: BCF 03.60271: CALL 10D.................... delay_ms(400);0272: MOVLW 020273: MOVWF 620274: MOVLW C80275: BSF 03.60276: MOVWF 410277: BCF 03.60278: CALL 0620279: DECFSZ 62,F027A: GOTO 274.................... printf(lcd_putc," .");027B: MOVLW 20027C: BSF 03.6027D: MOVWF 40027E: BCF 03.6027F: CALL 10D0280: MOVLW 2E0281: BSF 03.60282: MOVWF 400283: BCF 03.60284: CALL 10D.................... delay_ms(550);0285: MOVLW 050286: MOVWF 620287: MOVLW 6E0288: BSF 03.60289: MOVWF 41028A: BCF 03.6028B: CALL 062028C: DECFSZ 62,F028D: GOTO 287........................................ while(true).................... {.................... output_low(PIN_A4);028E: BSF 03.5028F: BCF 05.40290: BCF 03.50291: BCF 05.4.................... delay_ms(1500);0292: MOVLW 060293: MOVWF 620294: MOVLW FA0295: BSF 03.60296: MOVWF 410297: BCF 03.60298: CALL 0620299: DECFSZ 62,F029A: GOTO 294.................... output_high(PIN_A4);029B: BSF 03.5029C: BCF 05.4029D: BCF 03.5029E: BSF 05.4........................................ printf("AT+CBC\r");029F: CLRF 6202A0: MOVF 62,W02A1: CALL 01502A2: INCF 62,F02A3: MOVWF 7702A4: MOVF 77,W02A5: BTFSS 0C.402A6: GOTO 2A502A7: MOVWF 1902A8: MOVLW 0702A9: SUBWF 62,W02AA: BTFSS 03.202AB: GOTO 2A0............................................................ gets(odp1);02AC: MOVLW 2102AD: MOVWF 0402AE: BCF 03.702AF: DECF 04,F02B0: INCF 04,F02B1: BTFSS 0C.502B2: GOTO 2B102B3: MOVF 1A,W02B4: MOVWF 0002B5: MOVLW 0D02B6: SUBWF 00,W02B7: BTFSS 03.202B8: GOTO 2B002B9: CLRF 00.................... gets(odp2);02BA: MOVLW 4E02BB: MOVWF 0402BC: BCF 03.702BD: DECF 04,F02BE: INCF 04,F02BF: BTFSS 0C.502C0: GOTO 2BF02C1: MOVF 1A,W02C2: MOVWF 0002C3: MOVLW 0D02C4: SUBWF 00,W02C5: BTFSS 03.202C6: GOTO 2BE02C7: CLRF 00.................... gets(odp3);02C8: MOVLW A002C9: MOVWF 0402CA: BCF 03.702CB: DECF 04,F02CC: INCF 04,F02CD: BTFSS 0C.502CE: GOTO 2CD02CF: MOVF 1A,W02D0: MOVWF 0002D1: MOVLW 0D02D2: SUBWF 00,W02D3: BTFSS 03.202D4: GOTO 2CC02D5: CLRF 00.................... gets(odp4);02D6: MOVLW 5802D7: MOVWF 0402D8: BCF 03.702D9: DECF 04,F02DA: INCF 04,F02DB: BTFSS 0C.502DC: GOTO 2DB02DD: MOVF 1A,W02DE: MOVWF 0002DF: MOVLW 0D02E0: SUBWF 00,W02E1: BTFSS 03.202E2: GOTO 2DA02E3: CLRF 00.................... gets(odp5);02E4: MOVLW 1002E5: MOVWF 0402E6: BSF 03.702E7: DECF 04,F02E8: INCF 04,F02E9: BTFSS 0C.502EA: GOTO 2E902EB: MOVF 1A,W02EC: MOVWF 0002ED: MOVLW 0D02EE: SUBWF 00,W02EF: BTFSS 03.202F0: GOTO 2E802F1: CLRF 00............................................................ printf(lcd_putc,"\fODP1:%s",odp1);02F2: CLRF 6202F3: MOVF 62,W02F4: CALL 02102F5: INCF 62,F02F6: MOVWF 7702F7: BSF 03.602F8: MOVWF 4002F9: BCF 03.602FA: CALL 10D02FB: MOVLW 0602FC: SUBWF 62,W02FD: BTFSS 03.202FE: GOTO 2F302FF: MOVLW 210300: MOVWF 040301: BCF 03.70302: MOVLW 000303: IORWF 00,W0304: BTFSC 03.20305: GOTO 3180306: CLRF 640307: MOVF 04,W0308: MOVWF 630309: BCF 64.0030A: BTFSC 03.7030B: BSF 64.0030C: MOVF 00,W030D: BSF 03.6030E: MOVWF 40030F: BCF 03.60310: CALL 10D0311: MOVF 63,W0312: MOVWF 040313: BCF 03.70314: BTFSC 64.00315: BSF 03.70316: INCF 04,F0317: GOTO 302.................... delay_ms(2000);0318: MOVLW 080319: MOVWF 62031A: MOVLW FA031B: BSF 03.6031C: MOVWF 41031D: BCF 03.6031E: CALL 062031F: DECFSZ 62,F0320: GOTO 31A........................................ printf(lcd_putc,"\fODP2:%s",odp2);0321: CLRF 620322: MOVF 62,W0323: CALL 02E0324: INCF 62,F0325: MOVWF 770326: BSF 03.60327: MOVWF 400328: BCF 03.60329: CALL 10D032A: MOVLW 06032B: SUBWF 62,W032C: BTFSS 03.2032D: GOTO 322032E: MOVLW 4E032F: MOVWF 040330: BCF 03.70331: MOVLW 000332: IORWF 00,W0333: BTFSC 03.20334: GOTO 3470335: CLRF 640336: MOVF 04,W0337: MOVWF 630338: BCF 64.00339: BTFSC 03.7033A: BSF 64.0033B: MOVF 00,W033C: BSF 03.6033D: MOVWF 40033E: BCF 03.6033F: CALL 10D0340: MOVF 63,W0341: MOVWF 040342: BCF 03.70343: BTFSC 64.00344: BSF 03.70345: INCF 04,F0346: GOTO 331.................... delay_ms(2000);0347: MOVLW 080348: MOVWF 620349: MOVLW FA034A: BSF 03.6034B: MOVWF 41034C: BCF 03.6034D: CALL 062034E: DECFSZ 62,F034F: GOTO 349........................................ printf(lcd_putc,"\fODP3:%s",odp3);0350: CLRF 620351: MOVF 62,W0352: CALL 03B0353: INCF 62,F0354: MOVWF 770355: BSF 03.60356: MOVWF 400357: BCF 03.60358: CALL 10D0359: MOVLW 06035A: SUBWF 62,W035B: BTFSS 03.2035C: GOTO 351035D: MOVLW A0035E: MOVWF 04035F: BCF 03.70360: MOVLW 000361: IORWF 00,W0362: BTFSC 03.20363: GOTO 3760364: CLRF 640365: MOVF 04,W0366: MOVWF 630367: BCF 64.00368: BTFSC 03.70369: BSF 64.0036A: MOVF 00,W036B: BSF 03.6036C: MOVWF 40036D: BCF 03.6036E: CALL 10D036F: MOVF 63,W0370: MOVWF 040371: BCF 03.70372: BTFSC 64.00373: BSF 03.70374: INCF 04,F0375: GOTO 360.................... delay_ms(2000);0376: MOVLW 080377: MOVWF 620378: MOVLW FA0379: BSF 03.6037A: MOVWF 41037B: BCF 03.6037C: CALL 062037D: DECFSZ 62,F037E: GOTO 378........................................ printf(lcd_putc,"\fODP4:%s",odp4);037F: CLRF 620380: MOVF 62,W0381: CALL 0480382: INCF 62,F0383: MOVWF 770384: BSF 03.60385: MOVWF 400386: BCF 03.60387: CALL 10D0388: MOVLW 060389: SUBWF 62,W038A: BTFSS 03.2038B: GOTO 380038C: MOVLW 58038D: MOVWF 04038E: BCF 03.7038F: MOVLW 000390: IORWF 00,W0391: BTFSC 03.20392: GOTO 3A50393: CLRF 640394: MOVF 04,W0395: MOVWF 630396: BCF 64.00397: BTFSC 03.70398: BSF 64.00399: MOVF 00,W039A: BSF 03.6039B: MOVWF 40039C: BCF 03.6039D: CALL 10D039E: MOVF 63,W039F: MOVWF 0403A0: BCF 03.703A1: BTFSC 64.003A2: BSF 03.703A3: INCF 04,F03A4: GOTO 38F.................... delay_ms(2000);03A5: MOVLW 0803A6: MOVWF 6203A7: MOVLW FA03A8: BSF 03.603A9: MOVWF 4103AA: BCF 03.603AB: CALL 06203AC: DECFSZ 62,F03AD: GOTO 3A7........................................ printf(lcd_putc,"\fODP5:%s",odp5);03AE: CLRF 6203AF: MOVF 62,W03B0: CALL 05503B1: INCF 62,F03B2: MOVWF 7703B3: BSF 03.603B4: MOVWF 4003B5: BCF 03.603B6: CALL 10D03B7: MOVLW 0603B8: SUBWF 62,W03B9: BTFSS 03.203BA: GOTO 3AF03BB: MOVLW 1003BC: MOVWF 0403BD: BSF 03.703BE: MOVLW 0003BF: IORWF 00,W03C0: BTFSC 03.203C1: GOTO 3D403C2: CLRF 6403C3: MOVF 04,W03C4: MOVWF 6303C5: BCF 64.003C6: BTFSC 03.703C7: BSF 64.003C8: MOVF 00,W03C9: BSF 03.603CA: MOVWF 4003CB: BCF 03.603CC: CALL 10D03CD: MOVF 63,W03CE: MOVWF 0403CF: BCF 03.703D0: BTFSC 64.003D1: BSF 03.703D2: INCF 04,F03D3: GOTO 3BE............................................................ output_low(PIN_A4);03D4: BSF 03.503D5: BCF 05.403D6: BCF 03.503D7: BCF 05.4.................... delay_ms(150);03D8: MOVLW 9603D9: BSF 03.603DA: MOVWF 4103DB: BCF 03.603DC: CALL 062.................... output_high(PIN_A4);03DD: BSF 03.503DE: BCF 05.403DF: BCF 03.503E0: BSF 05.4.................... delay_ms(100);03E1: MOVLW 6403E2: BSF 03.603E3: MOVWF 4103E4: BCF 03.603E5: CALL 062.................... output_low(PIN_A4);03E6: BSF 03.503E7: BCF 05.403E8: BCF 03.503E9: BCF 05.4.................... delay_ms(150);03EA: MOVLW 9603EB: BSF 03.603EC: MOVWF 4103ED: BCF 03.603EE: CALL 062.................... output_high(PIN_A4);03EF: BSF 03.503F0: BCF 05.403F1: BCF 03.503F2: BSF 05.4.................... delay_ms(100);03F3: MOVLW 6403F4: BSF 03.603F5: MOVWF 4103F6: BCF 03.603F7: CALL 062.................... output_low(PIN_A4);03F8: BSF 03.503F9: BCF 05.403FA: BCF 03.503FB: BCF 05.4.................... delay_ms(150);03FC: MOVLW 9603FD: BSF 03.603FE: MOVWF 4103FF: BCF 03.60400: CALL 062.................... output_high(PIN_A4);0401: BSF 03.50402: BCF 05.40403: BCF 03.50404: BSF 05.4.................... delay_ms(1500);0405: MOVLW 060406: MOVWF 620407: MOVLW FA0408: BSF 03.60409: MOVWF 41040A: BCF 03.6040B: CALL 062040C: DECFSZ 62,F040D: GOTO 407.................... }040E: GOTO 28E.................... }040F: SLEEPConfiguration Fuses:Word 1: 3F39 XT NOWDT NOPUT NODEBUG NOPROTECT NOBROWNOUT NOLVP NOCPD NOWRT