; TREBA KRYSTAL NA 20MHz !!!!!

LIST P=16F877A, R=DEC, F=INHX8M        ; list directive to define processor 
#INCLUDE<P16F877A.INC>  		; processor specific variable definitions

__CONFIG _CP_OFF&_WDT_OFF&_BODEN_ON&_PWRTE_ON&_XT_OSC&_LVP_OFF&_DEBUG_OFF&_CPD_OFF

; Ports:
;
; B0 - B3 = I/0
; B4 = RS
; B5 = RW
; B6 = E

; Special Function Registers ==============================================
RAM EQU H'0C'           ;Zde je jiny zpusob zadavani registru.
RAM_END EQU H'7F'       ;konec RAMky

RBF EQU RAM             ;Zada se kde je RAM a dalsi registry jsou
RBF1 EQU RAM+1          ;za RAMem
NUM EQU RAM+2
NUM1 EQU RAM+3
TMP EQU RAM+4
TM1 EQU RAM+5
TM2 EQU RAM+6
POM EQU RAM+7
ADRTX EQU RAM+8
PIP EQU RAM+9
ZK1 EQU RAM+10
ZK2 EQU RAM+11
TL EQU RAM+12
TL_OLD1 EQU RAM+13
TL_OLD2 EQU RAM+14
TL_OLD3 EQU RAM+15
JDI EQU RAM+16
JDI_LAB EQU RAM+17
JDI_RED EQU RAM+18
JDI_SPE EQU RAM+19
JDI_ZAJ EQU RAM+20
PROSTOJ1 EQU RAM+21
PROSTOJ2 EQU RAM+22
JDI_pr EQU RAM+23

W_temp EQU RAM_END-1
S_temp EQU RAM_END

CAS EQU 10h

;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,6
#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

BANK0         macro
                 bCf        STATUS,RP0
                 bCf        STATUS,RP1
              endm

BANK1        macro
                 bSf        STATUS,RP0
                 bCf        STATUS,RP1
             endm

BANK2        macro
                 bCf        STATUS,RP0
                 bSf        STATUS,RP1
             endm

BANK3        macro
                 bSf        STATUS,RP0
                 bSf        STATUS,RP1
             endm

;,,,,,,,,,,,,,,,,, Nahrání programové paměti ,,,,,,,,,,,,,,,,,,
;---------------------------------------------------------------------------------------

 ORG H'00'                              ;adresa zacatku prog.
 GOTO START_cold
 
;------------------------------ INTERRUPT
 ORG H'04' ;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
 BANK0
;---------------------
 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
;---------------------------------------------------------------------------------------
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
;------------------------------------
T_BF    BCF RS                     ;testuje BF tak dlouho, dokud
        BSF RW                         ;LCD nepotvrdi zkonceni operace
        CALL Ain
        BSF E
        MOVF PORTB,W
        MOVWF RBF
        BCF E
        NOP
        BSF E
        MOVF PORTB,W
        MOVWF RBF1
        BCF E
        BTFSC BF_lcd
        GOTO $-10
        RETURN
;------------------------------------
Aout    MOVLW B'00000000'                  ;nastaveni portu A: PIC -> LCD
        GOTO $+2
Ain     MOVLW B'00001111'                   ;nastaveni portu A: LCD -> PIC
        BSF STATUS,RP0                         ;Banka 1
        MOVWF TRISB                            ;nastaveni portu A
        BCF STATUS,RP0                         ;Banka 0
        RETURN
;------------------------------------
WRdata  BSF RS                   ;nastaveni LCD pro zapis DAT
        MOVWF TMP                      ;PRIKAZ/DATA pro LCD W -> TMP
        CALL Aout
        SWAPF TMP,W                    ;horni 4 bity TMP -> W
        MOVWF ZK1
        BSF ZK1,4               ;Musim nastavit Bajt tak, abych si
        BCF ZK1,5               ;neprepsal RS, RW, E
        BSF ZK1,6
        MOVF ZK1,W

        BSF E                   ;prenos
        MOVWF PORTB
        BCF E

        BSF TMP,4               ;Musim nastavit Bajt tak, abych si
        BCF TMP,5               ;neprepsal RS, RW, E
        BSF TMP,6
        MOVF TMP,W

        BSF E                   ;Prenos
        MOVWF PORTB
        BCF E

        CALL T_BF ;             testuj BF
        RETURN

