; TREBA KRYSTAL NA 20MHz !!!!!
; POKUD JE KRYSTAL MENSI JAK 4MHZ, JE TREBA OSC _XT_OSC

	LIST P=16F877A, R=DEC,     ; list directive to define processor 
	#INCLUDE<P16F877A.INC>  		; processor specific variable definitions

	__config _BODEN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC & _DEBUG_ON & _CPD_OFF & _LVP_OFF
	errorlevel 1, -306
; Ports:
;
; B0 - B3 = I/0
; B4 = RS
; B5 = RW
; B6 = E

; Special Function Registers ==============================================
	cblock	0x20
	RBF
	RBF1
	NUM
	NUM1
	TMP
	TM1
	TM2
	POM
	ADRTX
	PIP
	ZK1
	ZK2
	TL
	TL_OLD1
	TL_OLD2
	TL_OLD3
	JDI
	JDI_LAB
	JDI_RED
	JDI_SPE 
	JDI_ZAJ
	PROSTOJ1
	PROSTOJ2
	JDI_pr

	W_temp
	S_temp

	CAS

	ZNAK
	TMP0
	TMP1
	TMP2
	TMP3
	
	endc

;tlacitka
LAB_p	EQU		0
Check_p	EQU		1
RED_p	EQU		2
SPE_p	EQU		3
ZAJ_p	EQU		4
UNK_p	EQU		5


; Bit Definitions =========================================================

#define		RS		PORTB,4              ;Prirazeni nazvu z duvodu dlouhych prikazu,
;#define		RW		PORTB,5              ;ci pro lepsi pochopeni
#define		E 		PORTB,5
;#define		BF_lcd	RBF,3

#define		LABt	PORTA,LAB_p		;LAB
#define		Check	PORTA,Check_p	;Check
#define		REDt	PORTA,RED_p		;RED
#define		SPEt	PORTA,SPE_p		;SPE
#define		ZAJt	PORTA,ZAJ_p		;ZAJ
#define		UNK		PORTA,UNK_p      ;?????

#define		ED PORTC,0		;El dílny
#define		LA PORTC,1		;lab aut
#define		LM PORTC,2		;lab mereni
#define		LV PORTC,3		;lab vypocetka
#define 	LP PORTC,4		;lab PC gafiky
#define 	RE PORTC,5		;reditel
#define 	ZA PORTC,6		;zástupce
#define 	JI PORTC,7		;jídelna

#define 	SE PORTD,0		;sekratariat
#define 	AU PORTD,1		;audioviz
#define 	PR PORTD,2		;projekc
#define 	UC PORTD,3		;uc CH,F
#define 	UE PORTD,4		;uc EN
#define 	JA PORTD,5		;jazyk uc
#define 	PO PORTD,6		;posilovna
#define 	SK PORTD,7		;skolni klub

#define 	KN PORTE,0		;knihovna
#define 	TE PORTE,0		;telocvicna


;,,,,,,,,,,,,,,,,, Nahrání programové paměti ,,,,,,,,,,,,,,,,,,
;---------------------------------------------------------------------------------------

	ORG		0x000              ;adresa zacatku prog.
	NOP
	GOTO	INI_pic
 	
;------------------------------ INTERRUPT
	ORG		0x004 ;interrupt se vola pomoc TIMER0, perioda = 13.1ms
 bCf       	INTCON,GIE        ;stop jinemu interruptu
 movWF     	W_temp            ;zaloha registru W
 swapF     	STATUS,W          ;zaloha STATUS registru
 movWF     	S_temp
 banksel	0
;---------------------
 movF       TL_OLD2,W         ;tabule
 movWF      TL_OLD3           ;zaznam 4 poslednich stavu cudliku
 movF       TL_OLD1,W
 movWF      TL_OLD2
 movF       TL,W
 movWF      TL_OLD1
 movF       PORTA,W
 movWF      TL
;--- kontrola prostoje ...
 decFsZ     PROSTOJ1,F
 goto       testy
 decFsZ     PROSTOJ2,F
 goto       testy
 bSf        JDI_pr,0
