			

	#include <p16F690.inc>
	__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)


			CBLOCK	0x70
			T1
			T2
			STATUS_TEMP
			W_TEMP
			SZAM1	
			WTREG0
			TEMP0
			TEMP1
		
			ENDC	

		
	
			#DEFINE	LCDAT0					PORTC,0			;PIC RC0 lába összekötve az LCD "D0" adatlábával
			#DEFINE	LCDAT1					PORTC,1			;PIC RC1 lába összekötve az LCD "D1" adatlábával
			#DEFINE LCDAT2					PORTC,2			;PIC RC2 lába összekötve az LCD "D2" adatlábával
			#DEFINE	LCDAT3					PORTC,3			;PIC RC3 lába összekötve az LCD "D3" adatlábával
			#DEFINE	LCDAT4					PORTC,4			;PIC RC4 lába összekötve az LCD "D4" adatlábával
			#DEFINE	LCDAT5					PORTC,5   		;PIC RC5 lába összekötve az LCD "D5" adatlábával
			#DEFINE	LCDAT6					PORTC,6   		;PIC RC6 lába összekötve az LCD "D6" adatlábával
			#DEFINE	LCDAT7					PORTC,7  		;PIC RC7 lába összekötve az LCD "D7" adatlábával
			#DEFINE RS						PORTB,6			;PIC RB6 lába összekötve az LCD "RS" (Register Select) vetérlő lábával
			#DEFINE	RW						PORTB,4			;PIC RB4 lába összekötve az LCD "RW" (Read / Write) vezérlő lábával
			#DEFINE	ENA						PORTB,5			;PIC RB5 lába összekötve az LCD "E" (ENABLE) vezérlő lábával
		
		
			hanyados	equ	20h
			maradek		equ	21h
			osztando	equ	22h
			oszto		equ	23h
			temp1		equ	24h
			temp2		equ	25h
			temp3		equ	26h
			szam		equ	27h
		
			ORG 0
			GOTO	START
		
			ORG	4
			GOTO	INT
		

;------------------------------------------- Regiszterek elmentése -----------------------------------------------------------

			
INT			MOVWF 	W_TEMP   				;W regiszter mentése
			SWAPF	STATUS,W				;STATUS a W be
			CLRF 	STATUS   				;STATUS reg törölve
			MOVWF 	STATUS_TEMP 			;Status_temp -be beletölti  W tartalmát 


;---------------------------------------- Megszakítás  jelzőbit törlése ------------------------------------------------------
	 
			BCF	 PIR1,6

;---------------------------------------- Megszakításban végrehajtandó feladat -----------------------------------------------
			

			

	
			BCF		RS		

			MOVLW	B'11000011'				; LCD címzése a §43 as helyre (LCD alsó sorának közepe)
			MOVWF	PORTC
			BCF		ENA
			CALL	KESL100
			BSF		ENA	

			BSF		RS						;"Register Select" (RS) átállítása parancsfogadásról adat fogadására ("0" ról "1" re)


			swapf	ADRESH,w				; Copy the display to the LEDs
			call	BINASCII
		
	
		


		
		
;----------------------------------------------------------------------------------------------------------------------------


			SWAPF	STATUS_TEMP,W
			MOVWF 	STATUS
			SWAPF	W_TEMP,F
			SWAPF	W_TEMP,W

			RETFIE							;Megszakításból visszatér a programba
		


		