;-------------------------------------
WRpri   BCF RS            ;nastaveni LCD pro zapis PRIKAZU
        BCF RW
        MOVWF TMP       ;PRIKAZ/DATA pro LCD W -> TMP
        CALL Aout
        SWAPF TMP,W     ;horni 4 bity TMP -> W
        MOVWF ZK1
        BCF ZK1,4       ;Musim nastavit Bajt tak, abych si
        BCF ZK1,5       ;neprepsal RS, RW, E
        BSF ZK1,6
        MOVF ZK1,W

        BSF E           ; prenos
        MOVWF PORTB
        BCF E

        BCF TMP,4       ;Musim nastavit Bajt tak, abych si
        BCF TMP,5       ;neprepsal RS, RW, E
        BSF TMP,6
        MOVF TMP,W ;    dolni 4 bity TMP -> W

        BSF E ;Prenos
        MOVWF PORTB
        BCF E

        CALL T_BF       ;testuj BF
        RETURN

;-------------------------------------

RDdata  CALL WRpri              ;nastaveni ctene adresy
        CALL Ain
        BSF RS
        BSF RW
        BSF E
        MOVF PORTB,W
        MOVWF NUM               ;jedna pulka dat do NUM
        SWAPF NUM,F
        BCF E
        MOVLW B'11110000'
        ANDWF NUM,F             ;vymaskovani hornich 4 bitu
        BSF E
        MOVF PORTB,W
        MOVWF NUM1              ;druha pulka dat do NUM1
        BCF E
        MOVLW B'00001111'       ;vymaskovani dolnich 4 bitu
        ANDWF NUM1,W
        IORWF NUM,F             ;secteni horni a dolni pulky NUM
        CALL T_BF
        RETURN
;----------------------------------------
INILCD CALL t15mS               ;inicializuje display
        BCF RS
        BCF RW
        CALL Aout

        BSF E
        MOVLW B'01000011'
        MOVWF PORTB
        BCF E
        CALL t4mS

        BSF E
        MOVLW B'01000011'
        MOVWF PORTB
        BCF E
        CALL t100uS

        BSF E
        MOVLW B'01000011'
        MOVWF PORTB
        BCF E
        CALL t100uS

        MOVLW B'00101000'
        CALL WRpri              ;4bit komunikace / 2 radky
        MOVLW B'00001000'       ;LCD OFF
        CALL WRpri
        MOVLW B'00001100'
        CALL WRpri              ;LCD ON / kurzor OFF / blikani OFF
        MOVLW B'00000110'
        CALL WRpri              ;inkrementace, normalni operace
        RETURN
;------------------------------------------
TEXT2   MOVWF ADRTX             ;posle na LCD sring
        CALL KOD2               ;ktery zacina na
        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
        INCF ADRTX,F
        MOVF ADRTX
        GOTO $-8
;------------------------------------------
TEXT    MOVWF ADRTX             ;posle na LCD sring
        CALL KOD                ;ktery zacina na
        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
        INCF ADRTX,F
        MOVF ADRTX
        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
        movlw B'00000001'       ;prikaz pro vymazani LCD
        call WRpri
        MOVLW B'10000000'       ;adresa počátečního znaku textu
        CALL WRpri
        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
		CALL ZHASNI
		BSF ED

        CALL CEKEJ
        btFsS STATUS,Z
        goto START

        CALL O2
		CALL ZHASNI
		BSF LA

        CALL CEKEJ
        btFsS STATUS,Z
        goto START

        CALL O3
		CALL ZHASNI
		BSF LM

        CALL CEKEJ
        btFsS STATUS,Z
        goto START

        CALL O4
		CALL ZHASNI
		BSF LV

        CALL CEKEJ
        btFsS STATUS,Z
        goto START

        CALL O5
		CALL ZHASNI
		BSF LP

        CALL CEKEJ
        GOTO START
