; Hodiny s LCD 2x16 znaku
; Verze programu:  1.0
; Obvod: PIC16F877A, X_TAL=4MHz
;*******************************************************************************************************
        list p=16F877A, R=DEC
	include <P16F877A.INC>
	ERRORLEVEL      -302    	; VYNECH HLASENI C.302 V BUILD RESULTS - BANK WARNING
	ERRORLEVEL      -306    	; VYNECH HLASENI C.306 V BUILD RESULTS - Crossing page boundary

RAM		EQU	020h	; prvni adresa pameti RAM v BANCE 0 je 20h  a posledni je 7Fh  - 96 bajtů
                                ; prvni adresa pameti RAM v BANCE 1 je A0h  a posledni je EFh  - 80 bajtů
                                ; prvni adresa pameti RAM v BANCE 2 je 110h a posledni je 16Fh - 96 bajtů
                                ; prvni adresa pameti RAM v BANCE 3 je 190h a posledni je 1EFh - 96 bajtů
;**********************************************************************************************************************
TMP_W		EQU	RAM 	; temp preruseni
TMP_S		EQU	RAM+01	; temp preruseni
TMP_PCL		EQU	RAM+02	; temp preruseni
;**********************************************************************************************************************
TMP0		EQU	RAM+03	; pomocny registr
TMP1		EQU	RAM+04	; pomocny registr
TMP2		EQU	RAM+05	; pomocny registr
TMP3		EQU	RAM+06	; pomocny registr
TMP4		EQU	RAM+07	; pomocny registr
TMP_INT		EQU	RAM+08	; pomocny registr
;**********************************************************************************************************************
INT_CAS0	EQU	0xFF	; HODNOTA PRO POCITANI CASU - VYCHOZI NEMENNA
INT_CAS1	EQU	0x0A	; HODNOTA PRO POCITANI CASU - MENNA HODNOTA - NYNI 33sek.
INT_CAS3	EQU	0x36	; HODNOTA PRO POCITANI CASU - MENNA HODNOTA - NYNI 3min.
INT_CAS5	EQU	0x59	; HODNOTA PRO POCITANI CASU - MENNA HODNOTA - NYNI 5min.
INT_CAS7	EQU	0x24	; HODNOTA PRO POCITANI CASU - MENNA HODNOTA - NYNI 2min.
;**********************************************************************************************************************
REG_HOD         EQU	RAM+17	; adresa, kterou
CAS_MS	        EQU	RAM+18	; adresa, kterou
CAS_S	        EQU	RAM+19	; adresa, kterou 
CAS_M	        EQU	RAM+20	; adresa, kterou  
CAS_H	        EQU	RAM+21	; adresa, kterou 
CAS_D	        EQU	RAM+22	; adresa, kterou 
;**********************************************************************************************************************
;Pomocne registry pro MENU
EE_DATA		EQU	RAM+23	; POMOCNY REG. PRO ZAPIS DAT DO EEPROM NA KONCI MENU
EE_ADR		EQU	RAM+24	; POMOCNY REG. PRO ZAPIS DAT DO EEPROM NA KONCI MENU

;**********************************************************************************************************************
;Pomocne registry pro zobrazeni LCD

TEXT		EQU	RAM+25	; ZOBRAZENI TEXTU NA LCD
ZNAK		EQU	RAM+26	; ZOBRAZENI ZNAKU NA LCD
ADRESA		EQU	RAM+27	; NAHRANI CESTINY, ADRESA PRO MISTO ZNAKU
BCD1		EQU	RAM+28	; JEDNOTKY PREVEDENEHO 8-BIT. CISLA 
BCD10		EQU	RAM+29	; DESITKY PREVEDENEHO 8-BIT. CISLA
BCD100		EQU	RAM+30	; STOVKY PREVEDENEHO 8-BIT. CISLA

ALARM0		EQU	RAM+31	; ALARMOVY REGISTR 0
;**********************************************************************************************************************
        ;DEFINICE ZKRATEK A K NIM PRIRAZENYCH I/O PORTU
        ;---------------------------------------------;
;#define		PORTA,5 ; 
;#define		PORTA,4 ; 
;#define		PORTA,3 ; 
;#define		PORTA,2 ; 
;#define		PORTA,1 ; 
;#define		PORTA,0 ; 

#define		TLS	PORTB,7	; TL.SET 	     - OVLADACI TLACITKO MENU
#define		TLL	PORTB,6	; TL.NAHORU (DOLEVA) - OVLADACI TLACITKO MENU
#define		TLP	PORTB,5	; TL.DOLU  (DOPRAVA) - OVLADACI TLACITKO MENU
;#define		PORTB,4 ; 
;#define		PORTB,3 ; 
;#define		PORTB,2 ;  
;#define		PORTB,1 ; 
;#define		PORTB,0 ; 

#define		E	PORTC,5 ; SIGNAL E  PRO OVLADANI LCD
#define		RS	PORTC,4 ; SIGNAL RS PRO OVLADANI LCD
#define		DB7	PORTC,3 ; DATOVKA DB7 PRO LCD (4-bitova KOMUNIKACE)
#define		DB6	PORTC,2 ; DATOVKA DB6 PRO LCD (4-bitova KOMUNIKACE)
#define		DB5	PORTC,1 ; DATOVKA DB5 PRO LCD (4-bitova KOMUNIKACE)
#define		DB4	PORTC,0 ; DATOVKA DB4 PRO LCD (4-bitova KOMUNIKACE)

#define 	SVITI	PORTD,7	; PODSVETLENI LCD (A TLACITEK)

;#define		PORTE,2 ; 
;#define		PORTE,1 ; 
;#define		PORTE,0 ; 
;**********************************************************************************************************************
	org	0x2007		; adresa konfiguracniho slova PIC16F877A
; 	dw _BODEN_OFF & _CP_OFF & _WRT_OFF &_PWRTE_ON &_WDT_OFF &_HS_OSC & _DEBUG_OFF & _CPD_OFF & _LVP_OFF
	__CONFIG 0x3F31
