
LIST P=16F877

	ERRORLEVEL 1
	#INCLUDE	<P16F877.INC>

	__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF


	

;------------------------ MAKRÓK MEGADÁSA ---------------------------


BANK0: MACRO
			BCF STATUS,RP0
			BCF STATUS,RP1
			ENDM

BANK1: MACRO
			BSF STATUS,RP0
			BCF STATUS,RP1
			ENDM

BANK2: MACRO
			BCF STATUS,RP0
			BSF STATUS,RP1
			ENDM

BANK3: MACRO
			BSF STATUS,RP0
			BSF STATUS RP1
			ENDM


;--------------------DEKLARÁLÁS------------------------


		CBLOCK	20H

		SZAMLALO1
		SZAMLALO2
		KESLELTET
		EREDMENY
		BCD
		WSAVE
		HELYIERTEK1	;KIJELZŐ BEÁLLÍTÁS ÉRTÉKE
		HELYIERTEK2	;KIJELZŐ BEÁLLÍTÁS ÉRTÉKE
		HELYIERTEK3	;KIJELZŐ BEÁLLÍTÁS ÉRTÉKE
		HELYIERTEK4	;KIJELZŐ BEÁLLÍTÁS ÉRTÉKE
		BCD1		;EGYESEK SZÁMA
		BCD2		;TÍZESEK SZÁMA
		BCD3		;SZÁZASOK SZÁMA
		BCD4		;EZRESEK SZÁMA
		BINL
		BINH

		ENDC




		ORG 	0x00
		GOTO 	INIT
		ORG 	0x04
		GOTO 	INT_SERV
		GOTO	START
	

;---------------------- INICIALIZÁLÁS ---------------------

INIT

		BANK1
		MOVLW 0xFF
		MOVWF TRISA
		MOVLW b'00000111'		; TMR0 1:256
		MOVWF OPTION_REG
		MOVLW b'11100000'		; GIE,PIE,TMR0IE
		MOVWF INTCON
		MOVLW b'00000100'
		MOVWF ADCON1

		BANK0
		MOVLW b'01000000'		; Fosc/8
		MOVWF ADCON0



		BANK1				;BANK VÁLTÁS
   		MOVLW   B'00000000'		;AZ 1-ES BIT BEMENET, A 0-ÁS BIT KIMENET
       		MOVWF   TRISC			;ALAPBÓL MIND BEMENET, TEHÁT ELÉG CSAK 
						;A KIMENETEKET DEKLARÁLNI
		BANK0		
		MOVLW   B'11111111'
		MOVWF	PORTC

		BANK1		
   		MOVLW   B'00000000'	
       		MOVWF   TRISD			
					
		BANK0		
		MOVLW   B'00000000'
		MOVWF	PORTD

	
		GOTO START
	




INT_SERV

		MOVWF	WSAVE
		BCF 	INTCON,GIE
		BCF 	INTCON,T0IF
		BSF 	ADCON0,ADON
		MOVLW 	0x19
		MOVWF 	KESLELTET
		DECFSZ 	KESLELTET
		GOTO 	$-1
		BSF 	ADCON0,2
		BTFSC 	ADCON0,2
		GOTO 	$-1
		BCF 	ADCON0, ADON
		MOVF 	ADRESH,W
		MOVWF 	EREDMENY

		MOVFW	WSAVE
		BSF 	INTCON,GIE
		
		RETFIE



;--------------------- FŐPROGRAM KEZDETE ----------------------

START
	
	CLRF	HELYIERTEK1
	CLRF	HELYIERTEK2
	CLRF	HELYIERTEK3
	CLRF	HELYIERTEK4

;---------------------------------------------- ÉRTÉKEK FELTÖLTÉSE

	MOVF 	EREDMENY,W

	;MOVLW	D'123'	
		
	MOVWF	BINL			;A KIÍRANDÓ SZÁM ELSŐ BÁJTJA (0-255)
	MOVLW	D'0'
	MOVWF	BINH			;A KIÍRANDÓ SZÁM MÁSODIK BÁJTJA (0-3)
	CALL	KONVERZIO




	MOVFW	BCD1
	MOVWF	BCD
	CALL	ERTEKADAS
	MOVWF	HELYIERTEK1

	MOVFW	BCD2
	MOVWF	BCD
	CALL	ERTEKADAS
	MOVWF	HELYIERTEK2

	MOVFW	BCD3
	MOVWF	BCD
	CALL	ERTEKADAS
	MOVWF	HELYIERTEK3

	MOVFW	BCD4
	MOVWF	BCD
	CALL	ERTEKADAS
	MOVWF	HELYIERTEK4


	CALL	KIIRAT

	GOTO	START