;--- testy, jestli nedoslo ke stisku tlacitek --------------
testy btfSS      TL_OLD3,Check_p  ;stisklo se Check ? (musi byt v TL* posloupnost 0,0,0,1
 goto       next_tl_1
 btfSC      TL_OLD2,Check_p
 goto       next_tl_1
 btfSC      TL_OLD1,Check_p
 goto       next_tl_1
 btfSC      TL,Check_p
 goto       next_tl_1
 bSf        JDI,0              ;hura - stisklo se tlacitko Check

next_tl_1  btfSS      TL_OLD3,LAB_p  ;stisklo se LAB ?
 goto       next_tl_2
 btfSC      TL_OLD2,LAB_p
 goto       next_tl_2
 btfSC      TL_OLD1,LAB_p
 goto       next_tl_2
 btfSC      TL,LAB_p
 goto       next_tl_2
 bSf        JDI_LAB,0

next_tl_2  btfSS      TL_OLD3,RED_p  ;stisklo se RED ?
 goto       next_tl_3
 btfSC      TL_OLD2,RED_p
 goto       next_tl_3
 btfSC      TL_OLD1,RED_p
 goto       next_tl_3
 btfSC      TL,RED_p
 goto       next_tl_3
 bSf        JDI_RED,0

next_tl_3  btfSS      TL_OLD3,SPE_p  ;stisklo se SPE ?
 goto       next_tl_4
 btfSC      TL_OLD2,SPE_p
 goto       next_tl_4
 btfSC      TL_OLD1,SPE_p
 goto       next_tl_4
 btfSC      TL,SPE_p
 goto       next_tl_4
 bSf        JDI_SPE,0              ;hura - stisklo se tlacitko Check

next_tl_4  btfSS      TL_OLD3,ZAJ_p  ;stisklo se SPE ?
 goto       konecI
 btfSC      TL_OLD2,ZAJ_p
 goto       konecI	
 btfSC      TL_OLD1,ZAJ_p
	 goto       konecI
	 btfSC      TL,ZAJ_p
	 goto       konecI
	 bSf        JDI_ZAJ,0

;-----
konecI   NOP
;--------------------- OBNOVA STATUS a W ze zalohy
	 swapF     	S_temp,W
	 movWF     	STATUS
	 swapF     	W_temp,F
	 swapF     	W_temp,W
	 bCf       	INTCON,T0IF ;
	 RETFIE
;---------------------------------------------------------------------------------------

;**************************.::PROGRAM::.**************************;

INI_pic
	
        ;====== inicializace =======
	banksel	TRISD
;MOVLW B'00000000'               ;  port B: vystupy pro LCD
	movlw	.0
	movwf	TRISB						; RB - OUT
	movwf	TRISC						; RC - OUT
	movwf	TRISD						; RD - OUT
	movwf	TRISE						; RE - OUT
	MOVLW	B'00011111'				; 
	MOVWF	TRISA						; RA - IN

	movLW	B'00000111'
	movWF	OPTION_REG				; nastavení předěličky na 1:256
        
	banksel	ADCON1
	movlw	b'00000110'	; A/D input OFF
	movwf	ADCON1

	pagesel	0
	banksel	0
	clrF JDI
	clrF JDI_LAB
	clrF JDI_RED
	clrF JDI_SPE
	clrF JDI_ZAJ   
 	clrF PROSTOJ1
	clrF PROSTOJ2
	clrF JDI_pr

	CALL INI_LCD                    ;Inicializace displaye

	movLW B'10100000'
	movWF INTCON
		
	movLW B'11111111'
	movWF PORTC
	movWF PORTD
	movWF PORTE
	CALL t100mS
	CALL t100mS
	


        ;====== inicializace END =======
        
START
	CALL	HELLO
	CALL	ZHASNI
        
	BTFSC	LABt                        ;Kdyz T0=0 tak preskoci pristi prikaz
	GOTO	LAB
        
	BTFSC	REDt
	GOTO	RED

	BTFSC	SPEt
	GOTO	SPE

	BTFSC	ZAJt
	GOTO	ZAJ
	GOTO	START






st_count movLW     18 ;nastaveni cekaci smycky prostoje na 1min
	movWF     PROSTOJ2  ;60s od ted se JDI_pr nastavi do 1
	clrF      PROSTOJ1
	clrF      JDI_pr
	RETURN
                                        ;Čekací smyčky a různou délkou

t100mS	
	MOVLW 130                ;doba 0,1 s
	GOTO Wa1
t15mS
	MOVLW 20                  ;doba 15ms
	GOTO Wa1
t4mS
	MOVLW	6                    ;doba 4ms
	GOTO	Wa1
t1mS5
	MOVLW	2                   ;doba 1,5ms
Wa1
	MOVWF TM1
Wa3 
	MOVLW	255
	MOVWF TM2
Wa2 
	DECFSZ TM2,F
	GOTO Wa2
	DECFSZ TM1,F
	GOTO Wa3
	RETURN

t100uS
	MOVLW 33                 ;doba 100 mikrosekund
	MOVWF TM1
Wa4 
	DECFSZ TM1,F
	GOTO Wa4
	RETURN


        RETURN
;------------------------------------
;**************************************************************************
; Podprogram na obsluhu LCD
;**************************************************************************
LINE1	
	movlw	0x80		; 1 radek, 0 znak displeje
	goto	WR_CMD
;-------------------------------
LINE2
	movlw	0xC0		; 2 radek, 0 znak displeje
	goto	WR_CMD
;-------------------------------
LINE3	
	movlw	0x94		; 3 radek, 0 znak displeje
	goto	WR_CMD
;-------------------------------
LINE4
	movlw	0xD4		; 4 radek, 0 znak displeje
	goto	WR_CMD
;-------------------------------
CLSLCD
	movlw	0x01		; smaz LCD a vrat se na pozici 0
	goto	WR_CMD
;-------------------------------
WR_CMD
WRdata
	bcf		RS		; RS=0, zápis instrukcí do LCD
	goto	$+2
;-------------------------------
WR_LCD	
WRpri
	bsf		RS		; RS=1, zápis dat do LCD
;       ------------------------
	movwf	ZNAK		; ulozit W do ZNAK	!!! data v registru W !!!
	bsf		E		; nastav Enable
;       ------------------------
	movf	PORTB,W		; zapamatovat stav PORTuB
	iorlw	0x0F		; !!! poslat na PORTB 0-3 !!! (vysledek je xxxx1111)
;	iorlw	0xF0		; !!! poslat na PORTB 4-7 !!! (vysledek je 1111xxxx)
	movwf	TMP1		; zapise W do TMP1
;-------------------------------
	swapf	ZNAK,W		; !!! poslat na PORTB 0-3 !!!
	iorlw	0xF0		; zamaskuje horní bity (vysledek je 1111xxxx)

;	movf	ZNAK,W		; !!! poslat na PORTB 4-7 !!!
;	iorlw	0x0F		; zamaskuje dolní bity (vysledek je xxxx1111)

	andwf	TMP1,W		; pošle vyšší 4 bity na PORTB
	movwf	PORTB
	bcf		E		; zapíše do LCD
;-------------------------------
	bsf		E		; nastav Enable

	movf	ZNAK,W		; !!! poslat na PORTB 0-3 !!!
	iorlw	0xF0		; zamaskuje horní bity (vysledek je 1111xxxx)

;	swapf	ZNAK,W		; !!! poslat na PORTB 4-7 !!!
;	iorlw	0x0F		; zamaskuje dolní bity (vysledek je xxxx1111)

	andwf	TMP1,W		; pošle nižší 4 bity na PORTB
	movwf	PORTB
	bcf		E		; zapíše do LCD
;-------------------------------
	btfsc	RS
	goto	CEK40		; RS=1, zápis dat - čekej 40 us
;       ------------------------
	movlw	04h		; 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
;**************************************************************************
INI_LCD	
	call	CEK15m		; cekej 15ms
	bcf	RS		; zapis ridicich instrukci do LCD
;-------------------------------
;	movlw	30h		; !!! poslat 03h na PORTB 4-7 (vstupy LCD DB4-DB7) !!!
	movlw	03h		; !!! poslat 03h na PORTB 0-3 (vstupy LCD DB4-DB7) !!!
	movwf	PORTB
;       ------------------------
	bsf		E
	bcf		E
	call	CEK4m		; cekej 4,1ms
;       ------------------------
	bsf		E
	bcf		E
	call	CEK100		; cekej 100us
;       ------------------------
	bsf		E
	bcf		E
	call	CEK40		; cekej 40us
;-------------------------------
;	movlw	20h		; !!! poslat 03h na PORTB 4-7 (vstupy LCD DB4-DB7) !!!
	movlw	02h		; !!! poslat 03h na PORTB 0-3 (vstupy LCD DB4-DB7) !!!
	movwf	PORTB		; nastavena 4-bitova komunikace
;       ------------------------
	bsf		E
	bcf		E
	call	CEK40		; cekej 40us
;-------------------------------
	movlw	28h		; 00101000 - počet bitů, 2 řádky, 5x7 znaky
	call	WR_CMD
	movlw	0Ch		; 00001100 - display ON, kurzor OFF, blikání OFF
	call	WR_CMD
	movlw	01h		; 00000001 - smaže displej, kurzor na pozici 0
	call	WR_CMD
	movlw	06h		; 00000110 - směr kurzoru, posunu displeje
	call	WR_CMD
;       ------------------------
	return
;**************************************************************************
; časy pro frekvenci krystalu 20,00Mhz
; časy jsou spočítané od call CEKxxm do návratu na volání CEKxxm
; celkový výpočet  = 2+6+(2+(TMP0-1)*3+2)+3)*TMP1-1+2
; zkrácený výpočet = 8+((TMP0-1)*3+7)*TMP1+1
; malá smyčka = (TMP2-1)*3+2
;-------------------------------
CEK2s	
	movlw	.200		; TMP2 = 20  cekej 2 sekundu
	movwf	TMP3
	goto	SMYCKA2