;******************** Nastavení dat v EEPROM  *************************************************************************
; 00h - 4Fh - bajty pro vlastni a CZ znaky v LCD (8bytu=1znak)

	org	0x2100		; tabulka v pameti EEPROM (256 bajtu)

	de	0x02, 0x04, 0x1E, 0x01, 0x0F, 0x11, 0x0F, 0x00	; znak0  00h 	á          ( 00h )
        de	0x0A, 0x04, 0x0E, 0x11, 0x10, 0x10, 0x11, 0x0E	; znak1  01h	Č          (  .  )
	de	0x0A, 0x04, 0x0E, 0x11, 0x1F, 0x10, 0x0E, 0x00	; znak2  02h	ě          (  .  )
	de	0x02, 0x04, 0x0C, 0x04, 0x04, 0x04, 0x0E, 0x00	; znak3  03h 	í          (  .  )
	de	0x02, 0x04, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E	; znak4  04h	Ú          (  .  )	
        de	0x02, 0x04, 0x11, 0x11, 0x0F, 0x01, 0x0E, 0x00	; znak5  05h	ý          (  .  )
	de	0x0A, 0x04, 0x16, 0x19, 0x10, 0x10, 0x10, 0x00	; znak6  06h	ř          (  .  )
	de	0x00, 0x00, 0x0E, 0x1F, 0x1F, 0x0E, 0x00, 0x00	; znak7  07h   SET         (  .  )
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff	; znak8  rezerva           (  .  )
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff	; znak9  rezerva           ( 4Fh )
;		----------------------------------------------
        de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff	; 			   ( 50h )
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff	;                          (  .  )
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff	;                          (  .  )
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff	;                          (  .  )
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff	;                          (  .  )
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff	;                          ( 7Fh )
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff	;                          (80h-87h)
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff	;                          (88h-8Fh)
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff	;                          (90h-97h)
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff	;                          (98h-9Fh)
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff	;                          (A0h-A7h)
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff	;                          (A8h-AFh)
;		----------------------------------------------
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
        de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff

;********************************************************************************************************************** 
;********************     Reset procesoru     ********************
;STRANKA PROGRAMU 0!!!  OVLADACI PROGRAM   !!!
;PCLATH 4 - 0
;PCLATH 3 - 0
;*********************************************************************************
	org	0x0000
        CLRF    STATUS
        GOTO    HL_INIT         ; JDI NA HLAVNI INICIALIZACI HW A SW
;********************************************************************************************************************** 
;********************     Vektor preruseni     ********************	
	org	0x0004
;*********PROCEDURA ULOZENI HODNOT PO VYVOLANI PRERUSENI***********
	MOVWF	TMP_W		; ULOZI W DO TMP_W
	SWAPF	STATUS,W	; PROHODI 4 NIZSI BITY SE 4mi VYSSIMI BITY REG.STATUS A ULOZI DO W
	MOVWF	TMP_S		; ULOZI W (HODNOTU STATUS)DO TMP_S
	CLRF	STATUS		; NASTAVENI BANKY 0
	MOVF	PCLATH,W	; REG.PCLATH ULOZI DO W
	MOVWF	TMP_PCL		; ULOZI W (SODNOTU PCLATH)DO TMP_PCL
	CLRF	PCLATH		; NASTAVI BANKU PROGRAMU NA 0
;******************************************************************
;********************************************************************************************************************** 
	MOVLW	.22
	MOVWF	TMP_INT
	DECFSZ	TMP_INT,F
	GOTO	$-1
	MOVLW	0x3D	
	MOVWF	TMR0
	BCF	INTCON,T0IF
;MS
        INCF    CAS_MS,W
        SUBLW   .20
        BTFSC    STATUS,Z
        GOTO    $+3
        INCF	CAS_MS,F
        GOTO	END_INT
        CLRF    CAS_MS
        BSF	REG_HOD,0 	;BYLA ZMENA NA SEKUNDACH
;S
        INCF    CAS_S,W
        SUBLW   .60
        BTFSC    STATUS,Z
        GOTO    $+3
        INCF	CAS_S,F
        GOTO	END_INT
        CLRF    CAS_S
        BSF	REG_HOD,1 	;BYLA ZMENA NA MINUTACH
;M
        INCF    CAS_M,W
        SUBLW   .60
        BTFSC    STATUS,Z
        GOTO    $+3
        INCF	CAS_M,F
        GOTO	END_INT
        CLRF    CAS_M
        BSF	REG_HOD,2 	;BYLA ZMENA NA HODINACH
;H
        INCF    CAS_H,W
        SUBLW   .24
        BTFSC    STATUS,Z
        GOTO    $+3
        INCF	CAS_H,F
        GOTO	END_INT
        CLRF    CAS_H
        BSF	REG_HOD,3 	;BYLA ZMENA NA DNECH
;D
        INCF    CAS_D,W
        SUBLW   .8
        BTFSC    STATUS,Z
        GOTO    $+3
        INCF	CAS_D,F
        GOTO	END_INT
        CLRF    CAS_D
        INCF	CAS_D,F
;********************************************************************************************************************** 
;*********PROCEDURA OBNOVENI HODNOT PRED UKONCENIM VYVOLANEHO PRERUSENI***********	
END_INT
	MOVF	TMP_PCL,W	; PRESUN TMP_PCL DO W
	MOVWF	PCLATH		; OBNOVA PCLATH

	SWAPF	TMP_S,W		; PROHODI 4 NIZSI BITY SE 4mi VYSSIMI BITY REG.TMP_S A ULOZI DO W
	MOVWF	STATUS		; OBNOVA STATUS

	SWAPF	TMP_W,F		; PROHODI 4 NIZSI BITY SE 4mi VYSSIMI BITY REG.TMP_W A ULOZI ZPET
	SWAPF	TMP_W,W		; PROHODI 4 NIZSI BITY SE 4mi VYSSIMI BITY REG.TMP_W A ULOZI DO W
;******************************************************************
;********************************************************************************************************************** 	
	RETFIE			; UKONCENI PRERUSENI
;********************************************************************************************************************** 
;********************     Vektor preruseni     ********************	
;********************************************************************************************************************** 
;********************************************************************************************************************** 
HL_INIT	
	CALL	INIT_SW		;NASTAVENI SW - REGISTRY PRACOVNI A OVLADACI, NAST. PRERUSENI
	CALL	INIT_HW		;INICIALIZACE PROCESORU - NASTAVENI I/O
	BSF	PCLATH,4
	BCF	PCLATH,3	;PROGRAMOVA STRANKA 2	
	CALL	INIT_LCD	;INICIALIZACE LCD
	CALL	MUJZNAK		;NAHRAJ MOJE (CZ) ZNAKY Z EEPROM DO LCD
	CALL	T_UVOD		;ZOBRAZ UVODNI TEXT NA DISPLEJI
        CLRF    PCLATH          ;STRANKA 0
        CALL    CEK1s
        CALL    CEK1s
        CALL    CEK1s