;-------------------- KÉSLELTETŐ RUTIN ----------------------

                                
DELAY                          
		MOVLW	D'40'                 	
		MOVWF	SZAMLALO1
		MOVLW	D'5'
		MOVWF	SZAMLALO2
		GOTO	KESL1

DELAYHOSSZU

		MOVLW	D'250'                 	
		MOVWF	SZAMLALO1
		MOVLW	D'200'
		MOVWF	SZAMLALO2
    	
KESL1
		DECFSZ	SZAMLALO1
		GOTO    KESL1
		DECFSZ	SZAMLALO2
		GOTO    KESL1
    		RETURN

;------------------------------------------------- BCD konverzió ------------------------


KONVERZIO
	 	 
 	clrf	BCD1	;BCD1 = 0
 	clrf	BCD2	;BCD2 = 0
 	clrf	BCD3	;BCD3 = 0
 	clrf	BCD4	;BCD4 = 0
	 
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


;-------------------------------------------------- ÉRTÉKADÁS -------------------

ERTEKADAS

	BCF	BCD,7
	BCF	BCD,6
	BCF	BCD,5
	BCF	BCD,4

	INCF	BCD

	DECFSZ	BCD
	GOTO	TESZT1
	CALL	NULLA
	GOTO	VEGE
TESZT1
	DECFSZ	BCD
	GOTO	TESZT2
	CALL	EGY
	GOTO	VEGE
TESZT2
	DECFSZ	BCD
	GOTO	TESZT3
	CALL	KETTO
	GOTO	VEGE
TESZT3
	DECFSZ	BCD
	GOTO	TESZT4
	CALL	HAROM
	GOTO	VEGE
TESZT4
	DECFSZ	BCD
	GOTO	TESZT5
	CALL	NEGY
	GOTO	VEGE
TESZT5
	DECFSZ	BCD
	GOTO	TESZT6
	CALL	OT
	GOTO	VEGE
TESZT6
	DECFSZ	BCD
	GOTO	TESZT7
	CALL	HAT
	GOTO	VEGE
TESZT7
	DECFSZ	BCD
	GOTO	TESZT8
	CALL	HET
	GOTO	VEGE
TESZT8
	DECFSZ	BCD
	GOTO	TESZT9
	CALL	NYOLC
	GOTO	VEGE
TESZT9
	DECFSZ	BCD
	GOTO	TESZT1
	CALL	KILENC

VEGE
	RETURN




;------------------------------------------------------ KIJELZŐ BEÁLLÍTÁSAI ------------------

NULLA	
		RETLW   B'11000000'		;0
EGY
		RETLW   B'11110011'		;1
KETTO	
		RETLW   B'10100100'		;2
HAROM	
		RETLW   B'10100001'		;3
NEGY	
		RETLW   B'10010011'		;4
OT
		RETLW   B'10001001'		;5	
HAT
		RETLW   B'10001000'		;6		
HET
		RETLW   B'11100011'		;7	
NYOLC	
		RETLW   B'10000000'		;8
KILENC	
		RETLW	B'10000001'		;9		




KIIRAT

	BANK0
	MOVFW	HELYIERTEK1
	MOVWF	PORTC
	MOVLW   B'00000001'
	MOVWF	PORTD
	CALL	DELAY
	CLRF	PORTD

	MOVFW	HELYIERTEK2
	MOVWF	PORTC
	MOVLW   B'00000010'
	MOVWF	PORTD
	CALL	DELAY
	CLRF	PORTD

	MOVFW	HELYIERTEK3
	MOVWF	PORTC
	MOVLW   B'00000100'
	MOVWF	PORTD
	CALL	DELAY
	CLRF	PORTD

	MOVFW	HELYIERTEK4
	MOVWF	PORTC
	MOVLW   B'00001000'
	MOVWF	PORTD
	CALL	DELAY
	CLRF	PORTD
	RETURN

 	END