;-------------------------------
CEK1s
	movlw	.100		; TMP2 = 10  cekej 1 sekundu
	movwf	TMP3
	goto	SMYCKA2
;-------------------------------
CEK100m
	movlw	.10		; cas = 100,009 ms
	movwf	TMP3
	goto	SMYCKA2
;-------------------------------
CEK15m	
	movlw	0xCF		; cas = 15,002 ms
	movwf	TMP0
	movlw	0x78
	movwf	TMP1
	goto	SMYCKA
;-------------------------------
CEK10m	
	movlw	0xCF		; cas = 10,000 ms
	movwf	TMP0
	movlw	0x50
	movwf	TMP1
	goto	SMYCKA
;-------------------------------
CEK4m	
	movlw	0xcf		; cas = 4,0018 ms
	movwf	TMP0
	movlw	0x20
	movwf	TMP1
	goto	SMYCKA
;-------------------------------
CEK1m6	
	movlw	0x47		; cas = 1,601 ms
	movwf	TMP0
	movlw	0x25
	movwf	TMP1
	goto	SMYCKA
;-------------------------------
CEK100	
	movlw 	0x1A		; cas = 100 mikrosekund
	movwf	TMP0
	movlw	006h
	movwf	TMP1
	goto	SMYCKA
;-------------------------------
CEK40	
	movlw	0x08		; cas = 40 mikrosekund
	movwf	TMP0
	movlw	0x07
	movwf	TMP1
	goto	SMYCKA
;-------------------------------
CEK20	
	movlw	0x0E		; cas = 20 mikrosekund
	movwf	TMP0
	movlw	0x02
	movwf	TMP1
	goto	SMYCKA
;-------------------------------
CEK10	
	movlw	0x0D		; cas = 11 mikrosekund
	movwf	TMP0
	movlw	0x01
	movwf	TMP1
	goto	SMYCKA
;-------------------------------
SMYCKA2	
	call	CEK10m
	decfsz	TMP3,F		; největší smyčka
	goto	SMYCKA2
	retlw	00h
