	INCLUDE		"P16C74.INC"
	LIST 		P=16C74, R=DEC

;--------------------------------------- proměnné

PA	EQU		05h		;porty A
PB	EQU		06h		;porty B
PC	EQU		07h		;porty C
PD	EQU		08h		;porty D
PE	EQU		09h		;porty E
c1	EQU		40h		;pomocná proměnná pro čekání
c2	EQU		41h		;pomocná proměnná pro čekání
c3	EQU		42h		;pomocná proměnná pro čekání
nezob0	EQU		43h		;pomocná proměnná pro nezobrazování bezvýznamných nul
W_temp	EQU		44h		;dočasné uložení W při přerušení
S_temp	EQU		45h		;dočasné uložení STATUS při přerušení
cas	EQU		46h		;proměnná "násobící" čas timeru1 (slouží při odpočítávání cca 4s při čekání na 0 a na 1)
konec_m	EQU		47h		;příznak konce měření (spádovou hranou PB,0 se vyvolá přerušení a to nastaví konec_m,0 do log.1)
rozsah	EQU		48h		;ukládá naposledy nastavený rozsah

;--------------------------------------- proměnné jednotlivých znaků displeje

zn01	EQU		20h
zn02	EQU		21h
zn03	EQU		22h
zn04	EQU		23h
zn05	EQU		24h
zn06	EQU		25h
zn07	EQU		26h
zn08	EQU		27h
zn09	EQU		28h
zn10	EQU		29h
zn11	EQU		2Ah
zn12	EQU		2Bh
zn13	EQU		2Ch
zn14	EQU		2Dh
zn15	EQU		2Eh
zn16	EQU		2Fh
zn17	EQU		30h
zn18	EQU		31h
zn19	EQU		32h
zn20	EQU		33h
zn21	EQU		34h
zn22	EQU		35h
zn23	EQU		36h
zn24	EQU		37h
zn25	EQU		38h
zn26	EQU		39h
zn27	EQU		3Ah
zn28	EQU		3Bh
zn29	EQU		3Ch
zn30	EQU		3Dh
zn31	EQU		3Eh
zn32	EQU		3Fh

;--------------------------------------- definice znaků

oA	EQU		b'01000001'
oB	EQU		b'01000010'
oC	EQU		b'01000011'
oD	EQU		b'01000100'
oE	EQU		b'01000101'
oF	EQU		b'01000110'
oG	EQU		b'01000111'
oH	EQU		b'01001000'
oI	EQU		b'01001001'
oJ	EQU		b'01001010'
oK	EQU		b'01001011'
oL	EQU		b'01001100'		
oM	EQU		b'01001101'		
oN	EQU		b'01001110'
oO	EQU		b'01001111'		
oP	EQU		b'01010000'		
oQ	EQU		b'01010001'		
oR	EQU		b'01010010'		
oS	EQU		b'01010011'		
oT	EQU		b'01010100'		
oU	EQU		b'01010101'		
oV	EQU		b'01010110'		
oW	EQU		b'01010111'		
oX	EQU		b'01011000'		
oY	EQU		b'01011001'		
oZ	EQU		b'01011010'		
o0	EQU		b'00110000'		
o1	EQU		b'00110001'		
o2	EQU		b'00110010'		
o3	EQU		b'00110011'		
o4	EQU		b'00110100'		
o5	EQU		b'00110101'		
o6	EQU		b'00110110'		
o7	EQU		b'00110111'		
o8	EQU		b'00111000'		
o9	EQU		b'00111001'		
o	EQU		b'11111110'		; nic
otecka	EQU		b'00101110'		; .
ocarka	EQU		b'00101100'		; ,
ovykr	EQU		b'00100001'		; !
oproc	EQU		b'00100101'		; %
orovna	EQU		b'00111101'		; =
ocerna	EQU		b'11111111'		; černý
oleva	EQU		b'01111111'		; levá š.
oprava	EQU		b'01111110'		; pravá š.
om	EQU		b'01101101'		; m
on	EQU		b'01101110'		; n
op	EQU		b'01110000'		; p
ov	EQU		b'01110110'		; v
oaz	EQU		b'11111101'		; až
omensi	EQU		b'00111100'		; <
ovetsi	EQU		b'00111110'		; >

omikro	EQU		b'00000000'		; mikro
oplmn	EQU		b'00000001'		; plus-mínus

;--------------------------------------- definice hardware připojení ledek k portům D

led_err	EQU		2
led_dat	EQU		3
led_mer	EQU		4

led_zdr	EQU		5
led_bat	EQU		6
led_zap	EQU		7

;--------------------------------------- 

nulpiko	EQU		70		;kompenzace (odečtení) kapacity přívodních vodičů.
					;čím vyšší je toto číslo, tím menší hodnota je v rozsahu piko naměřena
					;například pro odečtení 40pF je toto číslo přibližně 70.

;-----------------------------------------------------------------------------------
;NASTAVENÍ MIKROKONTROLÉRU
;-----------------------------------------------------------------------------------

;--------------------------------------- org

	ORG		00h
	GOTO		zacatek

	ORG		04h
	GOTO		preruseni

zacatek

;--------------------------------------- vstupy, výstupy

	BCF		STATUS,RP1
	BSF		STATUS,RP0

	MOVLW		b'00000001'
	MOVWF		TRISA

	MOVLW		b'11100001'
	MOVWF		TRISB

	MOVLW		b'00000000'
	MOVWF		TRISC

	MOVLW		b'00000001'
	MOVWF		TRISD

	MOVLW		b'00000111'
	MOVWF		TRISE

	BCF		STATUS,RP0

;--------------------------------------- timer 1

	MOVLW		b'00110000'
	MOVWF		T1CON

