
	list p=16f877A, R=DEC
	include "p16f877A.inc"
 	
		__CONFIG  _BODEN_OFF & _CP_OFF & _WRT_OFF & _PWRTE_OFF & _WDT_OFF & _HS_OSC & _DEBUG_OFF & _CPD_OFF & _LVP_OFF

	errorlevel -302 ; Register in operand not in bank 0.  Ensure that bank bits are correct.
	errorlevel -306 ; Crossing page boundary -- ensure page bits are set.
	errorlevel -202 ; Argument out of range.  Least significant bits used.


	cblock	0x20
	TMP0
	TMP1
	TMP2
	TMP3

	SM_AD1
	SM_AD2
	SM_AD3
	ZNAK
	T3
	T2
	T1
	T0
	FLAG
	TEMP_MSB
	TEMP_LSB
	endc

#define		ds			PORTC,0
#define		RS			PORTD,1
#define		E			PORTD,0
#define		LCD_PORT	PORTD
#define		PLUS		FLAG,0


LCDout	macro	_LCDout
	movlw	_LCDout
	call	WR_LCD 
	endm
LCDw	macro	
	call	WR_LCD 
	endm


	org		0x00
	goto	INIT

;************************ Inicializace procesoru  *************************

INIT
	banksel	OPTION_REG
	movlw	b'00000000'
	movwf	OPTION_REG
;portA
	banksel	TRISA		; vyber banky
	movlw	b'00000000'	; 0 vstup, 1 vystup
	movwf	TRISA		; sup do TRISu
;PORTB
	banksel	TRISB		; vyber banky
	movlw	b'00000000'	; 0 vstup, 1 vystup
	movwf	TRISB		; sup do TRISu
;vypnuti AD	
	banksel	ADCON0		; vyber banky
	movlw	b'11000000'	; FRC,ADC is OFF			
	movwf	ADCON0		
	
	banksel	ADCON1		; vyber banky
	movlw	b'00000110'	; vlevo, VSS, VDD		
	movwf	ADCON1		; 

;PORTC
	banksel	TRISC		; vyber banky
	movlw	b'00000000'	; 0 vstup, 1 vystup
	movwf	TRISC		; sup do TRISu
;PORTD
	banksel	TRISD		; vyber banky
	movlw	b'00000000'	; 0 vstup, 1 vystup
	movwf	TRISD		; sup do TRISu
;PORTE
	banksel	TRISE		; vyber banky
	movlw	b'00000000'	; 0 vstup, 1 vystup
	movwf	TRISE		; sup do TRISu
	banksel	PORTA
	clrf	PORTD


	call	INI_LCD		; init LCD
	
;	movlw	b'00000000'
;	movwf	TEMP_MSB
;	movlw	.120
;	movwf	TEMP_LSB

MAIN

	call	KOM_S_C_1	;
	call	namerane  	;
;+125 0000 0111 1101 0000 07D0h
;+85* 0000 0101 0101 0000 0550h

;+25.0625 0000 0001 1001 0001 0191h
;+10.125 0000 0000 1010 0010 00A2h
;+0.5 0000 0000 0000 1000 0008h
;0 0000 0000 0000 0000 0000h
;-0.5 1111 1111 1111 1000 FFF8h
;-10.125 1111 1111 0101 1110 FF5Eh
;-25.0625 1111 1110 0110 1111 FE6Fh
;-55 1111 1100 1001 0000 FC90h
;*
;	incfsz	TEMP_LSB,f
;	goto	$+2
;	incf	TEMP_MSB,f
	


	call	CEK1s










	
	call	Teplota_Prevod

;ukaze text a teplotu
	call	LINE1
	LCDout	'T'
	LCDout	'e'
	LCDout	'p'
	LCDout	'l'
	LCDout	'o'
	LCDout	't'
	LCDout	'a'
	
	call	LINE2
	
	btfss	PLUS
	movlw	' '
	btfsc	PLUS
	movlw	'-'
	LCDw
	movf	T3,w
	LCDw
	movf	T2,w
	LCDw
	movf	T1,w
	LCDw
	LCDout	'.'
	movf	T0,w
	LCDw
	goto	MAIN


