#include <p16F887.inc>
	__CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
	__CONFIG    _CONFIG2, _WRT_OFF & _BOR21V

;-------------------------------------------------------------------------------
Timer1          equ     32
Timer2          equ     33
Counter			equ		34
Pointer			equ		35
;-------------------------------------------------------------------------------
; PORTE kivezetések
;
RS              equ     0               ; 0= utasítás, 1= adat reg. választás
RdWr		equ	1		; R/W=0 LCD írás, R/W=1 LCD memória olvasás
E               equ     2               ; 0= LCD tiltás, 1= engedélyezés
;-------------------------------------------------------------------------------
;
                org     0
;===============================================================================
; Port beállítás
;
	    clrf    PORTD
            clrf    PORTE
Start		

		bsf STATUS,RP1
		bsf STATUS,RP0 		; ez a bank 3 kiv laszt s
		clrf ANSEL 		; ANS0 - 7-ig Digit lis be llˇt s
		bcf STATUS,RP1	
		bsf	STATUS,RP0	; bank1 kiválasztás
		movlw	B'11111111'	; PORTA bemenet
		movwf	TRISA
		clrf	TRISD		; PORTD kimenet
		clrf	TRISE		; PORTE kimenet
		bcf	STATUS,RP0	; bank0 kiválasztás
;-------------------------------------------------------------------------------
; LCD kijelző inicializálása 
;
;

		

		bsf	PORTE,RS	; LCD parancs következik
 
		call Kesl100

		bcf	PORTE,RS	; LCD parancs következik
		movlw   56              ; 38h=56 dec, 8 bit interface set
                call    Write
                call    Kesl		; Busy flag olvasását "helyettesíti"

		
		movlw   56
                call    Write

		movlw   6               ; 06h, Entry mode set: increment
                call    Write
                
		movlw   b'00001100'     ; 0dh, Display on, cursor/blink off
                call    Write
                movlw   16              ; 10h, Display/cursor shift: cursor
                call    Write

                movlw   1               ; 01h, Display clear
                call    Write
                call    Kesl2		; Busy flag olvasását "helyettesíti"

                movlw   b'00000011'               ; 01h, Display clear
                call    Write
                call    Kesl2		; Busy flag olvasását "helyettesíti"

;-------------------------------------------------------------------------------
; Adatküldés LCD-re
		bcf	PORTE,RS	; LCD parancs
                movlw   128            ; LCD cím= 0 (+128), első LCD sor
                call    Write;
		bsf	PORTE,RS	; LCD adat következik
		movlw	16		; 15 adat kiiratása
		movwf	Counter
		clrf	Pointer	 
Start1		movf	Pointer,0
		call	LCD_Tabla		
		incf	Pointer,1
		decfsz	Counter,1
		goto	Start1
;-------------------------------------------------------------------------------
		bcf	PORTE,RS	; LCD parancs
                movlw   192             ; LCD cím= 40h (+128), második sor
                call    Write
		bsf	PORTE,RS	; LCD adat következik
		movlw	16		; 15 adat kiiratása
		movwf	Counter
Start2		movf	Pointer,0
		call	LCD_Tabla
                call    Write
		incf	Pointer,1
		decfsz	Counter,1
		goto	Start2
;-------------------------------------------------------------------------------
Stop		goto	Stop		; resetre vár
;===============================================================================
;
;
;-------------------------------------------------------------------------------
LCD_Tabla	addwf	PCL,1
		dt	"123456789ABCDEFG" ;1.sor
                dt      "HIJKLMNOPQRSTUVW"  ;2.sor

;-------------------------------------------------------------------------------

Write           movwf   PORTD
                call    Kesl100		; Busy flag olvasását "helyettesíti"
		bsf     PORTE,E
                call    Kesl100		; Busy flag olvasását "helyettesíti"
		bcf     PORTE,E
                return
;-------------------------------------------------------------------------------
Kesl100         movlw   165		; 100us késleltetés
                movwf   Timer1
Kesl1		decfsz  Timer1,1
                goto    Kesl1
                return
;-------------------------------------------------------------------------------
Kesl2           clrf    Timer1		; 2ms késleltetés
                movlw	30
		movwf   Timer2
Kesl21          call	Kesl100
                decfsz  Timer2,1
                goto    Kesl21
                return
;-------------------------------------------------------------------------------
Kesl		call	Kesl2
                call    Kesl2
                call    Kesl2
                call    Kesl2
                call    Kesl2
		return			; 5x2ms késleltetés
;-------------------------------------------------------------------------------
                end