;--------------------------------------- a/d převodník

	BSF		STATUS,RP0
	MOVLW		b'00000010'	;PE jsou digitální, PA jsou analogové, referenční napětí je 5V.
	MOVWF		ADCON1
	BCF		STATUS,RP0
	MOVLW		b'10000001'	;nastavení A/D převodníku
	MOVWF		ADCON0

;--------------------------------------- přerušení

	BSF		STATUS,RP0
	MOVLW		b'10001111'	;
	MOVWF		OPTION_REG
	BCF		STATUS,RP0
	MOVLW		b'00010000'	;
	MOVWF		INTCON

;--------------------------------------- nulování

	CLRWDT
	CLRF		PB
	CLRF		PC
	CLRF		PD
	CLRF		c1
	CLRF		c2
	CLRF		c3
	CLRF		nezob0
	CLRF		W_temp
	CLRF		S_temp
	CLRF		cas
	CLRF		konec_m
	CLRF		rozsah

;-----------------------------------------------------------------------------------
;ZAPNUTÍ
;-----------------------------------------------------------------------------------

	BSF		PD,1		;připojí napájecí napětí
	BSF		PD,led_zap	;rozsvítí led D3

;-----------------------------------------------------------------------------------
;NASTAVENÍ DISPLEJE
;-----------------------------------------------------------------------------------

	CALL		cekani2		;čeká na "náběh" displeje

;--------------------------------------- NASTAVENÍ


	BCF		PB,2		;zápis do displeje

					;reset
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		1		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

					;zápis na začátek
	BCF		PC,0		;na portech bude INSTRUKCE
	MOVLW		2		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PC,2
	CALL		cekani2		;čeká asi 2ms

					;směr pohybu kurzoru vpravo
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		6		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

					;zapnout displej a vypnout kurzor i jeho blikání
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		12		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

					;pohyb displeje vpravo
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		20		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

					;potvrzení nastavení parametrů
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		56		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms


;--------------------------------------- VYTVOŘENÍ VLASTNÍCH ZNAKŮ
;------ mikro b'00000000'

	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		b'01000000'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BSF		PB,1		;na portech budou DATA
	MOVLW		b'00000000'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BSF		PB,1		;na portech budou DATA
	MOVLW		b'00000000'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BSF		PB,1		;na portech budou DATA
	MOVLW		b'00000000'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BSF		PB,1		;na portech budou DATA
	MOVLW		b'00001001'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BSF		PB,1		;na portech budou DATA
	MOVLW		b'00001001'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BSF		PB,1		;na portech budou DATA
	MOVLW		b'00010111'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BSF		PB,1		;na portech budou DATA
	MOVLW		b'00010000'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BSF		PB,1		;na portech budou DATA
	MOVLW		b'00010000'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BSF		PB,1		;na portech budou DATA
	MOVLW		b'00010000'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		b'00000000'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

;------ plus-míns b'00000001'

	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		b'01001000'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BSF		PB,1		;na portech budou DATA
	MOVLW		b'00000100'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BSF		PB,1		;na portech budou DATA
	MOVLW		b'00000100'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BSF		PB,1		;na portech budou DATA
	MOVLW		b'00011111'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BSF		PB,1		;na portech budou DATA
	MOVLW		b'00000100'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BSF		PB,1		;na portech budou DATA
	MOVLW		b'00000100'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BSF		PB,1		;na portech budou DATA
	MOVLW		b'00000100'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BSF		PB,1		;na portech budou DATA
	MOVLW		b'00000000'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BSF		PB,1		;na portech budou DATA
	MOVLW		b'00011111'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BSF		PB,1		;na portech budou DATA
	MOVLW		b'00000000'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		b'00000000'	;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani2		;čeká asi 2ms

	GOTO		start

;-----------------------------------------------------------------------------------
;HLAVNÍ PROGRAM
;-----------------------------------------------------------------------------------

start	CALL		napis_uvod1
	CALL		cekani1
	CALL		test_napeti		;test napájecího napětí
	CALL		cekani1
	CALL		cekani1
	CALL		cekani1
	CALL		napis_uvod2
	CALL		cekani1
	CALL		cekani1
	CALL		cekani1
	CALL		cekani1
	BTFSC		PE,2
	GOTO		uvod3
	CALL		napis_polarita
	CALL		cekani1
	CALL		cekani1
uvod3	CALL		napis_uvod3
	CALL		nulovani
	GOTO		start_pri_prvnim_mereni


;-----------------------------------------------------------------------------------
start2	CALL		test_napeti		;test napájecího napětí

	CALL		napis_vysledek		;napíše na dispej výsledek
	CALL		napis_jednotku		;a jeho jednotku

	BTFSS		nezob0,0
	CALL		maly_vysledek

	BTFSS		PE,2			;
	GOTO		test_nezob03		;pokud je rozsah nastaven na mikro testuje se třetí bit nezob0
	GOTO		test_nezob04		;pokud ne, testuje se čtvrtý bit
test_nezob03
	BTFSC		nezob0,3		;při přetečení přes 10 000 je nezob0,3 v log.1
	CALL		velky_vysledek		;takže se na displej napíše "velky_vysledek"
	GOTO		test_nezob_
test_nezob04
	BTFSC		nezob0,4		;při přetečení přes 100 000 je nezob0,4 v log.1
	CALL		velky_vysledek		;takže se na displej napíše "velky_vysledek"
	GOTO		test_nezob_
test_nezob_

	BTFSC		PB,5			;test tlačítka data
	CALL		uloz_data		;ulož aktuální data

	CALL		cekani1			;chvíli zobrazuje výsledek a pak měří znovu
	CALL		nulovani		;nuluje výsledek



