
	list p = 18f4520
	#include <p18f4520.inc>
	#include <config_18f4520.cfg>

	#define	rs	LATA,RA3
	#define	rw	LATA,RA1
	#define	e	LATA,RA2
	#define	led	LATC,RC4	
	#define	busy	PORTD,RD7
	#define	menu	PORTC,RC5
	#define	novel	PORTC,RC6
	#define	ok	PORTC,RC7
	#define 	jelz_out	LATE,RE2
	
	szoveg	equ	0x007000
	figyelmeztet	equ	0x007100

	CBLOCK
		t1
		t2
		szam
		sz2
		sz3
		kilenc
		tiz
		mp
		perc
		ora
		w_temp
		status_temp
		bsr_temp
		prell
		csora
		csperc
		equst
	ENDC
	
	

	org 0x00
	goto START
	
	org 0x08
	movwf w_temp
	movff STATUS,status_temp
	movff BSR,bsr_temp

	btfsc, TMR1L,0
	bra $-2
	btfss TMR1L,0
	bra $-2
	
	bsf TMR1H,7
	bcf PIR1,TMR1IF
	incf mp,f
	movlw .59
	cpfsgt mp
	goto endirq
	clrf mp
	incf perc,f
	movlw .59
	cpfsgt perc
	goto endirq
	clrf perc
	incf ora,f
	movlw .23
	cpfsgt ora
	goto endirq
	clrf ora	
	
endirq	movlw b'00010000'
	xorwf LATC,f
	
	movlw .202
	call cmd
	movf mp,w
	movwf szam
	call numbers
	movlw .199
	call cmd
	movf perc,w
	movwf szam
	call numbers
	movlw .196
	call cmd
	movf ora,w
	movwf szam
	call numbers
	
	movff bsr_temp,BSR
	movf w_temp,w
	movff status_temp,STATUS
	retfie
		
START
 	movlw b'01111110'
	movwf OSCCON
	
	movlw b'00001110'
	movwf ADCON1
	movlw 0x07
	movwf CMCON	

	clrf LATA
	clrf LATC
	clrf LATD
	clrf LATE
	movlw .1
	movwf TRISA
	movlw .0
	movwf TRISD
	movwf TRISE
	movlw b'11101111'
	movwf TRISC

; lcd init	
	bcf e
	bcf jelz_out

	call wait
	
	movlw .48
	call cmd
	call wait
	
	movlw .48
	call cmd
	call wait
	
	movlw .48
	call cmd
	call wait
	
	movlw b'00111100'
	call cmd

	movlw b'00001000'
	call cmd

	movlw b'00000001'
	call cmd

	movlw b'00000110'
	call cmd

	movlw b'00001100'
	call cmd

	movlw UPPER(szoveg)
	movwf TBLPTRU
	movlw HIGH(szoveg)
	movwf TBLPTRH
	movlw LOW(szoveg)
	movwf TBLPTRL
textread	TBLRD*+
	movf TABLAT,w
	btfsc STATUS,Z
	goto countinue
	call dat
	goto textread
	
countinue	movlw b'11000000'	;új sor
	call cmd
	
	movlw 0x80
	movwf TMR1H
	clrf TMR1L
	movlw b'00001111'
	movwf T1CON
	
	movlw b'11000000'
	movwf INTCON
	
	bsf PIE1,TMR1IE
	
	movlw b'11000100'
	call cmd
	
	movlw .7
	movwf ora
	movwf szam
	call numbers
	movlw ':'
	call dat
	movlw .44
	movwf perc
	movwf szam
	call numbers
	movlw ':'
	call dat
	movlw .0
	movwf mp
	movwf szam
	call numbers
	
	bcf jelz_out

;ITT EZ AZ EGÉSZ OLYAN MINT HA NEM IS LENNE, A GOMBNYOMÁSRA SEM REAGÁL ÉS A JELZÉST SEM ADJA EGYEZÉS ESETÉN
;-------------------------------------------------------------------------	
cs_start
	movlw UPPER(figyelmeztet)
	movwf TBLPTRU
	movlw HIGH(figyelmeztet)
	movwf TBLPTRH
	movlw LOW(figyelmeztet)
	movwf TBLPTRL

	