;**************************************
;VYCHOZI HODNOTY NA LCD PO ZAPNUTI Ucc A ZOBRAZENI UVODNIHO TEXTU
        MOVLW   .4
        MOVWF   CAS_D
        MOVLW   .12
        MOVWF   CAS_H
        MOVLW   .34
        MOVWF   CAS_M
        MOVLW   .56
        MOVWF   CAS_S
;**************************************
	BSF	PCLATH,4	;PROGRAMOVA STRANKA 2             
        MOVF    CAS_H,W         ;ZOBRAZ HODINY
        CALL    PREVODBCD
        CALL    HOD_NA_LCD 
   
        CALL    DVOJTECKA1      ;ZOBRAZ NA LCD DVOJTECKU
     
        MOVF    CAS_M,W         ;ZOBRAZ MINUTY
        CALL    PREVODBCD
        CALL    MIN_NA_LCD
                
        CALL    DVOJTECKA2      ;ZOBRAZ NA LCD DVOJTECKU
 
        MOVF    CAS_S,W         ;ZOBRAZ SEKUNDY
        CALL    PREVODBCD
        CALL    SEK_NA_LCD
        
        MOVF    CAS_D,W         ;ZOBRAZ DEN
        CALL    DEN_NA_LCD
        CLRF    PCLATH          ;STRANKA 0
;********************************************************************************************************************** 
;********************************************************************************************************************** 
;*****************HLAVNI*CAST****************************************************************************************** 
HL_PROG
;********************************************************************************************************************** 
        BTFSS   TLS             ;OTESTUJ TL.SET
        GOTO    $-1             ;NENI ZMACKNUTE
                                ;JE ZMACKNUTE
        MOVLW   .01
        MOVWF   CAS_D
        CLRF    CAS_MS
        CLRF    CAS_H
        CLRF    CAS_M
        CLRF    CAS_S
        CALL	ZOBRAZ_S
        CALL	ZOBRAZ_M
        CALL	ZOBRAZ_H
        CALL	ZOBRAZ_D 
        BSF     PCLATH,3        ;STRANKA1
        CALL    BRZ_ms          ;ZAKMITY TLACITEK 
        CLRF    PCLATH          ;STRANKA0
;*********************************************
;NASTAVENI DNU        
	BSF	PCLATH,4	;PROGRAMOVA STRANKA 2             
        MOVF    CAS_D,W         ;ZOBRAZ DEN
        CALL    DEN_NA_LCD

	BCF	PCLATH,4	;PROGRAMOVA STRANKA 	
        BSF     PCLATH,3        ;PROGRAMOVA STRANKA1
        CALL    BRZ_ms          ;ZAKMITY TLACITEK 
        CLRF    PCLATH          ;STRANKA0

        BTFSS   TLL             ;OTESTUJ TL.
        GOTO    $+5             ;NENI ZMACKNUTE     
        DECF    CAS_D,W         ;ODECTI 1 OD REG.A VYSLEDEK ULOZ DO W
        BTFSS   STATUS,Z        ;TEST NULOVEHO VYSLEDKU
        DECF    CAS_D,F         ;ODECTI 1 OD REG.A VYSLEDEK ULOZ DO F
        GOTO    $-0x0C		;AKTUALIZUJ UDAJ NA LCD
                
        BTFSS   TLP             ;OTESTUJ TL.
        GOTO    $+6             ;NENI ZMACKNUTE        
        INCF    CAS_D,W         ;PRICTI 1 K REG. A VYSLEDEK ULOZ DO W
        SUBLW   .8
        BTFSS   STATUS,Z        ;TEST NULOVEHO VYSLEDKU
        INCF    CAS_D,F         ;PRICTI 1 K REG. A VYSLEDEK ULOZ DO F
        GOTO    $-0x13		;AKTUALIZUJ UDAJ NA LCD
        
        BTFSS   TLS             ;OTESTUJ TL.
        GOTO    $-0x0E          ;NENI ZMACKNUTE
;NASTAVENI HODIN       
	BSF	PCLATH,4	;PROGRAMOVA STRANKA 2             
        MOVF    CAS_H,W         ;ZOBRAZ HODINY
        CALL    PREVODBCD
        CALL    HOD_NA_LCD

	BCF	PCLATH,4	;PROGRAMOVA STRANKA 	
        BSF     PCLATH,3        ;PROGRAMOVA STRANKA1
        CALL    BRZ_ms          ;ZAKMITY TLACITEK 
        CLRF    PCLATH          ;STRANKA0

        BTFSS   TLL             ;OTESTUJ TL.
        GOTO    $+5             ;NENI ZMACKNUTE     
        MOVF    CAS_H,F         ;PROTAHNI REG. PRES ALU (OTESTOVANI NULY V REG.)
        BTFSS   STATUS,Z        ;TEST NULOVEHO VYSLEDKU
        DECF    CAS_H,F         ;ODECTI 1 OD REG.A VYSLEDEK ULOZ DO F
        GOTO    $-0x0D		;AKTUALIZUJ UDAJ NA LCD
                
        BTFSS   TLP             ;OTESTUJ TL.
        GOTO    $+6             ;NENI ZMACKNUTE        
        INCF    CAS_H,W         ;PRICTI 1 K REG. A VYSLEDEK ULOZ DO W
        SUBLW   .24
        BTFSS   STATUS,Z        ;TEST NULOVEHO VYSLEDKU
        INCF    CAS_H,F         ;PRICTI 1 K REG. A VYSLEDEK ULOZ DO F
        GOTO    $-0x14		;AKTUALIZUJ UDAJ NA LCD
                
        BTFSS   TLS             ;OTESTUJ TL.
        GOTO    $-0x0E          ;NENI ZMACKNUTE        
