CCS PCM C Compiler, Version 4.106, 47914 03-4-13 15:28
Filename: C:\Users\Honza\Documents\pic\tomas\main.lst
ROM used: 1258 words (15%)
Largest free fragment is 2048
RAM used: 23 (6%) at main() level
48 (13%) worst case
Stack: 6 worst case (5 in main + 1 for interrupts)
*
0000: MOVLW 03
0001: MOVWF 0A
0002: GOTO 38E
0003: NOP
0004: MOVWF 7F
0005: SWAPF 03,W
0006: CLRF 03
0007: MOVWF 21
0008: MOVF 0A,W
0009: MOVWF 20
000A: CLRF 0A
000B: MOVF 04,W
000C: MOVWF 22
000D: MOVF 77,W
000E: MOVWF 23
000F: MOVF 78,W
0010: MOVWF 24
0011: MOVF 79,W
0012: MOVWF 25
0013: MOVF 7A,W
0014: MOVWF 26
0015: BCF 03.7
0016: BCF 03.5
0017: BTFSS 0B.4
0018: GOTO 01B
0019: BTFSC 0B.1
001A: GOTO 02C
001B: MOVF 22,W
001C: MOVWF 04
001D: MOVF 23,W
001E: MOVWF 77
001F: MOVF 24,W
0020: MOVWF 78
0021: MOVF 25,W
0022: MOVWF 79
0023: MOVF 26,W
0024: MOVWF 7A
0025: MOVF 20,W
0026: MOVWF 0A
0027: SWAPF 21,W
0028: MOVWF 03
0029: SWAPF 7F,F
002A: SWAPF 7F,W
002B: RETFIE
002C: BCF 0A.3
002D: BCF 0A.4
002E: GOTO 037
.................... #include "C:\Users\Honza\Documents\pic\tomas\main.h"
.................... #include <16F887.h>
.................... //////// Standard Header file for the PIC16F887 device ////////////////
.................... #device PIC16F887
.................... #list
....................
.................... #device adc=8
....................
.................... #FUSES NOWDT //No Watch Dog Timer
.................... #FUSES INTRC //Internal RC Osc
.................... #FUSES NOPUT //No Power Up Timer
.................... #FUSES MCLR //Master Clear pin enabled
.................... #FUSES NOPROTECT //Code not protected from reading
.................... #FUSES NOCPD //No EE protection
.................... #FUSES NOBROWNOUT //No brownout reset
.................... #FUSES IESO //Internal External Switch Over mode enabled
.................... #FUSES FCMEN //Fail-safe clock monitor enabled
.................... #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
.................... #FUSES NODEBUG //No Debug mode for ICD
.................... #FUSES NOWRT //Program memory not write protected
.................... #FUSES BORV40 //Brownout reset at 4.0V
....................
.................... #use delay(clock=8000000)
*
006C: MOVLW 3F
006D: MOVWF 04
006E: BCF 03.7
006F: MOVF 00,W
0070: BTFSC 03.2
0071: GOTO 07F
0072: MOVLW 02
0073: MOVWF 78
0074: CLRF 77
0075: DECFSZ 77,F
0076: GOTO 075
0077: DECFSZ 78,F
0078: GOTO 074
0079: MOVLW 97
007A: MOVWF 77
007B: DECFSZ 77,F
007C: GOTO 07B
007D: DECFSZ 00,F
007E: GOTO 072
007F: RETURN
....................
....................
....................
.................... #define LCD_RS PIN_C7 // rizeni registru LCD displeje <lcd.c>
.................... #define LCD_E PIN_B7 // enable LCD displeje <lcd.c>
.................... #define LCD_D0 PIN_B6 // data LCD <lcd.c>
.................... #define LCD_D1 PIN_B5
.................... #define LCD_D2 PIN_B4
.................... #define LCD_D3 PIN_D4
.................... #include "LCD.C" //pro LCD
.................... // LCD modul pro ovladani dvouradkoveho LCD modulu se standardnim Hitachi radicem
.................... // (c)miho 2002,2005
.................... //
.................... // Historie:
.................... //
.................... // 0.00 Uvodni verze se snadnou definici portu LCD displeje
.................... // 0.01 Oprava portu (zapomenute stare identifikatory)
.................... // 0.02 Doplnena moznost pripojeni datoveho portu LCD na libovolne porty
.................... // 0.03 Doplnena procedura lcd_clr pro smazani displeje
.................... //
.................... //
.................... // Funkce:
.................... //
.................... // lcd_init() inicializuje LCD displej a porty, nutno volat jako prvni
.................... //
.................... // lcd_putc(c) zapis snaku do lcd displeje, zpracovava nasledujici ridici znaky
.................... // \f = \x0C - nova stranka - smazani displeje
.................... // \n = \x0A - odradkovani (prechod na druhou radku)
.................... // \b = \x08 - backspace - posunuti kurzoru o 1 pozici zpet
.................... // \r = \x0D - goto home to position 1,1
.................... // \0 .. \7 - definovatelne znaky v pozicich 0 az 7 v CGRAM
.................... // \20 .. \27 - alternativne zapsane znaky (oktalove) v pozicich 0 az 7 CGRAM
.................... // Pozor na to, ze funkce printf konci tisk pokud narazi na \0 (konec retezce)
.................... //
.................... // lcd_gotoxy(x,y) presune kurzor na uvedenou adresu
.................... // nekontroluje parametry
.................... //
.................... // lcd_cursor_on zapne kurzor
.................... // lcd_cursor_off vypne kurzor
.................... //
.................... // lcd_clr smaze displej
.................... //
.................... // lcd_define_char(Index, Def) Makro, ktere definuje znaky od pozice Index obsahem definicniho
.................... // retezce Def. Kazdych 8 znaku retezce Def definuje dalsi znak v CGRAM.
.................... // Kapacita CGRAM je celkem 8 znaku s indexem 0 az 7.
.................... // Na konci se provede lcd_gotoxy(1,1).
.................... // Na konci teto knihovny je priklad pouziti definovanych znaku
.................... //
.................... //
.................... // Definice portu: // Datovy port displeje pripojeny na 4 bity za sebou na jeden port
.................... //
.................... // #define LCD_RS PIN_B2 // rizeni registru LCD displeje
.................... // #define LCD_E PIN_B1 // enable LCD displeje
.................... // #define LCD_DATA_LSB PIN_C2 // pripojeni LSB bitu datoveho portu LCD displeje (celkem 4 bity vzestupne za sebou)
.................... //
.................... //
.................... // Alternativni definice: // Datovy port displeje pripojeny na libovolne 4 bitove porty (vede na kod delsi asi o 25 slov)
.................... //
.................... // #define LCD_RS PIN_B2 // rizeni registru LCD displeje
.................... // #define LCD_E PIN_B1 // enable LCD displeje
.................... // #define LCD_D0 PIN_C2 // D0 - datove bity pripojene na libovolne porty
.................... // #define LCD_D1 PIN_C3 // D1
.................... // #define LCD_D2 PIN_C4 // D2
.................... // #define LCD_D3 PIN_C5 // D3
....................
....................
....................
....................
.................... // Privatni sekce, cist jen v pripade, ze neco nefunguje
....................
....................
....................
....................
.................... #ifdef LCD_DATA_LSB
.................... // Generovane defince portu pro ucely teto knihovny aby kod generoval spravne IO operace a soucasne
.................... // bylo mozne jednoduse deklarovat pripojene piny LCD displeje pri pouziti teto knihovny. Problem spociva
.................... // v tom, ze se musi spravne ridit smery portu a soucasne datovy port zabira jen 4 bity ze zadaneho portu
.................... //
.................... #define LCD_SHIFT (LCD_DATA_LSB&7) // pocet bitu posuvu datoveho kanalu v datovem portu
.................... #define LCD_PORT (LCD_DATA_LSB>>3) // adresa LCD datoveho portu
.................... #define LCD_TRIS (LCD_PORT+0x80) // adresa prislusneho TRIS registru
.................... #define LCD_MASK (0xF<<LCD_SHIFT) // maska platnych bitu
.................... //
.................... #if LCD_SHIFT>4 // kontrola mezi
.................... #error LCD data port LSB bit not in range 0..4
.................... #endif
.................... #endif
....................
....................
.................... // Definice konstant pro LCD display
.................... //
.................... #define LCD_CURSOR_ON_ 0x0E // kurzor jako blikajici radka pod znakem
.................... #define LCD_CURSOR_OFF_ 0x0C // zadny kurzor
.................... #define LCD_LINE_2 0x40 // adresa 1. znaku 2. radky
....................
....................
.................... // Definice rezimu LCD displeje
.................... //
.................... BYTE const LCD_INIT_STRING[4] =
.................... {
.................... 0x28, // intrfejs 4 bity, 2 radky, font 5x7
.................... LCD_CURSOR_OFF_, // display on, kurzor off,
.................... 0x01, // clear displeje
.................... 0x06 // inkrement pozice kurzoru (posun kurzoru doprava)
.................... };
....................
....................
.................... // Odesle nibble do displeje (posle data a klikne signalem e)
.................... //
.................... void lcd_send_nibble( BYTE n )
.................... {
.................... #ifdef LCD_DATA_LSB
.................... // data jsou za sebou na 4 bitech jednoho portu
.................... *LCD_PORT = (*LCD_PORT & ~LCD_MASK) | ((n << LCD_SHIFT) & LCD_MASK); // nastav datove bity portu a ostatni zachovej
.................... #else
.................... // data jsou na libovolnych 4 bitech libovolnych portu
.................... output_bit(LCD_D0,bit_test(n,0));
0080: BTFSC 45.0
0081: GOTO 084
0082: BCF 06.6
0083: GOTO 085
0084: BSF 06.6
0085: BSF 03.5
0086: BCF 06.6
.................... output_bit(LCD_D1,bit_test(n,1));
0087: BCF 03.5
0088: BTFSC 45.1
0089: GOTO 08C
008A: BCF 06.5
008B: GOTO 08D
008C: BSF 06.5
008D: BSF 03.5
008E: BCF 06.5
.................... output_bit(LCD_D2,bit_test(n,2));
008F: BCF 03.5
0090: BTFSC 45.2
0091: GOTO 094
0092: BCF 06.4
0093: GOTO 095
0094: BSF 06.4
0095: BSF 03.5
0096: BCF 06.4
.................... output_bit(LCD_D3,bit_test(n,3));
0097: BCF 03.5
0098: BTFSC 45.3
0099: GOTO 09C
009A: BCF 08.4
009B: GOTO 09D
009C: BSF 08.4
009D: BSF 03.5
009E: BCF 08.4
.................... #endif
.................... output_bit(LCD_E,1); // vzestupna hrana
009F: BCF 03.5
00A0: BSF 06.7
00A1: BSF 03.5
00A2: BCF 06.7
.................... delay_us(1); // pockej alespon 450ns od e nebo alespon 195ns od dat
00A3: GOTO 0A4
.................... output_bit(LCD_E,0); // sestupna hrana (minimalni perioda e je 1us)
00A4: BCF 03.5
00A5: BCF 06.7
00A6: BSF 03.5
00A7: BCF 06.7
.................... }
00A8: BCF 03.5
00A9: RETURN
....................
....................
.................... // 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 registr
00AA: MOVF 43,F
00AB: BTFSS 03.2
00AC: GOTO 0AF
00AD: BCF 07.7
00AE: GOTO 0B0
00AF: BSF 07.7
00B0: BCF 27.7
00B1: MOVF 27,W
00B2: BSF 03.5
00B3: MOVWF 07
.................... swap(n);
00B4: BCF 03.5
00B5: SWAPF 44,F
.................... lcd_send_nibble(n); // posli horni pulku bajtu
00B6: MOVF 44,W
00B7: MOVWF 45
00B8: CALL 080
.................... swap(n);
00B9: SWAPF 44,F
.................... lcd_send_nibble(n); // posli spodni pulku bajtu
00BA: MOVF 44,W
00BB: MOVWF 45
00BC: CALL 080
.................... delay_us(40); // minimalni doba na provedeni prikazu
00BD: MOVLW 1A
00BE: MOVWF 77
00BF: DECFSZ 77,F
00C0: GOTO 0BF
00C1: NOP
.................... }
00C2: RETURN
....................
....................
.................... // 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 napajeni
00C3: MOVLW 14
00C4: MOVWF 3F
00C5: CALL 06C
....................
.................... #ifdef LCD_DATA_LSB
.................... // data jsou na 4 bitech za sebou, nastav smer pro vsechny dalsi prenosy
.................... *LCD_TRIS = *LCD_TRIS & ~LCD_MASK; // nuluj odpovidajici bity tris registru datoveho portu LCD
.................... #endif
....................
.................... output_bit(LCD_RS,0); // nastav jako vystup a nastav klidovy stav
00C6: BCF 07.7
00C7: BCF 27.7
00C8: MOVF 27,W
00C9: BSF 03.5
00CA: MOVWF 07
.................... output_bit(LCD_E, 0); // nastav jako vystup a nastav klidovy stav
00CB: BCF 03.5
00CC: BCF 06.7
00CD: BSF 03.5
00CE: BCF 06.7
....................
.................... for (i=0; i<3; i++) // nastav lcd do rezimu 8 bitu sbernice
00CF: BCF 03.5
00D0: CLRF 31
00D1: MOVF 31,W
00D2: SUBLW 02
00D3: BTFSS 03.0
00D4: GOTO 0DD
.................... {
.................... delay_ms(2); // muze byt rozdelany prenos dat (2x 4 bity) nebo pomaly povel
00D5: MOVLW 02
00D6: MOVWF 3F
00D7: CALL 06C
.................... lcd_send_nibble(3); // rezim 8 bitu
00D8: MOVLW 03
00D9: MOVWF 45
00DA: CALL 080
.................... }
00DB: INCF 31,F
00DC: GOTO 0D1
....................
.................... delay_us(40); // cas na zpracovani
00DD: MOVLW 1A
00DE: MOVWF 77
00DF: DECFSZ 77,F
00E0: GOTO 0DF
00E1: NOP
.................... lcd_send_nibble(2); // nastav rezim 4 bitu (plati od nasledujiciho prenosu)
00E2: MOVLW 02
00E3: MOVWF 45
00E4: CALL 080
.................... delay_us(40); // cas na zpracovani
00E5: MOVLW 1A
00E6: MOVWF 77
00E7: DECFSZ 77,F
00E8: GOTO 0E7
00E9: NOP
....................
.................... for (i=0;i<3;i++) // proved inicializaci (nastaveni modu, smazani apod)
00EA: CLRF 31
00EB: MOVF 31,W
00EC: SUBLW 02
00ED: BTFSS 03.0
00EE: GOTO 0FB
.................... {
.................... lcd_send_byte(0,LCD_INIT_STRING[i]);
00EF: MOVF 31,W
00F0: CALL 02F
00F1: MOVWF 32
00F2: CLRF 43
00F3: MOVF 32,W
00F4: MOVWF 44
00F5: CALL 0AA
.................... delay_ms(2);
00F6: MOVLW 02
00F7: MOVWF 3F
00F8: CALL 06C
.................... }
00F9: INCF 31,F
00FA: GOTO 0EB
.................... }
00FB: RETURN
....................
....................
.................... // Proved presun kurzoru
.................... //
.................... // Pozice 1.1 je domu
.................... //
.................... void lcd_gotoxy( BYTE x, BYTE y)
.................... {
....................
.................... BYTE Adr;
....................
.................... Adr=x-1;
00FC: MOVLW 01
00FD: SUBWF 3F,W
00FE: MOVWF 41
.................... if(y==2)
00FF: MOVF 40,W
0100: SUBLW 02
0101: BTFSS 03.2
0102: GOTO 105
.................... Adr+=LCD_LINE_2;
0103: MOVLW 40
0104: ADDWF 41,F
....................
.................... lcd_send_byte(0,0x80|Adr);
0105: MOVF 41,W
0106: IORLW 80
0107: MOVWF 42
0108: CLRF 43
0109: MOVF 42,W
010A: MOVWF 44
010B: CALL 0AA
.................... }
010C: RETURN
....................
....................
.................... // Zapis znaku na displej, zpracovani ridicich znaku
.................... //
.................... void lcd_putc( char c)
.................... {
....................
.................... switch (c)
.................... {
010D: MOVF 3E,W
010E: XORLW 0C
010F: BTFSC 03.2
0110: GOTO 11B
0111: XORLW 06
0112: BTFSC 03.2
0113: GOTO 123
0114: XORLW 07
0115: BTFSC 03.2
0116: GOTO 129
0117: XORLW 05
0118: BTFSC 03.2
0119: GOTO 12E
011A: GOTO 133
.................... case '\f' : lcd_send_byte(0,1); // smaz displej
011B: CLRF 43
011C: MOVLW 01
011D: MOVWF 44
011E: CALL 0AA
.................... delay_ms(2);
011F: MOVLW 02
0120: MOVWF 3F
0121: CALL 06C
.................... break;
0122: GOTO 13F
.................... case '\n' : lcd_gotoxy(1,2); break; // presun se na 1. znak 2. radky
0123: MOVLW 01
0124: MOVWF 3F
0125: MOVLW 02
0126: MOVWF 40
0127: CALL 0FC
0128: GOTO 13F
.................... case '\r' : lcd_gotoxy(1,1); break; // presun home
0129: MOVLW 01
012A: MOVWF 3F
012B: MOVWF 40
012C: CALL 0FC
012D: GOTO 13F
.................... case '\b' : lcd_send_byte(0,0x10); break; // posun kurzor o 1 zpet
012E: CLRF 43
012F: MOVLW 10
0130: MOVWF 44
0131: CALL 0AA
0132: GOTO 13F
.................... default : if (c<0x20) c&=0x7; // preklopeni definovatelnych znaku na rozsah 0 az 0x1F
0133: MOVF 3E,W
0134: SUBLW 1F
0135: BTFSS 03.0
0136: GOTO 139
0137: MOVLW 07
0138: ANDWF 3E,F
.................... lcd_send_byte(1,c); break; // zapis znak
0139: MOVLW 01
013A: MOVWF 43
013B: MOVF 3E,W
013C: MOVWF 44
013D: CALL 0AA
013E: GOTO 13F
.................... }
.................... }
013F: RETURN
....................
....................
.................... // Zapni kurzor
.................... //
.................... void lcd_cursor_on()
.................... {
.................... lcd_send_byte(0,LCD_CURSOR_ON_);
.................... }
....................
....................
.................... // Vypni kurzor
.................... //
.................... void lcd_cursor_off()
.................... {
.................... lcd_send_byte(0,LCD_CURSOR_OFF_);
.................... }
....................
....................
.................... // Smaz displej
.................... //
.................... void lcd_clr()
.................... {
.................... lcd_putc('\f');
.................... }
....................
....................
.................... // Definice vlastnich fontu
.................... //
.................... // Vlastnich definic muze byt jen 8 do pozic 0 az 7 pameti CGRAM radice lcd displeje
.................... // Pro snadne definovani jsou pripraveny nasledujici definice a na konci souboru je uveden
.................... // priklad pouziti definovanych znaku.
....................
....................
.................... // Pomocna procedura pro posilani ridicich dat do radice displeje
.................... //
.................... void lcd_putc2(int Data)
.................... {
.................... lcd_send_byte(1,Data);
.................... }
....................
....................
.................... // Pomocne definice pro programovani obsahu CGRAM
.................... //
.................... #define lcd_define_start(Code) lcd_send_byte(0,0x40+(Code<<3)); delay_ms(2)
.................... #define lcd_define_def(String) printf(lcd_putc2,String);
.................... #define lcd_define_end() lcd_send_byte(0,3); delay_ms(2)
....................
....................
.................... // Vlastni vykonne makro pro definovani fontu do pozice Index CGRAM s definicnim retezcem Def
.................... //
.................... #define lcd_define_char(Index, Def) lcd_define_start(Index); lcd_define_def(Def); lcd_define_end();
....................
....................
.................... // Pripravene definice fontu vybranych znaku
.................... // V tabulce nesmi byt 00 (konec retezce v printf()), misto toho davame 80
.................... //
.................... #define LCD_CHAR_BAT100 "\x0E\x1F\x1F\x1F\x1F\x1F\x1F\x1F" /* symbol plne baterie */
.................... #define LCD_CHAR_BAT50 "\x0E\x1F\x11\x11\x13\x17\x1F\x1F" /* symbol polovicni baterie */
.................... #define LCD_CHAR_BAT0 "\x0E\x1F\x11\x11\x11\x11\x11\x1F" /* symbol vybite baterie */
.................... #define LCD_CHAR_UP "\x80\x04\x0E\x15\x04\x04\x04\x80" /* symbol sipka nahoru */
.................... #define LCD_CHAR_DOWN "\x80\x04\x04\x04\x15\x0E\x04\x80" /* symbol Sipka dolu */
.................... #define LCD_CHAR_LUA "\x04\x0E\x11\x11\x1F\x11\x11\x80" /* A s carkou */
.................... #define LCD_CHAR_LLA "\x01\x02\x0E\x01\x1F\x11\x0F\x80" /* a s carkou */
.................... #define LCD_CHAR_HUC "\x0A\x0E\x11\x10\x10\x11\x0E\x80" /* C s hackem */
.................... #define LCD_CHAR_HLC "\x0A\x04\x0E\x10\x10\x11\x0E\x80" /* c s hackem */
.................... #define LCD_CHAR_HUD "\x0A\x1C\x12\x11\x11\x12\x1C\x80" /* D s hackem */
.................... #define LCD_CHAR_HLD "\x05\x03\x0D\x13\x11\x11\x0F\x80" /* d s hackem */
.................... #define LCD_CHAR_LUE "\x04\x1F\x10\x10\x1E\x10\x1F\x80" /* E s carkou */
.................... #define LCD_CHAR_LLE "\x01\x02\x0E\x11\x1F\x10\x0E\x80" /* e s carkou */
.................... #define LCD_CHAR_HUE "\x0A\x1F\x10\x1E\x10\x10\x1F\x80" /* E s hackem */
.................... #define LCD_CHAR_HLE "\x0A\x04\x0E\x11\x1F\x10\x0E\x80" /* e s hackem */
.................... #define LCD_CHAR_LUI "\x04\x0E\x04\x04\x04\x04\x0E\x80" /* I s carkou */
.................... #define LCD_CHAR_LLI "\x02\x04\x80\x0C\x04\x04\x0E\x80" /* i s carkou */
.................... #define LCD_CHAR_HUN "\x0A\x15\x11\x19\x15\x13\x11\x80" /* N s hackem */
.................... #define LCD_CHAR_HLN "\x0A\x04\x16\x19\x11\x11\x11\x80" /* n s hackem */
.................... #define LCD_CHAR_LUO "\x04\x0E\x11\x11\x11\x11\x0E\x80" /* O s carkou */
.................... #define LCD_CHAR_LLO "\x02\x04\x0E\x11\x11\x11\x0E\x80" /* o s carkou */
.................... #define LCD_CHAR_HUR "\x0A\x1E\x11\x1E\x14\x12\x11\x80" /* R s hackem */
.................... #define LCD_CHAR_HLR "\x0A\x04\x16\x19\x10\x10\x10\x80" /* r s hackem */
.................... #define LCD_CHAR_HUS "\x0A\x0F\x10\x0E\x01\x01\x1E\x80" /* S s hackem */
.................... #define LCD_CHAR_HLS "\x0A\x04\x0E\x10\x0E\x01\x1E\x80" /* s s hackem */
.................... #define LCD_CHAR_HUT "\x0A\x1F\x04\x04\x04\x04\x04\x80" /* T s hackem */
.................... #define LCD_CHAR_HLT "\x0A\x0C\x1C\x08\x08\x09\x06\x80" /* t s hackem */
.................... #define LCD_CHAR_LUU "\x02\x15\x11\x11\x11\x11\x0E\x80" /* U s carkou */
.................... #define LCD_CHAR_LLU "\x02\x04\x11\x11\x11\x13\x0D\x80" /* u s carkou */
.................... #define LCD_CHAR_CUU "\x06\x17\x11\x11\x11\x11\x0E\x80" /* U s krouzkem */
.................... #define LCD_CHAR_CLU "\x06\x06\x11\x11\x11\x11\x0E\x80" /* u s krouzkem */
.................... #define LCD_CHAR_LUY "\x02\x15\x11\x0A\x04\x04\x04\x80" /* Y s carkou */
.................... #define LCD_CHAR_LLY "\x02\x04\x11\x11\x0F\x01\x0E\x80" /* y s carkou */
.................... #define LCD_CHAR_HUZ "\x0A\x1F\x01\x02\x04\x08\x1F\x80" /* Z s hackem */
.................... #define LCD_CHAR_HLZ "\x0A\x04\x1F\x02\x04\x08\x1F\x80" /* z s hackem */
....................
....................
.................... // Priklad pouziti definovanych znaku
.................... //
.................... //
.................... //void lcd_sample()
.................... //{
.................... // lcd_define_char(0,LCD_CHAR_BAT50); // Priklad definice znaku baterie do pozice 0
.................... // lcd_define_char(2,LCD_CHAR_HLE LCD_CHAR_LUI); // Priklad definice znaku e s hackem a I s carkou od pozice 2
.................... // // vsimnete si, ze neni carka mezi retezci s definici (oba retezce definuji
.................... // // jediny definicni retezec)
.................... // printf(lcd_putc,"\fZnaky:\20\22\23"); // priklad vypisu znaku z pozice 0, 2 a 3
.................... // delay_ms(1000);
.................... // lcd_define_char(0,LCD_CHAR_BAT0); // Predefinovani tvaru znaku v pozici 0
.................... // delay_ms(1000);
.................... //}
....................
....................
.................... int1 value=0;
....................
.................... #INT_EXT //preruseni od RB0
.................... void EXT_isr(void)
.................... {
....................
.................... value=~value;
*
0037: MOVLW 01
0038: XORWF 28,F
....................
.................... }
....................
0039: BCF 0B.1
003A: BCF 0A.3
003B: BCF 0A.4
003C: GOTO 01B
.................... void main()
.................... {
*
038E: CLRF 04
038F: BCF 03.7
0390: MOVLW 1F
0391: ANDWF 03,F
0392: MOVLW 71
0393: BSF 03.5
0394: MOVWF 0F
0395: MOVF 0F,W
0396: BCF 03.5
0397: BCF 28.0
0398: BSF 03.5
0399: BSF 03.6
039A: MOVF 09,W
039B: ANDLW C0
039C: MOVWF 09
039D: BCF 03.6
039E: BCF 1F.4
039F: BCF 1F.5
03A0: MOVLW 00
03A1: BSF 03.6
03A2: MOVWF 08
03A3: BCF 03.5
03A4: CLRF 07
03A5: CLRF 08
03A6: CLRF 09
.................... double value1, value2;
.................... enable_interrupts(INT_EXT); //povolení pøeruseni
*
03AA: BSF 0B.4
.................... enable_interrupts(GLOBAL);
03AB: MOVLW C0
03AC: IORWF 0B,F
.................... ext_int_edge(H_TO_L);
03AD: BSF 03.5
03AE: BCF 01.6
.................... setup_adc_ports(PIN_A0); //piny pro A/D RA0
03AF: BSF 03.6
03B0: MOVF 09,W
03B1: ANDLW C0
03B2: MOVWF 09
03B3: BCF 03.6
03B4: BCF 1F.4
03B5: BCF 1F.5
03B6: MOVLW 28
03B7: BSF 03.6
03B8: MOVWF 08
.................... setup_adc_ports(PIN_A1); //piny pro A/D RA1
03B9: MOVF 09,W
03BA: ANDLW C0
03BB: MOVWF 09
03BC: BCF 03.6
03BD: BCF 1F.4
03BE: BCF 1F.5
03BF: MOVLW 29
03C0: BSF 03.6
03C1: MOVWF 08
.................... setup_adc(ADC_CLOCK_DIV_8);
03C2: BCF 03.5
03C3: BCF 03.6
03C4: BSF 1F.6
03C5: BCF 1F.7
03C6: BSF 03.5
03C7: BCF 1F.7
03C8: BCF 03.5
03C9: BSF 1F.0
....................
....................
....................
....................
.................... setup_spi(SPI_SS_DISABLED);
03CA: BCF 14.5
03CB: BCF 27.5
03CC: MOVF 27,W
03CD: BSF 03.5
03CE: MOVWF 07
03CF: BCF 03.5
03D0: BSF 27.4
03D1: MOVF 27,W
03D2: BSF 03.5
03D3: MOVWF 07
03D4: BCF 03.5
03D5: BCF 27.3
03D6: MOVF 27,W
03D7: BSF 03.5
03D8: MOVWF 07
03D9: MOVLW 01
03DA: BCF 03.5
03DB: MOVWF 14
03DC: MOVLW 00
03DD: BSF 03.5
03DE: MOVWF 14
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
03DF: MOVF 01,W
03E0: ANDLW C7
03E1: IORLW 08
03E2: MOVWF 01
.................... setup_timer_1(T1_DISABLED);
03E3: BCF 03.5
03E4: CLRF 10
.................... setup_timer_2(T2_DISABLED,0,1);
03E5: MOVLW 00
03E6: MOVWF 78
03E7: MOVWF 12
03E8: MOVLW 00
03E9: BSF 03.5
03EA: MOVWF 12
.................... setup_ccp1(CCP_OFF);
03EB: BCF 03.5
03EC: BSF 27.2
03ED: MOVF 27,W
03EE: BSF 03.5
03EF: MOVWF 07
03F0: BCF 03.5
03F1: CLRF 17
03F2: BSF 03.5
03F3: CLRF 1B
03F4: CLRF 1C
03F5: MOVLW 01
03F6: MOVWF 1D
.................... setup_comparator(NC_NC_NC_NC);
03F7: BCF 03.5
03F8: BSF 03.6
03F9: CLRF 07
03FA: CLRF 08
03FB: CLRF 09
.................... setup_oscillator(OSC_8MHZ);
03FC: MOVLW 71
03FD: BSF 03.5
03FE: BCF 03.6
03FF: MOVWF 0F
0400: MOVF 0F,W
....................
.................... lcd_init(); //inicializuje LCD
0401: BCF 03.5
0402: CALL 0C3
....................
.................... LCD_gotoxy(1,1); //na LCD 1bunka 1øadek
0403: MOVLW 01
0404: MOVWF 3F
0405: MOVWF 40
0406: CALL 0FC
.................... printf(lcd_putc,"Tomas Pavlicek");
0407: MOVLW 3D
0408: BSF 03.6
0409: MOVWF 0D
040A: MOVLW 00
040B: MOVWF 0F
040C: BCF 03.6
040D: CALL 140
.................... LCD_gotoxy(1,2);
040E: MOVLW 01
040F: MOVWF 3F
0410: MOVLW 02
0411: MOVWF 40
0412: CALL 0FC
.................... printf(lcd_putc,"CVUT 2012/2013");
0413: MOVLW 45
0414: BSF 03.6
0415: MOVWF 0D
0416: MOVLW 00
0417: MOVWF 0F
0418: BCF 03.6
0419: CALL 140
.................... Delay_ms(1000);
041A: MOVLW 04
041B: MOVWF 31
041C: MOVLW FA
041D: MOVWF 3F
041E: CALL 06C
041F: DECFSZ 31,F
0420: GOTO 41C
....................
.................... while(true)
.................... {
.................... lcd_init(); //inicializuje LCD
0421: CALL 0C3
.................... set_adc_channel(0); //nastavi AD na kanál 0 (RA0)
0422: MOVLW 00
0423: MOVWF 78
0424: MOVF 1F,W
0425: ANDLW C3
0426: IORWF 78,W
0427: MOVWF 1F
.................... read_adc(ADC_START_ONLY); // Spustime A/D prevod
0428: BSF 1F.1
.................... Delay_ms(1);
0429: MOVLW 01
042A: MOVWF 3F
042B: CALL 06C
.................... while(!adc_done()); // Cekame na dokonceni prevodu
042C: BTFSC 1F.1
042D: GOTO 42C
.................... value1=read_adc(); // Precteme hodnotu z prevodniku
042E: BSF 1F.1
042F: BTFSC 1F.1
0430: GOTO 42F
0431: MOVF 1E,W
0432: CLRF 32
0433: MOVWF 31
0434: CALL 186
0435: MOVF 7A,W
0436: MOVWF 2C
0437: MOVF 79,W
0438: MOVWF 2B
0439: MOVF 78,W
043A: MOVWF 2A
043B: MOVF 77,W
043C: MOVWF 29
.................... //Delay_ms(100);
.................... set_adc_channel(1); //nastavi AD na kanál 1 (RA1)
043D: MOVLW 04
043E: MOVWF 78
043F: MOVF 1F,W
0440: ANDLW C3
0441: IORWF 78,W
0442: MOVWF 1F
.................... read_adc(ADC_START_ONLY); // Spustime A/D prevod
0443: BSF 1F.1
.................... Delay_ms(1);
0444: MOVLW 01
0445: MOVWF 3F
0446: CALL 06C
.................... while(!adc_done()); // Cekame na dokonceni prevodu
0447: BTFSC 1F.1
0448: GOTO 447
.................... value2=read_adc(); // Precteme hodnotu z prevodniku
0449: BSF 1F.1
044A: BTFSC 1F.1
044B: GOTO 44A
044C: MOVF 1E,W
044D: CLRF 32
044E: MOVWF 31
044F: CALL 186
0450: MOVF 7A,W
0451: MOVWF 30
0452: MOVF 79,W
0453: MOVWF 2F
0454: MOVF 78,W
0455: MOVWF 2E
0456: MOVF 77,W
0457: MOVWF 2D
....................
....................
.................... if(value==1)
0458: BTFSS 28.0
0459: GOTO 49E
.................... {
.................... LCD_gotoxy(1,1); //na LCD 1bunka 1øadek
045A: MOVLW 01
045B: MOVWF 3F
045C: MOVWF 40
045D: CALL 0FC
.................... printf(lcd_putc,"Napeti:%5.3f V", value1);;
045E: MOVLW 4E
045F: BSF 03.6
0460: MOVWF 0D
0461: MOVLW 00
0462: MOVWF 0F
0463: BCF 03.0
0464: MOVLW 07
0465: BCF 03.6
0466: MOVWF 31
0467: CALL 1A3
0468: MOVLW 04
0469: MOVWF 04
046A: MOVF 2C,W
046B: MOVWF 34
046C: MOVF 2B,W
046D: MOVWF 33
046E: MOVF 2A,W
046F: MOVWF 32
0470: MOVF 29,W
0471: MOVWF 31
0472: MOVLW 03
0473: MOVWF 35
0474: CALL 234
0475: MOVLW 20
0476: MOVWF 3E
0477: CALL 10D
0478: MOVLW 56
0479: MOVWF 3E
047A: CALL 10D
.................... LCD_gotoxy(1,2);
047B: MOVLW 01
047C: MOVWF 3F
047D: MOVLW 02
047E: MOVWF 40
047F: CALL 0FC
.................... printf(lcd_putc,"Proud:%5.3f I", value2);
0480: MOVLW 56
0481: BSF 03.6
0482: MOVWF 0D
0483: MOVLW 00
0484: MOVWF 0F
0485: BCF 03.0
0486: MOVLW 06
0487: BCF 03.6
0488: MOVWF 31
0489: CALL 1A3
048A: MOVLW 04
048B: MOVWF 04
048C: MOVF 30,W
048D: MOVWF 34
048E: MOVF 2F,W
048F: MOVWF 33
0490: MOVF 2E,W
0491: MOVWF 32
0492: MOVF 2D,W
0493: MOVWF 31
0494: MOVLW 03
0495: MOVWF 35
0496: CALL 234
0497: MOVLW 20
0498: MOVWF 3E
0499: CALL 10D
049A: MOVLW 49
049B: MOVWF 3E
049C: CALL 10D
....................
.................... }
.................... else
049D: GOTO 4E1
.................... {
.................... LCD_gotoxy(1,1); //na LCD 1bunka 1øadek
049E: MOVLW 01
049F: MOVWF 3F
04A0: MOVWF 40
04A1: CALL 0FC
.................... printf(lcd_putc,"Napeti:%5.3f V", value1);;
04A2: MOVLW 5D
04A3: BSF 03.6
04A4: MOVWF 0D
04A5: MOVLW 00
04A6: MOVWF 0F
04A7: BCF 03.0
04A8: MOVLW 07
04A9: BCF 03.6
04AA: MOVWF 31
04AB: CALL 1A3
04AC: MOVLW 04
04AD: MOVWF 04
04AE: MOVF 2C,W
04AF: MOVWF 34
04B0: MOVF 2B,W
04B1: MOVWF 33
04B2: MOVF 2A,W
04B3: MOVWF 32
04B4: MOVF 29,W
04B5: MOVWF 31
04B6: MOVLW 03
04B7: MOVWF 35
04B8: CALL 234
04B9: MOVLW 20
04BA: MOVWF 3E
04BB: CALL 10D
04BC: MOVLW 56
04BD: MOVWF 3E
04BE: CALL 10D
.................... LCD_gotoxy(1,2);
04BF: MOVLW 01
04C0: MOVWF 3F
04C1: MOVLW 02
04C2: MOVWF 40
04C3: CALL 0FC
.................... printf(lcd_putc,"Naboj:%5.3f I", value2);
04C4: MOVLW 65
04C5: BSF 03.6
04C6: MOVWF 0D
04C7: MOVLW 00
04C8: MOVWF 0F
04C9: BCF 03.0
04CA: MOVLW 06
04CB: BCF 03.6
04CC: MOVWF 31
04CD: CALL 1A3
04CE: MOVLW 04
04CF: MOVWF 04
04D0: MOVF 30,W
04D1: MOVWF 34
04D2: MOVF 2F,W
04D3: MOVWF 33
04D4: MOVF 2E,W
04D5: MOVWF 32
04D6: MOVF 2D,W
04D7: MOVWF 31
04D8: MOVLW 03
04D9: MOVWF 35
04DA: CALL 234
04DB: MOVLW 20
04DC: MOVWF 3E
04DD: CALL 10D
04DE: MOVLW 49
04DF: MOVWF 3E
04E0: CALL 10D
....................
.................... }
.................... Delay_ms(500);
04E1: MOVLW 02
04E2: MOVWF 31
04E3: MOVLW FA
04E4: MOVWF 3F
04E5: CALL 06C
04E6: DECFSZ 31,F
04E7: GOTO 4E3
.................... }
04E8: GOTO 421
.................... }
....................
04E9: SLEEP
Configuration Fuses:
Word 1: 2CF5 INTRC NOWDT NOPUT MCLR NOPROTECT NOCPD NOBROWNOUT IESO FCMEN NOLVP NODEBUG
Word 2: 3FFF NOWRT BORV40