start_pri_prvnim_mereni

	BTFSS		PE,0			;jaký je nastaven rozsah?
	GOTO		start2a			;piko
	GOTO		start2b			;nano nebo mikro

start2a	CALL		start3			;při rozsahu piko proběhne měření desetkrát, takže je výsledek desetinásobný.
	CALL		start3
	CALL		start3
	CALL		start3
	CALL		start3
	CALL		start3
	CALL		start3
	CALL		start3
	CALL		start3
	CALL		start3

	GOTO		start2


start2b	CALL		start3			;při rozsahu nano nebo mikro probíhá měření normálně

	GOTO		start2

;-----------------------------------------------------------------------------------

start3	CLRF		TMR1L			;vynulování timer 1
	CLRF		TMR1H			;
	CLRF		cas			;
	BCF		PIR1,TMR1IF		;
	BCF		PD,led_err		;
	BSF		T1CON,TMR1ON		;spuštění timer 1

cekaNa0	CLRWDT					;čeká na nulu na vstupu PB,0 (oscilátor)
	BTFSC		PIR1,TMR1IF		;pokud timer 1 přetekl, tak:
	INCF		cas,1			;cas + 1.
	BTFSC		PIR1,TMR1IF		;
	BCF		PIR1,TMR1IF		;a vynuluje bit indikace přetečení timeru 1

	BTFSC		cas,3			;pokud čas 4s vypršel (testuje čtvrtý bit registru cas)
	BSF		PD,led_err		;rozsvítí led_err
	BTFSC		cas,3			;
	CALL		velky_vysledek		;a napíše "velky_vysledek"

	BTFSC		PB,0
	GOTO		cekaNa0			;pokud je PB,0 stále v log.1 vrací se na "CekaNa0" a cykluje dokud není
						;v nule nebo dokud nepřeteče časovač složený z TMR1 a cas





	CLRF		TMR1L			;vynulování timer 1
	CLRF		TMR1H			;
	CLRF		cas			;
	BCF		PIR1,TMR1IF		;
	BCF		PD,led_err		;
	BSF		T1CON,TMR1ON		;spuštění timer 1

	BCF		konec_m,0		;nuluje příznak konce měření

cekaNa1	CLRWDT					;čeká na vzestupnou hranu na vstupu PB,0 (oscilátor)

	BTFSC		PB,0			;pokud je již na PB,0 log.1 začne měřit
	GOTO		zacatek_mereni

	BTFSC		PIR1,TMR1IF		;pokud timer 1 přetekl, tak:
	INCF		cas,1			;cas + 1.

	BTFSC		PB,0			;pokud je již na PB,0 log.1 začne měřit
	GOTO		zacatek_mereni

	BTFSC		PIR1,TMR1IF		;
	BCF		PIR1,TMR1IF		;a vynuluje bit indikace přetečení timeru 1

	BTFSC		PB,0			;pokud je již na PB,0 log.1 začne měřit
	GOTO		zacatek_mereni

	BTFSC		cas,3			;pokud čas 4s vypršel (testuje čtvrtý bit registru cas)
	BSF		PD,led_err		;rozsvítí led_err

	BTFSC		PB,0			;pokud je již na PB,0 log.1 začne měřit
	GOTO		zacatek_mereni

	BTFSC		cas,3			;
	CALL		velky_vysledek		;a napíše "velky_vysledek"

	BTFSC		PB,0			;pokud je již na PB,0 log.1 začne měřit
	GOTO		zacatek_mereni
	GOTO		cekaNa1			;pokud je PB,0 stále v log.0 vrací se na "CekaNa1" a cykluje dokud není
						;v jedničce nebo dokud nepřeteče časovač složený z TMR1 a cas




zacatek_mereni
	BSF		PD,led_mer		;rozsvítí led_mer
	BCF		INTCON,INTF		;nuluje příznak požadavku přerušení
	BSF		INTCON,GIE		;povolí přerušení
	BTFSS		PE,0			;pokud je nastaven rozsah piko volá se podprogram čekání před vlastním měřením "nulcek"
	CALL		nulcek			;
	CALL		start4			;volá podprogram měření (začne měřit a zkončí při přerušení od spádové hrany bitu PB,0)
	BCF		INTCON,GIE		;zakáže přerušení
	BCF		PD,led_mer		;zhasne led_mer

	RETURN

;-----------------------------------------------------------------------------------
start4	BTFSC		PD,0			;test tlačítka vypni
	BCF		PD,1			;odpojí napájecí napětí

	BTFSC		konec_m,0
	RETURN

	CALL		vysledek

	BTFSC		nezob0,4
	RETURN
	GOTO		start4

;-----------------------------------------------------------------------------------
vysledek
	BTFSS		PB,0
	BSF		konec_m,0

	CLRWDT

	INCF		zn29,1

test_zn29
	BTFSC		zn29,1			;kontrola přetečení znaku 32 (1.řád)
	BTFSS		zn29,3
	GOTO		test_zn28
	INCF		zn28,1			;+1 k znaku 28 (2.řád)
	CLRF		zn29			;vynuluj znak 29 (1.řád)
	BSF		nezob0,0		;nastav bit nezob0,0 => povolí zobrazení nuly ve znaku 28 (2.řád)

test_zn28					;kontrola přetečení
	BTFSC		zn28,1
	BTFSS		zn28,3
	GOTO		test_zn27
	INCF		zn27,1
	CLRF		zn28
	BSF		nezob0,1

test_zn27					;kontrola přetečení
	BTFSC		zn27,1
	BTFSS		zn27,3
	GOTO		test_zn25
	INCF		zn25,1
	CLRF		zn27
	BSF		nezob0,2

test_zn25					;kontrola přetečení
	BTFSC		zn25,1
	BTFSS		zn25,3
	GOTO		test_zn24
	INCF		zn24,1
	CLRF		zn25
	BSF		nezob0,3