;-------------------------------
SMYCKA
	movf	TMP0,W
	movwf	TMP2
;       ------------------------
SMYCKA1	
	decfsz	TMP2,F		; malá smyčka
	goto	SMYCKA1
;       ------------------------
	decfsz	TMP1,F		; velká smyčka
	goto	SMYCKA
;       ------------------------
	retlw	00h


;----------------------------------------

;------------------------------------------
TEXT2   MOVWF ADRTX             ;posle na LCD sring
	pagesel	KOD2        
	CALL KOD2               ;ktery zacina na
	pagesel	TEXT2
	MOVWF POM               ;adrese ADRTX+3 od KOD
        MOVF POM,F              ;konec stringu rozpozna
        BTFSC STATUS,Z          ;tim, ze narazi na znak 0
        RETURN
;	CALL WRdata
	call	WR_LCD	
        INCF ADRTX,F
        MOVF ADRTX,w
        GOTO $-8
;------------------------------------------
TEXT    MOVWF ADRTX             ;posle na LCD sring
    pagesel	KOD  
	CALL KOD                ;ktery zacina na
	pagesel	TEXT    
    MOVWF POM               ;adrese ADRTX+3 od KOD
        MOVF POM,F              ;konec stringu rozpozna
        BTFSC STATUS,Z          ;tim, ze narazi na znak 0
        RETURN
;	CALL	WRdata
	call	WR_LCD
        INCF ADRTX,F
        MOVF ADRTX,w
        GOTO $-8
;------------------------------------------

BEGIN
        movlw B'00000001'       ;prikaz pro vymazani LCD
        call WRpri
        MOVLW B'10000000'       ;adresa počátečního znaku textu
        CALL WRpri              ;1 radek/1 znak
        RETURN

;------------------------------------
CEKEJ   bCf    JDI,0            ;nastavime cekani na cudlik check
        call   st_count         ;nastavime minutovy odpocet
        btFsC  JDI,0
        retLW  1
        btFsC  JDI_pr,0
        retLW  0
        goto $-4
;------------------------------------
ZHASNI
		CLRF PORTC
		CLRF PORTD
		CLRF PORTE
		RETURN
		
;------------------------------------
HELLO
	call	CLSLCD
	call	LINE1
	MOVLW 122
        CALL TEXT
        RETURN

;------------------------------------
O1
        CALL BEGIN
        MOVLW 0                 ;adresa textu 0 ( Elektrotech. dilny )
        CALL TEXT               ;vypsání textu
        MOVLW B'11000000'       ;adresa počátečního znaku textu
        CALL WRpri              ;2 radek/1 znak
        MOVLW 19
        CALL TEXT               ;adresa textu 19 ( Prizemi )
        RETURN

O2      CALL BEGIN
        MOVLW 27                ; ( Lab. )
        CALL TEXT
        MOVLW B'10000101'       ;adresa počátečního znaku textu
        CALL WRpri              ;1 radek/6 znak
        MOVLW 32                ; ( automatizace )
        CALL TEXT
        MOVLW B'11000000'       ;adresa počátečního znaku textu
        CALL WRpri              ;2 radek/1 znak
        MOVLW 45                ; ( 1. patro )
        CALL TEXT
        RETURN

O3      CALL BEGIN
        MOVLW 112               ; ( Lab. mereni )
        CALL TEXT
        MOVLW B'11000000'       ;adresa počátečního znaku textu
        CALL WRpri              ;2 radek/1 znak
        MOVLW 45                ; ( 1. patro )
        CALL TEXT
        RETURN

O4      CALL BEGIN
        MOVLW 72                ;adresa textu 72 ( Lab. vypocetni tech. )
        CALL TEXT
        MOVLW B'11000000'       ;adresa počátečního znaku textu
        CALL WRpri              ;2 radek/1 znak
        MOVLW 54                ; ( 2. patro )
        CALL TEXT
        RETURN

O5      CALL BEGIN
        MOVLW 96                ;adresa textu 96 ( Lab. PC grafiky )
        CALL TEXT
        MOVLW B'11000000'       ;adresa počátečního znaku textu
        CALL WRpri              ;2 radek/1 znak
        MOVLW 54                ; ( 2. patro )
        CALL TEXT
        RETURN
;------------------------------------
O6      CALL BEGIN
        MOVLW 132                       ;adresa textu 132 ( Reditel skoly )
        CALL TEXT
        MOVLW B'11000000'               ;adresa počátečního znaku textu
        CALL WRpri                      ;2 radek/1 znak
        MOVLW 146                       ; ( tel.  )
        CALL TEXT
        MOVLW B'11000101'
        CALL WRpri                      ;2 radek / 6 znak
        MOVLW 151                       ; ( cislo reditele )
        CALL TEXT
        RETURN

O7      CALL BEGIN
        MOVLW 163                       ;adresa textu 163 ( Zastupce reditele )
        CALL TEXT
        MOVLW B'11000000'               ;adresa počátečního znaku textu
        CALL WRpri                      ;2 radek/1 znak
        MOVLW 146                       ; ( tel.  )
        CALL TEXT
        MOVLW B'11000101'
        CALL WRpri                      ;2 radek / 6 znak
        MOVLW 181                       ; ( cislo zastupce )
        CALL TEXT
        RETURN