polling	movf mp,w			;azt szeretném, ha minden 0. mp-ben vizsgálná a táblát, elég az, nem?
	xorlw .0
	btfss STATUS,Z
	goto gombnyomi

jelzesciklus

	tblrd*+
	movff TABLAT,csora
	movf ora,w
	xorwf csora,w
	movwf equst

	tblrd*+
	movff TABLAT,csperc
	movf perc,w
	xorwf csperc,w
	iorwf equst,w
	bnz noteq
		
	bsf jelz_out
	call wait_jelz_out				
noteq
	incf csperc,w
	incf csora,f
	iorwf csora,w 
	bnz jelzesciklus
	goto cs_start

;--------------------------------------------------------------------------------------

gombnyomi
	btfsc menu
	goto polling

	bcf PIE1,TMR1IE
	bsf led
	
	clrf mp
	
	movlw .202
	call cmd
	movlw .0
	movwf szam
	call numbers
	movlw .197
	call cmd
	movlw b'00001111'
	call cmd
		
	call delay
	call delay
	
	
setting	btfsc menu
	goto no_menu
	movlw .200
	call cmd
	
	call delay
	call delay
	goto percbe
	
no_menu	btfsc novel
	goto no_novel
	incf ora,f
	movlw .24
	bsf STATUS,C		
	subwfb ora,w
	btfss STATUS,Z
	goto kkk
	movlw .0
	movwf ora
	
kkk	
	movlw .196
	call cmd
	movf ora,w
	movwf szam
	call numbers
	
	movlw .197
	call cmd
	
	call delay
	call delay
	goto no_menu
	
no_novel	btfsc ok
	goto setting
	movlw b'00001100'
	call cmd
	bsf PIE1,TMR1IE
	bcf led
	goto polling
	
percbe
	btfsc novel
	goto leok
	incf perc,f
	movlw .59
	bsf STATUS,C		
	subwfb perc,w
	btfss STATUS,Z
	goto kkp
	movlw .0
	movwf perc
	
kkp	
	movlw .199
	call cmd
	movf perc,w
	movwf szam
	call numbers
	
	movlw .200
	call cmd
	
	call delay
	call delay
	goto percbe
	
leok	btfsc ok
	goto percbe
	movlw b'00001100'
	call cmd
	bsf PIE1,TMR1IE
	bcf led
	goto polling
	

	
;számkonvertálás	

numbers	movlw .0
	movwf sz2
	movwf sz3
	movlw .10
	movwf tiz
	movlw .9
	movwf kilenc
ketszamjegy	movf szam,w
	cpfslt kilenc
	goto kisebb9
	incf sz2
	bsf STATUS,C
	subfwb tiz,w
	movwf szam
	btfss STATUS,Z
	goto ketszamjegy
	movlw .0
kisebb9	movwf sz3	
	movf sz2,w
	bcf STATUS,C
	addlw 0x30
	call dat
	movf sz3,w
	bcf STATUS,C
	addlw 0x30
	call dat
	return	
	
wait	movlw 0xff	
            	movwf t1
 	movlw 0x03		
           	movwf t2
loop	decfsz t1,1
            	goto loop
	decfsz t2,1
            	goto loop
	return
	
cmd	bcf rs
	goto toggle
dat	bsf rs
	nop
	nop
toggle	movwf LATD
	bsf e
	nop
	nop
	bcf e
	call busy_check
	return
	

busy_check
	bsf rw
	bcf rs
	movlw 0xff
	movwf TRISD
	bsf e
	nop
	btfsc busy
	goto $-3
	bcf e
	movlw 0x00
	movwf TRISD
	bcf rw
	return
	
delay
	movlw .255
	movwf prell
ww	call wait
	decfsz prell
	goto ww
	return
	
wait_jelz_out	movlw 0xff	
            	movwf t1
 	movlw 0xff		
           	movwf t2
loop_r	decfsz t1,1
            	goto loop_r
	decfsz t2,1
            	goto loop_r
	return	
	
	org szoveg
	   ;0123456789ABCDEF
	db "Elso oram       ",0
	
	org figyelmeztet
	db .6,.0
	db .11,.55
	db .15,.0
	db .19,.15
	db .22,.30
	db .255,.255
	
END