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: 613 (15%)Largest free fragment is 2048RAM used: 12 (6%) at main() level23 (12%) worst caseStack: 5 locations*0000: MOVLW 000001: MOVWF 0A0002: GOTO 1990003: NOP.................... #include "main.h".................... #include <16F873.h>.................... //////// Standard Header file for the PIC16F873 device ////////////////.................... #device PIC16F873.................... #list........................................ #use delay(clock=4000000)*0018: MOVLW 2E0019: MOVWF 04001A: MOVF 00,W001B: BTFSC 03.2001C: GOTO 02C001D: MOVLW 01001E: MOVWF 21001F: CLRF 200020: DECFSZ 20,F0021: GOTO 0200022: DECFSZ 21,F0023: GOTO 01F0024: MOVLW 4A0025: MOVWF 200026: DECFSZ 20,F0027: GOTO 0260028: NOP0029: NOP002A: DECFSZ 00,F002B: GOTO 01D002C: RETLW 00.................... #fuses XT,PUT,NOWDT............................................................ #include "..\common.h".................... #DEFINE OSA_X 0 // adresy os.................... #DEFINE OSA_Y 1.................... #DEFINE TLs 2.................... #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*002D: MOVF 06,W002E: ANDLW 0F002F: MOVWF 350030: SWAPF 34,W0031: MOVWF 200032: MOVLW F00033: ANDWF 20,F0034: MOVF 20,W0035: ANDLW F00036: IORWF 35,W0037: MOVWF 06.................... output_bit(LCD_E,1); // vzestupna hrana0038: BSF 06.20039: BSF 03.5003A: BCF 06.2.................... delay_us(1); // pockej alespon 450ns od e nebo alespon 195ns od dat003B: NOP.................... output_bit(LCD_E,0); // sestupna hrana (minimalni perioda e je 1us)003C: BCF 03.5003D: BCF 06.2003E: BSF 03.5003F: BCF 06.20040: BCF 03.50041: 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 registr0042: MOVF 32,F0043: BTFSS 03.20044: GOTO 0470045: BCF 06.10046: GOTO 0480047: BSF 06.10048: BSF 03.50049: BCF 06.1.................... swap(n);004A: BCF 03.5004B: SWAPF 33,F.................... lcd_send_nibble(n); // posli horni pulku bajtu004C: MOVF 33,W004D: MOVWF 34004E: CALL 02D.................... swap(n);004F: SWAPF 33,F.................... lcd_send_nibble(n); // posli spodni pulku bajtu0050: MOVF 33,W0051: MOVWF 340052: CALL 02D.................... delay_us(40); // minimalni doba na provedeni prikazu0053: MOVLW 0D0054: MOVWF 200055: DECFSZ 20,F0056: GOTO 0550057: 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 napajeni0058: MOVLW 140059: MOVWF 2E005A: CALL 018........................................ *LCD_TRIS = *LCD_TRIS & ~LCD_MASK; // nuluj odpovidajici bity tris registru datoveho portu LCD005B: MOVLW 0F005C: BSF 03.5005D: ANDWF 06,F........................................ output_bit(LCD_RS,0); // nastav jako vystup a nastav klidovy stav005E: BCF 03.5005F: BCF 06.10060: BSF 03.50061: BCF 06.1.................... output_bit(LCD_E,0); // nastav jako vystup a nastav klidovy stav0062: BCF 03.50063: BCF 06.20064: BSF 03.50065: BCF 06.2........................................ for (i=0; i<3; i++) // nastav lcd do rezimu 8 bitu sbernice0066: BCF 03.50067: CLRF 2B0068: MOVF 2B,W0069: SUBLW 02006A: BTFSS 03.0006B: GOTO 074.................... {.................... delay_ms(2); // muze byt rozdelany prenos dat (2x 4 bity) nebo pomaly povel006C: MOVLW 02006D: MOVWF 2E006E: CALL 018.................... lcd_send_nibble(3); // rezim 8 bitu006F: MOVLW 030070: MOVWF 340071: CALL 02D.................... }0072: INCF 2B,F0073: GOTO 068........................................ delay_us(40); // cas na zpracovani0074: MOVLW 0D0075: MOVWF 200076: DECFSZ 20,F0077: GOTO 076.................... lcd_send_nibble(2); // nastav rezim 4 bitu (plati od nasledujiciho prenosu)0078: MOVLW 020079: MOVWF 34007A: CALL 02D.................... delay_us(40); // cas na zpracovani007B: MOVLW 0D007C: MOVWF 20007D: DECFSZ 20,F007E: GOTO 07D........................................ for (i=0;i<3;i++) // proved inicializaci (nastaveni modu, smazani apod)007F: CLRF 2B0080: MOVF 2B,W0081: SUBLW 020082: BTFSS 03.00083: GOTO 090.................... {.................... lcd_send_byte(0,LCD_INIT_STRING[i]);0084: MOVF 2B,W0085: CALL 0040086: MOVWF 2C0087: CLRF 320088: MOVF 2C,W0089: MOVWF 33008A: CALL 042.................... delay_ms(2);008B: MOVLW 02008C: MOVWF 2E008D: CALL 018.................... }008E: INCF 2B,F008F: GOTO 0800090: BCF 0A.30091: GOTO 1DB (RETURN).................... }............................................................ // Proved presun kurzoru.................... //.................... // Pozice 1.1 je domu.................... //.................... void lcd_gotoxy( BYTE x, BYTE y).................... {........................................ BYTE Adr;........................................ Adr=x-1;0092: MOVLW 010093: SUBWF 2E,W0094: MOVWF 30.................... if(y==2)0095: MOVF 2F,W0096: SUBLW 020097: BTFSS 03.20098: GOTO 09B.................... Adr+=LCD_LINE_2;0099: MOVLW 40009A: ADDWF 30,F........................................ lcd_send_byte(0,0x80|Adr);009B: MOVF 30,W009C: IORLW 80009D: MOVWF 31009E: CLRF 32009F: MOVF 31,W00A0: MOVWF 3300A1: CALL 04200A2: RETLW 00.................... }............................................................ // Zapis znaku na displej, zpracovani ridicich znaku.................... //.................... void lcd_putc( char c).................... {........................................ switch (c)00A3: MOVF 2D,W00A4: MOVWF 2000A5: MOVLW 0C00A6: SUBWF 20,W00A7: BTFSC 03.200A8: GOTO 0B600A9: MOVLW 0A00AA: SUBWF 20,W00AB: BTFSC 03.200AC: GOTO 0BE00AD: MOVLW 0D00AE: SUBWF 20,W00AF: BTFSC 03.200B0: GOTO 0C400B1: MOVLW 0800B2: SUBWF 20,W00B3: BTFSC 03.200B4: GOTO 0C900B5: GOTO 0CE.................... {.................... case '\f' : lcd_send_byte(0,1); // smaz displej00B6: CLRF 3200B7: MOVLW 0100B8: MOVWF 3300B9: CALL 042.................... delay_ms(2);00BA: MOVLW 0200BB: MOVWF 2E00BC: CALL 018.................... break;00BD: GOTO 0DA.................... case '\n' : lcd_gotoxy(1,2); break; // presun se na 1. znak 2. radky00BE: MOVLW 0100BF: MOVWF 2E00C0: MOVLW 0200C1: MOVWF 2F00C2: CALL 09200C3: GOTO 0DA.................... case '\r' : lcd_gotoxy(1,1); break; // presun home00C4: MOVLW 0100C5: MOVWF 2E00C6: MOVWF 2F00C7: CALL 09200C8: GOTO 0DA.................... case '\b' : lcd_send_byte(0,0x10); break; // posun kurzor o 1 zpet00C9: CLRF 3200CA: MOVLW 1000CB: MOVWF 3300CC: CALL 04200CD: GOTO 0DA.................... default : if (c<0x20) c&=0x7; // preklopeni definovatelnych znaku na rozsah 0 az 0x1F00CE: MOVF 2D,W00CF: SUBLW 1F00D0: BTFSS 03.000D1: GOTO 0D400D2: MOVLW 0700D3: ANDWF 2D,F.................... lcd_send_byte(1,c); break; // zapis znak00D4: MOVLW 0100D5: MOVWF 3200D6: MOVF 2D,W00D7: MOVWF 3300D8: CALL 04200D9: GOTO 0DA.................... }00DA: 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........................................ int stredX, stredY, x, y;............................................................ void odeslat_nibble (int8 kodeslani).................... {.................... int i;........................................ for (i=0;i<=3;i++)*0133: CLRF 2E0134: MOVF 2E,W0135: SUBLW 030136: BTFSS 03.00137: GOTO 18B.................... {.................... if (1==bit_test(kodeslani,i))0138: MOVF 2D,W0139: MOVWF 20013A: MOVF 2E,W013B: MOVWF 21013C: BTFSC 03.2013D: GOTO 142013E: BCF 03.0013F: RRF 20,F0140: DECFSZ 21,F0141: GOTO 13E0142: MOVLW 000143: BTFSC 20.00144: MOVLW 010145: SUBLW 010146: BTFSS 03.20147: GOTO 160.................... {.................... output_high(VYSILAC);0148: BCF 29.30149: MOVF 29,W014A: BSF 03.5014B: MOVWF 07014C: BCF 03.5014D: BSF 07.3.................... delay_us(2*IMPULS); // X pri 1: |--|___014E: MOVLW A6014F: MOVWF 200150: DECFSZ 20,F0151: GOTO 1500152: NOP.................... output_low(VYSILAC);0153: BCF 29.30154: MOVF 29,W0155: BSF 03.50156: MOVWF 070157: BCF 03.50158: BCF 07.3.................... delay_us(3*IMPULS);0159: MOVLW F9015A: MOVWF 20015B: DECFSZ 20,F015C: GOTO 15B015D: NOP015E: NOP.................... }.................... else015F: GOTO 189.................... {.................... output_high(VYSILAC);0160: BCF 29.30161: MOVF 29,W0162: BSF 03.50163: MOVWF 070164: BCF 03.50165: BSF 07.3.................... delay_us(IMPULS); // X pri 0: |-|__|-|_0166: MOVLW 530167: MOVWF 200168: DECFSZ 20,F0169: GOTO 168.................... output_low(VYSILAC);016A: BCF 29.3016B: MOVF 29,W016C: BSF 03.5016D: MOVWF 07016E: BCF 03.5016F: BCF 07.3........................................ delay_us(2*IMPULS);0170: MOVLW A60171: MOVWF 200172: DECFSZ 20,F0173: GOTO 1720174: NOP........................................ output_high(VYSILAC);0175: BCF 29.30176: MOVF 29,W0177: BSF 03.50178: MOVWF 070179: BCF 03.5017A: BSF 07.3.................... delay_us(IMPULS);017B: MOVLW 53017C: MOVWF 20017D: DECFSZ 20,F017E: GOTO 17D.................... output_low(VYSILAC);017F: BCF 29.30180: MOVF 29,W0181: BSF 03.50182: MOVWF 070183: BCF 03.50184: BCF 07.3.................... delay_us(IMPULS);0185: MOVLW 530186: MOVWF 200187: DECFSZ 20,F0188: GOTO 187.................... };.................... }0189: INCF 2E,F018A: GOTO 134018B: RETLW 00.................... }............................................................ void odesli (int8 neco,adresa).................... {.................... odeslat_nibble(0b1111); // Synchronizace018C: MOVLW 0F018D: MOVWF 2D018E: CALL 133.................... odeslat_nibble(adresa); // Identifikace osy018F: MOVF 2C,W0190: MOVWF 2D0191: CALL 133.................... odeslat_nibble(neco); // Hodnota osy0192: MOVF 2B,W0193: MOVWF 2D0194: CALL 133.................... odeslat_nibble(neco); // Zopakovana hodnota osy pro kontrolu0195: MOVF 2B,W0196: MOVWF 2D0197: CALL 1330198: RETLW 00........................................ }............................................................ 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().................... {*01A2: CLRF 2A.................... int c=0;*0199: CLRF 04019A: MOVLW 1F019B: ANDWF 03,F019C: MOVLW 07019D: BSF 03.5019E: MOVWF 1F019F: MOVLW FF01A0: BCF 03.501A1: MOVWF 29........................................ setup_adc_ports(RA0_RA1_RA3_ANALOG);*01A3: MOVLW 0401A4: BSF 03.501A5: MOVWF 1F.................... setup_adc(ADC_CLOCK_DIV_2);01A6: BCF 03.501A7: MOVF 1F,W01A8: ANDLW 3801A9: IORLW 0101AA: MOVWF 1F.................... setup_spi(FALSE);01AB: BCF 14.501AC: BCF 29.501AD: MOVF 29,W01AE: BSF 03.501AF: MOVWF 0701B0: BCF 03.501B1: BSF 29.401B2: MOVF 29,W01B3: BSF 03.501B4: MOVWF 0701B5: BCF 03.501B6: BCF 29.301B7: MOVF 29,W01B8: BSF 03.501B9: MOVWF 0701BA: MOVLW 0001BB: BCF 03.501BC: MOVWF 1401BD: BSF 03.501BE: MOVWF 14.................... setup_counters(RTCC_INTERNAL,RTCC_DIV_2);01BF: BCF 03.501C0: CLRF 2001C1: BTFSS 20.301C2: GOTO 1CB01C3: MOVLW 0701C4: CLRF 0101C5: MOVLW 8101C6: MOVWF 0401C7: MOVF 00,W01C8: ANDLW C001C9: IORLW 0F01CA: MOVWF 0001CB: CLRWDT01CC: MOVLW 8101CD: MOVWF 0401CE: MOVF 00,W01CF: ANDLW C001D0: IORWF 20,W01D1: MOVWF 00.................... setup_timer_1(T1_DISABLED);01D2: CLRF 10.................... setup_timer_2(T2_DISABLED,0,1);01D3: MOVLW 0001D4: MOVWF 2101D5: MOVWF 1201D6: MOVLW 0001D7: BSF 03.501D8: MOVWF 12........................................ lcd_init();01D9: BCF 03.501DA: GOTO 058........................................ /* while (c<=16).................... {.................... lcd_gotoxy(c,1);.................... printf(lcd_putc,"_");.................... delay_ms(50);.................... printf(lcd_putc,"\f");.................... c++;.................... }........................................ printf(lcd_putc,"\fAhoj!");.................... delay_ms(1500);*/........................................ printf(lcd_putc,"\f");01DB: MOVLW 0C01DC: MOVWF 2D01DD: CALL 0A3........................................ lcd_gotoxy(7,2);01DE: MOVLW 0701DF: MOVWF 2E01E0: MOVLW 0201E1: MOVWF 2F01E2: CALL 092.................... printf(lcd_putc,"vysilam");*000C: BCF 0A.0000D: BCF 0A.1000E: BCF 0A.2000F: ADDWF 02,F0010: RETLW 760011: RETLW 790012: RETLW 730013: RETLW 690014: RETLW 6C0015: RETLW 610016: RETLW 6D0017: RETLW 00*01E3: CLRF 2B01E4: MOVF 2B,W01E5: CALL 00C01E6: INCF 2B,F01E7: MOVWF 2D01E8: CALL 0A301E9: MOVLW 0701EA: SUBWF 2B,W01EB: BTFSS 03.201EC: GOTO 1E4.................... while(true).................... {.................... set_adc_channel(AD_OSA_X);01ED: MOVLW 0001EE: MOVWF 2101EF: MOVF 1F,W01F0: ANDLW C701F1: IORWF 21,W01F2: MOVWF 1F.................... lcd_gotoxy(1,1);01F3: MOVLW 0101F4: MOVWF 2E01F5: MOVWF 2F01F6: CALL 092.................... x=read_adc() >> 4;01F7: BSF 1F.201F8: BTFSC 1F.201F9: GOTO 1F801FA: MOVF 1E,W01FB: SWAPF 1E,W01FC: MOVWF 2701FD: MOVLW 0F01FE: ANDWF 27,F.................... printf(lcd_putc,"X: %D ", x);*00F0: MOVF 2B,W00F1: MOVWF 2000F2: BTFSC 2B.700F3: GOTO 0F800F4: BTFSS 2C.200F5: GOTO 10200F6: MOVLW 2000F7: GOTO 0FD00F8: COMF 20,F00F9: INCF 20,F00FA: MOVF 20,W00FB: MOVWF 2B00FC: MOVLW 2D00FD: MOVWF 2100FE: MOVWF 2D00FF: CALL 0A30100: BTFSS 2C.20101: BSF 2C.30102: MOVF 2B,W0103: MOVWF 2D0104: MOVLW 640105: MOVWF 2E0106: CALL 0DB0107: MOVF 20,W0108: MOVWF 2B0109: MOVF 21,W010A: MOVLW 30010B: BTFSS 03.2010C: GOTO 114010D: BTFSC 2C.0010E: BSF 2C.3010F: BTFSC 2C.30110: GOTO 11A0111: BTFSC 2C.40112: MOVLW 200113: GOTO 1160114: BCF 2C.30115: BCF 2C.40116: ADDWF 21,F0117: MOVF 21,W0118: MOVWF 2D0119: CALL 0A3011A: MOVF 2B,W011B: MOVWF 2D011C: MOVLW 0A011D: MOVWF 2E011E: CALL 0DB011F: MOVF 20,W0120: MOVWF 2B0121: MOVF 21,W0122: MOVLW 300123: BTFSS 03.20124: GOTO 1290125: BTFSC 2C.30126: GOTO 12D0127: BTFSC 2C.40128: MOVLW 200129: ADDWF 21,F012A: MOVF 21,W012B: MOVWF 2D012C: CALL 0A3012D: MOVLW 30012E: ADDWF 2B,F012F: MOVF 2B,W0130: MOVWF 2D0131: CALL 0A30132: RETLW 00*01FF: MOVLW 580200: MOVWF 2D0201: CALL 0A30202: MOVLW 3A0203: MOVWF 2D0204: CALL 0A30205: MOVLW 200206: MOVWF 2D0207: CALL 0A30208: MOVF 27,W0209: MOVWF 2B020A: MOVLW 18020B: MOVWF 2C020C: CALL 0F0020D: MOVLW 06020E: MOVWF 2B020F: MOVLW 200210: MOVWF 2D0211: CALL 0A30212: DECFSZ 2B,F0213: GOTO 20F.................... set_adc_channel(AD_OSA_Y);0214: MOVLW 080215: MOVWF 210216: MOVF 1F,W0217: ANDLW C70218: IORWF 21,W0219: MOVWF 1F.................... lcd_gotoxy(1,2);021A: MOVLW 01021B: MOVWF 2E021C: MOVLW 02021D: MOVWF 2F021E: CALL 092.................... y=read_adc() >> 4;021F: BSF 1F.20220: BTFSC 1F.20221: GOTO 2200222: MOVF 1E,W0223: SWAPF 1E,W0224: MOVWF 280225: MOVLW 0F0226: ANDWF 28,F.................... printf(lcd_putc,"Y: %D ", y);0227: MOVLW 590228: MOVWF 2D0229: CALL 0A3022A: MOVLW 3A022B: MOVWF 2D022C: CALL 0A3022D: MOVLW 20022E: MOVWF 2D022F: CALL 0A30230: MOVF 28,W0231: MOVWF 2B0232: MOVLW 180233: MOVWF 2C0234: CALL 0F00235: MOVLW 060236: MOVWF 2B0237: MOVLW 200238: MOVWF 2D0239: CALL 0A3023A: DECFSZ 2B,F023B: GOTO 237........................................ /* output_high(PIN_C1);.................... output_low(PIN_C2);.................... delay_ms(100);.................... output_low(PIN_C1);.................... output_high(PIN_C2);.................... delay_ms(100);*/........................................ output_high(PIN_C4);023C: BCF 29.4023D: MOVF 29,W023E: BSF 03.5023F: MOVWF 070240: BCF 03.50241: BSF 07.4.................... output_high(PIN_C6);0242: BCF 29.60243: MOVF 29,W0244: BSF 03.50245: MOVWF 070246: BCF 03.50247: BSF 07.6.................... delay_ms(1);0248: MOVLW 010249: MOVWF 2E024A: CALL 018.................... output_low(PIN_C4);024B: BCF 29.4024C: MOVF 29,W024D: BSF 03.5024E: MOVWF 07024F: BCF 03.50250: BCF 07.4........................................ odesli(x,OSA_X);0251: MOVF 27,W0252: MOVWF 2B0253: CLRF 2C0254: CALL 18C.................... delay_ms(10);0255: MOVLW 0A0256: MOVWF 2E0257: CALL 018.................... odesli(y,OSA_Y);0258: MOVF 28,W0259: MOVWF 2B025A: MOVLW 01025B: MOVWF 2C025C: CALL 18C........................................ output_low(PIN_C6);025D: BCF 29.6025E: MOVF 29,W025F: BSF 03.50260: MOVWF 070261: BCF 03.50262: BCF 07.6.................... }0263: GOTO 1ED........................................ }....................0264: SLEEP