test_zn24					;kontrola přetečení
	BTFSC		zn24,1
	BTFSS		zn24,3
	GOTO		test_zn23
	INCF		zn23,1
	CLRF		zn24
	BSF		nezob0,4

test_zn23					;kontrola přetečení
	BTFSC		zn23,1
	BTFSS		zn23,3
	RETURN
	CLRF		zn29			;celkové přetečení => celkové nulování
	CLRF		zn28
	CLRF		zn27

	CLRF		zn25
	CLRF		zn24
	CLRF		zn23

	CLRF		nezob0			;reset pomocných proměnných pro nezobrazení bezvýznamné nuly
	BSF		PD,led_err

	RETURN

;-----------------------------------------------------------------------------------
nulcek
	MOVLW		nulpiko
	MOVWF		c1
cek0	DECFSZ		c1,1
	GOTO		cek0
	CLRWDT				;vynulování Watch Dog
	RETURN

;-----------------------------------------------------------------------------------
nulovani
	CLRF		zn23
	CLRF		zn24
	CLRF		zn25

	CLRF		zn27
	CLRF		zn28
	CLRF		zn29

	MOVLW		o
	MOVWF		zn21			;zatím nic nezobrazovat na znaku indikace přetečení (21)

	CLRF		nezob0			;reset pomocných proměnných pro nezobrazení bezvýznamné nuly

	RETURN

;-----------------------------------------------------------------------------------
;TEST NAPÁJECÍHO NAPĚTÍ
;-----------------------------------------------------------------------------------

test_napeti
	BSF		ADCON0,2	;A/D převod
prevod	BTFSC		ADCON0,2
	GOTO		prevod
	GOTO		nap_0

nap_0	BTFSC		ADRES,7
	GOTO		nap_1
	BCF		PB,4			;zhasne podsvícení lcd
	CALL		napis_nizke_napajeci_napeti
	BCF		PD,led_bat
	BCF		PD,led_zdr
	CALL		cekani1
	BSF		PD,led_bat
	BSF		PD,led_zdr
	CALL		cekani1
	BCF		PD,led_bat
	BCF		PD,led_zdr
	CALL		cekani1
	BSF		PD,led_bat
	BSF		PD,led_zdr
	CALL		cekani1
	BCF		PD,1
	RETURN

nap_1	BSF		PD,led_bat
	BCF		PD,led_zdr
	BCF		PB,4			;zhasne podsvícení lcd
	BTFSC		ADRES,6
	GOTO		nap_2
	RETURN

nap_2	BCF		PD,led_bat
	BSF		PD,led_zdr
	BSF		PB,4			;rozsvítí podsvícení lcd
	RETURN

;-----------------------------------------------------------------------------------
;ULOŽENÍ DAT
;-----------------------------------------------------------------------------------

uloz_data
	CALL		napis_ulozeno
	BSF		PD,led_dat

	CALL		cekani2
DataNa0	CLRWDT
	BTFSC		PB,5
	GOTO		DataNa0
	CALL		cekani1
DataNa1	CLRWDT
	BTFSS		PB,5
	GOTO		DataNa1
	BCF		PD,led_dat
	RETURN

;-----------------------------------------------------------------------------------
;PŘÍLIŠ MALÝ / VELKÝ VÝSLEDEK (ZMĚŇTE ROZSAH)
;-----------------------------------------------------------------------------------

maly_vysledek

	BSF		PD,led_err
	BTFSC		PE,0
	CALL		napis_jednotku
	BTFSC		PE,0
	CALL		napis_rozsah_nizsi
	BTFSS		PE,0
	CALL		napis_prilis_mala

	RETURN

velky_vysledek

	BSF		PD,led_err
	BTFSC		PE,2
	CALL		napis_jednotku
	BTFSC		PE,2
	CALL		napis_rozsah_vyssi
	BTFSS		PE,2
	CALL		napis_prilis_velka

	RETURN

;-----------------------------------------------------------------------------------
;JEDNOTLIVE NAPISY
;-----------------------------------------------------------------------------------

;----------------------------------------
napis_uvod1

	MOVLW		oM
	MOVWF		zn01
	MOVLW		oE
	MOVWF		zn02
	MOVLW		oR
	MOVWF		zn03
	MOVLW		oI
	MOVWF		zn04
	MOVLW		oC
	MOVWF		zn05
	MOVLW		o
	MOVWF		zn06
	MOVLW		oK
	MOVWF		zn07
	MOVLW		oA
	MOVWF		zn08
	MOVLW		oP
	MOVWF		zn09
	MOVLW		oA
	MOVWF		zn10
	MOVLW		oC
	MOVWF		zn11
	MOVLW		oI
	MOVWF		zn12
	MOVLW		oT
	MOVWF		zn13
	MOVLW		oY
	MOVWF		zn14
	MOVLW		o
	MOVWF		zn15
	MOVLW		o
	MOVWF		zn16

	MOVLW		o
	MOVWF		zn17
	MOVLW		o
	MOVWF		zn18
	MOVLW		o
	MOVWF		zn19
	MOVLW		o
	MOVWF		zn20
	MOVLW		o
	MOVWF		zn21
	MOVLW		o
	MOVWF		zn22
	MOVLW		o
	MOVWF		zn23
	MOVLW		o
	MOVWF		zn24
	MOVLW		o
	MOVWF		zn25
	MOVLW		o
	MOVWF		zn26
	MOVLW		o
	MOVWF		zn27
	MOVLW		o
	MOVWF		zn28
	MOVLW		o
	MOVWF		zn29
	MOVLW		o
	MOVWF		zn30
	MOVLW		o
	MOVWF		zn31
	MOVLW		o
	MOVWF		zn32

	CALL		zobraz
	RETURN

