      LIST P=16F628;f=inhx8m
        #include "P16F628.INC"
	__CONFIG	_PWRTE_ON  & _WDT_OFF & _HS_OSC & _BODEN_OFF & _LVP_OFF & _CP_OFF & _MCLRE_OFF
	errorlevel -302
;
	cblock 0x70		;70h-7Fh minden bankból elérhető
	 w_temp			;70h cimre kerül
	 pclath_temp		;71h
	 status_temp		;72h
	 TEMP0			;73h
	 TEMP1			;74h
	endc
;
#define BRIGHT		PORTB,0
#DEFINE LCD_EN		PORTA,0
#DEFINE LCD_RW		PORTA,1
#DEFINE LCD_RS		PORTA,2
#DEFINE LCD_PORT	PORTB
#DEFINE LCD_TRIS	TRISB
;-----------------------------------------------------------
;-----------------------------------------------------------
	ORG	0x00
	GOTO	START
;
	ORG	0x04
	bcf	INTCON,INTF	; jelzőbit törlése
	movwf   w_temp          ; W      mentése
	movf    STATUS,w        ; STATUS mentése
	movwf   status_temp
	movf    PCLATH,w        ; PCLATH mentése
	movwf   pclath_temp
	banksel CCPR1L
	addlw	0x04
	addwf	CCPR1L
	banksel	pclath_temp	; Ugrás abba a bankba vissza, ahova mentettünk
	movf	pclath_temp,w   ; PCLATH visszaállítása
	movwf	PCLATH
	movf	status_temp,w   ; STATUS visszaállítása
	movwf	STATUS
	swapf	w_temp,f        ; W visszaállítása
	swapf	w_temp,w
	retfie  
;-----------------------------------------------------------
;------------------ PIC élesztése --------------------------
;-----------------------------------------------------------
START	CLRF	PORTA		; Clear PortA
	CLRF	PORTB		; Clear PortB
	movlw	0x07		; Turn comparators off and enable pins for I/O 
	movwf	CMCON
	CLRW		
	bcf	STATUS,RP1
	BSF	STATUS,RP0	; Select Bank 1
	CLRF	TRISA		; Set Port A to output
	movlw	b'00000001'
	movwf	TRISB
	BCF	STATUS,RP0	; Select Bank 0
	clrf	PORTA
	clrf	PORTB
;-----------------------------------------------------------
;---------------- LCD inicializálása -----------------------
;-----------------------------------------------------------
	BCF	LCD_RS          ; LCD Register select
	MOVLW	d'150'          ; 15 ms késleltetés
	CALL   	Delay_100µs
	MOVLW 	b'00110000'     ; Function set
	CALL   	LCD_Nybble
	MOVLW	d'41'           ; 4,1 ms késleltetés
	CALL   	Delay_100µs
	MOVLW	b'00110000'     ; Function set
	CALL   	LCD_Nybble
	MOVLW	d'1'            ; 100 µs késleltetés
	CALL   	Delay_100µs
	MOVLW	b'00110000'     ; Function set
	CALL   	LCD_Nybble
	MOVLW	d'1'            ; 100 µs késleltetés
	CALL   	Delay_100µs
	MOVLW	b'00100000'     ; 4 bites :  -- 0 0 1 0 0 0 0 0
	CALL   	LCD_Nybble
	MOVLW	d'1'            ; 100 µs késleltetés
	CALL   	Delay_100µs
	MOVLW	b'00101000'     ; Fonction  : -- 0 0 1 DL N F X X
	CALL	LCD_Cmd
	MOVLW	b'00001000'     ; Turn off Display -- 0 0 0 0 1 0 0 0
	CALL	LCD_Cmd
	CALL	LCD_Clear       ; Kijelző törlés
	MOVLW	b'00000110'     ; Mode "Entry" : -- 0 0 0 0 0 1 ID S
	CALL	LCD_Cmd
	MOVLW	b'00001100'     ; Display On/Off : -- 0 0 0 0 1 D C B
	CALL	LCD_Cmd
;
	MOVLW	0x40		; cg ram első cime
	CALL	LCD_Cmd
;
	movlw	0
	movwf	EE_cime		; kezdőcím beállítása
;
olvas	movf	EE_cime,w
	call	RD_EE
	call	LCD_Txt
	incf	EE_cime,1
	swapf	EE_cime,w
	xorlw	b'10000111'
	btfss	STATUS,Z
	goto	olvas
;	továbbmegy, ha feltöltötte  16  x8 eprom adatot
	CALL	LCD_Clear       ; Kijelző törlés
	MOVLW	b'00000110'     ; Mode "Entry" : -- 0 0 0 0 0 1 ID S
	CALL	LCD_Cmd
	MOVLW	b'00001100'     ; Display On/Off : -- 0 0 0 0 1 D C B
	CALL	LCD_Cmd
;-----------------------------------------------------------
;------------- Megszakítás és a CCP1 beállítása ------------
;-----------------------------------------------------------
	movlw   B'11111101'    ; TMR2 osztója = 1:4
	banksel T2CON
	movwf   T2CON
	movlw   B'11111111'    ; PR2 értéke
	banksel PR2
	movwf   PR2
	banksel CCP1CON
	movlw   B'00001100'    ; Bits to configure CCP1 module
	movwf   CCP1CON
	clrf	CCPR1L