START		

			

			MOVLW	B'00000000'	
			MOVWF	PIR1
			MOVLW	B'11000000'
			MOVWF	INTCON					;Összes megszakítás engedélyezése
									

		
			BSF		STATUS,RP0				;Váltás BANK1 be
			MOVLW	B'11001111'	
			MOVWF	OPTION_REG
			MOVLW	B'01100000'				;Belső oszcillátor frekvencia 4 Mhz
			MOVWF	OSCCON
			
			MOVLW	B'00000001'				;PORTA RP0 bemenet
			MOVWF	TRISA
			MOVLW	B'00000000'				;PORTB mind kimenet
			MOVWF	TRISB
			MOVLW	B'00000000'				;PORTC mind kimenet
			MOVWF	TRISC

			bcf		STATUS,RP0				;Vissza BANK0 ba

			bcf		STATUS,RP0				;Váltáa BANK2 be
			bsf		STATUS,RP1	

			movlw	B'00000001'				;RA0 láb analóg, a többi digitális
			movwf	ANSEL

			movlw	B'00000000'				;Digitális láb mindegyik
			movwf	ANSELH
			
	
			bcf		STATUS,RP1				;Vissza BANK0 ba

			clrf	PORTC					;PORTC reset

			
		
		
		
		

			BCF		RS						;Register select parancs állásban
			BCF		RW						;LCD re írás kiválasztása
			BSF		ENA						;ENABLE alap állapotának meghatározása ( "1")
			
;---------------------------------------------------------------------------------------------------------------------------------		
								;LCD parancsok alapbeállításai (az LCD alapműködésének meghatározása)
;---------------------------------------------------------------------------------------------------------------------------------
		
			CALL	DELAY2



			MOVLW	B'00001100'				;LCD kijelző bekapcsolása, villogó / aláhúzott kurzorral
			MOVWF	PORTC

			BCF		ENA						;Adatvonal leolvasása ENABLE földrehúzásával (RA7 logikai "0" re állítása)
			CALL	KESL16					
			BSF		ENA						;ENABLE alaphelyzetbe állítása (RA7 logikai "1" re állítása)

	
			MOVLW	B'00111000'				;Funkciók (8 bites adatátvitel , kétsoros üzemmód,  5 X 7 karakterméret)
			MOVWF	PORTC
			BCF		ENA
			CALL	KESL16
			BSF		ENA					
		
		
			MOVLW	B'00000001'				;LCD kijelző törlése
			MOVWF	PORTC
			BCF		ENA
			CALL	KESL16
			BSF		ENA	

			CALL	DELAY2



			MOVLW	B'00001100'				;LCD kijelző bekapcsolása, villogó / aláhúzott kurzorral
			MOVWF	PORTC

			BCF		ENA						;Adatvonal leolvasása ENABLE földrehúzásával (RA7 logikai "0" re állítása)
			CALL	KESL16					
			BSF		ENA						;ENABLE alaphelyzetbe állítása (RA7 logikai "1" re állítása)

	
			MOVLW	B'00111000'				;Funkciók (8 bites adatátvitel , kétsoros üzemmód,  5 X 7 karakterméret)
			MOVWF	PORTC
			BCF		ENA
			CALL	KESL16
			BSF		ENA					
		
		
			MOVLW	B'00000001'				;LCD kijelző törlése
			MOVWF	PORTC
			BCF		ENA
			CALL	KESL16
			BSF		ENA	

	

			BSF		RS						;"Register Select" (RS) átállítása parancsfogadásról adat fogadására ("0" ról "1" re)
	
			CALL	DELAY2
		
			MOVLW	B'01010011'				; "S"
			MOVWF	PORTC
			BCF		ENA
			CALL	KESL100
			BSF		ENA	

		

			MOVLW	B'01101001'				; "i"
			MOVWF	PORTC
			BCF		ENA
			CALL	KESL100
			BSF		ENA	


			MOVLW	B'01100111'				; "g"
			MOVWF	PORTC
			BCF		ENA
			CALL	KESL100
			BSF		ENA	

		

			MOVLW	B'01101110'				; "n"
			MOVWF	PORTC
			BCF		ENA
			CALL	KESL100
			BSF		ENA	

			MOVLW	B'01100001'				; "a"
			MOVWF	PORTC
			BCF		ENA
			CALL	KESL100
			BSF		ENA	
		

			MOVLW	B'01101100'				; "l"
			MOVWF	PORTC
			BCF		ENA
			CALL	KESL100
			BSF		ENA	
		

			MOVLW	B'00111010'				;  " : "
			MOVWF	PORTC
			BCF		ENA
			CALL	KESL100
			BSF		ENA	
		
					
		
		
;-----------------------------------------------FŐPROGRAM-------------------------------------------------------------------------