;----------------------------------------
napis_uvod2

	MOVLW		o1
	MOVWF		zn01
	MOVLW		o0
	MOVWF		zn02
	MOVLW		op
	MOVWF		zn03
	MOVLW		oF
	MOVWF		zn04
	MOVLW		o
	MOVWF		zn05
	MOVLW		oaz
	MOVWF		zn06
	MOVLW		o
	MOVWF		zn07
	MOVLW		o1
	MOVWF		zn08
	MOVLW		o0
	MOVWF		zn09
	MOVLW		om
	MOVWF		zn10
	MOVLW		oF
	MOVWF		zn11
	MOVLW		o
	MOVWF		zn12
	MOVLW		o
	MOVWF		zn13
	MOVLW		o
	MOVWF		zn14
	MOVLW		o
	MOVWF		zn15
	MOVLW		o
	MOVWF		zn16

	MOVLW		oplmn
	MOVWF		zn17
	MOVLW		o2
	MOVWF		zn18
	MOVLW		oproc
	MOVWF		zn19
	MOVLW		o
	MOVWF		zn20
	MOVLW		o
	MOVWF		zn21
	MOVLW		o
	MOVWF		zn22
	MOVLW		o
	MOVWF		zn23
	MOVLW		o
	MOVWF		zn24
	MOVLW		oE
	MOVWF		zn25
	MOVLW		oL
	MOVWF		zn26
	MOVLW		oW
	MOVWF		zn27
	MOVLW		oE
	MOVWF		zn28
	MOVLW		oB
	MOVWF		zn29
	MOVLW		otecka
	MOVWF		zn30
	MOVLW		oC
	MOVWF		zn31
	MOVLW		oZ
	MOVWF		zn32

	CALL		zobraz
	RETURN

;----------------------------------------
napis_polarita

	MOVLW		oP
	MOVWF		zn01
	MOVLW		oO
	MOVWF		zn02
	MOVLW		oZ
	MOVWF		zn03
	MOVLW		oO
	MOVWF		zn04
	MOVLW		oR
	MOVWF		zn05
	MOVLW		o
	MOVWF		zn06
	MOVLW		o
	MOVWF		zn07
	MOVLW		oN
	MOVWF		zn08
	MOVLW		oA
	MOVWF		zn09
	MOVLW		o
	MOVWF		zn10
	MOVLW		o
	MOVWF		zn11
	MOVLW		o
	MOVWF		zn12
	MOVLW		o
	MOVWF		zn13
	MOVLW		o
	MOVWF		zn14
	MOVLW		o
	MOVWF		zn15
	MOVLW		o
	MOVWF		zn16

	MOVLW		o
	MOVWF		zn17
	MOVLW		o
	MOVWF		zn18
	MOVLW		o
	MOVWF		zn19
	MOVLW		o
	MOVWF		zn20
	MOVLW		o
	MOVWF		zn21
	MOVLW		o
	MOVWF		zn22
	MOVLW		o
	MOVWF		zn23
	MOVLW		o
	MOVWF		zn24
	MOVLW		oP
	MOVWF		zn25
	MOVLW		oO
	MOVWF		zn26
	MOVLW		oL
	MOVWF		zn27
	MOVLW		oA
	MOVWF		zn28
	MOVLW		oR
	MOVWF		zn29
	MOVLW		oI
	MOVWF		zn30
	MOVLW		oT
	MOVWF		zn31
	MOVLW		oU
	MOVWF		zn32

	CALL		zobraz
	RETURN

;----------------------------------------
napis_uvod3

	MOVLW		ocerna
	MOVWF		zn01
	MOVWF		zn02
	MOVWF		zn03
	MOVWF		zn04
	MOVWF		zn05
	MOVWF		zn06
	MOVWF		zn07
	MOVWF		zn08
	MOVWF		zn09
	MOVWF		zn10
	MOVWF		zn11
	MOVWF		zn12
	MOVWF		zn13
	MOVWF		zn14
	MOVWF		zn15
	MOVWF		zn16

	MOVWF		zn17
	MOVWF		zn18
	MOVWF		zn19
	MOVWF		zn20
	MOVWF		zn21
	MOVWF		zn22
	MOVWF		zn23
	MOVWF		zn24
	MOVWF		zn25
	MOVWF		zn26
	MOVWF		zn27
	MOVWF		zn28
	MOVWF		zn29
	MOVWF		zn30
	MOVWF		zn31
	MOVWF		zn32

	CALL		zobraz
	RETURN

;----------------------------------------
napis_kapacita

	MOVLW		oK
	MOVWF		zn01
	MOVLW		oA
	MOVWF		zn02
	MOVLW		oP
	MOVWF		zn03
	MOVLW		oA
	MOVWF		zn04
	MOVLW		oC
	MOVWF		zn05
	MOVLW		oI
	MOVWF		zn06
	MOVLW		oT
	MOVWF		zn07
	MOVLW		oA
	MOVWF		zn08
	MOVLW		o
	MOVWF		zn09
	MOVLW		o
	MOVWF		zn10
	MOVLW		o
	MOVWF		zn11
	MOVLW		o
	MOVWF		zn12
	MOVLW		o
	MOVWF		zn13
	MOVLW		o
	MOVWF		zn14
	MOVLW		o
	MOVWF		zn15
	MOVLW		o
	MOVWF		zn16

	MOVLW		oC
	MOVWF		zn17
	MOVLW		orovna
	MOVWF		zn18
	MOVLW		o
	MOVWF		zn19
	MOVLW		o
	MOVWF		zn20
	MOVLW		o
	MOVWF		zn21
	MOVLW		o
	MOVWF		zn22
	MOVLW		o
	MOVWF		zn23
	MOVLW		o
	MOVWF		zn24
	MOVLW		o
	MOVWF		zn25
	MOVLW		o
	MOVWF		zn26
	MOVLW		o
	MOVWF		zn27
	MOVLW		o
	MOVWF		zn28
	MOVLW		o
	MOVWF		zn29
	MOVLW		o
	MOVWF		zn30
	MOVLW		o
	MOVWF		zn31
	MOVLW		oF
	MOVWF		zn32

	CALL		zobraz
	RETURN

