Blame | Last modification | View Log | Download
CCS PCW C Compiler, Version 3.110, 15448Filename: e:\@dokumenty\pic\vysilac\main.LSTROM used: 669 (16%)Largest free fragment is 2048RAM used: 12 (6%) at main() level23 (12%) worst caseStack: 5 locations*0000: MOVLW 000001: MOVWF 0A0002: GOTO 1B20003: NOP.................... #include "E:\@Dokumenty\pic\vysilac\main.h".................... #include <16F873.h>.................... //////// Standard Header file for the PIC16F873 device ////////////////.................... #device PIC16F873.................... #list........................................ #use delay(clock=4000000)*0023: MOVLW 2E0024: MOVWF 040025: MOVF 00,W0026: BTFSC 03.20027: GOTO 0370028: MOVLW 010029: MOVWF 21002A: CLRF 20002B: DECFSZ 20,F002C: GOTO 02B002D: DECFSZ 21,F002E: GOTO 02A002F: MOVLW 4A0030: MOVWF 200031: DECFSZ 20,F0032: GOTO 0310033: NOP0034: NOP0035: DECFSZ 00,F0036: GOTO 0280037: RETLW 00.................... #fuses XT,PUT,NOWDT................................................................................ #DEFINE LCD_RS PIN_B1 // rizeni registru LCD displeje.................... #DEFINE LCD_E PIN_B2 // enable LCD displeje.................... #DEFINE LCD_DATA_LSB PIN_B4 // pripojeni LSB bitu datoveho portu LCD displeje (celkem 4 bity vzestupne za sebou).................... #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).................... };*0004: BCF 0A.00005: BCF 0A.10006: BCF 0A.20007: ADDWF 02,F0008: RETLW 280009: RETLW 0C000A: RETLW 01000B: RETLW 06............................................................ // 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*0038: MOVF 06,W0039: ANDLW 0F003A: MOVWF 35003B: SWAPF 34,W003C: MOVWF 20003D: MOVLW F0003E: ANDWF 20,F003F: MOVF 20,W0040: ANDLW F00041: IORWF 35,W0042: MOVWF 06.................... output_bit(LCD_E,1); // vzestupna hrana0043: BSF 06.20044: BSF 03.50045: BCF 06.2.................... delay_us(1); // pockej alespon 450ns od e nebo alespon 195ns od dat0046: NOP.................... output_bit(LCD_E,0); // sestupna hrana (minimalni perioda e je 1us)0047: BCF 03.50048: BCF 06.20049: BSF 03.5004A: BCF 06.2004B: BCF 03.5004C: 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 registr004D: MOVF 32,F004E: BTFSS 03.2004F: GOTO 0520050: BCF 06.10051: GOTO 0530052: BSF 06.10053: BSF 03.50054: BCF 06.1.................... swap(n);0055: BCF 03.50056: SWAPF 33,F.................... lcd_send_nibble(n); // posli horni pulku bajtu0057: MOVF 33,W0058: MOVWF 340059: CALL 038.................... swap(n);005A: SWAPF 33,F.................... lcd_send_nibble(n); // posli spodni pulku bajtu005B: MOVF 33,W005C: MOVWF 34005D: CALL 038.................... delay_us(40); // minimalni doba na provedeni prikazu005E: MOVLW 0D005F: MOVWF 200060: DECFSZ 20,F0061: GOTO 0600062: 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 napajeni0063: MOVLW 140064: MOVWF 2E0065: CALL 023........................................ *LCD_TRIS = *LCD_TRIS & ~LCD_MASK; // nuluj odpovidajici bity tris registru datoveho portu LCD0066: MOVLW 0F0067: BSF 03.50068: ANDWF 06,F........................................ output_bit(LCD_RS,0); // nastav jako vystup a nastav klidovy stav0069: BCF 03.5006A: BCF 06.1006B: BSF 03.5006C: BCF 06.1.................... output_bit(LCD_E,0); // nastav jako vystup a nastav klidovy stav006D: BCF 03.5006E: BCF 06.2006F: BSF 03.50070: BCF 06.2........................................ for (i=0; i<3; i++) // nastav lcd do rezimu 8 bitu sbernice0071: BCF 03.50072: CLRF 2B0073: MOVF 2B,W0074: SUBLW 020075: BTFSS 03.00076: GOTO 07F.................... {.................... delay_ms(2); // muze byt rozdelany prenos dat (2x 4 bity) nebo pomaly povel0077: MOVLW 020078: MOVWF 2E0079: CALL 023.................... lcd_send_nibble(3); // rezim 8 bitu007A: MOVLW 03007B: MOVWF 34007C: CALL 038.................... }007D: INCF 2B,F007E: GOTO 073........................................ delay_us(40); // cas na zpracovani007F: MOVLW 0D0080: MOVWF 200081: DECFSZ 20,F0082: GOTO 081.................... lcd_send_nibble(2); // nastav rezim 4 bitu (plati od nasledujiciho prenosu)0083: MOVLW 020084: MOVWF 340085: CALL 038.................... delay_us(40); // cas na zpracovani0086: MOVLW 0D0087: MOVWF 200088: DECFSZ 20,F0089: GOTO 088........................................ for (i=0;i<3;i++) // proved inicializaci (nastaveni modu, smazani apod)008A: CLRF 2B008B: MOVF 2B,W008C: SUBLW 02008D: BTFSS 03.0008E: GOTO 09B.................... {.................... lcd_send_byte(0,LCD_INIT_STRING[i]);008F: MOVF 2B,W0090: CALL 0040091: MOVWF 2C0092: CLRF 320093: MOVF 2C,W0094: MOVWF 330095: CALL 04D.................... delay_ms(2);0096: MOVLW 020097: MOVWF 2E0098: CALL 023.................... }0099: INCF 2B,F009A: GOTO 08B009B: BCF 0A.3009C: GOTO 1F4 (RETURN).................... }............................................................ // Proved presun kurzoru.................... //.................... // Pozice 1.1 je domu.................... //.................... void lcd_gotoxy( BYTE x, BYTE y).................... {........................................ BYTE Adr;........................................ Adr=x-1;009D: MOVLW 01009E: SUBWF 2E,W009F: MOVWF 30.................... if(y==2)00A0: MOVF 2F,W00A1: SUBLW 0200A2: BTFSS 03.200A3: GOTO 0A6.................... Adr+=LCD_LINE_2;00A4: MOVLW 4000A5: ADDWF 30,F........................................ lcd_send_byte(0,0x80|Adr);00A6: MOVF 30,W00A7: IORLW 8000A8: MOVWF 3100A9: CLRF 3200AA: MOVF 31,W00AB: MOVWF 3300AC: CALL 04D00AD: RETLW 00.................... }............................................................ // Zapis znaku na displej, zpracovani ridicich znaku.................... //.................... void lcd_putc( char c).................... {........................................ switch (c)00AE: MOVF 2D,W00AF: MOVWF 2000B0: MOVLW 0C00B1: SUBWF 20,W00B2: BTFSC 03.200B3: GOTO 0C100B4: MOVLW 0A00B5: SUBWF 20,W00B6: BTFSC 03.200B7: GOTO 0C900B8: MOVLW 0D00B9: SUBWF 20,W00BA: BTFSC 03.200BB: GOTO 0CF00BC: MOVLW 0800BD: SUBWF 20,W00BE: BTFSC 03.200BF: GOTO 0D400C0: GOTO 0D9.................... {.................... case '\f' : lcd_send_byte(0,1); // smaz displej00C1: CLRF 3200C2: MOVLW 0100C3: MOVWF 3300C4: CALL 04D.................... delay_ms(2);00C5: MOVLW 0200C6: MOVWF 2E00C7: CALL 023.................... break;00C8: GOTO 0E5.................... case '\n' : lcd_gotoxy(1,2); break; // presun se na 1. znak 2. radky00C9: MOVLW 0100CA: MOVWF 2E00CB: MOVLW 0200CC: MOVWF 2F00CD: CALL 09D00CE: GOTO 0E5.................... case '\r' : lcd_gotoxy(1,1); break; // presun home00CF: MOVLW 0100D0: MOVWF 2E00D1: MOVWF 2F00D2: CALL 09D00D3: GOTO 0E5.................... case '\b' : lcd_send_byte(0,0x10); break; // posun kurzor o 1 zpet00D4: CLRF 3200D5: MOVLW 1000D6: MOVWF 3300D7: CALL 04D00D8: GOTO 0E5.................... default : if (c<0x20) c&=0x7; // preklopeni definovatelnych znaku na rozsah 0 az 0x1F00D9: MOVF 2D,W00DA: SUBLW 1F00DB: BTFSS 03.000DC: GOTO 0DF00DD: MOVLW 0700DE: ANDWF 2D,F.................... lcd_send_byte(1,c); break; // zapis znak00DF: MOVLW 0100E0: MOVWF 3200E1: MOVF 2D,W00E2: MOVWF 3300E3: CALL 04D00E4: GOTO 0E5.................... }00E5: 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);.................... //}............................................................ #DEFINE VYSILAC PIN_C3.................... #DEFINE OSA_X 0 // adresa A/D prevodniku pro osu X.................... #DEFINE OSA_Y 1 // adresa A/D prevodniku pro osu Y.................... #DEFINE IMPULS 250 // sirka impulsu pro false |-|.................... #DEFINE TTL1 PIN_b4.................... #DEFINE TTL2 PIN_b3........................................ int stredX, stredY, x, y;............................................................ void odeslat (int8 kodeslani).................... {.................... int i;........................................ for (i=0;i<=7;i++)*013E: CLRF 2F013F: MOVF 2F,W0140: SUBLW 070141: BTFSS 03.00142: GOTO 196.................... {.................... if (1==bit_test(kodeslani,i))0143: MOVF 2E,W0144: MOVWF 200145: MOVF 2F,W0146: MOVWF 210147: BTFSC 03.20148: GOTO 14D0149: BCF 03.0014A: RRF 20,F014B: DECFSZ 21,F014C: GOTO 149014D: MOVLW 00014E: BTFSC 20.0014F: MOVLW 010150: SUBLW 010151: BTFSS 03.20152: GOTO 16B.................... {.................... output_high(VYSILAC);0153: BCF 29.30154: MOVF 29,W0155: BSF 03.50156: MOVWF 070157: BCF 03.50158: BSF 07.3.................... delay_us(2*IMPULS); // X pri 1: |--|___0159: MOVLW A6015A: MOVWF 20015B: DECFSZ 20,F015C: GOTO 15B015D: NOP.................... output_low(VYSILAC);015E: BCF 29.3015F: MOVF 29,W0160: BSF 03.50161: MOVWF 070162: BCF 03.50163: BCF 07.3.................... delay_us(3*IMPULS);0164: MOVLW F90165: MOVWF 200166: DECFSZ 20,F0167: GOTO 1660168: NOP0169: NOP.................... }.................... else016A: GOTO 194.................... {.................... output_high(VYSILAC);016B: BCF 29.3016C: MOVF 29,W016D: BSF 03.5016E: MOVWF 07016F: BCF 03.50170: BSF 07.3.................... delay_us(IMPULS); // X pri 0: |-|__|-|_0171: MOVLW 530172: MOVWF 200173: DECFSZ 20,F0174: GOTO 173.................... output_low(VYSILAC);0175: BCF 29.30176: MOVF 29,W0177: BSF 03.50178: MOVWF 070179: BCF 03.5017A: BCF 07.3........................................ delay_us(2*IMPULS);017B: MOVLW A6017C: MOVWF 20017D: DECFSZ 20,F017E: GOTO 17D017F: NOP........................................ output_high(VYSILAC);0180: BCF 29.30181: MOVF 29,W0182: BSF 03.50183: MOVWF 070184: BCF 03.50185: BSF 07.3.................... delay_us(IMPULS);0186: MOVLW 530187: MOVWF 200188: DECFSZ 20,F0189: GOTO 188.................... output_low(VYSILAC);018A: BCF 29.3018B: MOVF 29,W018C: BSF 03.5018D: MOVWF 07018E: BCF 03.5018F: BCF 07.3.................... delay_us(IMPULS);0190: MOVLW 530191: MOVWF 200192: DECFSZ 20,F0193: GOTO 192.................... };.................... }0194: INCF 2F,F0195: GOTO 13F0196: RETLW 00.................... }........................................ void synchronizace().................... {.................... int8 sinchro;.................... sinchro=0b00001111;0197: MOVLW 0F0198: MOVWF 2B........................................ odeslat (sinchro); // synchronizace: |--|___|--|___|--|___|--|___|-|__|-|_|-|__|-|_|-|__|-|_|-|__|-|_0199: MOVF 2B,W019A: MOVWF 2E019B: CALL 13E019C: BCF 0A.3019D: GOTO 290 (RETURN).................... }................................................................................ void odesli (int8 X, int8 Y).................... {.................... odeslat(X+ (X << 4));019E: SWAPF 2B,W019F: MOVWF 2001A0: MOVLW F001A1: ANDWF 20,F01A2: MOVF 20,W01A3: ADDWF 2B,W01A4: MOVWF 2D01A5: MOVWF 2E01A6: CALL 13E.................... odeslat(Y+ (Y << 4));01A7: SWAPF 2C,W01A8: MOVWF 2001A9: MOVLW F001AA: ANDWF 20,F01AB: MOVF 20,W01AC: ADDWF 2C,W01AD: MOVWF 2D01AE: MOVWF 2E01AF: CALL 13E01B0: BCF 0A.301B1: GOTO 295 (RETURN)........................................ }............................................................ void kalibrace().................... {.................... int8 min_x;.................... int8 max_x;.................... int8 min_y;.................... int8 max_y;.................... int8 sred_x;.................... int8 sred_y;.................... int8 adc;.................... min_x=max_x=min_y=max_y=sred_x=sred_y=128;........................................ printf(lcd_putc,"Paku dejte do prostred a stisknete tlacitko");.................... znovu:.................... if (TTL1 || TTL2).................... {.................... set_adc_channel(OSA_X);.................... delay_us(10);.................... sred_x=read_adc();.................... set_adc_channel(OSA_y);.................... delay_us(10);.................... sred_y=read_adc();.................... };........................................ //else goto znovu;........................................ printf(lcd_putc,"\f");.................... printf(lcd_putc,"Pak ");........................................ set_adc_channel(OSA_X);.................... delay_us(10);........................................ adc=read_adc();........................................ if (max_x < adc )max_x=adc;.................... if (min_x > adc )min_x=adc;........................................ set_adc_channel(OSA_y);.................... delay_us(10);........................................ adc=read_adc();........................................ if (max_y < adc )max_y=adc;.................... if (min_y > adc )min_y=adc;........................................ if (TTL1 || TTL2) return;.................... }............................................................ void main().................... {*01BB: CLRF 2A.................... int c=0;*01B2: CLRF 0401B3: MOVLW 1F01B4: ANDWF 03,F01B5: MOVLW 0701B6: BSF 03.501B7: MOVWF 1F01B8: MOVLW FF01B9: BCF 03.501BA: MOVWF 29........................................ setup_adc_ports(RA0_RA1_RA3_ANALOG);*01BC: MOVLW 0401BD: BSF 03.501BE: MOVWF 1F.................... setup_adc(ADC_CLOCK_DIV_2);01BF: BCF 03.501C0: MOVF 1F,W01C1: ANDLW 3801C2: IORLW 0101C3: MOVWF 1F.................... setup_spi(FALSE);01C4: BCF 14.501C5: BCF 29.501C6: MOVF 29,W01C7: BSF 03.501C8: MOVWF 0701C9: BCF 03.501CA: BSF 29.401CB: MOVF 29,W01CC: BSF 03.501CD: MOVWF 0701CE: BCF 03.501CF: BCF 29.301D0: MOVF 29,W01D1: BSF 03.501D2: MOVWF 0701D3: MOVLW 0001D4: BCF 03.501D5: MOVWF 1401D6: BSF 03.501D7: MOVWF 14.................... setup_counters(RTCC_INTERNAL,RTCC_DIV_2);01D8: BCF 03.501D9: CLRF 2001DA: BTFSS 20.301DB: GOTO 1E401DC: MOVLW 0701DD: CLRF 0101DE: MOVLW 8101DF: MOVWF 0401E0: MOVF 00,W01E1: ANDLW C001E2: IORLW 0F01E3: MOVWF 0001E4: CLRWDT01E5: MOVLW 8101E6: MOVWF 0401E7: MOVF 00,W01E8: ANDLW C001E9: IORWF 20,W01EA: MOVWF 00.................... setup_timer_1(T1_DISABLED);01EB: CLRF 10.................... setup_timer_2(T2_DISABLED,0,1);01EC: MOVLW 0001ED: MOVWF 2101EE: MOVWF 1201EF: MOVLW 0001F0: BSF 03.501F1: MOVWF 12........................................ lcd_init();01F2: BCF 03.501F3: GOTO 063........................................ while (c<=16)01F4: MOVF 2A,W01F5: SUBLW 1001F6: BTFSS 03.001F7: GOTO 208.................... {.................... lcd_gotoxy(c,1);01F8: MOVF 2A,W01F9: MOVWF 2E01FA: MOVLW 0101FB: MOVWF 2F01FC: CALL 09D.................... printf(lcd_putc,"_");01FD: MOVLW 5F01FE: MOVWF 2D01FF: CALL 0AE.................... delay_ms(50);0200: MOVLW 320201: MOVWF 2E0202: CALL 023.................... printf(lcd_putc,"\f");0203: MOVLW 0C0204: MOVWF 2D0205: CALL 0AE.................... c++;0206: INCF 2A,F.................... }0207: GOTO 1F4........................................ printf(lcd_putc,"\fAhoj!");*000C: BCF 0A.0000D: BCF 0A.1000E: BCF 0A.2000F: ADDWF 02,F0010: RETLW 0C0011: RETLW 410012: RETLW 680013: RETLW 6F0014: RETLW 6A0015: RETLW 210016: RETLW 00*0208: CLRF 2B0209: MOVF 2B,W020A: CALL 00C020B: INCF 2B,F020C: MOVWF 2D020D: CALL 0AE020E: MOVLW 06020F: SUBWF 2B,W0210: BTFSS 03.20211: GOTO 209.................... delay_ms(1500);0212: MOVLW 060213: MOVWF 2B0214: MOVLW FA0215: MOVWF 2E0216: CALL 0230217: DECFSZ 2B,F0218: GOTO 214........................................ printf(lcd_putc,"\f");0219: MOVLW 0C021A: MOVWF 2D021B: CALL 0AE............................................................ while(true).................... {.................... set_adc_channel(OSA_X);021C: MOVLW 00021D: MOVWF 21021E: MOVF 1F,W021F: ANDLW C70220: IORWF 21,W0221: MOVWF 1F.................... lcd_gotoxy(1,1);0222: MOVLW 010223: MOVWF 2E0224: MOVWF 2F0225: CALL 09D.................... x=read_adc() >> 4;0226: BSF 1F.20227: BTFSC 1F.20228: GOTO 2270229: MOVF 1E,W022A: SWAPF 1E,W022B: MOVWF 27022C: MOVLW 0F022D: ANDWF 27,F.................... printf(lcd_putc,"X: %D ", x);*00FB: MOVF 2B,W00FC: MOVWF 2000FD: BTFSC 2B.700FE: GOTO 10300FF: BTFSS 2C.20100: GOTO 10D0101: MOVLW 200102: GOTO 1080103: COMF 20,F0104: INCF 20,F0105: MOVF 20,W0106: MOVWF 2B0107: MOVLW 2D0108: MOVWF 210109: MOVWF 2D010A: CALL 0AE010B: BTFSS 2C.2010C: BSF 2C.3010D: MOVF 2B,W010E: MOVWF 2D010F: MOVLW 640110: MOVWF 2E0111: CALL 0E60112: MOVF 20,W0113: MOVWF 2B0114: MOVF 21,W0115: MOVLW 300116: BTFSS 03.20117: GOTO 11F0118: BTFSC 2C.00119: BSF 2C.3011A: BTFSC 2C.3011B: GOTO 125011C: BTFSC 2C.4011D: MOVLW 20011E: GOTO 121011F: BCF 2C.30120: BCF 2C.40121: ADDWF 21,F0122: MOVF 21,W0123: MOVWF 2D0124: CALL 0AE0125: MOVF 2B,W0126: MOVWF 2D0127: MOVLW 0A0128: MOVWF 2E0129: CALL 0E6012A: MOVF 20,W012B: MOVWF 2B012C: MOVF 21,W012D: MOVLW 30012E: BTFSS 03.2012F: GOTO 1340130: BTFSC 2C.30131: GOTO 1380132: BTFSC 2C.40133: MOVLW 200134: ADDWF 21,F0135: MOVF 21,W0136: MOVWF 2D0137: CALL 0AE0138: MOVLW 300139: ADDWF 2B,F013A: MOVF 2B,W013B: MOVWF 2D013C: CALL 0AE013D: RETLW 00*022E: MOVLW 58022F: MOVWF 2D0230: CALL 0AE0231: MOVLW 3A0232: MOVWF 2D0233: CALL 0AE0234: MOVLW 200235: MOVWF 2D0236: CALL 0AE0237: MOVF 27,W0238: MOVWF 2B0239: MOVLW 18023A: MOVWF 2C023B: CALL 0FB023C: MOVLW 06023D: MOVWF 2B023E: MOVLW 20023F: MOVWF 2D0240: CALL 0AE0241: DECFSZ 2B,F0242: GOTO 23E.................... set_adc_channel(OSA_Y);0243: MOVLW 080244: MOVWF 210245: MOVF 1F,W0246: ANDLW C70247: IORWF 21,W0248: MOVWF 1F.................... lcd_gotoxy(1,2);0249: MOVLW 01024A: MOVWF 2E024B: MOVLW 02024C: MOVWF 2F024D: CALL 09D.................... y=read_adc() >> 4;024E: BSF 1F.2024F: BTFSC 1F.20250: GOTO 24F0251: MOVF 1E,W0252: SWAPF 1E,W0253: MOVWF 280254: MOVLW 0F0255: ANDWF 28,F.................... printf(lcd_putc,"Y: %D ", y);0256: MOVLW 590257: MOVWF 2D0258: CALL 0AE0259: MOVLW 3A025A: MOVWF 2D025B: CALL 0AE025C: MOVLW 20025D: MOVWF 2D025E: CALL 0AE025F: MOVF 28,W0260: MOVWF 2B0261: MOVLW 180262: MOVWF 2C0263: CALL 0FB0264: MOVLW 060265: MOVWF 2B0266: MOVLW 200267: MOVWF 2D0268: CALL 0AE0269: DECFSZ 2B,F026A: GOTO 266........................................................................................................................ /* output_high(PIN_C1);.................... output_low(PIN_C2);.................... delay_ms(100);.................... output_low(PIN_C1);.................... output_high(PIN_C2);.................... delay_ms(100);*/........................................ lcd_gotoxy(7,2);026B: MOVLW 07026C: MOVWF 2E026D: MOVLW 02026E: MOVWF 2F026F: CALL 09D.................... printf(lcd_putc,"vysilam");*0017: BCF 0A.00018: BCF 0A.10019: BCF 0A.2001A: ADDWF 02,F001B: RETLW 76001C: RETLW 79001D: RETLW 73001E: RETLW 69001F: RETLW 6C0020: RETLW 610021: RETLW 6D0022: RETLW 00*0270: CLRF 2B0271: MOVF 2B,W0272: CALL 0170273: INCF 2B,F0274: MOVWF 2D0275: CALL 0AE0276: MOVLW 070277: SUBWF 2B,W0278: BTFSS 03.20279: GOTO 271........................................ output_high(PIN_C4);027A: BCF 29.4027B: MOVF 29,W027C: BSF 03.5027D: MOVWF 07027E: BCF 03.5027F: BSF 07.4.................... output_high(PIN_C6);0280: BCF 29.60281: MOVF 29,W0282: BSF 03.50283: MOVWF 070284: BCF 03.50285: BSF 07.6.................... delay_ms(1);0286: MOVLW 010287: MOVWF 2E0288: CALL 023.................... output_low(PIN_C4);0289: BCF 29.4028A: MOVF 29,W028B: BSF 03.5028C: MOVWF 07028D: BCF 03.5028E: BCF 07.4.................... synchronizace();028F: GOTO 197.................... odesli(x,y);0290: MOVF 27,W0291: MOVWF 2B0292: MOVF 28,W0293: MOVWF 2C0294: GOTO 19E.................... output_low(PIN_C6);0295: BCF 29.60296: MOVF 29,W0297: BSF 03.50298: MOVWF 070299: BCF 03.5029A: BCF 07.6............................................................ }029B: GOTO 21C........................................ }....................029C: SLEEP