	LIST	P=16F874
	ERRORLEVEL 1
	#INCLUDE	"P16F874.INC"

	__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _LVP_OFF


	CBLOCK	0x20
	STATUS_TEMP
	W_TEMP
	PCLATH_TEMP
	MSTIMR
	SEBH
	SEBL
	LCD_DATA
	BCD1
	BCD2
	BCD3
	BCD4
	BCD5
	BINH
	BINL
	OSZTÓ_H
	OSZTÓ_L
	MARADÉK_H
	MARADÉK_L
	OSZTAND_EREDMÉNY_Z
	OSZTAND_EREDMÉNY_U	; ide adódik a részeredmény és tolódik jobbra
	OSZTAND_EREDMÉNY_H
	OSZTAND_EREDMÉNY_L	; ide töltődik a hányados
		
	OSZTÓ_CIKLUS		; 32

	ENDC

	ORG	00
	NOP
	GOTO	MAIN

	ORG	04
	GOTO	MEXA

;--------------PIC INIC------------------------------------------------

MAIN
	BANKSEL	PIE1

	MOVLW	B'10010000'	;INTERRUPT INIC, GLOBALIS MEXA ENGEDÉLYEZVE A TÖBBI TILTVA
	MOVWF	INTCON
	MOVLW	B'00000000'	;TMR1 MEXAKÍTÁS TILT
	MOVWF	PIE1
	CLRF	PIE2

	BANKSEL	ADCON0
	
	MOVLW	B'01000001'	;AD INIC
	MOVWF	ADCON0
	
	BANKSEL	ADCON1
	MOVLW	B'10001110'	;CSAK RA0 ANALOG A TÖBBI DIGITALIS
	MOVWF	ADCON1
	

	
	MOVLW	0x00		;KIJELZŐT HAJTÓ PORTOK IRÁNYBEÁLLÍTÁSA, KIMENETTÉ
	MOVWF	TRISD
	MOVWF	TRISE



	BANKSEL	PORTD		;KIJELZŐT HAJTÓ PORTOK NULLÁZÁSA
	CLRF	PORTD
	CLRF	PORTE

	MOVLW	B'00110100'	;Timer1 inic
	MOVWF	T1CON		;1:8 ELŐOSZTÁS BELSŐ ÓRAJEL KIKAPCSOLT ÁLLAPOT
	CLRF	TMR1H		;NULLÁZÁS
	CLRF	TMR1L

;-------------LCD INIC-------------------------------------------------------------

LCDINIC

	MOVLW	D'25'		;KÉSLELTET 25ms
	CALL	DELAY
	MOVLW	0x38		;2SOROS 8BITES MÓD 3SZORI KIADÁSA
	CALL	INICCMD
	MOVLW	D'10'
	CALL	DELAY
	MOVLW	0x38
	CALL	INICCMD
	MOVLW	D'02'
	CALL	DELAY
	MOVLW	0x38
	CALL	INICCMD
	MOVLW	0x38
	CALL	LCDPUTCMD
	MOVLW	0x08
	CALL	LCDPUTCMD
	MOVLW	0x01
	CALL	LCDPUTCMD
	MOVLW	0x06
	CALL	LCDPUTCMD
	MOVLW	0x0C
	CALL	LCDPUTCMD
	

;----------SEBESSÉG SZÁMÍTÁS ÉS KONVERTÁLÁS ASCII KARAKTERRÉ------------------------

SPEED
	

	CALL	DIVIDE			;SEBESSEG SZAMITAS
	MOVF	OSZTAND_EREDMÉNY_H,W
	MOVWF	BINH
	MOVF	OSZTAND_EREDMÉNY_L,W
	MOVWF	BINL
	CALL	BCDCONV			;ALAKITAS BCD KODRA
	BANKSEL	PIR1
	BTFSS	PIR1,TMR1IF		;VOLT TULCSORDULAS?
	GOTO	ERTEKKI			;HA NEM ÉRTÉKEK KIÍRÉSA
	CLRF	BCD1			;HA IGEN AKKOR A 3 BCD HELYIÉRTÉK NULLÁZÁSA
	CLRF	BCD2
	CLRF	BCD3
	BCF	PIR1,TMR1IF		;TULCSORDULÁS JELZŐ VISZSAÁLLÍTÁSA


;-----------------ÉRTÉKEK KIÍRÁSA------------------------------------------------

ERTEKKI

	MOVLW	0x89		;KARAKTER HELYÉNEK CÍME
	CALL	LCDPUTCMD
	
	MOVF	BCD3,W		;BCD HELYIÉRTÉK A W-BE
	ADDLW	0x30		;ASCII	KARAKTERRÉ KONVERTÁLÁS
	CALL	LCDCHAR		;KIÍRATÁS
	
	MOVF	BCD2,W
	ADDLW	0x30
	CALL	LCDCHAR
	
	MOVF	BCD1,W
	ADDLW	0x30
	CALL	LCDCHAR

	MOVLW	'K'
	CALL	LCDCHAR

	MOVLW	'm'
	CALL	LCDCHAR

	MOVLW	B'00101111'
	CALL	LCDCHAR

	MOVLW	'h'
	CALL	LCDCHAR

	GOTO	SPEED