;----------------------------------------
napis_ulozeno

	MOVLW		oK
	MOVWF		zn01
	MOVLW		oA
	MOVWF		zn02
	MOVLW		oP
	MOVWF		zn03
	MOVLW		oA
	MOVWF		zn04
	MOVLW		oC
	MOVWF		zn05
	MOVLW		oI
	MOVWF		zn06
	MOVLW		oT
	MOVWF		zn07
	MOVLW		oA
	MOVWF		zn08
	MOVLW		o
	MOVWF		zn09
	MOVLW		oB
	MOVWF		zn10
	MOVLW		oY
	MOVWF		zn11
	MOVLW		oL
	MOVWF		zn12
	MOVLW		oA
	MOVWF		zn13
	MOVLW		o
	MOVWF		zn14
	MOVLW		o
	MOVWF		zn15
	MOVLW		o
	MOVWF		zn16

	CALL		zobraz
	RETURN

;----------------------------------------
napis_rozsah_vyssi

	MOVLW		oZ
	MOVWF		zn01
	MOVLW		oM
	MOVWF		zn02
	MOVLW		oE
	MOVWF		zn03
	MOVLW		oN
	MOVWF		zn04
	MOVLW		oT
	MOVWF		zn05
	MOVLW		oE
	MOVWF		zn06
	MOVLW		o
	MOVWF		zn07
	MOVLW		oR
	MOVWF		zn08
	MOVLW		oO
	MOVWF		zn09
	MOVLW		oZ
	MOVWF		zn10
	MOVLW		oS
	MOVWF		zn11
	MOVLW		oA
	MOVWF		zn12
	MOVLW		oH
	MOVWF		zn13
	MOVLW		o
	MOVWF		zn14
	MOVLW		o
	MOVWF		zn15
	MOVLW		oprava
	MOVWF		zn16

	MOVLW		oC
	MOVWF		zn17
	MOVLW		o
	MOVWF		zn18
	MOVLW		o
	MOVWF		zn19
	MOVLW		o
	MOVWF		zn20
	MOVLW		ovetsi
	MOVWF		zn21
	MOVLW		o
	MOVWF		zn22
	MOVLW		o1
	MOVWF		zn23
	MOVLW		o0
	MOVWF		zn24
	MOVLW		o0
	MOVWF		zn25
	MOVLW		o
	MOVWF		zn26
	MOVLW		o0
	MOVWF		zn27
	MOVLW		o0
	MOVWF		zn28
	MOVLW		o0
	MOVWF		zn29
	MOVLW		o
	MOVWF		zn30

	MOVLW		oF
	MOVWF		zn32

	CALL		zobraz
	RETURN

;----------------------------------------
napis_rozsah_nizsi

	MOVLW		oZ
	MOVWF		zn01
	MOVLW		oM
	MOVWF		zn02
	MOVLW		oE
	MOVWF		zn03
	MOVLW		oN
	MOVWF		zn04
	MOVLW		oT
	MOVWF		zn05
	MOVLW		oE
	MOVWF		zn06
	MOVLW		o
	MOVWF		zn07
	MOVLW		oR
	MOVWF		zn08
	MOVLW		oO
	MOVWF		zn09
	MOVLW		oZ
	MOVWF		zn10
	MOVLW		oS
	MOVWF		zn11
	MOVLW		oA
	MOVWF		zn12
	MOVLW		oH
	MOVWF		zn13
	MOVLW		o
	MOVWF		zn14
	MOVLW		o
	MOVWF		zn15
	MOVLW		oleva
	MOVWF		zn16

	MOVLW		oC
	MOVWF		zn17
	MOVLW		o
	MOVWF		zn18
	MOVLW		o
	MOVWF		zn19
	MOVLW		o
	MOVWF		zn20
	MOVLW		o
	MOVWF		zn21
	MOVLW		o
	MOVWF		zn22
	MOVLW		o
	MOVWF		zn23
	MOVLW		o
	MOVWF		zn24
	MOVLW		o
	MOVWF		zn25
	MOVLW		omensi
	MOVWF		zn26
	MOVLW		o
	MOVWF		zn27
	MOVLW		o1
	MOVWF		zn28
	MOVLW		o0
	MOVWF		zn29
	MOVLW		o
	MOVWF		zn30

	MOVLW		oF
	MOVWF		zn32

	CALL		zobraz
	RETURN

;----------------------------------------
napis_prilis_velka

	MOVLW		oK
	MOVWF		zn01
	MOVLW		oA
	MOVWF		zn02
	MOVLW		oP
	MOVWF		zn03
	MOVLW		oA
	MOVWF		zn04
	MOVLW		oC
	MOVWF		zn05
	MOVLW		oI
	MOVWF		zn06
	MOVLW		oT
	MOVWF		zn07
	MOVLW		oA
	MOVWF		zn08
	MOVLW		o
	MOVWF		zn09
	MOVLW		oJ
	MOVWF		zn10
	MOVLW		oE
	MOVWF		zn11
	MOVLW		o
	MOVWF		zn12
	MOVLW		o
	MOVWF		zn13
	MOVLW		o
	MOVWF		zn14
	MOVLW		o
	MOVWF		zn15
	MOVLW		o
	MOVWF		zn16

	MOVLW		o
	MOVWF		zn17
	MOVLW		o
	MOVWF		zn18
	MOVLW		o
	MOVWF		zn19
	MOVLW		o
	MOVWF		zn20
	MOVLW		oP
	MOVWF		zn21
	MOVLW		oR
	MOVWF		zn22
	MOVLW		oI
	MOVWF		zn23
	MOVLW		oL
	MOVWF		zn24
	MOVLW		oI
	MOVWF		zn25
	MOVLW		oS
	MOVWF		zn26
	MOVLW		o
	MOVWF		zn27
	MOVLW		oV
	MOVWF		zn28
	MOVLW		oE
	MOVWF		zn29
	MOVLW		oL
	MOVWF		zn30
	MOVLW		oK
	MOVWF		zn31
	MOVLW		oA
	MOVWF		zn32

	CALL		zobraz
	RETURN