;NASTAVENI MINUT      
	BSF	PCLATH,4	;PROGRAMOVA STRANKA 2             
        MOVF    CAS_M,W         ;ZOBRAZ DEN
        CALL    PREVODBCD
        CALL    MIN_NA_LCD

	BCF	PCLATH,4	;PROGRAMOVA STRANKA 	
        BSF     PCLATH,3        ;PROGRAMOVA STRANKA1
        CALL    BRZ_ms          ;ZAKMITY TLACITEK 
        CLRF    PCLATH          ;STRANKA0

        BTFSS   TLL             ;OTESTUJ TL.
        GOTO    $+5             ;NENI ZMACKNUTE     
        MOVF    CAS_M,F         ;PROTAHNI REG. PRES ALU (OTESTOVANI NULY V REG.)
        BTFSS   STATUS,Z        ;TEST NULOVEHO VYSLEDKU
        DECF    CAS_M,F         ;ODECTI 1 OD REG.A VYSLEDEK ULOZ DO F
        GOTO    $-0x0D		;AKTUALIZUJ UDAJ NA LCD
                
        BTFSS   TLP             ;OTESTUJ TL.
        GOTO    $+6             ;NENI ZMACKNUTE        
        INCF    CAS_M,W         ;PRICTI 1 K REG. A VYSLEDEK ULOZ DO W
        SUBLW   .60
        BTFSS   STATUS,Z        ;TEST NULOVEHO VYSLEDKU
        INCF    CAS_M,F         ;PRICTI 1 K REG. A VYSLEDEK ULOZ DO F
        GOTO    $-0x14		;AKTUALIZUJ UDAJ NA LCD
                
        BTFSS   TLS             ;OTESTUJ TL.
        GOTO    $-0x0E          ;NENI ZMACKNUTE            
;NASTAVENI SEKUND      
	BSF	PCLATH,4	;PROGRAMOVA STRANKA 2             
        MOVF    CAS_S,W         ;ZOBRAZ DEN
        CALL    PREVODBCD
        CALL    SEK_NA_LCD

	BCF	PCLATH,4	;PROGRAMOVA STRANKA 	
        BSF     PCLATH,3        ;PROGRAMOVA STRANKA1
        CALL    BRZ_ms          ;ZAKMITY TLACITEK 
        CLRF    PCLATH          ;STRANKA0

        BTFSS   TLL             ;OTESTUJ TL.
        GOTO    $+5             ;NENI ZMACKNUTE     
        MOVF    CAS_S,F         ;PROTAHNI REG. PRES ALU (OTESTOVANI NULY V REG.)
        BTFSS   STATUS,Z        ;TEST NULOVEHO VYSLEDKU
        DECF    CAS_S,F         ;ODECTI 1 OD REG.A VYSLEDEK ULOZ DO F
        GOTO    $-0x0D		;AKTUALIZUJ UDAJ NA LCD
               
        BTFSS   TLP             ;OTESTUJ TL.
        GOTO    $+6             ;NENI ZMACKNUTE        
        INCF    CAS_S,W         ;PRICTI 1 K REG. A VYSLEDEK ULOZ DO W
        SUBLW   .60
        BTFSS   STATUS,Z        ;TEST NULOVEHO VYSLEDKU
        INCF    CAS_S,F         ;PRICTI 1 K REG. A VYSLEDEK ULOZ DO F
        GOTO    $-0x14		;AKTUALIZUJ UDAJ NA LCD
                
        BTFSS   TLS             ;OTESTUJ TL.
        GOTO    $-0x0E          ;NENI ZMACKNUTE
;********************************************************************************************************************** 
	MOVLW	0x3D
	MOVWF	TMR0
	MOVLW	0xA0
	MOVWF	INTCON
	
HODINY
	MOVLW	0XFF
	MOVWF	REG_HOD
	BTFSC	REG_HOD,0	;NASTALA ZMENA CASU, KTERA MA AKTUALIZOVAT UDAJ NA LCD?
	CALL	ZOBRAZ_S
	BTFSC	REG_HOD,1	;NASTALA ZMENA CASU, KTERA MA AKTUALIZOVAT UDAJ NA LCD?
	CALL	ZOBRAZ_M
	BTFSC	REG_HOD,2	;NASTALA ZMENA CASU, KTERA MA AKTUALIZOVAT UDAJ NA LCD?
	CALL	ZOBRAZ_H
	BTFSC	REG_HOD,3	;NASTALA ZMENA CASU, KTERA MA AKTUALIZOVAT UDAJ NA LCD?
	CALL	ZOBRAZ_D
	GOTO	$-0x08
;*******************	
ZOBRAZ_S
	CLRF	PCLATH
        BSF	PCLATH,4	;PROGRAMOVA STRANKA 2	
        MOVF    CAS_S,W         ;ZOBRAZ SEKUNDY
        CALL    PREVODBCD
        CALL    SEK_NA_LCD
	CLRF	PCLATH          ;STRANKA 0
	BCF	REG_HOD,0	;SMAZ INFORMACI O TOM, ZE NASTALA ZMENA CASU, PROTOZE JIZ BYLA ZAPSANA NA LCD
        RETURN
;*******************        
ZOBRAZ_M        
	CLRF	PCLATH
        BSF	PCLATH,4	;PROGRAMOVA STRANKA 2
        MOVF    CAS_M,W         ;ZOBRAZ MINUTY
        CALL    PREVODBCD
        CALL    MIN_NA_LCD
	CLRF	PCLATH          ;STRANKA 0
	BCF	REG_HOD,1	;SMAZ INFORMACI O TOM, ZE NASTALA ZMENA CASU, PROTOZE JIZ BYLA ZAPSANA NA LCD
        RETURN
;*******************         
ZOBRAZ_H        
        CLRF	PCLATH
        BSF	PCLATH,4	;PROGRAMOVA STRANKA 2
        MOVF    CAS_H,W         ;ZOBRAZ HODINY
        CALL    PREVODBCD
        CALL    HOD_NA_LCD 
	CLRF	PCLATH          ;STRANKA 0
	BCF	REG_HOD,2	;SMAZ INFORMACI O TOM, ZE NASTALA ZMENA CASU, PROTOZE JIZ BYLA ZAPSANA NA LCD
	RETURN   
;*******************               
ZOBRAZ_D
        CLRF	PCLATH
        BSF	PCLATH,4	;PROGRAMOVA STRANKA 2
        MOVF    CAS_D,W         ;ZOBRAZ DEN
        CALL    DEN_NA_LCD
        CLRF    PCLATH          ;STRANKA 0
        BCF	REG_HOD,3	;SMAZ INFORMACI O TOM, ZE NASTALA ZMENA CASU, PROTOZE JIZ BYLA ZAPSANA NA LCD
	RETURN
