	list		p=18f2525	
	#include	<p18f2525.inc>


; A kis HP 4 szegmenses cucc+leptetomotor-proba FELLEPESSEL, na ez szepen forog!
; portc -  segmenes data
; porta 0,1,2,3 - segmens selection

#define seg1		PORTA,4
#define seg2		PORTA,5
#define seg3		PORTA,3
#define seg4		PORTA,2
#define step1		PORTB,0
#define step2		PORTB,1
#define step3		PORTB,2
#define step4		PORTB,3

;***** VALTOZOK

cblock 0x00
szorzolo
szorzohi
szorzandolo
szorzandohi
szamlalo
szamlahi
szepite	
osztolo	
osztohi	
oszto2lo
oszto2hi
osztandolo
osztandohi
osztando2lo
osztando2hi
munkalo
munkahi
munka2lo
munka2hi
eredmenylo
eredmenyhi
eredmeny2lo
eredmeny2hi
idegw
idegb
idegs
TEMP1
TEMP2
TEMP3
TEMP4
CIKLO1
ERTEK
ERTEKKI
villan
irqcounter
nyolcbites
PITCH
PLUSZ
IDEG
IDEG2
TEMPVK1
TEMPVK2
TEMPVK3
blokkszamlo
blokkszamhi
szam1
szam2
szam3
szam4
szamjegy1
szamjegy2
szamjegy3
szamjegy4
sorozat
idegszam
kezdet
sebesseg
endc
                            
;****** MAKROK

zoldled_be MACRO
	bsf PORTB,0
	ENDM
zoldled_ki MACRO
	bcf PORTB,0
	ENDM

;**********************************************************************
ORG 0x0000
	goto Start
org 0x0008
        goto interup	;high priority interrupt, compatibility int.
org 0x0018
	retfie		;low priority interrupt

ORG 0x002A
;----------------------------------------------------------- IRQ-k jonnek-----
tablazat
	andlw 0f
	movwf idegszam
	clc
	rlcf idegszam
	movf idegszam,W 
	nop
	addwf PCL
dt b'11101110'	;0
dt b'01000100'	;1
dt b'10110110'	;2
dt b'11010110'	;3
dt b'01011100'	;4
dt b'11011010'	;5
dt b'11111010'	;6
dt b'01000110'	;7
dt b'11111110'	;8
dt b'11011110'	;9

dt b'01111110'	;A
dt b'11111000'	;b
dt b'10110000'	;c
dt b'11110100'	;d
dt b'10111011'	;E
dt b'00111011'	;F
dt 001	;tizedespont
     
szamido = 0f0
sotetido = 0d0
             
interup:
	bcf INTCON,GIE		;disable interupts
	movwf idegw		;save w
	movbb idegs,STATUS      ;save status
	movbb idegb,BSR
	BCF PIR1, TMR1IF ; Clear interrupt flag

	decfsz irqcounter
	jmp atugi
	mov irqcounter,0c0
	incf szam4

	mov szamlahi,0
	movbb szamlalo,sebesseg
	call szam8_kiir

	movf szamjegy1,W
	call tablazat
	movwf szam1

	movf szamjegy2,W
	call tablazat
	movwf szam2

	movf szamjegy3,W
	call tablazat
	movwf szam3
	mov szam4,0
atugi
	movlw 0
	cpfseq sorozat
	jmp kovhas1

	mov sorozat,1
	bcf seg1
	movbb PORTC,szam1
	mov TMR1H,szamido
	clrf TMR1L 
	jmp vegeterirq
kovhas1
	movlw 1
	cpfseq sorozat
	jmp kovhas2
	mov PORTA,0ff
	mov sorozat,2
	mov TMR1H,sotetido
	clrf TMR1L 
	jmp vegeterirq

kovhas2
	movlw 2
	cpfseq sorozat
	jmp kovhas3
	mov sorozat,3
	bcf seg2
	movbb PORTC,szam2
	mov TMR1H,szamido
	clrf TMR1L 
	jmp vegeterirq
kovhas3
	movlw 3
	cpfseq sorozat
	jmp kovhas4
	mov PORTA,0ff
	mov sorozat,4
	mov TMR1H,sotetido
	clrf TMR1L 
	jmp vegeterirq

kovhas4
	movlw 4
	cpfseq sorozat
	jmp kovhas5
	mov sorozat,5
	bcf seg3
	movbb PORTC,szam3
	mov TMR1H,szamido
	clrf TMR1L 
	jmp vegeterirq
kovhas5
	movlw 5
	cpfseq sorozat
	jmp kovhas6
	mov PORTA,0ff
	mov sorozat,6
	mov TMR1H,sotetido
	clrf TMR1L 
	jmp vegeterirq
kovhas6
	movlw 6
	cpfseq sorozat
	jmp kovhas7
	mov sorozat,7
	bcf seg4
	movbb PORTC,szam4
	mov TMR1H,szamido
	clrf TMR1L 
	jmp vegeterirq
kovhas7
	movlw 7
	cpfseq sorozat
	jmp vegeterirq
	mov PORTA,0ff
	mov sorozat,0
	mov TMR1H,sotetido
	clrf TMR1L 
	jmp vegeterirq

vegeterirq
	movbb BSR,idegb		;restore bank select register
	movbb STATUS,idegs	;restore status
	movf idegw,w            ;restore w
	bsf INTCON,GIE          ;enable interrupts
	retfie                  ;ret from interrupt