;---------------------MEGSZAKÍTÁS LEKEZELÉS----------------------------------


MEXA

	MOVWF	W_TEMP			;STATUS ÉS W ÉS PCLATH MENTÉS
	SWAPF	STATUS,W
	CLRF	STATUS
	MOVWF	STATUS_TEMP
	MOVF	PCLATH,W
	MOVWF	PCLATH_TEMP
	CLRF	PCLATH


	
KOV	
	BANKSEL	T1CON
	BTFSS	INTCON,INTF		;MEGSZAKÍTÁSI OK ELLENŐRZÉSE
	GOTO	VEGE
	
	BTFSS	T1CON,TMR1ON		;TMR1 MEGY?
	GOTO	GOTMR1			;HA NEM AKKOR TMR1 INDÍT
	BCF	T1CON,TMR1ON		;HA MEGY AKKOR MEGÁLLÍT
	MOVF	TMR1H,W			;FELSŐ BÁJT MENTÉSE
	MOVWF	SEBH
	MOVF	TMR1L,W			;ALSÓ BÁJT MENTÉSE
	MOVWF	SEBL
	CLRF	TMR1H			;TMR1 NULLLÁZÁSA
	CLRF	TMR1L
	BSF	T1CON,TMR1ON		;TMR1 INDÍT
	GOTO	VEGE			;VISSZA A MEGSZAKÍTÁSBÓL

GOTMR1
	CLRF	TMR1H			;TMR1 NULLÁZ
	CLRF	TMR1L
	BSF	T1CON,TMR1ON		;TMR1 INDÍT

VEGE	


	BCF	INTCON,INTF		;MEGSZAKÍTÁSI OK MEGSZÜNTETÉSE
	
	MOVF	PCLATH_TEMP,W		;W ÉS STATUS ÉS PCLATH VISSZAÁLLÍTÁSA
	MOVWF	PCLATH
	SWAPF	STATUS_TEMP,W
	MOVWF	STATUS
	SWAPF	W_TEMP,F
	SWAPF	W_TEMP,W
	RETFIE



;--------------------------SUBRUTINOK--------------------------------------------


LCDBUSY
	BANKSEL	TRISD		;BANK1
	
	MOVLW	0x0FF
	MOVWF	TRISD		;BEMEMETTÉ
	
	BANKSEL	PORTE		;BANK0
BLOOP	
	BCF	PORTE,0
	BSF	PORTE,1
	BSF	PORTE,2
	MOVF	PORTD,W
	ANDLW	0x80
	BTFSS	STATUS,Z
	GOTO	BLOOP
	BCF	PORTE,2
	BCF	PORTE,1
	
	BANKSEL	TRISD		;BANK1
	
	MOVLW	0x000
	MOVWF	TRISD		;KIMENET
	
	BANKSEL	PORTD
	
	RETURN

	
LCDCHAR
	MOVWF	LCD_DATA	;KÜLDENDŐ
	CALL	LCDBUSY
	BSF	PORTE,0		;ADATMODE
	BCF	PORTE,1		;BEIRAS
	BCF	PORTE,2		;CHIPTILTAS
	MOVF	LCD_DATA,W
	MOVWF	PORTD		;ADAT A PORTON
	BSF	PORTE,2		;CHIPENG
	NOP
	BCF	PORTE,2		;CHIPTILTAS
	RETURN



LCDPUTCMD
	MOVWF	LCD_DATA	;KÜLDENDŐ
	CALL	LCDBUSY
	BCF	PORTE,0		;PARANCSMODE
	BCF	PORTE,1		;BEIRAS
	BCF	PORTE,2		;CHIPTILTAS
	MOVF	LCD_DATA,W
	MOVWF	PORTD		;ADAT A PORTON
	BSF	PORTE,2		;CHIPENG
	NOP
	BCF	PORTE,2		;CHIPTILTAS
	RETURN

INICCMD

	MOVWF	LCD_DATA
	BCF	PORTE,0
	BCF	PORTE,1
	BCF	PORTE,2
	MOVF	LCD_DATA,W
	MOVWF	PORTD
	BSF	PORTE,2
	NOP
	BCF	PORTE,2
	RETURN


LCDCLR

	MOVLW	0x01		;KIJELZŐ TÖRLÉSE
	CALL	LCDPUTCMD
	RETURN


DELAY	 