Teplota_Prevod
;+85* 00000101 01010000 0550h
	bcf		PLUS	
	btfss	TEMP_MSB,7
	goto	$+4
	bsf		PLUS
	comf	TEMP_MSB,f
	comf	TEMP_LSB,f

	clrw
	btfsc	TEMP_LSB,4
	addlw	.1	
	btfsc	TEMP_LSB,5
	addlw	.2
	btfsc	TEMP_LSB,6
	addlw	.4	
	btfsc	TEMP_LSB,7
	addlw	.8
	btfsc	TEMP_MSB,0
	addlw	.16
	btfsc	TEMP_MSB,1
	addlw	.32
	btfsc	TEMP_MSB,2
	addlw	.64
	movwf	SM_AD1
	clrw
	btfsc	TEMP_LSB,0
	addlw	.1	
	btfsc	TEMP_LSB,1
	addlw	.2	
	btfsc	TEMP_LSB,2
	addlw	.4	
	btfsc	TEMP_LSB,3
	addlw	.8	
	movwf	SM_AD2


	movf	SM_AD1,w
	call	HexDec
	
	movf	T2,w
	addlw	.48
	movwf	T3
	movf	T1,w
	addlw	.48
	movwf	T2
	movf	T0,w
	addlw	.48
	movwf	T1
TeplotaL_Prevod
	movlw	HIGH Tab_TeplotaL ; get correct page for PCLATH
	movwf	PCLATH	
	movf	SM_AD2,w
	call	Tab_TeplotaL
	addlw	.48
	movwf	T0
	pagesel	TeplotaL_Prevod
	return


Tab_TeplotaL
	addwf	PCL,F
	retlw	.0
	retlw	.0
	retlw	.1
	retlw	.2
	
	retlw	.2
	retlw	.3
	retlw	.4
	retlw	.4

	retlw	.5
	retlw	.5
	retlw	.6
	retlw	.7

	retlw	.7
	retlw	.8
	retlw	.9
Tab_TeplotaLEND	retlw	.9


	IF (high (Tab_TeplotaL) != high (Tab_TeplotaLEND))
		ERROR "Keyboard lookup table hits page boundary!"
	ENDIF

;**************************************************************************
; Prevod Hex 8bit na DEC T3,T2,T1 
;**************************************************************************
HexDec	
	banksel	TMP0	
	movwf	TMP0
	clrf	TMP1
	banksel	T1
	CLRF	T1
	CLRF	T2
Rad100
	MOVLW	.100
	SUBWF	TMP0,W		;TMP0-100
	MOVWF	TMP2
	BTFSC	STATUS,C	;zaporne?
	GOTO	Uloz		;NE
	MOVLW	.1
	SUBWF	TMP1,W		;TMP1-1
	BTFSS	STATUS,C	;kladne?
	GOTO	Rad10		;NE
	MOVWF	TMP1
	MOVF	TMP2,W
Uloz	
	MOVWF	TMP0
	INCF	T2,F		;+1
	GOTO	Rad100
Rad10
	MOVLW	.10
	SUBWF	TMP0,W		;TMP0-10
	BTFSS	STATUS,C	;kladne?
	GOTO	End10		;NE
	MOVWF	TMP0
	INCF	T1,F		;+1
	GOTO	Rad10
End10
	MOVF	TMP0,W
	MOVWF	T0		;T0,1,2=vysledna hodnota
	return
;******************************************************
KOM_S_C_1

   movlw   b'00101000'   ; zakazane všechna přerušení a od přetečení TMR0
   movwf   INTCON
   CALL   A0_RESET_C   ;PROCEDURA RESET
   MOVLW   0xCC      ;PRIKAZ ROM - SKIPROM
   CALL   A0_WR_DO_C   ;ZAPIS PRIKAZU DO CIDLA
   MOVLW   0x44      ;PRIKAZ ROM - prevod teploty
   CALL   A0_WR_DO_C   ;ZAPIS PRIKAZU DO CIDLA
   return
