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: 1542 (38%)Largest free fragment is 2048RAM used: 22 (11%) at main() level40 (21%) worst caseStack: 5 locations*0000: MOVLW 000001: MOVWF 0A0002: GOTO 5C10003: NOP.................... // Vysilac........................................ #include "main.h".................... #include <16F873.h>.................... //////// Standard Header file for the PIC16F873 device ////////////////.................... #device PIC16F873.................... #list........................................ #use delay(clock=4000000)*0077: MOVLW 3F0078: MOVWF 040079: MOVF 00,W007A: BTFSC 03.2007B: GOTO 08B007C: MOVLW 01007D: MOVWF 21007E: CLRF 20007F: DECFSZ 20,F0080: GOTO 07F0081: DECFSZ 21,F0082: GOTO 07E0083: MOVLW 4A0084: MOVWF 200085: DECFSZ 20,F0086: GOTO 0850087: NOP0088: NOP0089: DECFSZ 00,F008A: GOTO 07C008B: RETLW 00*0321: MOVLW 3A0322: MOVWF 040323: MOVLW FC0324: ANDWF 00,F0325: RRF 00,F0326: RRF 00,F0327: MOVF 00,W0328: BTFSC 03.20329: GOTO 32E032A: GOTO 32C032B: NOP032C: DECFSZ 00,F032D: GOTO 32B032E: BCF 0A.3032F: GOTO 545 (RETURN).................... #fuses XT,PUT,NOWDT............................................................ #include "..\common.h".................... #DEFINE OSA_X 1 // adresy os.................... #DEFINE OSA_Y 2.................... #DEFINE OSA_Z 3.................... #DEFINE OSA_W 4.................... #DEFINE TLs 5.................... #DEFINE Trim 6 // ovladani prijimace........................................ #DEFINE IMPULS 250 // sirka impulsu.................... #DEFINE SYNC 15 // delka uvodniho ticha v IMPULS/4........................................ //Displej.................... #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*008C: MOVF 06,W008D: ANDLW 0F008E: MOVWF 46008F: SWAPF 45,W0090: MOVWF 200091: MOVLW F00092: ANDWF 20,F0093: MOVF 20,W0094: ANDLW F00095: IORWF 46,W0096: MOVWF 06.................... output_bit(LCD_E,1); // vzestupna hrana0097: BSF 06.20098: BSF 03.50099: BCF 06.2.................... delay_us(1); // pockej alespon 450ns od e nebo alespon 195ns od dat009A: NOP.................... output_bit(LCD_E,0); // sestupna hrana (minimalni perioda e je 1us)009B: BCF 03.5009C: BCF 06.2009D: BSF 03.5009E: BCF 06.2009F: BCF 03.500A0: 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 registr00A1: MOVF 43,F00A2: BTFSS 03.200A3: GOTO 0A600A4: BCF 06.100A5: GOTO 0A700A6: BSF 06.100A7: BSF 03.500A8: BCF 06.1.................... swap(n);00A9: BCF 03.500AA: SWAPF 44,F.................... lcd_send_nibble(n); // posli horni pulku bajtu00AB: MOVF 44,W00AC: MOVWF 4500AD: CALL 08C.................... swap(n);00AE: SWAPF 44,F.................... lcd_send_nibble(n); // posli spodni pulku bajtu00AF: MOVF 44,W00B0: MOVWF 4500B1: CALL 08C.................... delay_us(40); // minimalni doba na provedeni prikazu00B2: MOVLW 0D00B3: MOVWF 2000B4: DECFSZ 20,F00B5: GOTO 0B400B6: 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 napajeni00B7: MOVLW 1400B8: MOVWF 3F00B9: CALL 077........................................ *LCD_TRIS = *LCD_TRIS & ~LCD_MASK; // nuluj odpovidajici bity tris registru datoveho portu LCD00BA: MOVLW 0F00BB: BSF 03.500BC: ANDWF 06,F........................................ output_bit(LCD_RS,0); // nastav jako vystup a nastav klidovy stav00BD: BCF 03.500BE: BCF 06.100BF: BSF 03.500C0: BCF 06.1.................... output_bit(LCD_E,0); // nastav jako vystup a nastav klidovy stav00C1: BCF 03.500C2: BCF 06.200C3: BSF 03.500C4: BCF 06.2........................................ for (i=0; i<3; i++) // nastav lcd do rezimu 8 bitu sbernice00C5: BCF 03.500C6: CLRF 3600C7: MOVF 36,W00C8: SUBLW 0200C9: BTFSS 03.000CA: GOTO 0D3.................... {.................... delay_ms(2); // muze byt rozdelany prenos dat (2x 4 bity) nebo pomaly povel00CB: MOVLW 0200CC: MOVWF 3F00CD: CALL 077.................... lcd_send_nibble(3); // rezim 8 bitu00CE: MOVLW 0300CF: MOVWF 4500D0: CALL 08C.................... }00D1: INCF 36,F00D2: GOTO 0C7........................................ delay_us(40); // cas na zpracovani00D3: MOVLW 0D00D4: MOVWF 2000D5: DECFSZ 20,F00D6: GOTO 0D5.................... lcd_send_nibble(2); // nastav rezim 4 bitu (plati od nasledujiciho prenosu)00D7: MOVLW 0200D8: MOVWF 4500D9: CALL 08C.................... delay_us(40); // cas na zpracovani00DA: MOVLW 0D00DB: MOVWF 2000DC: DECFSZ 20,F00DD: GOTO 0DC........................................ for (i=0;i<3;i++) // proved inicializaci (nastaveni modu, smazani apod)00DE: CLRF 3600DF: MOVF 36,W00E0: SUBLW 0200E1: BTFSS 03.000E2: GOTO 0EF.................... {.................... lcd_send_byte(0,LCD_INIT_STRING[i]);00E3: MOVF 36,W00E4: CALL 00400E5: MOVWF 3700E6: CLRF 4300E7: MOVF 37,W00E8: MOVWF 4400E9: CALL 0A1.................... delay_ms(2);00EA: MOVLW 0200EB: MOVWF 3F00EC: CALL 077.................... }00ED: INCF 36,F00EE: GOTO 0DF00EF: BCF 0A.300F0: GOTO 602 (RETURN).................... }............................................................ // Proved presun kurzoru.................... //.................... // Pozice 1.1 je domu.................... //.................... void lcd_gotoxy( BYTE x, BYTE y).................... {........................................ BYTE Adr;........................................ Adr=x-1;*0227: MOVLW 010228: SUBWF 3F,W0229: MOVWF 41.................... if(y==2)022A: MOVF 40,W022B: SUBLW 02022C: BTFSS 03.2022D: GOTO 230.................... Adr+=LCD_LINE_2;022E: MOVLW 40022F: ADDWF 41,F........................................ lcd_send_byte(0,0x80|Adr);0230: MOVF 41,W0231: IORLW 800232: MOVWF 420233: CLRF 430234: MOVF 42,W0235: MOVWF 440236: CALL 0A10237: RETLW 00.................... }............................................................ // Zapis znaku na displej, zpracovani ridicich znaku.................... //.................... void lcd_putc( char c).................... {........................................ switch (c)0238: MOVF 3E,W0239: MOVWF 20023A: MOVLW 0C023B: SUBWF 20,W023C: BTFSC 03.2023D: GOTO 24B023E: MOVLW 0A023F: SUBWF 20,W0240: BTFSC 03.20241: GOTO 2530242: MOVLW 0D0243: SUBWF 20,W0244: BTFSC 03.20245: GOTO 2590246: MOVLW 080247: SUBWF 20,W0248: BTFSC 03.20249: GOTO 25E024A: GOTO 263.................... {.................... case '\f' : lcd_send_byte(0,1); // smaz displej024B: CLRF 43024C: MOVLW 01024D: MOVWF 44024E: CALL 0A1.................... delay_ms(2);024F: MOVLW 020250: MOVWF 3F0251: CALL 077.................... break;0252: GOTO 26F.................... case '\n' : lcd_gotoxy(1,2); break; // presun se na 1. znak 2. radky0253: MOVLW 010254: MOVWF 3F0255: MOVLW 020256: MOVWF 400257: CALL 2270258: GOTO 26F.................... case '\r' : lcd_gotoxy(1,1); break; // presun home0259: MOVLW 01025A: MOVWF 3F025B: MOVWF 40025C: CALL 227025D: GOTO 26F.................... case '\b' : lcd_send_byte(0,0x10); break; // posun kurzor o 1 zpet025E: CLRF 43025F: MOVLW 100260: MOVWF 440261: CALL 0A10262: GOTO 26F.................... default : if (c<0x20) c&=0x7; // preklopeni definovatelnych znaku na rozsah 0 az 0x1F0263: MOVF 3E,W0264: SUBLW 1F0265: BTFSS 03.00266: GOTO 2690267: MOVLW 070268: ANDWF 3E,F.................... lcd_send_byte(1,c); break; // zapis znak0269: MOVLW 01026A: MOVWF 43026B: MOVF 3E,W026C: MOVWF 44026D: CALL 0A1026E: GOTO 26F.................... }026F: 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);.................... //}........................................ #INCLUDE "lcd2.c".................... #define LCD_SC 0b0000011000 // posun displeje doleva.................... #define RIGHT 1.................... #define LEFT 0........................................ void lcd_sh(int1 lr).................... {.................... if (lr) lcd_send_byte(0,LCD_SC | 0x100); else lcd_send_byte(0,LCD_SC);.................... }........................................ //Klavesnice.................... #DEFINE PL PIN_B3 // ovladani klavesnice.................... #DEFINE STROBE_LED PIN_C0.................... #DEFINE STROBE_KL PIN_C1.................... #DEFINE DATA_OUT PIN_C2.................... #DEFINE CP PIN_C3.................... #DEFINE DATA_IN PIN_C4.................... #INCLUDE "keybord.c".................... //#DEFINE PL PIN_B3 // ovladani klavesnice.................... //#DEFINE STROBE_LED PIN_C0.................... //#DEFINE STROBE_KL PIN_C1.................... //#DEFINE DATA_OUT PIN_C2.................... //#DEFINE CP PIN_C3.................... //#DEFINE DATA_IN PIN_C4........................................ #DEFINE znak_0 14.................... #DEFINE znak_1 10.................... #DEFINE znak_2 11.................... #DEFINE znak_3 12.................... #DEFINE znak_4 20.................... #DEFINE znak_5 21.................... #DEFINE znak_6 22.................... #DEFINE znak_7 04.................... #DEFINE znak_8 05.................... #DEFINE znak_9 06.................... #DEFINE znak_R 15.................... #DEFINE znak_F 16.................... #DEFINE znak_C 27.................... #DEFINE nic 80............................................................ void KL_init().................... {.................... int8 i;.................... output_high(STROBE_KL);*00F1: BCF 25.100F2: MOVF 25,W00F3: BSF 03.500F4: MOVWF 0700F5: BCF 03.500F6: BSF 07.1.................... output_high(STROBE_LED);00F7: BCF 25.000F8: MOVF 25,W00F9: BSF 03.500FA: MOVWF 0700FB: BCF 03.500FC: BSF 07.0........................................ for (i=0;i<=7;i++)00FD: CLRF 3600FE: MOVF 36,W00FF: SUBLW 070100: BTFSS 03.00101: GOTO 116.................... {.................... output_low(DATA_IN);0102: BCF 25.40103: MOVF 25,W0104: BSF 03.50105: MOVWF 070106: BCF 03.50107: BCF 07.4.................... output_high(CP);0108: BCF 25.30109: MOVF 25,W010A: BSF 03.5010B: MOVWF 07010C: BCF 03.5010D: BSF 07.3.................... output_low(CP);010E: BCF 25.3010F: MOVF 25,W0110: BSF 03.50111: MOVWF 070112: BCF 03.50113: BCF 07.3.................... }0114: INCF 36,F0115: GOTO 0FE.................... output_low(STROBE_KL);0116: BCF 25.10117: MOVF 25,W0118: BSF 03.50119: MOVWF 07011A: BCF 03.5011B: BCF 07.1.................... output_low(STROBE_LED);011C: BCF 25.0011D: MOVF 25,W011E: BSF 03.5011F: MOVWF 070120: BCF 03.50121: BCF 07.0.................... output_high(CP);0122: BCF 25.30123: MOVF 25,W0124: BSF 03.50125: MOVWF 070126: BCF 03.50127: BSF 07.3.................... output_high(PL);0128: BSF 03.50129: BCF 06.3012A: BCF 03.5012B: BSF 06.3012C: BCF 0A.3012D: GOTO 603 (RETURN).................... }........................................ void KL_CP(j).................... {.................... int8 i;.................... for (i=0;i<=j;i++).................... {.................... output_high(CP);.................... output_low(CP);.................... }.................... }........................................ void LED(int8 LED) //rosviti LED 1-7.................... {.................... int i;.................... output_low(CP);*01E7: BCF 25.301E8: MOVF 25,W01E9: BSF 03.501EA: MOVWF 0701EB: BCF 03.501EC: BCF 07.3.................... output_low(STROBE_LED);01ED: BCF 25.001EE: MOVF 25,W01EF: BSF 03.501F0: MOVWF 0701F1: BCF 03.501F2: BCF 07.0.................... for (i=0;i<=7;i++)01F3: CLRF 3C01F4: MOVF 3C,W01F5: SUBLW 0701F6: BTFSS 03.001F7: GOTO 21A.................... {.................... output_bit(DATA_IN,bit_test(LED,i));01F8: MOVF 3B,W01F9: MOVWF 2001FA: MOVF 3C,W01FB: MOVWF 2101FC: BTFSC 03.201FD: GOTO 20201FE: BCF 03.001FF: RRF 20,F0200: DECFSZ 21,F0201: GOTO 1FE0202: BTFSC 20.00203: GOTO 2060204: BCF 07.40205: GOTO 2070206: BSF 07.40207: BCF 25.40208: MOVF 25,W0209: BSF 03.5020A: MOVWF 07.................... output_high(CP);020B: BCF 03.5020C: BCF 25.3020D: MOVF 25,W020E: BSF 03.5020F: MOVWF 070210: BCF 03.50211: BSF 07.3.................... output_low(CP);0212: BCF 25.30213: MOVF 25,W0214: BSF 03.50215: MOVWF 070216: BCF 03.50217: BCF 07.3.................... };0218: INCF 3C,F0219: GOTO 1F4.................... output_high(STROBE_LED);021A: BCF 25.0021B: MOVF 25,W021C: BSF 03.5021D: MOVWF 07021E: BCF 03.5021F: BSF 07.0.................... output_low(STROBE_LED);0220: BCF 25.00221: MOVF 25,W0222: BSF 03.50223: MOVWF 070224: BCF 03.50225: BCF 07.00226: RETLW 00.................... }........................................ int8 klavesa() //vrati cislo klavesy.................... {.................... int8 i;.................... int8 sloupec;........................................ for(sloupec=0; sloupec<=7; sloupec++)*012E: CLRF 3E012F: MOVF 3E,W0130: SUBLW 070131: BTFSS 03.00132: GOTO 1E4.................... {.................... output_low(STROBE_KL);0133: BCF 25.10134: MOVF 25,W0135: BSF 03.50136: MOVWF 070137: BCF 03.50138: BCF 07.1.................... output_low(DATA_IN);0139: BCF 25.4013A: MOVF 25,W013B: BSF 03.5013C: MOVWF 07013D: BCF 03.5013E: BCF 07.4.................... for (i=0;i<=7;i++)013F: CLRF 3D0140: MOVF 3D,W0141: SUBLW 070142: BTFSS 03.00143: GOTO 152.................... { //nulovani sloupcu.................... output_high(CP);0144: BCF 25.30145: MOVF 25,W0146: BSF 03.50147: MOVWF 070148: BCF 03.50149: BSF 07.3.................... output_low(CP);014A: BCF 25.3014B: MOVF 25,W014C: BSF 03.5014D: MOVWF 07014E: BCF 03.5014F: BCF 07.3.................... }0150: INCF 3D,F0151: GOTO 140........................................ output_high(DATA_IN);0152: BCF 25.40153: MOVF 25,W0154: BSF 03.50155: MOVWF 070156: BCF 03.50157: BSF 07.4.................... output_high(CP); //zavedeni 1 do registru sloupcu0158: BCF 25.30159: MOVF 25,W015A: BSF 03.5015B: MOVWF 07015C: BCF 03.5015D: BSF 07.3.................... output_low(CP);015E: BCF 25.3015F: MOVF 25,W0160: BSF 03.50161: MOVWF 070162: BCF 03.50163: BCF 07.3........................................ output_low(DATA_IN);0164: BCF 25.40165: MOVF 25,W0166: BSF 03.50167: MOVWF 070168: BCF 03.50169: BCF 07.4.................... for (i=0;i<sloupec;i++) //nastaveni sloupce016A: CLRF 3D016B: MOVF 3E,W016C: SUBWF 3D,W016D: BTFSC 03.0016E: GOTO 17D.................... {.................... output_high(CP);016F: BCF 25.30170: MOVF 25,W0171: BSF 03.50172: MOVWF 070173: BCF 03.50174: BSF 07.3.................... output_low(CP);0175: BCF 25.30176: MOVF 25,W0177: BSF 03.50178: MOVWF 070179: BCF 03.5017A: BCF 07.3.................... }017B: INCF 3D,F017C: GOTO 16B........................................ output_high(STROBE_KL);017D: BCF 25.1017E: MOVF 25,W017F: BSF 03.50180: MOVWF 070181: BCF 03.50182: BSF 07.1.................... output_low(PL);0183: BSF 03.50184: BCF 06.30185: BCF 03.50186: BCF 06.3.................... output_high(PL);0187: BSF 03.50188: BCF 06.30189: BCF 03.5018A: BSF 06.3........................................ for (i=0;i<5;i++) //posunuti cteciho registru018B: CLRF 3D018C: MOVF 3D,W018D: SUBLW 04018E: BTFSS 03.0018F: GOTO 19E.................... {.................... output_high(CP);0190: BCF 25.30191: MOVF 25,W0192: BSF 03.50193: MOVWF 070194: BCF 03.50195: BSF 07.3.................... output_low(CP);0196: BCF 25.30197: MOVF 25,W0198: BSF 03.50199: MOVWF 07019A: BCF 03.5019B: BCF 07.3.................... }019C: INCF 3D,F019D: GOTO 18C........................................ /* if (1==input(DATA_OUT)) return(sloupec); // pokud je 4. radek.................... output_high(CP);.................... output_low(CP);.................... if (1==input(DATA_OUT)) return(sloupec); // pokud je 3. radek.................... output_high(CP);.................... output_low(CP);*/.................... if (1==input(DATA_OUT)) return(sloupec); // pokud je 0. radek019E: BSF 25.2019F: MOVF 25,W01A0: BSF 03.501A1: MOVWF 0701A2: MOVLW 0001A3: BCF 03.501A4: BTFSC 07.201A5: MOVLW 0101A6: SUBLW 0101A7: BTFSS 03.201A8: GOTO 1AC01A9: MOVF 3E,W01AA: MOVWF 2101AB: GOTO 1E6.................... output_high(CP);01AC: BCF 25.301AD: MOVF 25,W01AE: BSF 03.501AF: MOVWF 0701B0: BCF 03.501B1: BSF 07.3.................... output_low(CP);01B2: BCF 25.301B3: MOVF 25,W01B4: BSF 03.501B5: MOVWF 0701B6: BCF 03.501B7: BCF 07.3.................... if (1==input(DATA_OUT)) return(0b1000 | sloupec); // pokud je 1. radek01B8: BSF 25.201B9: MOVF 25,W01BA: BSF 03.501BB: MOVWF 0701BC: MOVLW 0001BD: BCF 03.501BE: BTFSC 07.201BF: MOVLW 0101C0: SUBLW 0101C1: BTFSS 03.201C2: GOTO 1C701C3: MOVF 3E,W01C4: IORLW 0801C5: MOVWF 2101C6: GOTO 1E6.................... output_high(CP);01C7: BCF 25.301C8: MOVF 25,W01C9: BSF 03.501CA: MOVWF 0701CB: BCF 03.501CC: BSF 07.3.................... output_low(CP);01CD: BCF 25.301CE: MOVF 25,W01CF: BSF 03.501D0: MOVWF 0701D1: BCF 03.501D2: BCF 07.3.................... if (1==input(DATA_OUT)) return(0b10000 | sloupec); // pokud je 2. radek01D3: BSF 25.201D4: MOVF 25,W01D5: BSF 03.501D6: MOVWF 0701D7: MOVLW 0001D8: BCF 03.501D9: BTFSC 07.201DA: MOVLW 0101DB: SUBLW 0101DC: BTFSS 03.201DD: GOTO 1E201DE: MOVF 3E,W01DF: IORLW 1001E0: MOVWF 2101E1: GOTO 1E6............................................................ }01E2: INCF 3E,F01E3: GOTO 12F.................... return(0x80); // nastavy nejvissi bit, ze neni nic zmacknuto01E4: MOVLW 8001E5: MOVWF 2101E6: RETLW 00.................... }........................................ boolean read_KL(char *klv).................... {.................... const char prev_tabulka[24]={'i','z','m','u','7','8','9','.','1','2','3','b','0','r','f','k','4','5','6','s',' ',' ','t','c'};........................................ *klv = klavesa();.................... if (0x80==*klv) return(false);.................... else.................... {.................... *klv = prev_tabulka[*klv];.................... return(true);.................... }.................... }............................................................ //Vysilac.................... #DEFINE VYSILAC PIN_C5.................... #INCLUDE "vysilac.c".................... // Odesle nulu nebo jednicku podle nejnizsiho bitu predanych dat.................... // Nula je posloupnost LH a jednicka je HL.................... void odeslat_bit(int bit).................... {.................... output_bit(VYSILAC,bit);*02C9: MOVF 3E,F02CA: BTFSS 03.202CB: GOTO 2CE02CC: BCF 07.502CD: GOTO 2CF02CE: BSF 07.502CF: BCF 25.502D0: MOVF 25,W02D1: BSF 03.502D2: MOVWF 07.................... delay_us(IMPULS);02D3: MOVLW 5302D4: BCF 03.502D5: MOVWF 2002D6: DECFSZ 20,F02D7: GOTO 2D6.................... output_bit(VYSILAC,!bit);02D8: MOVF 3E,F02D9: BTFSC 03.202DA: GOTO 2DD02DB: BCF 07.502DC: GOTO 2DE02DD: BSF 07.502DE: BCF 25.502DF: MOVF 25,W02E0: BSF 03.502E1: MOVWF 07.................... delay_us(IMPULS);02E2: MOVLW 5302E3: BCF 03.502E4: MOVWF 2002E5: DECFSZ 20,F02E6: GOTO 2E502E7: RETLW 00.................... }........................................ // odesle datovy ramec.................... void odeslat_paket(int8 kanal,int8 data).................... {.................... int i;.................... int8 suma;............................................................ data &= 0x1F; // pro jistotu orizneme data, kdyby nekdo chtel prenaset vic poloh02E8: MOVLW 1F02E9: ANDWF 3A,F.................... data |= kanal << 5; // slozi osu a hodnotu do packetu02EA: SWAPF 39,W02EB: MOVWF 2002EC: RLF 20,F02ED: MOVLW E002EE: ANDWF 20,F02EF: MOVF 20,W02F0: IORWF 3A,F........................................ swap(data); // vypocet kontrolniho souctu02F1: SWAPF 3A,F.................... suma = data & 0xF;02F2: MOVF 3A,W02F3: ANDLW 0F02F4: MOVWF 3C.................... swap(data);02F5: SWAPF 3A,F.................... suma += data & 0xF;02F6: MOVF 3A,W02F7: ANDLW 0F02F8: ADDWF 3C,F.................... suma++;02F9: INCF 3C,F........................................ odeslat_bit(0); // start bit02FA: CLRF 3E02FB: CALL 2C9........................................ for (i=8; i>0; i--) // data02FC: MOVLW 0802FD: MOVWF 3B02FE: MOVF 3B,F02FF: BTFSC 03.20300: GOTO 30B.................... {.................... odeslat_bit(bit_test(data,7));0301: MOVLW 000302: BTFSC 3A.70303: MOVLW 010304: MOVWF 3D0305: MOVWF 3E0306: CALL 2C9.................... data <<= 1;0307: BCF 03.00308: RLF 3A,F.................... }0309: DECF 3B,F030A: GOTO 2FE........................................ for (i=4; i>0; i--) // checksum030B: MOVLW 04030C: MOVWF 3B030D: MOVF 3B,F030E: BTFSC 03.2030F: GOTO 31A.................... {.................... odeslat_bit(bit_test(suma,3));0310: MOVLW 000311: BTFSC 3C.30312: MOVLW 010313: MOVWF 3D0314: MOVWF 3E0315: CALL 2C9.................... suma <<= 1;0316: BCF 03.00317: RLF 3C,F.................... }0318: DECF 3B,F0319: GOTO 30D.................... output_high(VYSILAC);031A: BCF 25.5031B: MOVF 25,W031C: BSF 03.5031D: MOVWF 07031E: BCF 03.5031F: BSF 07.50320: RETLW 00........................................ }............................................................ //Joistick.................... #DEFINE EEleve_x 0.................... #DEFINE EEprave_x 1 //adresovani EEPROM.................... #DEFINE EEhorni_y 2.................... #DEFINE EEdolni_y 3........................................ #DEFINE EEmin_x 4.................... #DEFINE EEmax_x 5.................... #DEFINE EEmin_y 6.................... #DEFINE EEmax_y 7.................... #DEFINE EEstred_x 8.................... #DEFINE EEstred_y 9........................................ #DEFINE AD_OSA_X 1 // adresa A/D prevodniku pro osu X.................... #DEFINE AD_OSA_Y 0 // adresa A/D prevodniku pro osu Y.................... #DEFINE TL1 PIN_C6.................... #DEFINE TL2 PIN_C7.................... #INCLUDE "Joystick.c".................... //#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 TL1 PIN_A2 // tlacitka.................... //#DEFINE TL2 PIN_A4........................................ //#DEFINE EEleve_x 0.................... //#DEFINE EEprave_x 1 //adresovani EEPROM.................... //#DEFINE EEhorni_y 2.................... //#DEFINE EEdolni_y 3........................................ //#DEFINE EEmin_x 4 // ulozeni hodnot (adresy).................... //#DEFINE EEmax_x 5.................... //#DEFINE EEmin_y 6.................... //#DEFINE EEmax_y 7.................... //#DEFINE EEstred_x 8.................... //#DEFINE EEstred_y 9............................................................ unsigned int min_x;.................... unsigned int max_x;.................... unsigned int min_y;.................... unsigned int max_y;.................... unsigned int stred_x;.................... unsigned int stred_y;.................... unsigned int leve_x;.................... unsigned int prave_x;.................... unsigned int horni_y;.................... unsigned int dolni_y;............................................................ /*#DEFINE TEXT0 "Joy set to cent".................... #DEFINE TEXT1 "er and press OK".................... #DEFINE TEXT2 "Joy move in some ".................... #DEFINE TEXT3 "full circle".................... #DEFINE TEXT4 "Calib. complete"*/........................................ #DEFINE TEXT0 " Dejte paku do ".................... #DEFINE TEXT1 "prostred".................... #DEFINE TEXT2 "Udelajte par".................... #DEFINE TEXT3 "kruhu".................... #DEFINE TEXT4 "hotovo"............................................................ void Joystick (int *ted_x, int *ted_y, int8 *ted_tl1, int8 *ted_tl2).................... {.................... set_adc_channel(AD_OSA_X);*0270: MOVLW 080271: MOVWF 210272: MOVF 1F,W0273: ANDLW C70274: IORWF 21,W0275: MOVWF 1F.................... delay_us(10);0276: MOVLW 030277: MOVWF 200278: DECFSZ 20,F0279: GOTO 278.................... *ted_x=read_adc();027A: MOVF 3D,W027B: MOVWF 04027C: BSF 1F.2027D: BTFSC 1F.2027E: GOTO 27D027F: MOVF 1E,W0280: MOVWF 00.................... set_adc_channel(AD_OSA_Y);0281: MOVLW 000282: MOVWF 210283: MOVF 1F,W0284: ANDLW C70285: IORWF 21,W0286: MOVWF 1F.................... delay_us(10);0287: MOVLW 030288: MOVWF 200289: DECFSZ 20,F028A: GOTO 289.................... *ted_y=read_adc();028B: MOVF 3E,W028C: MOVWF 04028D: BSF 1F.2028E: BTFSC 1F.2028F: GOTO 28E0290: MOVF 1E,W0291: MOVWF 00............................................................ if (!input(TL1))0292: BSF 25.60293: MOVF 25,W0294: BSF 03.50295: MOVWF 070296: BCF 03.50297: BTFSC 07.60298: GOTO 2AA.................... {.................... delay_us(500);0299: MOVLW A6029A: MOVWF 20029B: DECFSZ 20,F029C: GOTO 29B029D: NOP.................... if (!input(TL1)) *ted_tl1=True;029E: BSF 25.6029F: MOVF 25,W02A0: BSF 03.502A1: MOVWF 0702A2: BCF 03.502A3: BTFSC 07.602A4: GOTO 2A902A5: MOVF 3F,W02A6: MOVWF 0402A7: MOVLW 0102A8: MOVWF 00.................... }.................... else *ted_TL1=False;02A9: GOTO 2AD02AA: MOVF 3F,W02AB: MOVWF 0402AC: CLRF 00........................................ if (!input(TL2))02AD: BSF 25.702AE: MOVF 25,W02AF: BSF 03.502B0: MOVWF 0702B1: BCF 03.502B2: BTFSC 07.702B3: GOTO 2C5.................... {.................... delay_us(500);02B4: MOVLW A602B5: MOVWF 2002B6: DECFSZ 20,F02B7: GOTO 2B602B8: NOP.................... if (!input(TL2)) *ted_tl2=True;02B9: BSF 25.702BA: MOVF 25,W02BB: BSF 03.502BC: MOVWF 0702BD: BCF 03.502BE: BTFSC 07.702BF: GOTO 2C402C0: MOVF 40,W02C1: MOVWF 0402C2: MOVLW 0102C3: MOVWF 00.................... }.................... else *ted_tl2=False;02C4: GOTO 2C802C5: MOVF 40,W02C6: MOVWF 0402C7: CLRF 0002C8: RETLW 00.................... }................................................................................ void kalibrace().................... {........................................ int x,y;.................... int8 tlac1,tlac2;........................................ min_x = max_x = min_y = max_y = stred_x = stred_y = 128;*0367: MOVLW 800368: MOVWF 2B0369: MOVWF 2A036A: MOVWF 29036B: MOVWF 28036C: MOVWF 27036D: MOVWF 26........................................ // ROZSACH JOYSTIKU.................... printf(lcd_putc,"\f");036E: MOVLW 0C036F: MOVWF 3E0370: CALL 238.................... printf(lcd_putc,TEXT2);*000C: BCF 0A.0000D: BCF 0A.1000E: BCF 0A.2000F: ADDWF 02,F0010: RETLW 550011: RETLW 640012: RETLW 650013: RETLW 6C0014: RETLW 610015: RETLW 6A0016: RETLW 740017: RETLW 650018: RETLW 200019: RETLW 70001A: RETLW 61001B: RETLW 72001C: RETLW 00*0371: CLRF 3D0372: MOVF 3D,W0373: CALL 00C0374: INCF 3D,F0375: MOVWF 3E0376: CALL 2380377: MOVLW 0C0378: SUBWF 3D,W0379: BTFSS 03.2037A: GOTO 372.................... lcd_gotoxy(1,2);037B: MOVLW 01037C: MOVWF 3F037D: MOVLW 02037E: MOVWF 40037F: CALL 227.................... printf(lcd_putc,TEXT3);*001D: BCF 0A.0001E: BCF 0A.1001F: BCF 0A.20020: ADDWF 02,F0021: RETLW 6B0022: RETLW 720023: RETLW 750024: RETLW 680025: RETLW 750026: RETLW 00*0380: CLRF 3D0381: MOVF 3D,W0382: CALL 01D0383: INCF 3D,F0384: MOVWF 3E0385: CALL 2380386: MOVLW 050387: SUBWF 3D,W0388: BTFSS 03.20389: GOTO 381........................................ while(input(TL1))038A: BSF 25.6038B: MOVF 25,W038C: BSF 03.5038D: MOVWF 07038E: BCF 03.5038F: BTFSS 07.60390: GOTO 3B9.................... {.................... if (0x17 == klavesa()) return; // escape0391: CALL 12E0392: MOVF 21,W0393: SUBLW 170394: BTFSS 03.20395: GOTO 3970396: GOTO 4BD........................................ Joystick(&x,&y,&tlac1,&tlac2);0397: MOVLW 390398: MOVWF 3D0399: MOVLW 3A039A: MOVWF 3E039B: MOVLW 3B039C: MOVWF 3F039D: MOVLW 3C039E: MOVWF 40039F: CALL 270........................................ if (max_x < x )max_x=x;03A0: MOVF 39,W03A1: SUBWF 27,W03A2: BTFSC 03.003A3: GOTO 3A603A4: MOVF 39,W03A5: MOVWF 27.................... if (min_x > x )min_x=x;03A6: MOVF 26,W03A7: SUBWF 39,W03A8: BTFSC 03.003A9: GOTO 3AC03AA: MOVF 39,W03AB: MOVWF 26.................... if (max_y < y )max_y=y; //zjisteni meznich hodnot03AC: MOVF 3A,W03AD: SUBWF 29,W03AE: BTFSC 03.003AF: GOTO 3B203B0: MOVF 3A,W03B1: MOVWF 29.................... if (min_y > y )min_y=y;03B2: MOVF 28,W03B3: SUBWF 3A,W03B4: BTFSC 03.003B5: GOTO 3B803B6: MOVF 3A,W03B7: MOVWF 28.................... };03B8: GOTO 38A........................................ Delay_ms(500);03B9: MOVLW 0203BA: MOVWF 3D03BB: MOVLW FA03BC: MOVWF 3F03BD: CALL 07703BE: DECFSZ 3D,F03BF: GOTO 3BB.................... printf(lcd_putc,"\f");03C0: MOVLW 0C03C1: MOVWF 3E03C2: CALL 238.................... printf(lcd_putc,TEXT0);*0027: BCF 0A.00028: BCF 0A.10029: BCF 0A.2002A: ADDWF 02,F002B: RETLW 20002C: RETLW 44002D: RETLW 65002E: RETLW 6A002F: RETLW 740030: RETLW 650031: RETLW 200032: RETLW 700033: RETLW 610034: RETLW 6B0035: RETLW 750036: RETLW 200037: RETLW 640038: RETLW 6F0039: RETLW 20003A: RETLW 00*03C3: CLRF 3D03C4: MOVF 3D,W03C5: CALL 02703C6: INCF 3D,F03C7: MOVWF 3E03C8: CALL 23803C9: MOVLW 0F03CA: SUBWF 3D,W03CB: BTFSS 03.203CC: GOTO 3C4.................... lcd_gotoxy(1,2);03CD: MOVLW 0103CE: MOVWF 3F03CF: MOVLW 0203D0: MOVWF 4003D1: CALL 227.................... printf(lcd_putc,TEXT1);*003B: BCF 0A.0003C: BCF 0A.1003D: BCF 0A.2003E: ADDWF 02,F003F: RETLW 700040: RETLW 720041: RETLW 6F0042: RETLW 730043: RETLW 740044: RETLW 720045: RETLW 650046: RETLW 640047: RETLW 00*03D2: CLRF 3D03D3: MOVF 3D,W03D4: CALL 03B03D5: INCF 3D,F03D6: MOVWF 3E03D7: CALL 23803D8: MOVLW 0803D9: SUBWF 3D,W03DA: BTFSS 03.203DB: GOTO 3D3........................................ while(input(TL1))03DC: BSF 25.603DD: MOVF 25,W03DE: BSF 03.503DF: MOVWF 0703E0: BCF 03.503E1: BTFSS 07.603E2: GOTO 3ED.................... joystick(&stred_x,&stred_y,&tlac1,&tlac2); //nastaveni stredu03E3: MOVLW 2A03E4: MOVWF 3D03E5: MOVLW 2B03E6: MOVWF 3E03E7: MOVLW 3B03E8: MOVWF 3F03E9: MOVLW 3C03EA: MOVWF 4003EB: CALL 27003EC: GOTO 3DC................................................................................ leve_x=max_x - stred_x;03ED: MOVF 2A,W03EE: SUBWF 27,W03EF: MOVWF 2C.................... prave_x=stred_x - min_x;03F0: MOVF 26,W03F1: SUBWF 2A,W03F2: MOVWF 2D.................... horni_y=max_y - stred_y;03F3: MOVF 2B,W03F4: SUBWF 29,W03F5: MOVWF 2E.................... dolni_y=stred_x - min_x;03F6: MOVF 26,W03F7: SUBWF 2A,W03F8: MOVWF 2F........................................ leve_x = leve_x / 8; //vypocet parametru03F9: RRF 2C,F03FA: RRF 2C,F03FB: RRF 2C,F03FC: MOVLW 1F03FD: ANDWF 2C,F.................... prave_x = prave_x / 8;03FE: RRF 2D,F03FF: RRF 2D,F0400: RRF 2D,F0401: ANDWF 2D,F.................... horni_y = horni_y / 8;0402: RRF 2E,F0403: RRF 2E,F0404: RRF 2E,F0405: ANDWF 2E,F.................... dolni_y = dolni_y / 8;0406: RRF 2F,F0407: RRF 2F,F0408: RRF 2F,F0409: ANDWF 2F,F........................................ write_eeprom(EEleve_x,leve_x);040A: BSF 03.6040B: CLRF 0D040C: CLRF 0F040D: BCF 03.6040E: MOVF 2C,W040F: BSF 03.60410: MOVWF 0C0411: BSF 03.50412: BCF 0C.70413: BSF 0C.20414: BCF 03.50415: BCF 03.60416: MOVF 0B,W0417: MOVWF 200418: BCF 0B.70419: BSF 03.5041A: BSF 03.6041B: MOVLW 55041C: MOVWF 0D041D: MOVLW AA041E: MOVWF 0D041F: BSF 0C.10420: BTFSC 0C.10421: GOTO 4200422: BCF 0C.20423: BCF 03.50424: BCF 03.60425: MOVF 20,W0426: IORWF 0B,F.................... write_eeprom(EEprave_x,prave_x);0427: MOVLW 010428: BSF 03.60429: MOVWF 0D042A: CLRF 0F042B: BCF 03.6042C: MOVF 2D,W042D: BSF 03.6042E: MOVWF 0C042F: BSF 03.50430: BCF 0C.70431: BSF 0C.20432: BCF 03.50433: BCF 03.60434: MOVF 0B,W0435: MOVWF 200436: BCF 0B.70437: BSF 03.50438: BSF 03.60439: MOVLW 55043A: MOVWF 0D043B: MOVLW AA043C: MOVWF 0D043D: BSF 0C.1043E: BTFSC 0C.1043F: GOTO 43E0440: BCF 0C.20441: BCF 03.50442: BCF 03.60443: MOVF 20,W0444: IORWF 0B,F.................... write_eeprom(EEstred_x,stred_x);0445: MOVLW 080446: BSF 03.60447: MOVWF 0D0448: CLRF 0F0449: BCF 03.6044A: MOVF 2A,W044B: BSF 03.6044C: MOVWF 0C044D: BSF 03.5044E: BCF 0C.7044F: BSF 0C.20450: BCF 03.50451: BCF 03.60452: MOVF 0B,W0453: MOVWF 200454: BCF 0B.70455: BSF 03.50456: BSF 03.60457: MOVLW 550458: MOVWF 0D0459: MOVLW AA045A: MOVWF 0D045B: BSF 0C.1045C: BTFSC 0C.1045D: GOTO 45C045E: BCF 0C.2045F: BCF 03.50460: BCF 03.60461: MOVF 20,W0462: IORWF 0B,F.................... write_eeprom(EEstred_y,stred_y);0463: MOVLW 090464: BSF 03.60465: MOVWF 0D0466: CLRF 0F0467: BCF 03.60468: MOVF 2B,W0469: BSF 03.6046A: MOVWF 0C046B: BSF 03.5046C: BCF 0C.7046D: BSF 0C.2046E: BCF 03.5046F: BCF 03.60470: MOVF 0B,W0471: MOVWF 200472: BCF 0B.70473: BSF 03.50474: BSF 03.60475: MOVLW 550476: MOVWF 0D0477: MOVLW AA0478: MOVWF 0D0479: BSF 0C.1047A: BTFSC 0C.1047B: GOTO 47A047C: BCF 0C.2047D: BCF 03.5047E: BCF 03.6047F: MOVF 20,W0480: IORWF 0B,F.................... write_eeprom(EEhorni_y,horni_y);0481: MOVLW 020482: BSF 03.60483: MOVWF 0D0484: CLRF 0F0485: BCF 03.60486: MOVF 2E,W0487: BSF 03.60488: MOVWF 0C0489: BSF 03.5048A: BCF 0C.7048B: BSF 0C.2048C: BCF 03.5048D: BCF 03.6048E: MOVF 0B,W048F: MOVWF 200490: BCF 0B.70491: BSF 03.50492: BSF 03.60493: MOVLW 550494: MOVWF 0D0495: MOVLW AA0496: MOVWF 0D0497: BSF 0C.10498: BTFSC 0C.10499: GOTO 498049A: BCF 0C.2049B: BCF 03.5049C: BCF 03.6049D: MOVF 20,W049E: IORWF 0B,F.................... write_eeprom(EEdolni_y,dolni_y);049F: MOVLW 0304A0: BSF 03.604A1: MOVWF 0D04A2: CLRF 0F04A3: BCF 03.604A4: MOVF 2F,W04A5: BSF 03.604A6: MOVWF 0C04A7: BSF 03.504A8: BCF 0C.704A9: BSF 0C.204AA: BCF 03.504AB: BCF 03.604AC: MOVF 0B,W04AD: MOVWF 2004AE: BCF 0B.704AF: BSF 03.504B0: BSF 03.604B1: MOVLW 5504B2: MOVWF 0D04B3: MOVLW AA04B4: MOVWF 0D04B5: BSF 0C.104B6: BTFSC 0C.104B7: GOTO 4B604B8: BCF 0C.204B9: BCF 03.504BA: BCF 03.604BB: MOVF 20,W04BC: IORWF 0B,F........................................ //write_eeprom(EEmin_x,min_x); //zapis.................... //write_eeprom(EEmax_x,max_x);.................... //write_eeprom(EEmin_y,min_y);.................... //write_eeprom(EEmax_y,max_y);.................... }........................................................................................................................ int x,y,tlac1,tlac2;........................................ void trimovat().................... {.................... odeslat_paket(Trim,0b0001);*04BE: MOVLW 0604BF: MOVWF 3904C0: MOVLW 0104C1: MOVWF 3A04C2: CALL 2E8.................... odeslat_paket(OSA_X,x);04C3: MOVLW 0104C4: MOVWF 3904C5: MOVF 30,W04C6: MOVWF 3A04C7: CALL 2E8.................... odeslat_paket(OSA_Y,y);04C8: MOVLW 0204C9: MOVWF 3904CA: MOVF 31,W04CB: MOVWF 3A04CC: CALL 2E8.................... }........................................ void vysilat().................... {........................................ leve_x = read_eeprom(EEleve_x);*04CE: BSF 03.604CF: CLRF 0D04D0: CLRF 0F04D1: BSF 03.504D2: BCF 0C.704D3: BSF 0C.004D4: BCF 03.504D5: MOVF 0C,W04D6: BCF 03.604D7: MOVWF 2C.................... prave_x = read_eeprom(EEprave_x);04D8: MOVLW 0104D9: BSF 03.604DA: MOVWF 0D04DB: CLRF 0F04DC: BSF 03.504DD: BCF 0C.704DE: BSF 0C.004DF: BCF 03.504E0: MOVF 0C,W04E1: BCF 03.604E2: MOVWF 2D.................... stred_x = read_eeprom(EEstred_x);04E3: MOVLW 0804E4: BSF 03.604E5: MOVWF 0D04E6: CLRF 0F04E7: BSF 03.504E8: BCF 0C.704E9: BSF 0C.004EA: BCF 03.504EB: MOVF 0C,W04EC: BCF 03.604ED: MOVWF 2A.................... stred_y = read_eeprom(EEstred_y);04EE: MOVLW 0904EF: BSF 03.604F0: MOVWF 0D04F1: CLRF 0F04F2: BSF 03.504F3: BCF 0C.704F4: BSF 0C.004F5: BCF 03.504F6: MOVF 0C,W04F7: BCF 03.604F8: MOVWF 2B.................... horni_y = read_eeprom(EEhorni_y);04F9: MOVLW 0204FA: BSF 03.604FB: MOVWF 0D04FC: CLRF 0F04FD: BSF 03.504FE: BCF 0C.704FF: BSF 0C.00500: BCF 03.50501: MOVF 0C,W0502: BCF 03.60503: MOVWF 2E.................... dolni_y = read_eeprom(EEdolni_y);0504: MOVLW 030505: BSF 03.60506: MOVWF 0D0507: CLRF 0F0508: BSF 03.50509: BCF 0C.7050A: BSF 0C.0050B: BCF 03.5050C: MOVF 0C,W050D: BCF 03.6050E: MOVWF 2F........................................ Delay_ms(200);050F: MOVLW C80510: MOVWF 3F0511: CALL 077.................... lcd_gotoxy(6,2);0512: MOVLW 060513: MOVWF 3F0514: MOVLW 020515: MOVWF 400516: CALL 227.................... printf(lcd_putc,"Vysilam");*0048: BCF 0A.00049: BCF 0A.1004A: BCF 0A.2004B: ADDWF 02,F004C: RETLW 56004D: RETLW 79004E: RETLW 73004F: RETLW 690050: RETLW 6C0051: RETLW 610052: RETLW 6D0053: RETLW 00*0517: CLRF 390518: MOVF 39,W0519: CALL 048051A: INCF 39,F051B: MOVWF 3E051C: CALL 238051D: MOVLW 07051E: SUBWF 39,W051F: BTFSS 03.20520: GOTO 518........................................ while(0x80 == klavesa())0521: CALL 12E0522: MOVF 21,W0523: SUBLW 800524: BTFSS 03.20525: GOTO 54D.................... {.................... Joystick(&x,&y,&tlac1,&tlac2);0526: MOVLW 300527: MOVWF 3D0528: MOVLW 310529: MOVWF 3E052A: MOVLW 32052B: MOVWF 3F052C: MOVLW 33052D: MOVWF 40052E: CALL 270.................... /*if (stred_x >= x).................... {.................... x = stred_x - x;.................... x = x/leve_x;.................... }.................... else.................... {.................... x = x - stred_x;.................... x = x/prave_x;.................... }........................................ if (stred_y >= y).................... {.................... y = stred_y - y;.................... y = y/dolni_y;.................... }.................... else.................... {.................... y = y - stred_y;.................... y = y/horni_y;.................... }*/........................................ x=x/8;052F: RRF 30,F0530: RRF 30,F0531: RRF 30,F0532: MOVLW 1F0533: ANDWF 30,F.................... y=y/8;0534: RRF 31,F0535: RRF 31,F0536: RRF 31,F0537: ANDWF 31,F........................................ odeslat_paket(OSA_X,x);0538: MOVLW 010539: MOVWF 39053A: MOVF 30,W053B: MOVWF 3A053C: CALL 2E8.................... Delay_us(1600);053D: MOVLW 01053E: MOVWF 3F053F: CALL 0770540: MOVLW 030541: MOVWF 390542: MOVLW BA0543: MOVWF 3A0544: GOTO 3210545: DECFSZ 39,F0546: GOTO 542.................... odeslat_paket(OSA_Y,y);0547: MOVLW 020548: MOVWF 390549: MOVF 31,W054A: MOVWF 3A054B: CALL 2E8.................... }054C: GOTO 521.................... }........................................ void menu().................... {.................... int8 polozka = 3;.................... int8 old_polozka = 0;*0330: MOVLW 030331: MOVWF 360332: CLRF 37.................... int pom;........................................ while(true).................... {.................... pom = klavesa();0333: CALL 12E0334: MOVF 21,W0335: MOVWF 38.................... if (0x07 == pom) polozka++;0336: MOVF 38,W0337: SUBLW 070338: BTFSS 03.20339: GOTO 33B033A: INCF 36,F.................... if (0x0f == pom) polozka--;033B: MOVF 38,W033C: SUBLW 0F033D: BTFSS 03.2033E: GOTO 340033F: DECF 36,F.................... if (0x04 <= polozka) polozka = 1;0340: MOVF 36,W0341: SUBLW 030342: BTFSC 03.00343: GOTO 3460344: MOVLW 010345: MOVWF 36.................... if (0x00 == polozka) polozka = 3;0346: MOVF 36,F0347: BTFSS 03.20348: GOTO 34B0349: MOVLW 03034A: MOVWF 36.................... if (0x16 == pom) // enter034B: MOVF 38,W034C: SUBLW 16034D: BTFSS 03.2034E: GOTO 55E.................... {.................... LED((1 << (polozka + 1)) | 1);034F: MOVLW 010350: ADDWF 36,W0351: MOVWF 210352: MOVLW 010353: MOVWF 200354: MOVF 21,F0355: BTFSC 03.20356: GOTO 35B0357: BCF 03.00358: RLF 20,F0359: DECFSZ 21,F035A: GOTO 357035B: MOVF 20,W035C: IORLW 01035D: MOVWF 3A035E: MOVWF 3B035F: CALL 1E7.................... switch(polozka)0360: MOVLW 010361: SUBWF 36,W0362: ADDLW FD0363: BTFSC 03.00364: GOTO 54E0365: ADDLW 030366: GOTO 5B3.................... {.................... case 1:.................... kalibrace();.................... break;*04BD: GOTO 54E........................................ case 2:.................... trimovat();.................... break;*04CD: GOTO 54E........................................ case 3:.................... vysilat();.................... break;*054D: GOTO 54E.................... };*05B3: BSF 0A.005B4: BCF 0A.105B5: BSF 0A.205B6: ADDWF 02,F05B7: GOTO 36705B8: GOTO 4BE05B9: GOTO 4CE.................... LED(1 << (polozka + 1));*054E: MOVLW 01054F: ADDWF 36,W0550: MOVWF 210551: MOVLW 010552: MOVWF 390553: MOVF 21,F0554: BTFSC 03.20555: GOTO 55A0556: BCF 03.00557: RLF 39,F0558: DECFSZ 21,F0559: GOTO 556055A: MOVF 39,W055B: MOVWF 3B055C: CALL 1E7.................... old_polozka=0;055D: CLRF 37.................... };........................................ if (polozka != old_polozka)055E: MOVF 37,W055F: SUBWF 36,W0560: BTFSC 03.20561: GOTO 5B0.................... {.................... old_polozka=polozka;0562: MOVF 36,W0563: MOVWF 37.................... printf(lcd_putc,"\f");0564: MOVLW 0C0565: MOVWF 3E0566: CALL 238.................... switch(polozka)0567: MOVLW 010568: SUBWF 36,W0569: ADDLW FD056A: BTFSC 03.0056B: GOTO 59E056C: ADDLW 03056D: GOTO 5BA.................... {.................... case 1:.................... lcd_gotoxy(5,2);056E: MOVLW 05056F: MOVWF 3F0570: MOVLW 020571: MOVWF 400572: CALL 227.................... printf(lcd_putc,"Kalibrace");*0054: BCF 0A.00055: BCF 0A.10056: BCF 0A.20057: ADDWF 02,F0058: RETLW 4B0059: RETLW 61005A: RETLW 6C005B: RETLW 69005C: RETLW 62005D: RETLW 72005E: RETLW 61005F: RETLW 630060: RETLW 650061: RETLW 00*0573: CLRF 390574: MOVF 39,W0575: CALL 0540576: INCF 39,F0577: MOVWF 3E0578: CALL 2380579: MOVLW 09057A: SUBWF 39,W057B: BTFSS 03.2057C: GOTO 574.................... break;057D: GOTO 59E........................................ case 2:.................... lcd_gotoxy(7,2);057E: MOVLW 07057F: MOVWF 3F0580: MOVLW 020581: MOVWF 400582: CALL 227.................... printf(lcd_putc,"Trim");*0062: BCF 0A.00063: BCF 0A.10064: BCF 0A.20065: ADDWF 02,F0066: RETLW 540067: RETLW 720068: RETLW 690069: RETLW 6D006A: RETLW 00*0583: CLRF 390584: MOVF 39,W0585: CALL 0620586: INCF 39,F0587: MOVWF 3E0588: CALL 2380589: MOVLW 04058A: SUBWF 39,W058B: BTFSS 03.2058C: GOTO 584.................... break;058D: GOTO 59E........................................ case 3:.................... lcd_gotoxy(6,2);058E: MOVLW 06058F: MOVWF 3F0590: MOVLW 020591: MOVWF 400592: CALL 227.................... printf(lcd_putc,"Vysilat");*006B: BCF 0A.0006C: BCF 0A.1006D: BCF 0A.2006E: ADDWF 02,F006F: RETLW 560070: RETLW 790071: RETLW 730072: RETLW 690073: RETLW 6C0074: RETLW 610075: RETLW 740076: RETLW 00*0593: CLRF 390594: MOVF 39,W0595: CALL 06B0596: INCF 39,F0597: MOVWF 3E0598: CALL 2380599: MOVLW 07059A: SUBWF 39,W059B: BTFSS 03.2059C: GOTO 594.................... break;059D: GOTO 59E.................... };*05BA: BSF 0A.005BB: BCF 0A.105BC: BSF 0A.205BD: ADDWF 02,F05BE: GOTO 56E05BF: GOTO 57E05C0: GOTO 58E.................... LED(1 << (polozka + 1));*059E: MOVLW 01059F: ADDWF 36,W05A0: MOVWF 2105A1: MOVLW 0105A2: MOVWF 3905A3: MOVF 21,F05A4: BTFSC 03.205A5: GOTO 5AA05A6: BCF 03.005A7: RLF 39,F05A8: DECFSZ 21,F05A9: GOTO 5A605AA: MOVF 39,W05AB: MOVWF 3B05AC: CALL 1E7.................... Delay_ms(250);05AD: MOVLW FA05AE: MOVWF 3F05AF: CALL 077.................... }.................... }05B0: GOTO 33305B1: BCF 0A.305B2: GOTO 604 (RETURN).................... }........................................ void main().................... {.................... int8 tlacitka,tlacitka_old;*05C1: CLRF 0405C2: MOVLW 1F05C3: ANDWF 03,F05C4: MOVLW 0705C5: BSF 03.505C6: MOVWF 1F05C7: MOVLW FF05C8: BCF 03.505C9: MOVWF 25.................... setup_adc_ports(RA0_RA1_RA3_ANALOG);05CA: MOVLW 0405CB: BSF 03.505CC: MOVWF 1F.................... setup_adc(ADC_CLOCK_DIV_2);05CD: BCF 03.505CE: MOVF 1F,W05CF: ANDLW 3805D0: IORLW 0105D1: MOVWF 1F.................... setup_spi(FALSE);05D2: BCF 14.505D3: BCF 25.505D4: MOVF 25,W05D5: BSF 03.505D6: MOVWF 0705D7: BCF 03.505D8: BSF 25.405D9: MOVF 25,W05DA: BSF 03.505DB: MOVWF 0705DC: BCF 03.505DD: BCF 25.305DE: MOVF 25,W05DF: BSF 03.505E0: MOVWF 0705E1: MOVLW 0005E2: BCF 03.505E3: MOVWF 1405E4: BSF 03.505E5: MOVWF 14.................... setup_counters(RTCC_INTERNAL,RTCC_DIV_2);05E6: BCF 03.505E7: CLRF 2005E8: BTFSS 20.305E9: GOTO 5F205EA: MOVLW 0705EB: CLRF 0105EC: MOVLW 8105ED: MOVWF 0405EE: MOVF 00,W05EF: ANDLW C005F0: IORLW 0F05F1: MOVWF 0005F2: CLRWDT05F3: MOVLW 8105F4: MOVWF 0405F5: MOVF 00,W05F6: ANDLW C005F7: IORWF 20,W05F8: MOVWF 00.................... setup_timer_1(T1_DISABLED);05F9: CLRF 10.................... setup_timer_2(T2_DISABLED,0,1);05FA: MOVLW 0005FB: MOVWF 2105FC: MOVWF 1205FD: MOVLW 0005FE: BSF 03.505FF: MOVWF 12........................................ lcd_init();0600: BCF 03.50601: GOTO 0B7.................... KL_init();0602: GOTO 0F1........................................ menu();0603: GOTO 330........................................ while(true).................... {.................... //char xx;.................... // if (true == read_kl(&xx)).................... // {.................... // printf(lcd_putc,"%C",xx );.................... // }.................... }0604: GOTO 604.................... }....................0605: SLEEP