;	bcf	OPTION,INTEDG
;	bcf	INTCON,INTF    ; INT flag törlése a biztonság kedvéért
;	bsf	INTCON,INTE    ; INT bemenet engedélyezése
;	bsf     INTCON,GIE     ; Globális megszak. engedélyezése
;-----------------------------------------------------------
;-------------------- Főprogram ----------------------------
;-----------------------------------------------------------
MAIN		
	MOVLW	0x43		; karakter 1  "C"
	CALL	LCD_Txt
	MOVLW	0x43		; karakter 2  "C"
	CALL	LCD_Txt
	MOVLW	0x50		; karakter 3  "P"
	CALL	LCD_Txt
	MOVLW	0x31		; karakter 4  "1"
	CALL	LCD_Txt
	MOVLW	0x26		; karakter 5  "&"
	CALL	LCD_Txt
	MOVLW	0x4C		; karakter 6  "L"
	CALL	LCD_Txt
	MOVLW	0x43		; karakter 7  "C"
	CALL	LCD_Txt
	MOVLW	0x44		; karakter 8  "D"
	CALL	LCD_Txt
	MOVLW	0x20		; karakter 9  " "
	CALL	LCD_Txt
	MOVLW	0xD3		; line 2  char 20
	CALL	LCD_Cmd
	MOVLW	0x04		; uj karakter 5
	CALL	LCD_Txt

;fever	goto	fever		; Végtelen ciklus a kiírás után várjuk, hogy majd legsz valami

	

;	Főprogram vége
;
;------------------ EEPROM olvasása ------------------------
RD_EE	movwf	EEADR
RD_EE_0	banksel	EECON1
	BSF	EECON1,RD
	banksel	EEDATA
	movf	EEDATA,W
	return
;-----------------------------------------------------------
;------------------- LCD törlése ---------------------------
LCD_Clear
	MOVLW	0x001
	CALL	LCD_Cmd
	RETURN
;-----------------------------------------------------------
;------ LCD --- parancs-Cmd ---- adat-Txt ------------------
;-----------------------------------------------------------
LCD_Cmd
	MOVWF   TEMP1         	; W értéke TEMP1-be
LCD_CmdLoop
	CALL    LCD_Busy     	; Az LCD tudja fogadni?
	ANDLW   0x80		; A 7. bit átállítása
	BTFSS   STATUS, Z
	GOTO    LCD_CmdLoop   	; Ha nem, akkor újra megnézzük.
	BCF     LCD_RS
	BCF     LCD_RW
	MOVF    TEMP1, w
	CALL   	LCD_Nybble	; 4bit MSB
	SWAPF   TEMP1, w
	CALL   	LCD_Nybble	; 4bit LSB
	RETURN
LCD_Txt
	movwf   TEMP1
LCD_TxtLoop
	call    LCD_Busy
	andlw   0x80
	btfss   STATUS, Z
	goto    LCD_TxtLoop
	bsf     LCD_RS
	bcf     LCD_RW
	movf    TEMP1, w
	call    LCD_Nybble      ; 4 bits MSB
	swapf   TEMP1, w
	call    LCD_Nybble      ; 4 bits LSB
	return
;-----------------------------------------------------------
;-------------------- LCD Nybble ---------------------------
LCD_Nybble
	BANKSEL	LCD_TRIS
	BCF     TRISB,7         ; PORTB(7:4) en sortie
	BCF     TRISB,6
	BCF     TRISB,5
	BCF     TRISB,4
	BANKSEL	LCD_PORT
	BCF     LCD_RW          ; Ceci est une commande d'écriture
	BSF     LCD_EN          ; Validation de la commande
   	IORLW   0x0F            ; W <- wwww1111
	ANDWF   LCD_PORT, f        ; écriture des bits a 0 sur le PORTB.
	ANDLW   0xF0            ; W <- wwww0000
	IORWF   LCD_PORT, f        ; écriture des bits a 1 sur le PORTB.
	BCF     LCD_EN          ; Fin de commande et enregistrement par le LCD
	RETURN
;-----------------------------------------------------------
;----------------- LCD busy nézése -------------------------
LCD_Busy
	BCF	LCD_RS
	BSF	LCD_RW
	BSF	LCD_EN
	BANKSEL	LCD_TRIS
	MOVLW	0xF0		; Felső 4 bit 1-re állítva (bemenet)
	MOVWF	LCD_TRIS
	BANKSEL	LCD_PORT
	BCF     LCD_EN
	MOVF    LCD_PORT,W
	ANDLW   0xF0
	MOVWF   TEMP0           ; 4 bits
	BTFSS   TEMP0,7		; Megnézzük, hogy végzett-e az LCD
	GOTO    Busy1		; Ha igen akkor tovább megyünk
	MOVLW   d'150'          ; Ha nem akkor várunk 15 ms-ot.
	CALL    Delay_100µs
Busy1
	BSF     LCD_EN
	SWAPF   TEMP0,F
	BCF     LCD_EN
	MOVF    LCD_PORT, W
	ANDLW   0xF0
	IORWF   TEMP0, F
	SWAPF   TEMP0, W
	RETURN
;---------------------------------------------
Delay_100µs
	movwf   TEMP0           ; +1            1 cycle
	MOVLW   .24		    ;6*(OSC_FREQ)/.1000000   ; +1    1 cycle
	ADDLW   -1              ; +1            1 cycle
	BTFSS   STATUS, Z       ; +1            1 cycle
	GOTO    $ - 2           ; +2            2 cycles
	decfsz  TEMP0, f        ; +1            1 cycle
	goto    $ - 5           ; +2            2 cycles
	return                  ; +1            1 cycle
;----------------------- VÉGE ------------------------------
;-----------------------------------------------------------
		END
;___________________________________________________________