;******************************************************
; TEST UKONČENÍ PŘEVODU  *
;*************************
; Pro zjisteni ukonceni prevodu teploty se musi vyslat "cteci casovy usek" (pekne blbej výraz :-(  )
; toto cteni se musi provadet pokazde, kdy chceme cist stav sbernice, protoze cidlo odpovi pouze jednou na
; otazku, zda probiha prevod, takze cekaci smycka se vraci o 10 radku nahoru na nove vyslani
; cteciho casoveho useku. ;-)
namerane
g	MOVLW	0X03      ;POMOCNE ZBRZDENI
	MOVWF	TMP2
	banksel	TRISC	;BANKA1
	BCF		ds         ;PIN RA0 JAKO VYSTUP
	BANKSEL	PORTC	;BANKA0
	BSF		ds         ;LOG.1 NA TCK   - PRIPRAVA NA START CTENI
	BCF		ds         ;LOG.0 NA TCK   - START CTECIHO CASOVAHO USEKU
	nop
;-------------------------------
 	banksel	TRISC	;BANKA1
	BSF		ds        ;PIN RA0 JAKO VSTUP
	BANKSEL	PORTC	;BANKA0
   
   DECFSZ   TMP2,F      ;DOBRZDENI NA 13us
   GOTO   $-1
   BTFSC   ds         ;TEST UROVNE SBERNICE - VYSLANI BITU Z CIDLA
   GOTO   KOM_S_C      ;CIDLO POSLALO LOG.1   ukonceny prevod
   CALL   BR_60us      ;BRZDA 60us
   goto   g
;******************************************************
KOM_S_C ; TEST KOMUNIKACE (z cidla musi byt nactena hodnota +85st.C. (0550h A PO UPRAVE V TEMP_MSB bit0 =0 A V TEMP_LSB=0xAA));
   ;******************************************************
   CALL   A0_RESET_C   ;PROCEDURA RESET
   MOVLW   0xCC      ;PRIKAZ ROM - SKIPROM
   CALL   A0_WR_DO_C   ;ZAPIS PRIKAZU DO CIDLA
   MOVLW   0xBE      ;FUNKCNI PRIKAZ - READ SCRATCHPAD   
   CALL   A0_WR_DO_C   ;ZAPIS PRIKAZU DO CIDLA   
       CALL    A0_CTI_Z_C      ;CTENI DAT Z CIDLA - NACTENA DATA JSOU V TMP0 reg.
       MOVF    TMP0,W
       MOVWF   TEMP_LSB
       CALL    A0_CTI_Z_C      ;CTENI DAT Z CIDLA - NACTENA DATA JSOU V TMP0 reg.
       MOVF    TMP0,W
       MOVWF   TEMP_MSB

   ;movlw   b'10101000'   ; povolena všechna přerušení a od přetečení TMR0
   ;movwf   INTCON
       RETURN
;******************************************************
   ; Ovladaci ROUTINE pro cidlo DS18B20
   ; Casovani je pro pouziti krystalu 4MHz
   ; Casova smycka je 10us, 25us, 60us, 100us, 160us, 490us
   ; Cidlo je napajeno pres Ucc pin
;......................................................
   ;PRSENTACNI CAST;
A0_RESET_C   
	BANKSEL	TRISC	;BANKA1
   BCF   ds         ;PIN ds JAKO VYSTUP
	BANKSEL	PORTC	;BANKA0
   BSF   ds            ;LOG.1 NA TCK
   BCF   ds            ;LOG.0 NA TCK
   CALL   BR_490us   ;CEKEJ CCA 490us
	BANKSEL	TRISC	;BANKA1
   BSF   ds         ;PIN ds JAKO VSTUP
	BANKSEL	PORTC	;BANKA0
   CALL   BR_100us   ;CEKEJ CCA 100us
chyba
   BTFSC   ds         ;TEST PRESENTACNIHO PULSU OD CIDLA
   goto   chyba;   call   chyba

   CALL   BR_490us   ;CEKEJ CCA 490us
   RETURN
;------------------------------------------------------
   ;TEST KOMUNIKACE  (z cidla musi byt nactena hodnota +85st.C. (0550h));
;------------------------------------------------------
   ;VYSLANI 8BITU DO CIDLA (DATA NEBO PRIKAZ)
   ;ODESILANA DATA (1 BAJT) MUSI BYT V W REGISTRU