;------------------------------------

RED     CALL O6
		CALL ZHASNI
		BSF RE

        CALL CEKEJ
        btFsS STATUS,Z
        goto START

        CALL O7
		CALL ZHASNI
		BSF ZA

        CALL CEKEJ
        btFsS STATUS,Z
        goto START

        CALL O8 
		CALL ZHASNI
		BSF JI   

        CALL CEKEJ
        btFsS STATUS,Z
        goto START

        CALL O9
		CALL ZHASNI
		BSF SE

        CALL CEKEJ
        goto START        
;------------------------------------

SPE     CALL O10
		CALL ZHASNI
		BSF AU

        CALL CEKEJ
        btFsS STATUS,Z
        goto START

        CALL O11
		CALL ZHASNI
		BSF PR

        CALL CEKEJ
        btFsS STATUS,Z
        goto START

        CALL O12
		CALL ZHASNI
		BSF UC

        CALL CEKEJ
        btFsS STATUS,Z
        goto START

        CALL O13
		CALL ZHASNI
		BSF UE

        CALL CEKEJ
        btFsS STATUS,Z
        goto START

        CALL O14
		CALL ZHASNI
		BSF JA

        CALL CEKEJ
        btFsS STATUS,Z
        goto START

;------------------------------------
ZAJ     CALL O15
		CALL ZHASNI
		BSF PO

        CALL CEKEJ
        btFsS STATUS,Z
        goto START

        CALL O16
		CALL ZHASNI
		BSF SK

        CALL CEKEJ
        btFsS STATUS,Z
        goto START

        CALL O17
		CALL ZHASNI
		BSF KN

        CALL CEKEJ
        btFsS STATUS,Z
        goto START

        CALL O18
		CALL ZHASNI
		BSF TE

        CALL CEKEJ
        btFsS STATUS,Z
        goto START
;**************************.::PROGRAM::.**************************;

START_cold
        ;====== inicializace =======
        BANK1
		;MOVLW B'00000000'               ;  port B: vystupy pro LCD
        CLRF TRISB						; RB - OUT
        CLRF TRISC						; RC - OUT
        CLRF TRISD						; RD - OUT
        CLRF TRISE						; RE - OUT
		MOVLW B'00011111'				; 
        MOVWF TRISA						; RA - IN

        movLW B'00000111'
        movWF OPTION_REG
        
		BANK0
        clrF JDI
        clrF JDI_LAB
        clrF JDI_RED
        clrF JDI_SPE
        clrF JDI_ZAJ   
        clrF PROSTOJ1
        clrF PROSTOJ2
        clrF JDI_pr

        CALL INILCD                    ;Inicializace displaye

        movLW B'10100000'
        movWF INTCON

        ;====== inicializace END =======
        
START   CALL HELLO
        
        BTFSC LABt                        ;Kdyz T0=0 tak preskoci pristi prikaz
        GOTO LAB
        
        BTFSC REDt
        GOTO RED

        BTFSC SPEt
        GOTO SPE

        BTFSC ZAJt
        GOTO ZAJ

        GOTO $-8



;===================== 2. pamet vet =============================

 ORG H'700'            ;adresa pulky pameti (2. stranka 700-7FF)
 KOD2 MOVLW 7          ;nastaveni 2 stranky programove pameti
 MOVWF PCLATH           ;tohle je vlastně tabulka ASCII. Je to
 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


;===================== 1. pamet vet =============================
 ORG H'600'             ;adresa konce pameti (3. stranka 600-6FF)

 KOD MOVLW 6            ;nastaveni 3 stranky programove pameti
 MOVWF PCLATH           ;tohle je vlastně tabulka ASCII. Je to
 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

END

;BCF STATUS, RP0 ;  RP0=0
;BSF STATUS, RP1 ;  RP1=1     Bank1
;CLRF PORTA ; 


;BCF STATUS, RP0 ;
;BCF STATUS, RP1 ; Bank0