O8      CALL BEGIN
        MOVLW 193                       ;adresa textu 193 ( Skolni jidelna )
        CALL TEXT
        MOVLW B'11000000'               ;adresa počátečního znaku textu
        CALL WRpri                      ;2 radek/1 znak
        MOVLW 146                       ; ( tel.  )
        CALL TEXT
        MOVLW B'11000101'
        CALL WRpri                      ;2 radek / 6 znak
        MOVLW 208                       ; ( cislo jidelny )
        CALL TEXT
        RETURN

O9      CALL BEGIN
        MOVLW 220                       ;adresa textu 220 ( Sekretariat skoly )
        CALL TEXT
        MOVLW B'11000010'               ;adresa počátečního znaku textu
        CALL WRpri                      ;2 radek / 3 znak
        MOVLW 0                         ; ( info@uzlabina.cz  )
        CALL TEXT2
        RETURN
;------------------------------------ 

O10     CALL BEGIN
        MOVLW 17                       ;adresa textu 17/2 ( Audiovizualni uc. )
        CALL TEXT2
        
        MOVLW B'11000000'               ;adresa počátečního znaku textu
        CALL WRpri                      ;2 radek / 1 znak
        MOVLW 45                       ; ( 1. patro  )
        CALL TEXT
        
        MOVLW B'11001001'               ;adresa počátečního znaku textu
        CALL WRpri                      ;2 radek /  znak 73
        MOVLW 35                        ; ( 111  )
        CALL TEXT2
        RETURN
            
O11     CALL BEGIN
        MOVLW 41                        ;adresa textu 41/2 ( Projekcni )
        CALL TEXT2

        MOVLW B'10001010'               ;adresa počátečního znaku textu
        CALL WRpri                      ;1 radek /  znak 10
        MOVLW 51                       ; ( ucebna )
        CALL TEXT2
        
        MOVLW B'11000000'               ;adresa počátečního znaku textu
        CALL WRpri                      ;2 radek / 1 znak
        MOVLW 19                       ; ( prizemi  )
        CALL TEXT
        
        MOVLW B'11001000'               ;adresa počátečního znaku textu
        CALL WRpri                      ;2 radek /  znak 72
        MOVLW 58                        ; ( 035  )
        CALL TEXT2
        RETURN

O12     CALL BEGIN
        MOVLW 64                        ;adresa textu 64/2 ( Odborna ucebna )
        CALL TEXT2

        MOVLW B'10001111'               ;adresa počátečního znaku textu
        CALL WRpri                      ;1 radek /  znak 15
        MOVLW 82                       ; ( Ch, F )
        CALL TEXT2
        
        MOVLW B'11000000'               ;adresa počátečního znaku textu
        CALL WRpri                      ;2 radek / 1 znak
        MOVLW 63                       ; ( 3. patro  )
        CALL TEXT
        
        MOVLW B'11001000'               ;adresa počátečního znaku textu xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        CALL WRpri                      ;2 radek /  znak 72
        MOVLW 58                       ; ( 035  )
        CALL TEXT2
        RETURN

O13     CALL BEGIN
        MOVLW 64                        ;adresa textu 64/2 ( Odborna ucebna )
        CALL TEXT2

        MOVLW B'10001111'               ;adresa počátečního znaku textu
        CALL WRpri                      ;1 radek /  znak 15
        MOVLW 79                       ; ( EN )
        CALL TEXT2
        
        MOVLW B'11000000'               ;adresa počátečního znaku textu
        CALL WRpri                      ;2 radek / 1 znak
        MOVLW 63                       ; ( 3. patro  )
        CALL TEXT
        
        MOVLW B'11001000'               ;adresa počátečního znaku textu xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        CALL WRpri                      ;2 radek /  znak 72
        MOVLW 58                        ; ( 035  )
        CALL TEXT2
        RETURN

O14     CALL BEGIN
        MOVLW 88                       ;adresa textu 88/2 ( Jazykove ucebny )
        CALL TEXT2
      
        MOVLW B'11000000'               ;adresa počátečního znaku textu
        CALL WRpri                      ;2 radek / 1 znak
        MOVLW 45                       ; ( 1. patro  )
        CALL TEXT
        
        MOVLW B'11001000'               ;adresa počátečního znaku textu 
        CALL WRpri                      ;2 radek /  znak 72
        MOVLW 104                       ; ( a )
        CALL TEXT2

        MOVLW B'11001010'               ;adresa počátečního znaku textu 
        CALL WRpri                      ;2 radek /  znak 74
        MOVLW 54                        ; ( 2. patro )
        CALL TEXT

        RETURN
;------------------------------------

O15     CALL BEGIN
        MOVLW 106                       ;adresa textu 106/2 ( Posilovna )
        CALL TEXT2
      
        MOVLW B'11000000'               ;adresa počátečního znaku textu
        CALL WRpri                      ;2 radek / 1 znak
        MOVLW 19                       ; ( Prizemi  )
        CALL TEXT
        RETURN

O16     CALL BEGIN
        MOVLW 116                       ;adresa textu 116/2 ( Skolni )
        CALL TEXT2
      
        MOVLW B'10000111'               ;adresa počátečního znaku textu
        CALL WRpri                      ;1 radek / 7 znak
        MOVLW 123                       ; ( klub  )
        CALL TEXT2

        MOVLW B'10001101'               ;adresa počátečního znaku textu
        CALL WRpri                      ;1 radek / 13 znak
        MOVLW 19                       ; ( Prizemi  )
        CALL TEXT

        MOVLW B'11000000'               ;adresa počátečního znaku textu
        CALL WRpri                      ;2 radek / 1 znak
        MOVLW 128                       ; ( wifi fotbalek  )
        CALL TEXT2
        RETURN