A0_WR_DO_C
   MOVWF   TMP0
	BANKSEL	TRISC	;BANKA1
   BCF   ds         ;PIN ds JAKO VYSTUP
	BANKSEL	PORTC	;BANKA0
   BSF   ds            ;LOG.1 NA TCK
   MOVLW   0X08      ;POCET BITU DO CIDLA (8)
   MOVWF   TMP1

A0_ZAPISS
   BTFSS   TMP0,0      ;TEST BITU 0 REG. TMP0
   GOTO   A0_ZAPIS0
   GOTO   A0_ZAPIS1
;-------------------------------   
A0_ZAPIS0            ;TAKTO ZAPISUJE LOG.0
   BSF   ds            ;LOG.1 NA TCK
   BCF   ds            ;LOG.0 NA TCK
   CALL   BR_100us   ;BRZDA 100us
   BSF   ds            ;LOG.1 NA TCK
   GOTO   A0_POSUNN
;-------------------------------   
A0_ZAPIS1            ;TAKTO ZAPISUJE LOG.1
   BSF   ds            ;LOG.1 NA TCK
   BCF   ds            ;LOG.0 NA TCK
   CALL   BR_10us      ;BRZDA 10us
   BSF   ds            ;LOG.1 NA TCK
   CALL   BR_100us   ;BRZDA 100us
   GOTO   A0_POSUNN
;------------------------------------------------------
A0_POSUNN
    RRF   TMP0,F         ;POSUN OBSAHU REGISTRU O JEDEN BIT DOPRAVA
   DECFSZ   TMP1,F      ;TEST POCTU ODESLANYCH BITU
   GOTO   A0_ZAPISS   ;JESTE NEBYLO ODESLANO 8BITU
   RETURN            ;ODESLANO 8BITU - VYSTUP Z PODPROGRAMU
;------------------------------------------------------
   ;  PRIJMUTI 8BITU Z CIDLA
   ; (DATA Z CIDLA JSOU V REG.TMP0)
A0_CTI_Z_C
   BCF   STATUS,RP0      ;BANKA0
   MOVLW   0X08      ;POCET BITU PRO PRIKAZ (8)
   MOVWF   TMP1
   CLRF   TMP0
A0_CTI_Z_C1
   bcf   STATUS,C
   RRF   TMP0,F
   MOVLW   0X03      ;POMOCNE ZBRZDENI
   MOVWF   TMP2
   BSF   ds
	BANKSEL	TRISC	;BANKA1
   BCF   ds         ;PIN ds JAKO VYSTUP
	BANKSEL	PORTC	;BANKA0
   BSF   ds            ;LOG.1 NA TCK   - PRIPRAVA NA START CTENI
   BCF   ds            ;LOG.0 NA TCK   - START CTECIHO CASOVAHO USEKU
   nop
;-------------------------------
   BSF   STATUS,RP0      ;BANKA1
   BSF   ds         ;PIN RA0 JAKO VSTUP
   BCF   STATUS,RP0      ;BANKA0
   
   DECFSZ   TMP2,F      ;DOBRZDENI NA 13us
   GOTO   $-1

   BTFSS   ds         ;TEST UROVNE SBERNICE - VYSLANI BITU Z CIDLA
   GOTO   A0_CTI_0   ;CIDLO POSLALO LOG.0
   GOTO   A0_CTI_1   ;CIDLO POSLALO LOG.1
;-------------------------------
A0_CTI_0
    BCF   TMP0,7         ;NASTAV BIT7 REG.TMP0 DO LOG.0
   CALL   BR_60us      ;BRZDA 60us
   DECFSZ   TMP1,F      ;TEST POCTU ODESLANYCH BITU
   GOTO   A0_CTI_Z_C1   ;JESTE NEBYLO ODESLANO/PRIJMUTO 8BITU
   RETURN            ;ODESLANO 8BITU - VYSTUP Z PODPROGRAMU
