; Verze programu:  1.0 // 24.1.2014
; Obvod: PIC16F876A, X_TAL=4MHz
;******************************
; Zmeny ve verzi 1.1:  
;*******************************************************************************************************
        list p=16F876A, R=DEC
	include <P16F876A.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	0x7F	; temp preruseni
TMP_S		EQU	0x7E	; temp preruseni
TMP_PCL         EQU     0x7D    ; temp preruseni
;**********************************************************************************************************************
TMP0	        EQU	RAM+03	; pomocny registr
TMP1		EQU	RAM+04	; pomocny registr
TMP2		EQU	RAM+05	; pomocny registr
;**********************************************************************************************************************
        ;DEFINICE ZKRATEK A K NIM PRIRAZENYCH I/O PINU
        ;---------------------------------------------;
#define		LED	PORTA,0 ; LED
#define		TL	PORTA,1 ; TLACITKO
;#define	  	PORTA,2 ; 
;#define      		PORTA,3 ; 
;atd

;**********************************************************************************************************************
	org	0x2007		; adresa konfiguracniho slova PIC16F876A
	__CONFIG 0x3F31
;******************** Nastavení dat v EEPROM  *************************************************************************
; 00h - 3Fh - bajty pro vlastni a CZ znaky v LCD (8bytu=1znak)
; 40h - 4Dh - bajty pro uložení hodnot nastavených v menu

	org	0x2100		; tabulka v pameti EEPROM (256 bajtu)

	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff	;           		( 00h )
        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	;          		( 3Fh )

	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff	; bajty pro nastavení menu ( 40h )
	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff	; bajty pro nastavení menu ( 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 )
	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	; 			   ( BFh )

	de	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff	; 			   ( C0h )
	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	; 			   ( FFh )

;********************************************************************************************************************** 
;********************     Reset procesoru     ********************
;*********************************************************************************
	org	0x0000
        CLRF    PCLATH
        CLRF    STATUS
        GOTO    HL_INIT         ; JDI NA HLAVNI INICIALIZACI HW A SW
;********************************************************************************************************************** 
;********************     Vektor preruseni     ********************	
	org	0x0004
	RETFIE			; UKONCENI PRERUSENI
;********************************************************************************************************************** 
;********************************************************************************************************************** 
HL_INIT	
	CALL	INIT_SW		;NASTAVENI SW - REGISTRY PRACOVNI A OVLADACI, NAST. PRERUSENI
	CALL	INIT_HW		;INICIALIZACE PROCESORU - NASTAVENI I/O
;********************************************************************************************************************** 
;********************************************************************************************************************** 
;*****************HLAVNI*CAST****************************************************************************************** 
;********************************************************************************************************************** 
HL_PROG		;HLAVNI PROGRAM RJ
	BTFSS	TL		;JA ZMACKNUTE TLACITKO
	GOTO	$-1		;NENI
				;JE
	BTFSC	LED		;SVITI AKTUALNE LED?
	GOTO	$+4		;ANO, SVITI, ZHASNI JI
				;NESVITI, ROZSVIT JI
	BSF	LED
	CALL	ZAKMITY
	GOTO	HL_PROG

	BCF	LED
	CALL	ZAKMITY
	GOTO	HL_PROG	
;********************************************************************************************************************** 
;********************************************************************************************************************** 
ZAKMITY
;***275ms**(Q=4MHz)*****************************************************;
	MOVLW	0x1F   		;nastav W REGISTR na hodnotu CAS1	;
	movwf	TMP0		;presun obsah W do pameti TMP0		;
	movlw	0x66    	;nastav W REGISTR na hodnotu CAS2	;
	movwf	TMP1		;presun obsah W do pameti TMP1		;
	movlw	0x02    	;nastav W REGISTR na hodnotu CAS2	;
	movwf	TMP2		;presun obsah W do pameti TMP2		;
;***275ms**(Q=4MHz)*****************************************************;
        decfsz	TMP0,F		;odecti 1 od cisla v pameti TMP0
	goto	$-1		;pokud je vysledek 0,toto preskoc, jinak se vrat na
	decfsz	TMP1,F		;odecti 1 od cisla v pameti TMP1
	goto	$-3		;pokud je vysledek 0,toto preskoc, jinak se vrat na
	decfsz	TMP2,F		;odecti 1 od cisla v pameti TMP2
	goto	$-5
;*******************************
	MOVLW   .255	        ;POCET SKENOVANI PORTU PROTI ZAKMITUM
	MOVWF	TMP1

	MOVF	PORTA,W	        ;PRVOTNI NACTENI PORTU B PRO SCAN TLACITEK
	IORLW	B'11111101'	;MASKOVANI PINU, KTERE NEJSOU VYUZITY JAKO TLACITKA
	MOVWF	TMP0
;.............................................................................................
ZAKMITY1
	MOVF	PORTA,W
	IORLW	B'11111101'     ;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

	BTFSC	TL
	GOTO	ZAKMITY

	RETURN		        ;NAVRAT
;********************************************************************************************************************** 
;********************************************************************************************************************** 
;********************KONEC*HLAVNI*CASTI******************************************************************************** 
;********************************************************************************************************************** 
;********************************************************************************************************************** 
INIT_SW
;.......................................................................
	BSF	STATUS,RP0	;BANKA1
	MOVLW	0X07		;00000111
	MOVWF	CMCON           ;NASTAV REG. CMCON NA 07h
        MOVWF   ADCON1          ;NASTAV REG. ADCON1
	MOVLW   0XC6            ;11000110 (NABEZNA HRANA NA RB0) 
        MOVWF   OPTION_REG      ;NASTAV OPTION_REG NA HODNOTU Z W
        CLRF    CVRCON	        ;VYNULUJ CVRCON - NAPETOVE REFERNCE      
        BCF	STATUS,RP0	;BANKA0
	RETURN
;********************************************************************************************************************** 
INIT_HW	
	CLRF	PORTA
	CLRF	PORTB
	CLRF	PORTC
;.......................................................................	
	BSF	STATUS,RP0	;BANKA1
	MOVLW	B'11111110'	; 
	MOVWF	TRISA		;PREDNASTAVENI PORTU A

	MOVLW	B'11111111'
	MOVWF	TRISB		;PREDNASTAVENI PORTU B

	MOVLW	B'11111111'
	MOVWF	TRISC		;PREDNASTAVENI PORTU C
	BCF	STATUS,RP0	;BANKA0

	RETURN
;********************************************************************************************************************** 
;********************************************************************************************************************** 
;********************************************************************************************************************** 
;STRANKA PROGRAMU 1
;PCLATH 4 - 0
;PCLATH 3 - 1
;********************************************************************************************************************** 
	org	0x0800

;********************************************************************************************************************** 
;********************************************************************************************************************** 
;********************************************************************************************************************** 
;STRANKA PROGRAMU 2
;PCLATH 4 - 1
;PCLATH 3 - 0
;********************************************************************************************************************** 
	org	0x1000

;********************************************************************************************************************** 
;********************************************************************************************************************** 
;********************************************************************************************************************** 
;STRANKA PROGRAMU 3
;PCLATH 4 - 1
;PCLATH 3 - 1
;********************************************************************************************************************** 
	org	0x1800
;********************************************************************************************************************** 
;********************************************************************************************************************** 


	END