;----------------------------------------
napis_prilis_mala

	MOVLW		oK
	MOVWF		zn01
	MOVLW		oA
	MOVWF		zn02
	MOVLW		oP
	MOVWF		zn03
	MOVLW		oA
	MOVWF		zn04
	MOVLW		oC
	MOVWF		zn05
	MOVLW		oI
	MOVWF		zn06
	MOVLW		oT
	MOVWF		zn07
	MOVLW		oA
	MOVWF		zn08
	MOVLW		o
	MOVWF		zn09
	MOVLW		oJ
	MOVWF		zn10
	MOVLW		oE
	MOVWF		zn11
	MOVLW		o
	MOVWF		zn12
	MOVLW		o
	MOVWF		zn13
	MOVLW		o
	MOVWF		zn14
	MOVLW		o
	MOVWF		zn15
	MOVLW		o
	MOVWF		zn16

	MOVLW		o
	MOVWF		zn17
	MOVLW		o
	MOVWF		zn18
	MOVLW		o
	MOVWF		zn19
	MOVLW		o
	MOVWF		zn20
	MOVLW		o
	MOVWF		zn21
	MOVLW		oP
	MOVWF		zn22
	MOVLW		oR
	MOVWF		zn23
	MOVLW		oI
	MOVWF		zn24
	MOVLW		oL
	MOVWF		zn25
	MOVLW		oI
	MOVWF		zn26
	MOVLW		oS
	MOVWF		zn27
	MOVLW		o
	MOVWF		zn28
	MOVLW		oM
	MOVWF		zn29
	MOVLW		oA
	MOVWF		zn30
	MOVLW		oL
	MOVWF		zn31
	MOVLW		oA
	MOVWF		zn32

	CALL		zobraz
	RETURN

;----------------------------------------
napis_jednotku

	BTFSS		PE,0
	MOVLW		op
	BTFSS		PE,1
	MOVLW		on
	BTFSS		PE,2
	MOVLW		omikro

	MOVWF		zn31

	CALL		zobraz			;překreslení displeje
	RETURN

;----------------------------------------
napis_vysledek

	BTFSC		PE,2			;rozsah mikro ??
	GOTO		napis_vysledek_		;pokud ne, nic se neděje
						;pokud ano, posunou se řády, aby byl výsledek desetinový.
	MOVFW		zn28
	MOVWF		zn29

	MOVFW		zn27
	MOVWF		zn28

	MOVFW		zn25
	MOVWF		zn27

	MOVFW		zn24
	MOVWF		zn25

	MOVFW		zn23
	MOVWF		zn24

	CLRF		zn23

	RRF		nezob0,1		;rotace registru nezobrazení bezvýznamných nul vpravo.



napis_vysledek_

	MOVLW		oK
	MOVWF		zn01
	MOVLW		oA
	MOVWF		zn02
	MOVLW		oP
	MOVWF		zn03
	MOVLW		oA
	MOVWF		zn04
	MOVLW		oC
	MOVWF		zn05
	MOVLW		oI
	MOVWF		zn06
	MOVLW		oT
	MOVWF		zn07
	MOVLW		oA
	MOVWF		zn08
	MOVLW		o
	MOVWF		zn09
	MOVLW		o
	MOVWF		zn10
	MOVLW		o
	MOVWF		zn11
	MOVLW		o
	MOVWF		zn12
	MOVLW		o
	MOVWF		zn13
	MOVLW		o
	MOVWF		zn14
	MOVLW		o
	MOVWF		zn15
	MOVLW		o
	MOVWF		zn16

	MOVLW		oC
	MOVWF		zn17
	MOVLW		orovna
	MOVWF		zn18
	MOVLW		o
	MOVWF		zn19
	MOVLW		o
	MOVWF		zn20
	MOVLW		o
	MOVWF		zn21
	MOVLW		o
	MOVWF		zn22
	MOVLW		o
	MOVWF		zn26
	MOVLW		o
	MOVWF		zn30
	MOVLW		oF
	MOVWF		zn32

	BSF		zn23,4			;nastavení 0011xxxx (sloupec tabulky znaků => číslice)
	BSF		zn23,5
	BCF		zn23,6
	BCF		zn23,7
	BSF		zn24,4
	BSF		zn24,5
	BCF		zn24,6
	BCF		zn24,7
	BSF		zn25,4
	BSF		zn25,5
	BCF		zn25,6
	BCF		zn25,7

	BSF		zn27,4
	BSF		zn27,5
	BCF		zn27,6
	BCF		zn27,7
	BSF		zn28,4
	BSF		zn28,5
	BCF		zn28,6
	BCF		zn28,7
	BSF		zn29,4
	BSF		zn29,5
	BCF		zn29,6
	BCF		zn29,7

nez0_28	BTFSC		nezob0,0		;zákaz/povolení zobrazení znaku (nezobrazí bezvýznamnou nulu)
	GOTO		nez0_27
	BCF		zn28,4			;1010xxx (při nule se nic nezobrazí)
	BSF		zn28,5
	BCF		zn28,6
	BSF		zn28,7