;-------------------------------   
A0_CTI_1
    BSF   TMP0,7         ;NASTAV BIT7 REG.TMP0 DO LOG.0
   CALL   BR_60us      ;BRZDA 60us
   DECFSZ   TMP1,F      ;TEST POCTU ODESLANYCH BITU
   GOTO   A0_CTI_Z_C1   ;JESTE NEBYLO ODESLANO/PRIJMUTO 8BITU
   RETURN            ;ODESLANO 8BITU - VYSTUP Z PODPROGRAMU
;------------------------------------------------------
;******************************************************
;CASOVA SMYCKA PRO 4MHz
BR_10us
   MOVLW   0X02      ;NASTAV W REGISTR NA HODNOTU CAS1
   MOVWF   SM_AD1      ;PRESUN OBSAH W DO PAMETI SM_AD1
   DECFSZ   SM_AD1,F   ;ODECTI 1 OD CISLA V PAMETI SM_AD1
   GOTO   $-1   
   return
;-------------------------------
BR_25us
   MOVLW   0X05      ;NASTAV W REGISTR NA HODNOTU CAS1
   MOVWF   SM_AD1      ;PRESUN OBSAH W DO PAMETI SM_AD1
   MOVLW   0X01
   MOVWF   SM_AD2      ;PRESUN OBSAH W DO PAMETI SM_AD2
   GOTO   BRZDA2
;-------------------------------
BR_60us
   MOVLW   0X11      ;NASTAV W REGISTR NA HODNOTU CAS1
   MOVWF   SM_AD1      ;PRESUN OBSAH W DO PAMETI SM_AD1
   MOVLW   0X01
   MOVWF   SM_AD2      ;PRESUN OBSAH W DO PAMETI SM_AD2
   GOTO   BRZDA2
;-------------------------------
BR_100us
   MOVLW   0X1E      ;NASTAV W REGISTR NA HODNOTU CAS1
   MOVWF   SM_AD1      ;PRESUN OBSAH W DO PAMETI SM_AD1
   MOVLW   0X01
   MOVWF   SM_AD2      ;PRESUN OBSAH W DO PAMETI SM_AD2
   GOTO   BRZDA2
;-------------------------------
BR_160us
   MOVLW   0X32      ;NASTAV W REGISTR NA HODNOTU CAS1
   MOVWF   SM_AD1      ;PRESUN OBSAH W DO PAMETI SM_AD1
   MOVLW   0X01
   MOVWF   SM_AD2      ;PRESUN OBSAH W DO PAMETI SM_AD2
   GOTO   BRZDA2
;-------------------------------
BR_490us
   MOVLW   0XA0      ;NASTAV W REGISTR NA HODNOTU CAS1
   MOVWF   SM_AD1      ;PRESUN OBSAH W DO PAMETI SM_AD1
   MOVLW   0X01
   MOVWF   SM_AD2      ;PRESUN OBSAH W DO PAMETI SM_AD2
   GOTO   BRZDA2
;-------------------------------
BR_MAX
   MOVLW   0XFF      ;NASTAV W REGISTR NA HODNOTU CAS1
   MOVWF   SM_AD1      ;PRESUN OBSAH W DO PAMETI SM_AD1
   MOVLW   0XFF
   MOVWF   SM_AD2      ;PRESUN OBSAH W DO PAMETI SM_AD2
   MOVLW   0X07
   MOVWF   SM_AD3
   DECFSZ   SM_AD3,F   ;ODECTI 1 OD CISLA V PAMETI SM_AD1
   GOTO   $+2         ;POKUD JE VYSLEDEK 0,TOTO PRESKOC, JINAK SE VRAT NA BRZDA1   
   return
   call   BRZDA2
   GOTO   $-4
;----------------------------------
;-------------------------------
BRZDA2   
   DECFSZ   SM_AD1,F   ;ODECTI 1 OD CISLA V PAMETI SM_AD1
   GOTO   BRZDA2      ;POKUD JE VYSLEDEK 0,TOTO PRESKOC, JINAK SE VRAT NA BRZDA1
   DECFSZ   SM_AD2,F   ;ODECTI 1 OD CISLA V PAMETI SM_AD2
   GOTO   BRZDA2      ;POKUD JE VYSLEDEK 0,TOTO PRESKOC, JINAK SE VRAT NA BRZDA1
   RETURN
