	LIST P=18F452
	INCLUDE "P18F452.INC"

;1 cycle= 100ns
;fosc/4=Tcy
;------------------
;Timer1
;fosc/4/Prescaler*(ciklusszám*(1vagy2vagy3)=
;20MHz/4/256*(ciklusszám*3)=
;0,1536 ms - 10 066 ms (10sec)
;AA00~1s
;FFF8~1ms
;-------------[ PROGRAM KEZDETE ]-----------------------------
	ORG	0X200		;EZ A KEZDŐCÍM A LETÖLTŐ MIATT
	BRA	START

	org 0x208	;high priority interrupt
	bra	highint
	

	org 0x218	;low priority interrupt
	bra lowint

CBLOCK 0X0000
	A1
	A2
	STATUS_SAVE
	W_SAVE
ENDC

#DEFINE	RS	PORTA,0	
#DEFINE	RW	PORTA,1	
#DEFINE	EN	PORTA,2	

START
;Beállítások---------------------
	clrf	PORTD
	clrf	TRISD
	movlw	00h
	movwf	A1
	movlw	00h
	movwf	A2


;Timer reg beállíása
	movlw	b'10000111';7.bit 1-b állítása lindíja a timert; az uolsó 3 bit az oszó,csak progiból írható
	movwf	T0CON

;INTCON beállítása
	movlw	b'11100000'
	movwf	INTCON 


	clrf	PORTA
	clrf	TRISA
	clrf	PORTC
	clrf	TRISC

;Program kezdete------------------
;display beállítás kezdete--------
	call	varakozik	;15ms kell vaárni legalább mig táp eléri 4,5V
	call	funkcio_set
	call	varakozik	;4,1ms kell várni legalább
	call	funkcio_set
	call	varakozik
	call	funkcio_set	;100us kell várni legalább
	call	varakozik
	bcf		RS			;display off
	bcf		RW		 
	movlw	b'00001000'
	movwf	PORTC
	bsf		EN
	nop
	bcf		EN
	call	varakozik
	bcf		RS			;display off
	bcf		RW		 
	movlw	b'00001000'
	movwf	PORTC
	bsf		EN
	nop
	bcf		EN
	call	varakozik
	bcf		RS			;entry mode set
	bcf		RW		 
	movlw	b'00000110'
	movwf	PORTC
	bsf		EN
	nop
	bcf		EN
	call	varakozik
;display beállítás vége--------


	bcf		RS				;display on
	bcf		RW		 
	movlw	0Fh
	movwf	PORTC
	bsf		EN
	nop
	bcf		EN
	call	varakozik

	bcf		RS		;képernyőtörlése és vissza a cim0-ra
	bcf		RW		 
	movlw	01h
	movwf	PORTC
	bsf		EN
	nop
	bcf		EN
	call	varakozik
	
	bsf		RS		;'A' betu kirajzolasa
	bcf		RW
	movlw	41h
	movwf	PORTC
	bsf		EN		;enable
	nop
	bcf		EN
		

ide
	goto	ide


highint
	movff	STATUS,STATUS_SAVE	;regiszterek elmentése
	movwf	W_SAVE
	bcf		INTCON,2
	;incf	A1,1
	;movf	A1,0
	;movwf	PORTD
	btg	PORTD,2

	movlw	0AFh
	movwf	TMR0H				;A TMR0H-ba csak akkor kerül bele az érték, ha utána az L-be is írunk!
	movlw	0Eh				;Minél nagyobb éréket adok be, annál kevesebbet számol (fölfele számol).
	movwf	TMR0L
	movff	STATUS_SAVE,STATUS	;regiszerek visszaállítása
	movf	W_SAVE,0
RETFIE

lowint
	movlw 	05h
	movwf	PORTD
RETFIE

varakozik
var	
	decfsz	A2,0	;A2 kezdeti éréke 00
	goto	var		

RETURN

funkcio_set
	bcf		RS				;funkcio set
	bcf		RW		 
	movlw	b'00110000'
	movwf	PORTC
	bsf		EN
	nop
	bcf		EN
RETURN

END




	