O17     CALL BEGIN
        MOVLW 116                       ;adresa textu 116/2 ( Skolni )
        CALL TEXT2
      
        MOVLW B'10000111'               ;adresa počátečního znaku textu
        CALL WRpri                      ;1 radek / 7 znak
        MOVLW 145                       ; ( knihovna  )
        CALL TEXT2

        MOVLW B'11000000'               ;adresa počátečního znaku textu
        CALL WRpri                      ;2 radek / 1 znak
        MOVLW 19                       ; ( prizemi  )
        CALL TEXT

        MOVLW B'11001000'               ;adresa počátečního znaku textu
        CALL WRpri                      ;2 radek /  znak 72
        MOVLW 154                       ; ( 7:00-15:30  )
        CALL TEXT2
        RETURN

O18     CALL BEGIN
        MOVLW 165                       ;adresa textu 165/2 ( Telocvicna )
        CALL TEXT2
      
        MOVLW B'11000000'               ;adresa počátečního znaku textu
        CALL WRpri                      ;2 radek / 1 znak
        MOVLW 45                       ; ( 1. patro  )
        CALL TEXT
        RETURN


       
;---------------//*\\-----------------

LAB     CALL O1				;ŽLUTÁ
		CALL ZHASNI
		BSF ED

		;movLW B'00000001'
		;movWF PORTC

        CALL CEKEJ
        btFsS STATUS,Z
        goto START
;--------
        CALL O2
		CALL ZHASNI
		BSF LA

		;movLW B'00000010'
		;movWF PORTC

        CALL CEKEJ
        btFsS STATUS,Z
        goto START
;--------
        CALL O3
		CALL ZHASNI
		 BSF LM
		
		;movLW B'00000100'
		;movWF PORTC

        CALL CEKEJ
        btFsS STATUS,Z
        goto START
;--------
        CALL O4
		CALL ZHASNI
		 BSF LV

		;movLW B'00001000'
		;movWF PORTC

        CALL CEKEJ
        btFsS STATUS,Z
        goto START
;--------
        CALL O5
		CALL ZHASNI
		 BSF LP

		;movLW B'00010000'
		;movWF PORTC

        CALL CEKEJ
        GOTO START
;------------------------------------

RED     CALL O6
		CALL ZHASNI
		 BSF RE

		;movLW B'00100000'
		;movWF PORTC

        CALL CEKEJ
        btFsS STATUS,Z
        goto START
;--------
        CALL O7
		CALL ZHASNI
		 BSF ZA

		;movLW B'01000000'
		;movWF PORTC

        CALL CEKEJ
        ;btFsS STATUS,Z
        goto START
;--------
        CALL O8 
		CALL ZHASNI
		 BSF JI   

		;movLW B'10000000'
		;movWF PORTC

        CALL CEKEJ
        btFsS STATUS,Z
        goto START
;--------
        CALL O9
		CALL ZHASNI
		 BSF SE

		;movLW B'00000001'
		;movWF PORTD

        CALL CEKEJ
        goto START        
;------------------------------------

SPE     CALL O10
		CALL ZHASNI
	     BSF AU

		;movLW B'00000010'
		;movWF PORTD

        CALL CEKEJ
        btFsS STATUS,Z
        goto START
;--------
        CALL O11
		BCF AU
		CALL ZHASNI
		 BSF PR

		;movLW B'00000100'
		;movWF PORTD

        CALL CEKEJ
        btFsS STATUS,Z
        goto START
;--------
        CALL O12
		CALL ZHASNI
		 BSF UC

		;movLW B'00001000'
		;movWF PORTD

        CALL CEKEJ
        btFsS STATUS,Z
        goto START
;--------
        CALL O13
		CALL ZHASNI
		 BSF UE

		;movLW B'00010000'
		;movWF PORTD

        CALL CEKEJ
        btFsS STATUS,Z
        goto START
;--------
        CALL O14
		CALL ZHASNI
		 BSF JA

		;movLW B'00100000'
		;movWF PORTD

        CALL CEKEJ
        ;btFsS STATUS,Z
        goto START

;------------------------------------
ZAJ     CALL O15
		CALL ZHASNI
		 BSF PO

		;movLW B'01000000'
		;movWF PORTD


        CALL CEKEJ
        btFsS STATUS,Z
        goto START
;--------
        CALL O16
		CALL ZHASNI
		;BSF SK

		;movLW B'10000000'
		;movWF PORTD

        CALL CEKEJ
        btFsS STATUS,Z
        goto START
;--------
        CALL O17
		CALL ZHASNI
		;BSF KN
		movLW B'001'
		movWF PORTE

        CALL CEKEJ
        btFsS STATUS,Z
        goto START
;--------
        CALL O18
		CALL ZHASNI
		;BSF TE
		movLW B'010'
		movWF PORTE

        CALL CEKEJ
        ;btFsS STATUS,Z
        goto START



;===================== page1=============================
;	ORG 0x800             ;