;********************************************************************************************************************** 
;********************************************************************************************************************** 
;********************KONEC*HLAVNI*CASTI******************************************************************************** 
;********************************************************************************************************************** 
;********************************************************************************************************************** 
CTENIEP		;NACTENI DAT Z EEPROM DO PRO PRAC. REGISTRU
	        ;ADRESA, ODKUD SE DATA MAJI CIST, MUSI BYT V W
                ;NACTENA DATA Z EEPROM JSOU V Wreg a reg.EE_DATA.
        BCF	STATUS,RP0	;priprava banky
        BSF	STATUS,RP1	;prepnuti do banky 2
        MOVWF	EEADR		;nastav adresu pro cteni z EEPROM
        BSF	STATUS,RP0	;prepnuti do banky 3 
     	BSF	EECON1,RD	;odstartuj cteni z EEPROM
        BCF	STATUS,RP0      ;prepnuti do banky 2
        MOVF    EEDATA,W	;presun data z EEDATA do W
        BCF	STATUS,RP0	;priprava banky
        BCF	STATUS,RP1	;banka 0
        MOVWF   EE_DATA         ;PRESUN NACTENA DATA Z EEPROM (EEDATA) DO REG. EE_DATA
        RETURN
;********************************************************************************************************************** 
;********************************************************************************************************************** 
INIT_SW
;.......................................................................
	BSF	STATUS,RP0	;BANKA1
;.......................................................................
	MOVLW	0X07		;00000111
	MOVWF	CMCON           ;NASTAV REG. CMCON NA 07h
	MOVWF	ADCON1          ;NASTAV REG. ADCON1 NA 07h
	CLRF	CVRCON          ;VYNULUJ REG. CVRCON
	MOVLW   0X87            ;10000111
        MOVWF   OPTION_REG      ;NASTAV OPTION_REG NA HODNOTU Z W
	MOVLW   0X20            ;00100000 VSECHNA PRERUSENI ZAKAZANA
        MOVWF   INTCON          ;NASTAV INTCON NA HODNOTU Z W
        BCF	STATUS,RP0	;BANKA0
	RETURN
;********************************************************************************************************************** 
INIT_HW	
	BSF	STATUS,RP0	;BANKA1
	MOVLW	0X00		; xx000000
	MOVWF	TRISA		;PREDNASTAVENI PORTU A - RA0,1 VSTUPY; RA2-5 VYSTUPY

	MOVLW	0XE0		; 11100000
	MOVWF	TRISB		;PREDNASTAVENI PORTU B - RB0,5,6,7 VSTUPY , RB1,2,3,4 VYSTUPY

	MOVLW	0X00		; 00000000
	MOVWF	TRISC		;PREDNASTAVENI PORTU C - RC0-5 VYSTUPY, RC6-7 VSTUPY

	MOVLW	0X00		; 00000000
	MOVWF	TRISD		;PREDNASTAVENI PORTU D - RD0-6 VSTUPY, RD7 - VYSTUP

	MOVLW	0X10		; 0001x000
	MOVWF	TRISE		;PREDNASTAVENI PORTU E - RE0-2 VYSTUPY
;.......................................................................
	BCF	STATUS,RP0	;BANKA0
	CLRF	PORTA
	CLRF	PORTB
	CLRF	PORTC
	CLRF	PORTD
	CLRF	PORTE
	RETURN
;********************************************************************************************************************** 
;********************************************************************************************************************** 
CEK1s   MOVLW	0xAC		; cas = 1s
	MOVWF	TMP0
	MOVLW	0x13
	MOVWF	TMP1
	MOVLW	0x06
	MOVWF	TMP2
SMYCKA1
	DECFSZ	TMP0,F		
	GOTO	SMYCKA1
	DECFSZ	TMP1,F		
	GOTO	SMYCKA1
	DECFSZ	TMP2,F		
	GOTO	SMYCKA1
;.............................................................................................
ZAKMITY2		;OSETRENI TLACITEK PROTI ZAKMITANI KONTAKTU
	MOVLW   .100	;POCET SKENOVANI PORTU PROTI ZAKMITUM
	MOVWF	TMP1

	MOVF	PORTB,W	;PRVOTNI NACTENI PORTU B PRO SCAN TLACITEK
	IORLW	0x1F	;MASKOVANI PINU, KTERE NEJSOU VYUZITY JAKO TLACITKA
	MOVWF	TMP0
;.............................................................................................
ZAKMITY3
	MOVF	PORTB,W
	IORLW	0x1F	;MASKOVANI PINU, KTERE NEJSOU VYUZITY JAKO TLACITKA
	XORWF	TMP0,W	;PROVED OPERACI A VYSLEDEK ULOZ DO W
	BTFSS	STATUS,Z;TEST SHODNOSTI NASKENOVANI PORTU
	GOTO	ZAKMITY2;NASKENOVANI NEBYLO SHODNE 
        DECFSZ	TMP1,F	;ODECTI JEDNA OD POCITADLA TESTOVANI ODSKOKU
	GOTO	ZAKMITY3
	RETURN		;NAVRAT
;********************************************************************************************************************** 
;********************************************************************************************************************** 
;STRANKA PROGRAMU 1!!!  MENU   !!!
;PCLATH 4 - 0
;PCLATH 3 - 1
;*********************************************************************************
	org	0x0800
;*******************************************************************************************
        nop
;*********************************************************************************
;*********************************************************************************
;*********************************************************************************
;KONEC MENU
;*********************************************************************************
;*********************************************************************************
;*********************************************************************************
BRZ_ms	; brzda zkusebne nastavena na 275ms (Q=4MHz)
	BTFSC	TLS
	GOTO	BRZ_ms
	MOVLW	0x1F	;nastav W REGISTR na hodnotu
	movwf	TMP0	;presun obsah W do pameti
	movlw	0x66	;nastav W REGISTR na hodnotu
	movwf	TMP1	;presun obsah W do pameti
	movlw	0x02  	;nastav W REGISTR na hodnotu
	movwf	TMP2	;presun obsah W do pameti

        decfsz	TMP0,F	;odecti 1 od cisla v pameti
	goto	$-1		;pokud je vysledek 0,toto preskoc, jinak se vrat na BRZDA1
	decfsz	TMP1,F	;odecti 1 od cisla v pameti
	goto	$-3		;pokud je vysledek 0,toto preskoc, jinak se vrat na BRZDA1
	decfsz	TMP2,F	;odecti 1 od cisla v pameti
	goto	$-5
