	PROCESSOR 16F685
	INCLUDE "P16F685.INC"
	__config	0x3D18

w equ 0 ; w budeme rikat do w
f equ 1; f budeme rikat do f
jednotky equ 0x20 ; registr obsahuje jednotky
desitky equ 0x21 ; registr obsahuje desitky
sta equ 0x22 ; registr obsahuje stovky
pocetrot equ 0x23 ; registr pro nastaveni pozadovaneho poctu rotaci
rot1x equ 0x27 ; vysledek rotace 1x
rot2x equ 0x28 ; vysledek rotace 2x
rot3x equ 0x29 ; vysledek rotace 3x
rot5x equ 0x2A ; vysledek rotace 5x
rot6x equ 0x2B ; vysledek rotace 6x
rottmp equ 0x2C ; temp rotovaneho cisla
soucet equ 0x2D ; celkovy vysledek souctu

;pojmenovani bitu IN portu -- Jednotky, Desitky, Sta
#DEFINE	J0	PORTA,0
#DEFINE	J1	PORTA,1
#DEFINE	J2	PORTA,2
#DEFINE	J3	PORTA,3
#DEFINE	D0	PORTA,4
#DEFINE	D1	PORTA,5
#DEFINE	D2	PORTB,4
#DEFINE	D3	PORTB,5
#DEFINE	S0	PORTB,6
#DEFINE	S1	PORTB,7

init:
	bsf STATUS,RP1
    clrf ANSEL ; porta digi
	clrf ANSELH ; porta digi
	bcf STATUS,RP1
	bsf STATUS,RP0
	clrf WPUA ; shodit pullup
	movlw B'11111111'
	movwf TRISB ; set PORTB vstup
	movwf TRISA ; set PORTA in
	movlw B'00000000'
	movwf TRISC ; set PORTC OUT
	bcf STATUS,RP0
	movlw B'10000000'
	movwf OPTION_REG ; vypnout pullup
	movlw B'01110101'
	movwf OSCCON ; nastavit int oscil


smycka:
;nacitani vstupu do reg
	btfss J0
	bcf jednotky,0
	btfsc J0
	bsf jednotky,0

	btfss J1
	bcf jednotky,1
	btfsc J1
	bsf jednotky,1

	btfss J2
	bcf jednotky,2
	btfsc J2
	bsf jednotky,2

	btfss J3
	bcf jednotky,3
	btfsc J3
	bsf jednotky,3

	btfss D0
	bcf desitky,0
	btfsc D0
	bsf desitky,0

	btfss D1
	bcf desitky,1
	btfsc D1
	bsf desitky,1

	btfss D2
	bcf desitky,2
	btfsc D2
	bsf desitky,2

	btfss D3
	bcf desitky,3
	btfsc D3
	bsf desitky,3

	btfss S0
	bcf sta,0
	btfsc S0
	bsf sta,0

	btfss S1
	bcf sta,1
	btfsc S1
	bsf sta,1

;vypocet
;rotace desitek a set pro nasobeni deseti resp. stem
;rotovani desitek
;rot1x
	movlw 1
	movwf pocetrot
	movf desitky,w
	call rotuj
	movwf rot1x
;rot3x
	movlw 3
	movwf pocetrot
	movf desitky,w
	call rotuj
	movwf rot3x
; rotovani set
;rot2x
	movlw 2
	movwf pocetrot
	movf sta,w
	call rotuj
	movwf rot2x
;rot5x
	movlw 5
	movwf pocetrot
	movf sta,w
	call rotuj
	movwf rot5x
;rot6x
	movlw 6
	movwf pocetrot
	movf sta,w
	call rotuj
	movwf rot6x

;soucet vsech radu
	bcf STATUS,C ; nulujem C pro detekci preteceni
	movf jednotky,w
	addwf rot1x,w
	addwf rot2x,w
	addwf rot3x,w
	addwf rot5x,w
	addwf rot6x,w
	btfsc STATUS,C ; test preteceni >255
	clrw	; jestli preteklo tak nuluj w
	movwf soucet
	bcf STATUS,C ;nulujem C

;nulovani pokud je nastaveno vic nez 255.
;	bcf STATUS,C ; nulujem C
;	movf soucet,w
;	addlw D'1'
;	btfsc STATUS,C
;	clrf soucet
;	bcf STATUS,C ;nulujem i C

;zapis na out
	movf soucet,w
	movwf PORTC
	clrw

	goto smycka

;------------------------------------------
;podprogram volany pri rotaci
rotuj:
	movwf rottmp
	rlf	rottmp,f		
	decfsz	pocetrot,f
	goto	$-2	
	movf rottmp,w
	return
;------------------------------------------

	end