KOD
	movlw	.2
	movwf	PCLATH
	MOVF ADRTX,W           ;posloupnost znaků, které se vypíší
	ADDWF PCL,F            ;na display LCD. Zpráva se přestane vypisovat,
	                        ;když se narazí na zak s ASCII kódem 0
	
	
	 RETLW 69 ; ADR 0 ( Elektrotech. dilny )
	 RETLW 108
	 RETLW 101
	 RETLW 107
	 RETLW 116
	 RETLW 114
	 RETLW 111
	 RETLW 116
	 RETLW 101
	 RETLW 99
	 RETLW 104
	 RETLW 46
	 RETLW 32
	 RETLW 100
	 RETLW 105
	 RETLW 108
	 RETLW 110
	 RETLW 121
	 RETLW 0
	 RETLW 80 ; ADR 19 ( Prizemi )
	 RETLW 114
	 RETLW 105
	 RETLW 122
	 RETLW 101
	 RETLW 109
	 RETLW 105
	 RETLW 0
	 RETLW 76 ; ADR 27 ( Lab. )
	 RETLW 97
	 RETLW 98
	 RETLW 46
	 RETLW 0
	 RETLW 97 ; ADR 32 ( automatizace )
	 RETLW 117
	 RETLW 116
	 RETLW 111
	 RETLW 109
	 RETLW 97
	 RETLW 116
	 RETLW 105
	 RETLW 122
	 RETLW 97
	 RETLW 99
	 RETLW 101
	 RETLW 0
	 RETLW 49 ; ADR 45 ( 1. patro )
	 RETLW 46
	 RETLW 32
	 RETLW 112
	 RETLW 97
	 RETLW 116
	 RETLW 114
	 RETLW 111
	 RETLW 0
	 RETLW 50 ; ADR 54 ( 2. patro )
	 RETLW 46
	 RETLW 32
	 RETLW 112
	 RETLW 97
	 RETLW 116
	 RETLW 114
	 RETLW 111
	 RETLW 0
	 RETLW 51 ; ADR 63 ( 3. patro )
	 RETLW 46
	 RETLW 32
	 RETLW 112
	 RETLW 97
	 RETLW 116
	 RETLW 114
	 RETLW 111
	 RETLW 0
	 RETLW 76 ; ADR 72 ( Lab. vypocetni tech. )
	 RETLW 97
	 RETLW 98
	 RETLW 46
	 RETLW 32
	 RETLW 118
	 RETLW 121
	 RETLW 112
	 RETLW 111
	 RETLW 99
	 RETLW 101
	 RETLW 116
	 RETLW 110
	 RETLW 105
	 RETLW 32
	 RETLW 116
	 RETLW 101
	 RETLW 99
	 RETLW 104
	 RETLW 110
	 RETLW 105
	 RETLW 107
	 RETLW 46
	 RETLW 0
	 RETLW 76 ; ADR 96 ( Lab. PC grafiky )
	 RETLW 97
	 RETLW 98
	 RETLW 46
	 RETLW 32
	 RETLW 80
	 RETLW 67
	 RETLW 32
	 RETLW 103
	 RETLW 114
	 RETLW 97
	 RETLW 102
	 RETLW 105
	 RETLW 107
	 RETLW 121
	 RETLW 0
	 RETLW 76 ; ADR 112 ( Lab. merení )
	 RETLW 97
	 RETLW 98
	 RETLW 46
	 RETLW 109
	 RETLW 101
	 RETLW 114
	 RETLW 110
	 RETLW 105
	RETLW 0
	RETLW 86 ; ADR 122 (Vytam Vas )
	RETLW 121
	RETLW 116
	RETLW 97
	RETLW 109
	RETLW 32
	RETLW 86
	RETLW 97
	RETLW 115
	RETLW 0
	RETLW 82       ;ADR 132  (Reditel skoly)
	RETLW 101
	RETLW 100
	RETLW 105
	RETLW 116
	RETLW 101
	RETLW 108
	RETLW 32
	RETLW 115
	RETLW 107
	RETLW 111
	RETLW 108
	RETLW 121
	RETLW 0
	RETLW 116      ;ADR 146  (tel. )
	RETLW 101
	RETLW 108
	RETLW 46
	RETLW 0
	RETLW 50       ; ADR 151 ( telefon reditele - 274 774 210 )
	RETLW 55
	RETLW 52
	RETLW 32
	RETLW 55
	RETLW 55
	RETLW 52
	RETLW 32
	RETLW 50
	RETLW 49
	RETLW 48
	RETLW 0
	RETLW 90       ; ADR 163 (Zastupce reditele)
	RETLW 97
	RETLW 115
	RETLW 116
	RETLW 117
	RETLW 112
	RETLW 99
	RETLW 101
	RETLW 32
	RETLW 114
	RETLW 101
	RETLW 100
	RETLW 105
	RETLW 116
	RETLW 101
	RETLW 108
	RETLW 101
	RETLW 0
	RETLW 50       ; ADR 181 ( telefon zastupce - 274 016 225 )
	RETLW 55
	RETLW 52
	RETLW 32
	RETLW 48
	RETLW 49
	RETLW 56
	RETLW 32
	RETLW 50
	RETLW 50
	RETLW 53
	RETLW 0
	RETLW 83       ; ADR 193 (Skolni jidelna)
	RETLW 107
	RETLW 111
	RETLW 108
	RETLW 110
	RETLW 105
	RETLW 32
	RETLW 106
	RETLW 105
	RETLW 100
	RETLW 101
	RETLW 108
	RETLW 110
	RETLW 97
	RETLW 0
	RETLW 50       ; ADR 208 ( telefon jidelna - 274 016 215 )
	RETLW 55
	RETLW 52 
	RETLW 32
	RETLW 48
	RETLW 49
	RETLW 56
	RETLW 32
	RETLW 50
	RETLW 49
	RETLW 53
	RETLW 0
	RETLW 82       ; ADR 220 ( Sekretariant skoly )
	RETLW 101
	RETLW 107
	RETLW 114
	RETLW 101
	RETLW 116
	RETLW 97
	RETLW 114
	RETLW 105
	RETLW 97
	RETLW 116
	RETLW 32
	RETLW 115
	RETLW 107
	RETLW 111
	RETLW 108
	RETLW 121
	RETLW 0