;--------------------------------------------------------------- Progi jon!
            
Start

	clrf	PORTA
	clrf	PORTB
        clrf    PORTC	;minden port torlese
	clrf	PORTE
	mov TRISC, B'00000001'	; PortC 0 bemenet
	mov TRISA, B'11000011'
	mov TRISB, B'11110000'	; portB 0-3 kimenet
	mov OSCCON, B'11110010'	; 8MHz
	mov ADCON1, B'00001111'	;all portA digital
	clrf TRISC

	mov sorozat,0
	mov irqcounter,0c0
	mov sebesseg,04
	mov TMR1H,4
	CLRF TMR1L
	mov T1CON,b'10000101'
	BSF PIE1, TMR1IE ; Enable Timer1 interrupt
	bsf INTCON,GIE          ;enable interrupts
	bsf INTCON,PEIE          ;enable interrupts

	mov szam4,0

ujkort:

 	bsf step1
	call kisvarakozas
ujlop
	bsf step3
	call kisvarakozas
	bcf step1
	call kisvarakozas
	bsf step2
	call kisvarakozas
	bcf step3
	call kisvarakozas
	bsf step4
	call kisvarakozas
	bcf step2
	call kisvarakozas
	bsf step1
	call kisvarakozas
	bcf step4	
	call kisvarakozas
	nop
	jmp ujlop


kisvarakozas

	movbb TEMPVK2,sebesseg	;4 a minimum
cimkey2              
	mov TEMPVK1,0
cimkey
	decfsz  TEMPVK1, F
	jmp    cimkey
	decfsz  TEMPVK2, F
	jmp    cimkey2
	ret

szam8_kiir
	mov osztohi, high D'100'  ;hundred
	mov osztolo, low D'100'
	call osztas16
	movwf szamjegy1

	mov osztohi, high D'10' ;ten
	mov osztolo, low D'10'
	call osztas16
	movwf szamjegy2

	movf munkalo,W		;one
	movwf szamjegy3
	ret

szorzas32			;16*16 bit unsigned multiplication

        clrf    eredmenyhi        ;szorzo(16) times szorzando(16) into osszam(32)
        clrf    eredmenylo
        clrf    eredmeny2hi
        clrf    eredmeny2lo
                           
        movlw   10
        movwf   TEMP1
loop56
        bcf     STATUS, C        ; Clear the carry bit in the status Reg.
	rrcf    szorzohi, F
	rrcf	szorzolo,F

        btfss   STATUS, C
	jmp forgatasok
	movf szorzandolo,W
	carry0
	addwf eredmeny2lo,F
	skipnc
	incf eredmeny2hi
	movf szorzandohi,W
	carry0
	addwf eredmeny2hi,F

forgatasok
        rrcf     eredmeny2hi, F
        rrcf     eredmeny2lo, F
        rrcf     eredmenyhi, F
        rrcf     eredmenylo, F

        decfsz  TEMP1, F
        jmp    loop56
	ret


osztas16
	clrf osztando2lo
	clrf osztando2hi
	clrf oszto2lo
	clrf oszto2hi

osztas32                        ;32 bit binary unsigned division
	clrf munkalo   		;osztando(32) over oszto(32) into eredmeny(32)
	clrf munkahi            ;modulo writed back into osztando!
	clrf munka2lo
	clrf munka2hi

	mov TEMP1,20h		;32 binary step
ciklus2
	carry0
	rlcf osztandolo,F
	rlcf osztandohi,F
	rlcf osztando2lo,F
	rlcf osztando2hi,F
	rlcf munkalo,F
	rlcf munkahi,F
	rlcf munka2lo,F
	rlcf munka2hi,F

	carry1  		;hi word hi byte
	movf oszto2hi,W
	subwf munka2hi,W
	skipnz
	jmp eldonteni2		;equal
	skipnc
	jmp kivonas
	jmp csakbit2  		;less
eldonteni2
	carry1  		;hi word lo byte
	movf oszto2lo,W
	subwf munka2lo,W
	skipnz
	jmp eldonteni3		;equal
	skipnc
	jmp kivonas
	jmp csakbit2  		;less
eldonteni3
	carry1  		;lo word hi byte
	movf osztohi,W
	subwf munkahi,W
	skipnz
	jmp eldonteni4		;equal
	skipnc
	jmp kivonas
	jmp csakbit2  		;less
eldonteni4
	movf osztolo,W		;lo word lo byte
	subwf munkalo,W
	skipc
	jmp csakbit2  		;less

kivonas
	movf oszto2hi,W 	;dd oszto always lower than dd munka
	subwf munka2hi,f

	carry1
	movf oszto2lo,W
	subwf munka2lo,f
	skipc
	decf munka2hi

	carry1
	movf osztohi,W
	subwf munkahi,f
	skipc
	decf munka2lo

	carry1
	movf osztolo,W
	subwf munkalo,f
	skipc
	decf munkahi
	carry1	;it must be 1

csakbit2
	rlcf eredmenylo,F
	rlcf eredmenyhi,F
	rlcf eredmeny2lo,F
	rlcf eredmeny2hi,F
	decfsz TEMP1,F
	jmp ciklus2

	movbb osztandolo, munkalo
	movbb osztandohi, munkahi
	movbb osztando2lo, munka2lo
	movbb osztando2hi, munka2hi

	movf eredmenylo,W
        ret


;------------------------------------------------------------------------------


	END 