START1
			bsf		STATUS,RP0				; select Register Page 1
			BSF		PIE1,ADIE
			movlw	0xFF
			movwf	TRISA					; Make PortA all input
			clrf	TRISC					; Make PortC all output
			movlw	B'01100000'				; A2D Clock Fosc/64
			movwf	ADCON1
			bcf		STATUS,RP0				; back to Register Page 0
			
		
			bcf		STATUS,RP0				; address Register Page 2
			bsf		STATUS,RP1	
			movlw	0x01					; Make PortA bit 0 pin Analog
			movwf	ANSEL
			bcf		STATUS,RP0				; address Register Page 0
			bcf		STATUS,RP1
			
			movlw	B'00000001'
			movwf	ADCON0					; configure A2D for Channel 0 (RA0), Left justified, and turn on the A2D module
		
MainLoop
		
			nop								; wait 10uS for A2D amp to settle and capacitor to charge.
			nop								; wait 1uS
			nop								; wait 1uS
			nop								; wait 1uS
			nop								; wait 1uS
			nop								; wait 1uS 
			nop								; wait 1uS
			nop								; wait 1uS
			nop								; wait 1uS
			nop								; wait 1uS
			CALL	KESL100
			bsf		ADCON0,GO				; start conversion
			btfsc	ADCON0,GO				; this bit will change to zero when the conversion is complete
			goto	$-1
			swapf	ADRESH,w	
		
			goto	MainLoop
		
		
			
		
		
		
			
			
	

;------------------------------------------------------------------------------------------------------
;									Késleltető rutinok
;------------------------------------------------------------------------------------------------------


KESL16:										;Parancs késleltetése
				MOVWF	SZAM1
				DECFSZ	SZAM1
				GOTO	$-1
			
		
			
				RETURN

;-----------------------------------------------------------------------------------------------------

KESL100:									;Adat késleltetése
	
				MOVLW 	20
				MOVWF	SZAM1
				DECFSZ	SZAM1
				GOTO	$-1
				RETURN
;-----------------------------------------------------------------------------------------------------			
			
DELAY10		
				MOVWF	WTREG0
DLY1			GOTO	$+1
				GOTO	$+1
				NOP
				DECFSZ	WTREG0,F
				GOTO	DLY1
				RETURN
;------------------------------------------------------------------------------------------------------	

DELAY2			MOVLW	d'255'
				MOVWF	T1
				MOVLW	d'255'
				MOVWF	T2
			
DEL22:
				NOP
				NOP
				NOP
				NOP	
				NOP
				NOP
				NOP
				NOP
				NOP
				NOP
	
DEL3:	
				DECFSZ	T2,f
				GOTO	DEL3
				DECFSZ	T1,f
				GOTO	DEL22
				
				RETURN

;---------------------------------------------------- BIN / ASCII CONVERTER -----------------------------------------------------
BINASCII		
			
			
				movwf	osztando
				movlw	d'100'
				movwf	oszto
				call	osztas8	
				movfw	hanyados
				addlw	d'48'			; + 48 
			

				MOVWF	PORTC
				BCF		ENA
				CALL	KESL100
				BSF		ENA	
		
				movfw	maradek
				movwf	osztando
				movlw	d'10'
				movwf	oszto
				call	osztas8	
				movfw	hanyados
				addlw	d'48'			; + 48
				

				MOVWF	PORTC
				BCF		ENA
				CALL	KESL100
				BSF		ENA	
		
				movfw	maradek
				movwf	osztando
				movlw	d'1'
				movwf	oszto
				call	osztas8	
				movfw	hanyados
				addlw	d'48'			; + 48
			

				MOVWF	PORTC
				BCF		ENA
				CALL	KESL100
				BSF		ENA	
			

		
	
osztas8			movlw	d'1'
				movwf	hanyados
				clrf	maradek
osztas8_1		rlf		osztando
				rlf		maradek
				movfw	oszto
				subwf	maradek,w
				skpnc
				movwf	maradek
				rlf		hanyados
				bnc		osztas8_1
				return
		
				
					END
;--------------------------------------------------------------------------------------------------------------------------------






				

