 LIST P=16F84
   INCLUDE<P16F84.INC>
   __CONFIG _PWRTE_ON & _WDT_OFF & _RC_OSC

#DEFINE   TLAC   PORTB,0      ; tlacidlo
#DEFINE   TLAC1   PORTB,3      ; tlacidlo
#DEFINE   LED   PORTA,0      ; za stredniky !!!
#DEFINE   LED1   PORTA,1      ; za stredniky !!!
c2       EQU      h'21'              ;proměnné pro cykly
cas      EQU      h'30'               ;pocet bliknuti
prep     EQU      h'22'               ;prepinac blikania medzi LED a LED1
GIE      EQU      H'0007'
EEIE     EQU      H'0006'
T0IE     EQU      H'0005'
INTE     EQU      H'0004'
RBIE     EQU      H'0003'
T0IF     EQU      H'0002'
INTF     EQU      H'0001'
RBIF     EQU      H'0000'
W_save equ 29h                  ; zaloha w
Sta_sav equ 25h                 ; zaloha status
PCL_sav equ 26h                 ; zaloha pcl
FSR_sav equ 27h                 ; zaloha fsr



;- zaciatok-------------------------------------------------
   ORG 00h      ;přesun na vykonávání
   GOTO   init         ;programu

   ORG 04h         ;vektor přerušení
; zakazani vsech preruseni tu mit nemusis, to se zakaze samo po vyvolani preruseni
;   BCF INTCON,GIE      ;zakázání všech přerušení
;*********
   BCF INTCON,INTF      ;smazání příznaku přerušení
;*********
    GOTO prerus
;- inicializacia-------------------------------------------------
init   BSF   STATUS,RP0
   MOVLW   B'00000000'    ; port A vystup
   MOVWF   TRISA
   MOVLW   B'11111111'    ; port B vstup
   MOVWF   TRISB
   BCF   STATUS,RP0
   MOVLW   B'10010000'   ; povoleni preruseni pouze od RB0
   MOVWF   INTCON
   MOVLW   B'01000000'     ; vloženie 64 smyčku
   MOVWF   cas
;- prepinanie LED-------------------------------------------------   
hej     BTFSS prep,0
     GOTO ld1
      BTFSS prep,0
      GOTO hej
      GOTO ld2
;- blikanie-------------------------------------------------
ld1    BSF      LED           ; provádí blikání LED
         CALL     cekej              ; podle hodnoty tempu
         CALL     cekej              ; se v tomto bloku provádí
         BCF      LED            ; určený počet bliknutí
         CALL     cekej
         CALL     cekej                       ;podprogram čekání           
         GOTO     hej

ld2    BSF      LED1           ; provádí blikání LED1
         CALL     cekej              ; podle hodnoty tempu
         CALL     cekej              ; se v tomto bloku provádí
         BCF      LED1            ; určený počet bliknutí
         CALL     cekej
         CALL     cekej                       ;podprogram čekání           
         GOTO     hej
             
;- smycka-------------------------------------------------
 
cekej    MOVF   cas,w                ;podprogram čekání
         MOVWF    c2     
wait2    DECFSZ   c2,1
         GOTO     wait2
         RETURN                      ;návrat z podprogramu

;- prerusenie --zniženie blikania-----------------------------------------------
prerus movwf W_save
    swapf STATUS,w
    movwf Sta_sav
    MOVLW B'01000000'
    ADDWF cas,1              ;pripocitanie na zmeny rychlosti
;************
    COMF prep,w             ;zmena LED a LED1
;************
    movwf prep
    BTFSC TLAC               ;cakat na pustenie TL
    GOTO  $-1
    swapf Sta_sav,w
    movwf STATUS
    swapf W_save,f
    swapf W_save,w
    retfie

   END