;.............................................................................................
ZAKMITY
	MOVLW   .100	;POCET SKENOVANI PORTU PROTI ZAKMITUM
	MOVWF	TMP1

	MOVF	PORTB,W	;PRVOTNI NACTENI PORTU B PRO SCAN TLACITEK
	IORLW	0x1F	;MASKOVANI PINU, KTERE NEJSOU VYUZITY JAKO TLACITKA
	MOVWF	TMP0
;.............................................................................................
ZAKMITY1
	MOVF	PORTB,W
	IORLW	0x1F	;MASKOVANI PINU, KTERE NEJSOU VYUZITY JAKO TLACITKA
	XORWF	TMP0,W	;PROVED OPERACI A VYSLEDEK ULOZ DO W
	BTFSS	STATUS,Z;TEST SHODNOSTI NASKENOVANI PORTU
	GOTO	ZAKMITY	;NASKENOVANI NEBYLO SHODNE 
        DECFSZ	TMP1,F	;ODECTI JEDNA OD POCITADLA TESTOVANI ODSKOKU
	GOTO	ZAKMITY1
	RETURN		;NAVRAT
;*********************************************************************************
;*********************************************************************************
;STRANKA PROGRAMU 2!!!  PRACE S LCD   !!!
;PCLATH 4 - 1
;PCLATH 3 - 0
;*********************************************************************************
	org	0x1000
;*********************************************************************************
LINE1_HOD
	movlw	0x80		; 1. radek, 1. znak displeje
	goto	WR_CMD
;-------------------------------
LINE1_DV1
	movlw	0x82		; 1. radek, 3. znak displeje
	goto	WR_CMD
;-------------------------------
LINE1_MIN
	movlw	0x83		; 1. radek, 4. znak displeje
	goto	WR_CMD
;-------------------------------
LINE1_DV2
	movlw	0x85		; 1. radek, 5. znak displeje
	goto	WR_CMD
;-------------------------------
LINE1_SEK
	movlw	0x86		; 1. radek, 7. znak displeje
	goto	WR_CMD
;-------------------------------
LINE2	call	C2_LCD		; Vymaze 2.radek a nastavi 2. radek, 1. znak displeje
	movlw	0x08
	movwf	TMP4
	movlw	0x20		
	call	WR_DATA
	decfsz	TMP4,F
	goto	$-3
	movlw	0xC0		
	goto	WR_CMD
;-------------------------------
C2_LCD	movlw	0xC0		; 2. radek, 1. znak displeje
	goto	WR_CMD
;-------------------------------
C_LCD	movlw	0x01		; smaz LCD a vrat se na pozici 0
;-------------------------------
WR_CMD	bcf	RS		; RS=0, zápis instrukcí do LCD
	goto	WR_LCD
;-------------------------------
WR_DATA	bsf	RS		; RS=1, zápis dat do LCD
;-------------------------------
WR_LCD	movwf	ZNAK		; přepsat W do ZNAK	!!! data v registru W !!!

	bsf	E		; nastav Enable
	movf	PORTC,W		; stav PORTUC do W
	iorlw	0x0F		; zamaskuje dolni bity portu
	movwf	TMP1
;-------------------------------
	swapf	ZNAK,W
	iorlw	0xF0		; zamaskuje horní bity znaku

	andwf	TMP1,W		; pošle vyšší 4 bity
	movwf	PORTC		; !!! data zapsána na PORTC 0-3 !!!
	bcf	E		; zapiše do LCD
;-------------------------------
	bsf	E		; nastav Enable
	movf	ZNAK,W
	iorlw	0xF0		; zamaskuje horní bity znaku

	andwf	TMP1,W		; pošle nižší 4 bity
	movwf	PORTC		; !!! data zapsána na PORTC 0-3 !!!
	bcf	E		; zapiše do LCD
;-------------------------------
	btfsc	RS
	goto	CEK40		; RS=1, zápis dat - čekej 40 us
;       ------------------------
	movlw	0x04		; instrukce 1, 2 a 3 - čekej 1,64 ms
	subwf	ZNAK,W
	btfss	STATUS,C
	goto	CEK1m6		; C=0, instrukce CLEAR - čekej 1,64 ms
	goto	CEK40		; C=1, zápis dat - čekej 40 us
;*************************************************************
INIT_LCD
	call	CEK15m		; 4-bitová inicializace displeje LCD
	bcf	RS		; RS=0, zápis instrukcí do LCD        
;       ------------------------
	movlw	03h
	movwf	PORTC
	bsf	E
	bcf	E		; zapiše do LCD
	call	CEK15m		; !! pro zjednoduseni dano 15ms !!
;       ------------------------
	bsf	E
	bcf	E		; zapiše do LCD
	call	CEK100		; čekej 100 us
;       ------------------------
	bsf	E
	bcf	E		; zapiše do LCD
	call	CEK1m6		; čekej 1,6 ms
;-------------------------------
	movlw	02h
	movwf	PORTC
	bsf	E
        bcf	E		; zapiše do LCD
	call	CEK1m6		; čekej 1,6 ms
;-------------------------------
	movlw	28h		; 00101000 - počet bitů, 2 řádky, 5x7 znak - FUNCTION SET (nazev i Instrukcnim souboru)
	call	WR_CMD
	movlw	0Ch		; 00001100 - display ON, kurzor OFF, blikání OFF - DISPLEJ ON/OFF (nazev i Instrukcnim souboru)
	call	WR_CMD
	movlw	01h		; 00000001 - smaže displej - DISPLEJ CLEAR (nazev i Instrukcnim souboru)
	call	WR_CMD
	movlw	06h		; 00000110 - směr kurzoru, posunu displeje - ENTRY MODE SET (nazev i Instrukcnim souboru)
	call	WR_CMD
	return
;*************************************************************
MUJZNAK	        ;NACTENI VLASTNICH ZNAKU Z EEPROM DO LCD
	bcf	STATUS,RP1	; banka 0
	movlw	0x00		; adresa prvního CZ znaku v EEPROM
	movwf	EE_ADR
	movlw	0x40		; adresa prvního znaku v LCD displeji
	movwf	ADRESA		; na adrese 40h se zacina nahravat prvni byt 1.vlastniho znaku