nez0_27	BTFSC		nezob0,1
	GOTO		nez0_25
	BCF		zn27,4
	BSF		zn27,5
	BCF		zn27,6
	BSF		zn27,7

nez0_25	BTFSC		nezob0,2
	GOTO		nez0_24
	BCF		zn25,4
	BSF		zn25,5
	BCF		zn25,6
	BSF		zn25,7
nez0_24	BTFSC		nezob0,3
	GOTO		nez0_23
	BCF		zn24,4
	BSF		zn24,5
	BCF		zn24,6
	BSF		zn24,7
nez0_23	BTFSC		nezob0,4
	GOTO		nez0end
	BCF		zn23,4
	BSF		zn23,5
	BCF		zn23,6
	BSF		zn23,7
nez0end

	CALL		zobraz			;překreslení displeje
	RETURN

;----------------------------------------
napis_nizke_napajeci_napeti

	MOVLW		oN
	MOVWF		zn01
	MOVLW		oI
	MOVWF		zn02
	MOVLW		oZ
	MOVWF		zn03
	MOVLW		oK
	MOVWF		zn04
	MOVLW		oE
	MOVWF		zn05
	MOVLW		o
	MOVWF		zn06
	MOVLW		oN
	MOVWF		zn07
	MOVLW		oA
	MOVWF		zn08
	MOVLW		oP
	MOVWF		zn09
	MOVLW		oA
	MOVWF		zn10
	MOVLW		oJ
	MOVWF		zn11
	MOVLW		oE
	MOVWF		zn12
	MOVLW		oC
	MOVWF		zn13
	MOVLW		oI
	MOVWF		zn14
	MOVLW		o
	MOVWF		zn15
	MOVLW		o
	MOVWF		zn16

	MOVLW		oN
	MOVWF		zn17
	MOVLW		oA
	MOVWF		zn18
	MOVLW		oP
	MOVWF		zn19
	MOVLW		oE
	MOVWF		zn20
	MOVLW		oT
	MOVWF		zn21
	MOVLW		oI
	MOVWF		zn22
	MOVLW		o
	MOVWF		zn23
	MOVLW		o
	MOVWF		zn24
	MOVLW		o
	MOVWF		zn25
	MOVLW		o
	MOVWF		zn26
	MOVLW		o
	MOVWF		zn27
	MOVLW		o
	MOVWF		zn28
	MOVLW		o
	MOVWF		zn29
	MOVLW		ovykr
	MOVWF		zn30
	MOVLW		ovykr
	MOVWF		zn31
	MOVLW		ovykr
	MOVWF		zn32

	CALL		zobraz
	RETURN

;-----------------------------------------------------------------------------------
;ZOBRAZEÍ NA DISPLEJ
;-----------------------------------------------------------------------------------

zobraz

	CALL		cekani3

;--PRVNÍ ŘÁDEK
;--01------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		128		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn01		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--02------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		129		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn02		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--03------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		130		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn03		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--04------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		131		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn04		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--05------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		132		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn05		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--06------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		133		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn06		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--07------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		134		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn07		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--08------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		135		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn08		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--09------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		136		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn09		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--10------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		137		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn10		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--11------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		138		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn11		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--12------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		139		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn12		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--13------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		140		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn13		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--14------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		141		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn14		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--15------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		142		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn15		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--16------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		143		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn16		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us



;--DRUHÝ ŘÁDEK
;--17------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		192		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn17		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--18------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		193		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn18		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--19------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		194		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn19		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--20------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		195		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn20		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--21------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		196		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn21		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--22------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		197		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn22		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--23------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		198		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn23		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--24------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		199		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn24		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--25------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		200		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn25		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--26------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		201		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn26		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--27------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		202		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn27		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--28------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		203		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn28		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--29------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		204		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn29		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--30------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		205		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn30		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--31------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		206		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn31		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

;--32------------------------------------napsání znaku
					;pozice DDRAM
	BCF		PB,1		;na portech bude INSTRUKCE
	MOVLW		207		;porty displeje nastaví na tuto hodnotu
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	BSF		PB,1		;na portech budou DATA
	MOVFW		zn32		;--- ZNAK
	MOVWF		PC
	BSF		PB,3		;povolení přenosu
	NOP
	BCF		PB,3
	CALL		cekani3		;čeká asi 50us

	RETURN

;-----------------------------------------------------------------------------------
;ČEKÁNÍ
;-----------------------------------------------------------------------------------

;----------------------------------------

cekani1
	MOVLW		20
	MOVWF		c3
cek3	MOVLW		100
	MOVWF		c2
cek2	MOVLW		100
	MOVWF		c1

	CLRWDT				;vynulování Watch Dog

	BTFSC		PD,0		;test tlačítka vypni
	BCF		PD,1		;odpojí napájecí napětí

cek1	DECFSZ		c1,1
	GOTO		cek1
	DECFSZ		c2,1
	GOTO		cek2
	DECFSZ		c3,1
	GOTO		cek3

	RETURN

cekani2
	MOVLW		10
	MOVWF		c2
cek5	MOVLW		100
	MOVWF		c1
cek4	DECFSZ		c1,1
	GOTO		cek4
	DECFSZ		c2,1
	GOTO		cek5
	CLRWDT				;vynulování Watch Dog

	RETURN

cekani3
	MOVLW		60
	MOVWF		c1
cek7	DECFSZ		c1,1
	GOTO		cek7
	CLRWDT				;vynulování Watch Dog
	RETURN

;----------------------------------------

preruseni

	BCF		INTCON,INTF

	BSF		konec_m,0

	RETFIE

;----------------------------------------

	END