Blame | Last modification | View Log | Download
CCS PCW C Compiler, Version 3.110, 15448Filename: d:\@kaklik\programy\pic_c\prenos\letadlo\vysilac\main.LSTROM used: 561 (14%)Largest free fragment is 2048RAM used: 11 (6%) at main() level22 (11%) worst caseStack: 5 locations*0000: MOVLW 000001: MOVWF 0A0002: GOTO 1840003: NOP.................... // Vysilac........................................ #include "main.h".................... #include <16F873.h>.................... //////// Standard Header file for the PIC16F873 device ////////////////.................... #device PIC16F873.................... #list........................................ #use delay(clock=4000000)*0017: MOVLW 300018: MOVWF 040019: MOVF 00,W001A: BTFSC 03.2001B: GOTO 02B001C: MOVLW 01001D: MOVWF 21001E: CLRF 20001F: DECFSZ 20,F0020: GOTO 01F0021: DECFSZ 21,F0022: GOTO 01E0023: MOVLW 4A0024: MOVWF 200025: DECFSZ 20,F0026: GOTO 0250027: NOP0028: NOP0029: DECFSZ 00,F002A: GOTO 01C002B: RETLW 00.................... #fuses XT,PUT,NOWDT............................................................ #include "..\common.h".................... #DEFINE OSA_X 1 // adresy os.................... #DEFINE OSA_Y 2.................... #DEFINE TLs 3.................... #DEFINE IMPULS 250 // sirka impulsu............................................................ #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*002C: MOVF 06,W002D: ANDLW 0F002E: MOVWF 34002F: SWAPF 33,W0030: MOVWF 200031: MOVLW F00032: ANDWF 20,F0033: MOVF 20,W0034: ANDLW F00035: IORWF 34,W0036: MOVWF 06.................... output_bit(LCD_E,1); // vzestupna hrana0037: BSF 06.20038: BSF 03.50039: BCF 06.2.................... delay_us(1); // pockej alespon 450ns od e nebo alespon 195ns od dat003A: NOP.................... output_bit(LCD_E,0); // sestupna hrana (minimalni perioda e je 1us)003B: BCF 03.5003C: BCF 06.2003D: BSF 03.5003E: BCF 06.2003F: BCF 03.50040: 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 registr0041: MOVF 31,F0042: BTFSS 03.20043: GOTO 0460044: BCF 06.10045: GOTO 0470046: BSF 06.10047: BSF 03.50048: BCF 06.1.................... swap(n);0049: BCF 03.5004A: SWAPF 32,F.................... lcd_send_nibble(n); // posli horni pulku bajtu004B: MOVF 32,W004C: MOVWF 33004D: CALL 02C.................... swap(n);004E: SWAPF 32,F.................... lcd_send_nibble(n); // posli spodni pulku bajtu004F: MOVF 32,W0050: MOVWF 330051: CALL 02C.................... delay_us(40); // minimalni doba na provedeni prikazu0052: MOVLW 0D0053: MOVWF 200054: DECFSZ 20,F0055: GOTO 0540056: 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 napajeni0057: MOVLW 140058: MOVWF 300059: CALL 017........................................ *LCD_TRIS = *LCD_TRIS & ~LCD_MASK; // nuluj odpovidajici bity tris registru datoveho portu LCD005A: MOVLW 0F005B: BSF 03.5005C: ANDWF 06,F........................................ output_bit(LCD_RS,0); // nastav jako vystup a nastav klidovy stav005D: BCF 03.5005E: BCF 06.1005F: BSF 03.50060: BCF 06.1.................... output_bit(LCD_E,0); // nastav jako vystup a nastav klidovy stav0061: BCF 03.50062: BCF 06.20063: BSF 03.50064: BCF 06.2........................................ for (i=0; i<3; i++) // nastav lcd do rezimu 8 bitu sbernice0065: BCF 03.50066: CLRF 2A0067: MOVF 2A,W0068: SUBLW 020069: BTFSS 03.0006A: GOTO 073.................... {.................... delay_ms(2); // muze byt rozdelany prenos dat (2x 4 bity) nebo pomaly povel006B: MOVLW 02006C: MOVWF 30006D: CALL 017.................... lcd_send_nibble(3); // rezim 8 bitu006E: MOVLW 03006F: MOVWF 330070: CALL 02C.................... }0071: INCF 2A,F0072: GOTO 067........................................ delay_us(40); // cas na zpracovani0073: MOVLW 0D0074: MOVWF 200075: DECFSZ 20,F0076: GOTO 075.................... lcd_send_nibble(2); // nastav rezim 4 bitu (plati od nasledujiciho prenosu)0077: MOVLW 020078: MOVWF 330079: CALL 02C.................... delay_us(40); // cas na zpracovani007A: MOVLW 0D007B: MOVWF 20007C: DECFSZ 20,F007D: GOTO 07C........................................ for (i=0;i<3;i++) // proved inicializaci (nastaveni modu, smazani apod)007E: CLRF 2A007F: MOVF 2A,W0080: SUBLW 020081: BTFSS 03.00082: GOTO 08F.................... {.................... lcd_send_byte(0,LCD_INIT_STRING[i]);0083: MOVF 2A,W0084: CALL 0040085: MOVWF 2B0086: CLRF 310087: MOVF 2B,W0088: MOVWF 320089: CALL 041.................... delay_ms(2);008A: MOVLW 02008B: MOVWF 30008C: CALL 017.................... }008D: INCF 2A,F008E: GOTO 07F008F: BCF 0A.30090: GOTO 1C5 (RETURN).................... }............................................................ // Proved presun kurzoru.................... //.................... // Pozice 1.1 je domu.................... //.................... void lcd_gotoxy( BYTE x, BYTE y).................... {........................................ BYTE Adr;........................................ Adr=x-1;0091: MOVLW 010092: SUBWF 2D,W0093: MOVWF 2F.................... if(y==2)0094: MOVF 2E,W0095: SUBLW 020096: BTFSS 03.20097: GOTO 09A.................... Adr+=LCD_LINE_2;0098: MOVLW 400099: ADDWF 2F,F........................................ lcd_send_byte(0,0x80|Adr);009A: MOVF 2F,W009B: IORLW 80009C: MOVWF 30009D: CLRF 31009E: MOVF 30,W009F: MOVWF 3200A0: CALL 04100A1: RETLW 00.................... }............................................................ // Zapis znaku na displej, zpracovani ridicich znaku.................... //.................... void lcd_putc( char c).................... {........................................ switch (c)00A2: MOVF 2C,W00A3: MOVWF 2000A4: MOVLW 0C00A5: SUBWF 20,W00A6: BTFSC 03.200A7: GOTO 0B500A8: MOVLW 0A00A9: SUBWF 20,W00AA: BTFSC 03.200AB: GOTO 0BD00AC: MOVLW 0D00AD: SUBWF 20,W00AE: BTFSC 03.200AF: GOTO 0C300B0: MOVLW 0800B1: SUBWF 20,W00B2: BTFSC 03.200B3: GOTO 0C800B4: GOTO 0CD.................... {.................... case '\f' : lcd_send_byte(0,1); // smaz displej00B5: CLRF 3100B6: MOVLW 0100B7: MOVWF 3200B8: CALL 041.................... delay_ms(2);00B9: MOVLW 0200BA: MOVWF 3000BB: CALL 017.................... break;00BC: GOTO 0D9.................... case '\n' : lcd_gotoxy(1,2); break; // presun se na 1. znak 2. radky00BD: MOVLW 0100BE: MOVWF 2D00BF: MOVLW 0200C0: MOVWF 2E00C1: CALL 09100C2: GOTO 0D9.................... case '\r' : lcd_gotoxy(1,1); break; // presun home00C3: MOVLW 0100C4: MOVWF 2D00C5: MOVWF 2E00C6: CALL 09100C7: GOTO 0D9.................... case '\b' : lcd_send_byte(0,0x10); break; // posun kurzor o 1 zpet00C8: CLRF 3100C9: MOVLW 1000CA: MOVWF 3200CB: CALL 04100CC: GOTO 0D9.................... default : if (c<0x20) c&=0x7; // preklopeni definovatelnych znaku na rozsah 0 az 0x1F00CD: MOVF 2C,W00CE: SUBLW 1F00CF: BTFSS 03.000D0: GOTO 0D300D1: MOVLW 0700D2: ANDWF 2C,F.................... lcd_send_byte(1,c); break; // zapis znak00D3: MOVLW 0100D4: MOVWF 3100D5: MOVF 2C,W00D6: MOVWF 3200D7: CALL 04100D8: GOTO 0D9.................... }00D9: 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 AD_OSA_X 0 // adresa A/D prevodniku pro osu X.................... #DEFINE AD_OSA_Y 1 // adresa A/D prevodniku pro osu Y.................... #DEFINE TTL1 PIN_B4.................... #DEFINE TTL2 PIN_B3............................................................ // Odesle nulu nebo jednicku podle nejnizsiho bitu predanych dat.................... // Nula je posloupnost LH a jednicka je HL.................... //.................... void odeslat_bit(int8 data).................... {.................... output_bit(VYSILAC,bit_test(data,0));*0132: BTFSC 30.00133: GOTO 1360134: BCF 07.30135: GOTO 1370136: BSF 07.30137: BCF 25.30138: MOVF 25,W0139: BSF 03.5013A: MOVWF 07.................... delay_us(IMPULS);013B: MOVLW 53013C: BCF 03.5013D: MOVWF 20013E: DECFSZ 20,F013F: GOTO 13E.................... output_bit(VYSILAC,!bit_test(data,0));0140: BTFSS 30.00141: GOTO 1440142: BCF 07.30143: GOTO 1450144: BSF 07.30145: BCF 25.30146: MOVF 25,W0147: BSF 03.50148: MOVWF 07.................... delay_us(IMPULS);0149: MOVLW 53014A: BCF 03.5014B: MOVWF 20014C: DECFSZ 20,F014D: GOTO 14C014E: RETLW 00.................... }............................................................ // Odelse ramec o 4 bitech.................... // Datovy ramec zacina 11, synchronizacni ramec zacina 10.................... //.................... void odeslat_nibble(int1 datovy, int8 data).................... {.................... int i;........................................ delay_ms(3); // klidovy stav na lince014F: MOVLW 030150: MOVWF 300151: CALL 017........................................ odeslat_bit(1); // start bit0152: MOVLW 010153: MOVWF 300154: CALL 132.................... odeslat_bit(datovy);0155: MOVF 2D,W0156: MOVWF 300157: CALL 132........................................ for (i=5; --i!=0; ) // datove bity0158: MOVLW 050159: MOVWF 2F015A: DECF 2F,F015B: BTFSC 03.2015C: GOTO 163.................... {.................... odeslat_bit(data);015D: MOVF 2E,W015E: MOVWF 30015F: CALL 132.................... data>>=1;0160: BCF 03.00161: RRF 2E,F.................... }0162: GOTO 15A........................................ output_low(VYSILAC); // klidovy stav0163: BCF 25.30164: MOVF 25,W0165: BSF 03.50166: MOVWF 070167: BCF 03.50168: BCF 07.30169: RETLW 00.................... }............................................................ void odeslat_paket(int8 kanal, data).................... {.................... int8 suma;........................................ suma = kanal+data;016A: MOVF 2B,W016B: ADDWF 2A,W016C: MOVWF 2C.................... odeslat_nibble(0,0b1111); // Synchronizace016D: CLRF 2D016E: MOVLW 0F016F: MOVWF 2E0170: CALL 14F.................... odeslat_nibble(1,kanal); // Identifikace osy0171: MOVLW 010172: MOVWF 2D0173: MOVF 2A,W0174: MOVWF 2E0175: CALL 14F.................... odeslat_nibble(1,data); // Hodnota osy0176: MOVLW 010177: MOVWF 2D0178: MOVF 2B,W0179: MOVWF 2E017A: CALL 14F.................... odeslat_nibble(1,suma); // Kontrolni soucet017B: MOVLW 01017C: MOVWF 2D017D: MOVF 2C,W017E: MOVWF 2E017F: CALL 14F........................................ delay_ms(10); // cas pro prijimac aby mohl zpracovat data0180: MOVLW 0A0181: MOVWF 300182: CALL 0170183: RETLW 00.................... // mozno nahradit vysilanim jednicek.................... }............................................................ int stredX, stredY, x, y;........................................ 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(AD_OSA_X);.................... delay_us(10);.................... sred_x=read_adc();.................... set_adc_channel(AD_OSA_Y);.................... delay_us(10);.................... sred_y=read_adc();.................... };........................................ //else goto znovu;........................................ printf(lcd_putc,"\f");.................... printf(lcd_putc,"Pak ");........................................ set_adc_channel(AD_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(AD_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().................... {0184: CLRF 040185: MOVLW 1F0186: ANDWF 03,F0187: MOVLW 070188: BSF 03.50189: MOVWF 1F018A: MOVLW FF018B: BCF 03.5018C: MOVWF 25........................................ setup_adc_ports(RA0_RA1_RA3_ANALOG);018D: MOVLW 04018E: BSF 03.5018F: MOVWF 1F.................... setup_adc(ADC_CLOCK_DIV_2);0190: BCF 03.50191: MOVF 1F,W0192: ANDLW 380193: IORLW 010194: MOVWF 1F.................... setup_spi(FALSE);0195: BCF 14.50196: BCF 25.50197: MOVF 25,W0198: BSF 03.50199: MOVWF 07019A: BCF 03.5019B: BSF 25.4019C: MOVF 25,W019D: BSF 03.5019E: MOVWF 07019F: BCF 03.501A0: BCF 25.301A1: MOVF 25,W01A2: BSF 03.501A3: MOVWF 0701A4: MOVLW 0001A5: BCF 03.501A6: MOVWF 1401A7: BSF 03.501A8: MOVWF 14.................... setup_counters(RTCC_INTERNAL,RTCC_DIV_2);01A9: BCF 03.501AA: CLRF 2001AB: BTFSS 20.301AC: GOTO 1B501AD: MOVLW 0701AE: CLRF 0101AF: MOVLW 8101B0: MOVWF 0401B1: MOVF 00,W01B2: ANDLW C001B3: IORLW 0F01B4: MOVWF 0001B5: CLRWDT01B6: MOVLW 8101B7: MOVWF 0401B8: MOVF 00,W01B9: ANDLW C001BA: IORWF 20,W01BB: MOVWF 00.................... setup_timer_1(T1_DISABLED);01BC: CLRF 10.................... setup_timer_2(T2_DISABLED,0,1);01BD: MOVLW 0001BE: MOVWF 2101BF: MOVWF 1201C0: MOVLW 0001C1: BSF 03.501C2: MOVWF 12........................................ lcd_init();01C3: BCF 03.501C4: GOTO 057.................... 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*01C5: CLRF 2A01C6: MOVF 2A,W01C7: CALL 00C01C8: INCF 2A,F01C9: MOVWF 2C01CA: CALL 0A201CB: MOVLW 0601CC: SUBWF 2A,W01CD: BTFSS 03.201CE: GOTO 1C6.................... delay_ms(300);01CF: MOVLW 0201D0: MOVWF 2A01D1: MOVLW 9601D2: MOVWF 3001D3: CALL 01701D4: DECFSZ 2A,F01D5: GOTO 1D1........................................ while(true).................... {.................... set_adc_channel(AD_OSA_X);01D6: MOVLW 0001D7: MOVWF 2101D8: MOVF 1F,W01D9: ANDLW C701DA: IORWF 21,W01DB: MOVWF 1F.................... lcd_gotoxy(1,1);01DC: MOVLW 0101DD: MOVWF 2D01DE: MOVWF 2E01DF: CALL 091.................... x=read_adc() >> 4;01E0: BSF 1F.201E1: BTFSC 1F.201E2: GOTO 1E101E3: MOVF 1E,W01E4: SWAPF 1E,W01E5: MOVWF 2801E6: MOVLW 0F01E7: ANDWF 28,F.................... printf(lcd_putc,"X: %D ", x);*00EF: MOVF 2A,W00F0: MOVWF 2000F1: BTFSC 2A.700F2: GOTO 0F700F3: BTFSS 2B.200F4: GOTO 10100F5: MOVLW 2000F6: GOTO 0FC00F7: COMF 20,F00F8: INCF 20,F00F9: MOVF 20,W00FA: MOVWF 2A00FB: MOVLW 2D00FC: MOVWF 2100FD: MOVWF 2C00FE: CALL 0A200FF: BTFSS 2B.20100: BSF 2B.30101: MOVF 2A,W0102: MOVWF 2C0103: MOVLW 640104: MOVWF 2D0105: CALL 0DA0106: MOVF 20,W0107: MOVWF 2A0108: MOVF 21,W0109: MOVLW 30010A: BTFSS 03.2010B: GOTO 113010C: BTFSC 2B.0010D: BSF 2B.3010E: BTFSC 2B.3010F: GOTO 1190110: BTFSC 2B.40111: MOVLW 200112: GOTO 1150113: BCF 2B.30114: BCF 2B.40115: ADDWF 21,F0116: MOVF 21,W0117: MOVWF 2C0118: CALL 0A20119: MOVF 2A,W011A: MOVWF 2C011B: MOVLW 0A011C: MOVWF 2D011D: CALL 0DA011E: MOVF 20,W011F: MOVWF 2A0120: MOVF 21,W0121: MOVLW 300122: BTFSS 03.20123: GOTO 1280124: BTFSC 2B.30125: GOTO 12C0126: BTFSC 2B.40127: MOVLW 200128: ADDWF 21,F0129: MOVF 21,W012A: MOVWF 2C012B: CALL 0A2012C: MOVLW 30012D: ADDWF 2A,F012E: MOVF 2A,W012F: MOVWF 2C0130: CALL 0A20131: RETLW 00*01E8: MOVLW 5801E9: MOVWF 2C01EA: CALL 0A201EB: MOVLW 3A01EC: MOVWF 2C01ED: CALL 0A201EE: MOVLW 2001EF: MOVWF 2C01F0: CALL 0A201F1: MOVF 28,W01F2: MOVWF 2A01F3: MOVLW 1801F4: MOVWF 2B01F5: CALL 0EF01F6: MOVLW 0601F7: MOVWF 2A01F8: MOVLW 2001F9: MOVWF 2C01FA: CALL 0A201FB: DECFSZ 2A,F01FC: GOTO 1F8.................... set_adc_channel(AD_OSA_Y);01FD: MOVLW 0801FE: MOVWF 2101FF: MOVF 1F,W0200: ANDLW C70201: IORWF 21,W0202: MOVWF 1F.................... lcd_gotoxy(1,2);0203: MOVLW 010204: MOVWF 2D0205: MOVLW 020206: MOVWF 2E0207: CALL 091.................... y=read_adc() >> 4;0208: BSF 1F.20209: BTFSC 1F.2020A: GOTO 209020B: MOVF 1E,W020C: SWAPF 1E,W020D: MOVWF 29020E: MOVLW 0F020F: ANDWF 29,F.................... printf(lcd_putc,"Y: %D ", y);0210: MOVLW 590211: MOVWF 2C0212: CALL 0A20213: MOVLW 3A0214: MOVWF 2C0215: CALL 0A20216: MOVLW 200217: MOVWF 2C0218: CALL 0A20219: MOVF 29,W021A: MOVWF 2A021B: MOVLW 18021C: MOVWF 2B021D: CALL 0EF021E: MOVLW 06021F: MOVWF 2A0220: MOVLW 200221: MOVWF 2C0222: CALL 0A20223: DECFSZ 2A,F0224: GOTO 220........................................ odeslat_paket(OSA_X,x);0225: MOVLW 010226: MOVWF 2A0227: MOVF 28,W0228: MOVWF 2B0229: CALL 16A.................... odeslat_paket(OSA_Y,y);022A: MOVLW 02022B: MOVWF 2A022C: MOVF 29,W022D: MOVWF 2B022E: CALL 16A........................................ }022F: GOTO 1D6........................................ }....................0230: SLEEP