;       ------------------------
	movf	ADRESA,W
	call	WR_CMD
	movf	EE_ADR,W
        BCF	PCLATH,3
	BCF	PCLATH,4
	call	CTENIEP
	BCF	PCLATH,4
        BSF	PCLATH,4
	call	WR_DATA
	incf	EE_ADR,F
	incf	ADRESA,F
	movf	ADRESA,W
	sublw	0x80		; adresa posledního bytu - posledniho vlastniho znaku v LCD displeji
	btfss	STATUS,Z
	goto	$-0x0C
	return
;********************************************************************************************************************** 
;********************************************************************************************************************** 
; pro Q=4MHz
;-------------------------------
CEK2s   movlw	0x5F		; cas = 2s
	movwf	TMP0
	movlw	0x26
	movwf	TMP1
	movlw	0x0B
	movwf	TMP2
	goto	SMYCKA
;-------------------------------
CEK600m	movlw	0x32		; cas = 600 ms
	movwf	TMP0
	movlw	0x0C
	movwf	TMP1
	movlw	0x04
	movwf	TMP2
	goto	SMYCKA
;-------------------------------
CEK100m	movlw	0xDB		; cas = 100 ms
	movwf	TMP0
	movlw	0x82
	movwf	TMP1
	movlw	0x01
	movwf	TMP2
	goto	SMYCKA
;-------------------------------
CEK15m	movlw	0x76		; cas = 15 ms
	movwf	TMP0
	movlw	0x14
	movwf	TMP1
	movlw	0x01
	movwf	TMP2
	goto	SMYCKA
;-------------------------------	
CEK4m	movlw	0x2F		; cas = 4 ms
	movwf	TMP0
	movlw	0x06
	movwf	TMP1
	movlw	0x01
	movwf	TMP2
	goto	SMYCKA
;-------------------------------
CEK1m6	movlw	0x0F		; cas = 1,601 ms
	movwf	TMP0
	movlw	0x03
	movwf	TMP1
	movlw	0x01
	movwf	TMP2
	goto	SMYCKA
;-------------------------------
CEK100	movlw	0x1D		; cas = 100 mikrosekund
	movwf	TMP0
	movlw	0x01
	movwf	TMP1
	movlw	0x01
	movwf	TMP2
	goto	SMYCKA
;-------------------------------
CEK40	movlw	0x09		; cas = 40 mikrosekund
	movwf	TMP0
	movlw	0x01
	movwf	TMP1
	movlw	0x01
	movwf	TMP2
	goto	SMYCKA
;-------------------------------
SMYCKA	decfsz	TMP0,F		
	goto	SMYCKA
	decfsz	TMP1,F		
	goto	SMYCKA
	decfsz	TMP2,F		
	goto	SMYCKA
	retlw	00h
;********************************************************************************************************************** 
;********************************************************************************************************************** 
;TEXTY      
T_UVOD  
	call	C_LCD		; smaze LCD displej a nastavi zapis na 1. radek a 1. znak
	movlw	' '	;1
	call	WR_DATA
	movlw	'H'	;2
	call	WR_DATA
	movlw	'o'	;3
	call	WR_DATA
	movlw	'd'	;4
	call	WR_DATA
	movlw	'i'	;5
	call	WR_DATA
	movlw	'n'	;6
	call	WR_DATA
	movlw	'y'	;7
	call	WR_DATA
;	movlw	' '	;8
;	call	WR_DATA
;       ---------------------------------------------------
	call	LINE2	; nastavi zapis na 2 radek a 1 znak

	movlw	' '	;1
	call	WR_DATA
	movlw	'L'	;2
	call	WR_DATA
	movlw	'C'	;3
	call	WR_DATA
	movlw	'D'	;4
	call	WR_DATA
	movlw	' '	;5
	call	WR_DATA
	movlw	'1'	;6
	call	WR_DATA
	movlw	'.'	;7
	call	WR_DATA
	movlw	'0'	;8
	call	WR_DATA	

	RETURN
;       ---------------------------------------------------       
PONDELI
	call	LINE2	; nastavi zapis na 2. radek a 1. znak

	movlw	'P'	;1
	call	WR_DATA
	movlw	'o'	;2
	call	WR_DATA
	movlw	'n'	;3
	call	WR_DATA
	movlw	'd'	;4
	call	WR_DATA
	movlw	0x02	;5  ě
	call	WR_DATA
	movlw	'l'	;6
	call	WR_DATA
	movlw	0x03	;7  í
	call	WR_DATA

	RETURN
;       ---------------------------------------------------       
UTERY
	call	LINE2	; nastavi zapis na 2. radek a 1. znak

	movlw	0x04	;1  Ú
	call	WR_DATA
	movlw	't'	;2
	call	WR_DATA
	movlw	'e'	;3
	call	WR_DATA
	movlw	'r'	;4
	call	WR_DATA
	movlw	0x05	;5  ý
	call	WR_DATA

	RETURN
;       ---------------------------------------------------       
STREDA
	call	LINE2	; nastavi zapis na 2. radek a 1. znak

	movlw	'S'	;1
	call	WR_DATA
	movlw	't'	;2
	call	WR_DATA
	movlw	0x06	;3  ř
	call	WR_DATA
	movlw	'e'	;4
	call	WR_DATA
	movlw	'd'	;5
	call	WR_DATA
	movlw	'a'	;6
	call	WR_DATA

	RETURN
;       ---------------------------------------------------       
CTVRTEK
	call	LINE2	; nastavi zapis na 2. radek a 1. znak

	movlw	0x01	;1  Č
 	call	WR_DATA
	movlw	't'	;2
	call	WR_DATA
	movlw	'v'	;3
	call	WR_DATA
	movlw	'r'	;4
	call	WR_DATA
	movlw	't'	;5
	call	WR_DATA
	movlw	'e'	;6
	call	WR_DATA
	movlw	'k'	;7
	call	WR_DATA

	RETURN
;       ---------------------------------------------------       
PATEK
	call	LINE2	; nastavi zapis na 2. radek a 1. znak

	movlw	'P'	;1
	call	WR_DATA
	movlw	0x00	;2 á
	call	WR_DATA
	movlw	't'	;3
	call	WR_DATA
	movlw	'e'	;4
	call	WR_DATA
	movlw	'k'	;5
	call	WR_DATA

	RETURN