;===================== page2 =============================

	org	0x1000	;            ;)
KOD2
	movlw	.16
	movwf	PCLATH

	MOVF	ADRTX,W           ;posloupnost znaků, které se vypíší
	
	ADDWF	PCL,F            ;na display LCD. Zpráva se přestane vypisovat,
                        ;když se narazí na zak s ASCII kódem 0

 RETLW 105      ; ADR 0 ( info@uzlabina.cz )
 RETLW 110
 RETLW 102
 RETLW 111
 RETLW 64
 RETLW 117
 RETLW 122
 RETLW 108
 RETLW 97
 RETLW 98
 RETLW 105
 RETLW 110
 RETLW 97
 RETLW 46
 RETLW 99
 RETLW 122
 RETLW 0
 RETLW	65		; ADR 17  (Audiovizualni uc. )
 RETLW	117
 RETLW	100
 RETLW	105
 RETLW	111
 RETLW	118
 RETLW	105
 RETLW	122
 RETLW	117
 RETLW	97
 RETLW	108
 RETLW	110
 RETLW	105
 RETLW	32
 RETLW	117		
 RETLW	99
 RETLW	46
 RETLW	0 
 RETLW  40      ; ADR 35 ( (111) )
 RETLW  49
 RETLW  49
 RETLW  49
 RETLW  41
 RETLW  0
 RETLW  80      ; ADR 41 ( Projekcni )
 RETLW  114
 RETLW  111
 RETLW  106
 RETLW  101
 RETLW  107
 RETLW  99
 RETLW  110
 RETLW 105
 RETLW 0
 RETLW 117      ; ADR 51 ( ucebna )
 RETLW 99
 RETLW 101
 RETLW 98
 RETLW 110
 RETLW 97
 RETLW 0
 RETLW 40      ; ADR 58 ( (035) )
 RETLW 48
 RETLW 51
 RETLW 53
 RETLW 41
 RETLW 0
 RETLW 79       ; ADR 64 ( Odborna ucebna )
 RETLW 100
 RETLW 98
 RETLW 111
 RETLW 114
 RETLW 110
 RETLW 97
 RETLW 32
 RETLW 117
 RETLW 99
 RETLW 101
 RETLW 98
 RETLW 110
 RETLW 97
 RETLW 0
 RETLW 69       ; ADR 79 ( EN )
 RETLW 78
 RETLW 0
 RETLW 67       ; ADR 82 ( Ch, F )
 RETLW 104
 RETLW 44
 RETLW 32
 RETLW 70
 RETLW 0
 RETLW 74       ; ADR 88 ( Jazykove ucebny )
 RETLW 97
 RETLW 122
 RETLW 121
 RETLW 107
 RETLW 111
 RETLW 118
 RETLW 101
 RETLW 32
 RETLW 117
 RETLW 99
 RETLW 101
 RETLW 98
 RETLW 110
 RETLW 121
 RETLW 0
 RETLW 97       ; ADR 104 ( a )
 RETLW 0
 RETLW 80       ; ADR 106 ( Posilovna )
 RETLW 111
 RETLW 115
 RETLW 105
 RETLW 108
 RETLW 111
 RETLW 118
 RETLW 110
 RETLW 97
 RETLW 0
 RETLW 83       ; ADR 116 ( Skolni )
 RETLW 107
 RETLW 111
 RETLW 108
 RETLW 110
 RETLW 105
 RETLW 0
 RETLW 107      ; ADR 123 ( klub )
 RETLW 108
 RETLW 117
 RETLW 98
 RETLW 0
 RETLW 87       ; ADR 128 ( WI-FI a fotbalek )
 RETLW 73
 RETLW 45
 RETLW 70
 RETLW 73
 RETLW 32
 RETLW 97
 RETLW 32
 RETLW 102
 RETLW 111
 RETLW 116
 RETLW 98
 RETLW 97
 RETLW 108
 RETLW 101
 RETLW 107
 RETLW 0
 RETLW 107      ; ADR 145 ( knihovna )
 RETLW 110
 RETLW 105
 RETLW 104
 RETLW 111
 RETLW 118
 RETLW 110
 RETLW 97
 RETLW 0
 RETLW 55       ; ADR 154 ( 7:00-15:30 )  
 RETLW 58
 RETLW 48
 RETLW 48
 RETLW 45
 RETLW 49
 RETLW 53
 RETLW 58
 RETLW 51
 RETLW 48
 RETLW 0
 RETLW 84       ; ADR 165 ( Telocvicna )
 RETLW 101
 RETLW 108
 RETLW 111
 RETLW 99
 RETLW 118
 RETLW 105
 RETLW 99
 RETLW 110
 RETLW 97
 RETLW 0

	END