WAITMS	MOVWF	MSTIMR
WAITMS1	MOVLW	d'249'
	ADDLW	-1
	NOP
	SKPZ
	GOTO	$-3
	DECFSZ	MSTIMR
	GOTO	WAITMS1
	RETURN

BCDCONV
	BANKSEL	PORTB

	clrf	BCD1	;BCD1 = 0
	clrf	BCD2	;BCD2 = 0
	clrf	BCD3	;BCD3 = 0
	clrf	BCD4	;BCD4 = 0
	clrf	BCD5	;BCD5 = 0
T5	movlw	0x27	;-10000 kölcsönig ismételve
	subwf	BINH,0 	 
	btfss	STATUS,0 	 
	goto	T4 	 
	movwf	BINH 	 
	movlw	0x10 	 
	subwf	BINL,1 	 
	btfss	STATUS,0 	 
	decf	BINH,1 	 
	incf	BCD5,1 	 
	goto	T5 	 
T4	movlw	0x03 	;-1000 kölcsönig ismételve
	subwf	BINH,0 	 
	btfss	STATUS,0 	 
	goto	T3A 	 
	movwf	BINH 	 
	movlw	0xE8 	 
	subwf	BINL,1 	 
	btfss	STATUS,0 	 
	decf	BINH,1 	 
	incf	BCD4,1 	 
	goto	T4 	 
T3A	movlw	0x01 	;-100 kölcsönig ismételve
	subwf	BINH,0 	 
	btfsc	STATUS,0 	;BINH > 0 ?
	goto	T3B 	;ha BINH > 0
	movlw	0x64 	;ha BINH = 0
	subwf	BINL,0 	 
	btfss	STATUS,0 	 
	goto	T2 	 
	movwf	BINL 	 
	incf	BCD3,1 	 
	goto	T3A 	 
T3B	movlw	0x64 	;ha BINH > 0
	subwf	BINL,0 	 
	btfss	STATUS,0 	 
	decf	BINH,1 	 
	movwf	BINL 	 
	incf	BCD3,1 	 
	goto	T3A 	 
T2	movlw	0x0A 	;-10 kölcsönig ismételve
	subwf	BINL,0 	 
	btfss	STATUS,0 	 
	goto	T1 	 
	movwf	BINL 	 
	incf	BCD2,1 	 
	goto	T2 	 
T1	movf	BINL,0 	;W = BINL
	movwf	BCD1 	;BCD1 = BINL

	RETURN

DIVIDE
	BANKSEL	PORTB

	MOVLW	0X00
	MOVWF	OSZTAND_EREDMÉNY_Z  
	MOVLW	0X0B
	MOVWF	OSZTAND_EREDMÉNY_U
	MOVLW	0XCF
	MOVWF	OSZTAND_EREDMÉNY_H
	MOVLW	0X70
	MOVWF	OSZTAND_EREDMÉNY_L 	; 204 336
;OSZTÓ    
	MOVF	SEBH,W
	MOVWF	OSZTÓ_H
	MOVF	SEBL,W
	MOVWF	OSZTÓ_L

OSZT
	MOVLW	D'32'   
	MOVWF	OSZTÓ_CIKLUS
	CLRF	MARADÉK_H   
	CLRF	MARADÉK_L

OSZTÁS 
	BCF	STATUS,C
	RLF	OSZTAND_EREDMÉNY_L,F  
	RLF	OSZTAND_EREDMÉNY_H,F
	RLF	OSZTAND_EREDMÉNY_U,F
	RLF	OSZTAND_EREDMÉNY_Z,F   	; LSB CARRY-be
	RLF	MARADÉK_L,F  		; MARADÉKBA ÁTHOZVA
	RLF	MARADÉK_H,F

	BTFSC	STATUS,C   		; VOLT ÁTVITEL?
	GOTO	KIVON_GO		; HA NEM VOLT AKKOR SIMA KIVONÁS
	MOVF	OSZTÓ_H,W  		 
	SUBWF	MARADÉK_H,W
	BTFSS	STATUS,Z		 
	GOTO	NEM_NULL   		
	MOVF	OSZTÓ_L,W  		
	SUBWF	MARADÉK_L,W
NEM_NULL
	BTFSS	STATUS,C
	GOTO	VAN_MÉG

KIVON_GO
	MOVF	OSZTÓ_L,W  			 
	SUBWF	MARADÉK_L,F
	BTFSS	STATUS,C	     	; VOLT ÁTVITEL?
	DECF	MARADÉK_H,F   		; -1
	MOVF	OSZTÓ_H,W
	SUBWF	MARADÉK_H,F
	BSF	OSZTAND_EREDMÉNY_L,0  	; 1-ES HELYIÉRTÉKBE 1

VAN_MÉG
	DECFSZ	OSZTÓ_CIKLUS,F
	GOTO	OSZTÁS

	RETURN



	END