;******************************************************

;**************************************************************************
; Podprogram na obsluhu LCD
;**************************************************************************
CLS_LCD
	movlw	.0
	goto	WR_CMD
LINE1
	movlw	0x80
	goto	WR_CMD
LINE2
	movlw	0xC0
	goto	WR_CMD
LINE3
	movlw	0x94
	goto	WR_CMD
LINE4
	movlw	0xD4
	goto	WR_CMD
	

	


WR_CMD
   banksel   0
   bcf      RS      ; RS=0, zápis instrukcí do LCD
   goto   $+4
;-------------------------------
WR_LCD   
   banksel   0
   bsf      RS      ; RS=1, zápis dat do LCD
;       ------------------------
   movwf   ZNAK      ; ulozit W do ZNAK   !!! data v registru W !!!
   bsf      E      ; nastav Enable
;       ------------------------
   movf   LCD_PORT,W      ; zapamatovat stav PORTuD
;   iorlw   0x0F      ; !!! poslat na PORTD 0-3 !!! (vysledek je xxxx1111)
   iorlw   0xF0      ; !!! poslat na PORTD 4-7 !!! (vysledek je 1111xxxx)
   movwf   TMP1      ; zapise W do TMP1
;-------------------------------
;   swapf   ZNAK,W      ; !!! poslat na PORTD 0-3 !!!
;   iorlw   0xF0      ; zamaskuje horní bity (vysledek je 1111xxxx)

   movf   ZNAK,W      ; !!! poslat na PORTD 4-7 !!!
   iorlw   0x0F      ; zamaskuje dolní bity (vysledek je xxxx1111)

   andwf   TMP1,W      ; pošle vyšší 4 bity na PORTD
   movwf   LCD_PORT
   bcf      E      ; zapíše do LCD
;-------------------------------
   bsf      E      ; nastav Enable

;   movf   ZNAK,W      ; !!! poslat na PORTD 0-3 !!!
;   iorlw   0xF0      ; zamaskuje horní bity (vysledek je 1111xxxx)

   swapf   ZNAK,W      ; !!! poslat na PORTD 4-7 !!!
   iorlw   0x0F      ; zamaskuje dolní bity (vysledek je xxxx1111)

   andwf   TMP1,W      ; pošle nižší 4 bity na PORTD
   movwf   LCD_PORT
   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 PORTD 4-7 (vstupy LCD DB4-DB7) !!!
;	movlw	03h		; !!! poslat 03h na PORTD 0-3 (vstupy LCD DB4-DB7) !!!
	movwf	LCD_PORT
;       ------------------------
	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	LCD_PORT		; 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 4,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	.20		; TMP2 = 20  cekej 2 sekundu
	movwf	TMP3
	goto	SMYCKA2
;-------------------------------
CEK1s	movlw	.10		; TMP2 = 10  cekej 1 sekundu
	movwf	TMP3
	goto	SMYCKA2
;-------------------------------
CEK100m	movlw	0CFh		; cas = 100,009 ms
	movwf	TMP0
	movlw	0A0h
	movwf	TMP1
	goto	SMYCKA
;-------------------------------
CEK15m	movlw	0ABh		; cas = 15,002 ms
	movwf	TMP0
	movlw	01Dh
	movwf	TMP1
	goto	SMYCKA
;-------------------------------
CEK4m	movlw	0A5h		; cas = 4,001 ms
	movwf	TMP0
	movlw	008h
	movwf	TMP1
	goto	SMYCKA
;-------------------------------
CEK1m6	movlw	041h		; cas = 1,601 ms
	movwf	TMP0
	movlw	008h
	movwf	TMP1
	goto	SMYCKA
;-------------------------------
CEK100	movlw 	01Dh		; cas = 100 mikrosekund
	movwf	TMP0
	movlw	001h
	movwf	TMP1
	goto	SMYCKA
;-------------------------------
CEK40	movlw	009h		; cas = 40 mikrosekund
	movwf	TMP0
	movlw	001h
	movwf	TMP1
	goto	SMYCKA
;-------------------------------
SMYCKA2	call	CEK100m
	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


	end