;       ---------------------------------------------------       
SOBOTA
	call	LINE2	; nastavi zapis na 2. radek a 1. znak

	movlw	'S'	;1
	call	WR_DATA
	movlw	'o'	;2
	call	WR_DATA
	movlw	'b'	;3
	call	WR_DATA
	movlw	'o'	;4
	call	WR_DATA
	movlw	't'	;5
	call	WR_DATA
	movlw	'a'	;6
	call	WR_DATA

	RETURN
;       ---------------------------------------------------       
NEDELE	
	call	LINE2	; nastavi zapis na 2. radek a 1. znak

	movlw	'N'	;1
	call	WR_DATA
	movlw	'e'	;2
	call	WR_DATA
	movlw	'd'	;3
	call	WR_DATA
	movlw	0x02	;4 ě
	call	WR_DATA
	movlw	'l'	;5
	call	WR_DATA
	movlw	'e'	;6
	call	WR_DATA

	RETURN
;       ---------------------------------------------------       
HOD_NA_LCD	
	call	LINE1_HOD	; nastavi zapis na 1. radek a 1. znak

	MOVF    BCD10,W	;1
	BTFSC   STATUS,Z
	MOVLW   0xF0            ;0xF0+0x30=PRETECENI A 0x20, COZ JE PRAZDNY ZNAK
	ADDLW   0x30
	call	WR_DATA ;1
	
	MOVF    BCD1,W	;2      ;ZDE SE MUSI ZOBRAZIT I ZNAK 0
	ADDLW   0x30
	call	WR_DATA ;2

	RETURN
;       ---------------------------------------------------       
MIN_NA_LCD	
	call	LINE1_MIN	; nastavi zapis na 1. radek a 4. znak

	MOVF    BCD10,W	;1
	ADDLW   0x30
	call	WR_DATA ;1
	
	MOVF    BCD1,W	;2      
	ADDLW   0x30
	call	WR_DATA ;2

	RETURN
	;       ---------------------------------------------------       
SEK_NA_LCD	
	call	LINE1_SEK	; nastavi zapis na 1. radek a 7. znak

	MOVF    BCD10,W	;1
	ADDLW   0x30
	call	WR_DATA ;1
	
	MOVF    BCD1,W	;2      
	ADDLW   0x30
	call	WR_DATA ;2

	RETURN
	;       ---------------------------------------------------       
DEN_NA_LCD	
        MOVWF   TMP0            ;W do TMP0
        DECF    TMP0,F          ;TMP0-1
        BTFSC   STATUS,Z        ;TMP0=0?
        GOTO    PONDELI         ;ANO
        DECF    TMP0,F          ;NE, ZNOVU TMP0-1
        BTFSC   STATUS,Z        ;TMP0=0?
        GOTO    UTERY           ;ANO
        DECF    TMP0,F          ;NE, ZNOVU TMP0-1
        BTFSC   STATUS,Z        ;TMP0=0?
        GOTO    STREDA          ;ANO
        DECF    TMP0,F          ;NE, ZNOVU TMP0-1
        BTFSC   STATUS,Z        ;TMP0=0?
        GOTO    CTVRTEK         ;ANO
        DECF    TMP0,F          ;NE, ZNOVU TMP0-1
        BTFSC   STATUS,Z        ;TMP0=0?
        GOTO    PATEK           ;ANO
        DECF    TMP0,F          ;NE, ZNOVU TMP0-1
        BTFSC   STATUS,Z        ;TMP0=0?
        GOTO    SOBOTA          ;ANO
        GOTO    NEDELE          ;NE, JE TO TEDY NEDELE
;********************************************************************************************************************** 
DVOJTECKA1
        CALL    LINE1_DV1
        MOVLW	':'	
	CALL	WR_DATA
	RETURN
;********************************************************************************************************************** 
DVOJTECKA2
        CALL    LINE1_DV2
        MOVLW	':'	
	CALL	WR_DATA
	RETURN
;********************************************************************************************************************** 
;********************************************************************************************************************** 
PREVODBCD	;PREVADENA HODNOTA MUSI BYT VE W REG.	
	CLRF	BCD1
	CLRF	BCD10
	CLRF	BCD100
;STOVKY			
	movwf	TMP0		;NACTI HODNOTU Z W (PREVADENE CISLO) DO TMP0
        clrf    TMP1		;VYMAZ TMP1
	movlw	.100		;100dec do W reg.
STOVKY	incf	TMP1,F		;PRICTI 1 V reg. TMP1
	subwf	TMP0,F		;ODECTI TMP0-W A ULOZ DO TMP0
	btfsc	STATUS,C	;TEST, ZDA ODECET BYL PRES 0 
	goto 	STOVKY		;VRAT SE NA STOVKY
	decf	TMP1,W		;PRICTI JEDNA DO TMP1 A VYSLEDEK ULOZ DO W
	movwf	BCD100		;VYSLEDEK OPERACE (vWreg.) PRESUN DO reg.BCD100
;DESITKY
	movlw	.100		;100dec do W reg.
	addwf	TMP0,F
        clrf    TMP1
	movlw	.10		;10dec do W reg.
DESITKY	
	incf	TMP1,F
	subwf	TMP0,F
	btfsc	STATUS,C
	goto 	DESITKY
	decf	TMP1,W
	movwf	BCD10		;VYSLEDEK OPERACE (vWreg.) PRESUN DO reg.BCD10
;JEDNOTKY	
	movlw	.10		;10dec do W reg.
	addwf	TMP0,F
	clrf    TMP1
	movlw	.1		;1dec do W reg.
JEDNOTKY
	incf	TMP1,F
	subwf	TMP0,F
	btfsc	STATUS,C
	goto 	JEDNOTKY
	decf	TMP1,W
	movwf	BCD1		;VYSLEDEK OPERACE (ve Wreg.) PRESUN DO reg.BCD1
	RETURN
;Vysledek operace je v registrech BCD100, BCD10, BCD1
;********************************************************************************************************************** 
;********************************************************************************************************************** 
;STRANKA PROGRAMU 3!!!  PRACE S DS18B20   !!!
;PCLATH 4 - 1
;PCLATH 3 - 1
;********************************************************************************************************************** 
	org	0x1800
;********************************************************************************************************************** 
;********************************************************************************************************************** 

	END
