;CODEPAGE   NAME=eedata     START=0x2100   END=0x217F   PROTECTED
;1.		movlw	0
;2.		movwf	EE_cime		; kezdőcím beállítása
;3.olvas		movf	EE_cime,w	; a cím a w-be
;4.		call	RD_EE		; olvasás rutin
;5.		call	LCD_Txt		; lcdbe töltés
;6.		incf	EE_cime,1	; adatcim növelése
;7.		swapf	EE_cime,w	; nybble csere -->w-be
;8.		xorlw	b'10000111'	; kizáróvagyolás :)
;9.		btfss	STATUS,Z	; 0? szóval elérte a végét?
;10.		goto	olvas		; nem, még nem
;11.		tovább			; igen elérte, további feladatok..
;
;
      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
	 szamol			;75h
	 pause1			;76h
	 pause2			;77h
	 EE_cime		;78h
	endc
;
#define gomb1		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
	movf	EE_cime,w
	xorlw	D'128'		; 16 karakter egyenként 8 soroból
	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	D'129'		; itt kezdi az olvasást
	movwf	EE_cime		; kezdőcím beállítása
LCDboot	movf	EE_cime,w
	call	RD_EE
	call	LCD_Txt
	incf	EE_cime,1
	movf	EE_cime,w
	xorlw	D'136'		; utolsó eeprom cím ?
	btfss	STATUS,Z
	goto	LCDboot		; CCP1&LCD
	MOVLW	0xCE		; line 2  char 16
	CALL	LCD_Cmd
	movlw	D'25'
	movwf	EE_cime		; kezdőcím beállítása
LC_boot	movf	EE_cime,w
	call	RD_EE
	call	LCD_Txt
	incf	EE_cime,1
	movf	EE_cime,w
	xorlw	D'31'
	btfss	STATUS,Z
	goto	LC_boot		; char1,char2,char3,char4,char5

gnyomva	nop
	btfsc	gomb1
	goto	gnyomva
	nop
gombvar	movlw	10		; a gomb"pergés" időfigyelése
	movwf	pause1
pausea	movlw	50		; 10x50 ciklus
	movwf	pause2
pauseb	nop
	nop
	decfsz	pause2,1
	goto	pauseb
	decfsz	pause1,1
	goto	pausea
	btfsc	gomb1
	goto	gnyomva
				;	továbblép, még nyomva a gomb
	MOVLW	0xC8		; line 2  char 10
	CALL	LCD_Cmd
	movf	szamol,w
	call	LCD_Txt
	incf	szamol,F	; szamol 00-0F ig mehet csak
	movf	szamol,w
	xorlw	0x10
	btfss	STATUS,Z
	goto	vebe		; elérte a szamol a 0F-et? nem, akkor megy a gombot nézni
	clrf	szamol		; igen elérte, akkor nullázzuk és utánna megy
;
vebe	movf	szamol,w		; annyi a ccp jel, mint ahányadik karakter
	movwf	CCPR1L
;
	goto	gnyomva		; a gombot nézni

;	Főprogram vége
;
;------------------ EEPROM olvasása ------------------------
RD_EE	movwf	EEADR
	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 ------------------------------
;eeprom????
;	cblock 0x2100
;	 H'43'
;	 H'43'
;	 H'50'
;#
org  0x2100
;#
ch_tb12 de h'FF', h'15', h'1E', h'04', h'04', h'04', h'04', h'00', h'1F', h'13', h'1E', h'12', h'1E', h'13', h'1F', h'00', h'1F', h'13', h'1D', h'1D', h'1D', h'11', h'1F', h'00', h'1C', h'16', h'13', h'15', h'15', h'11', h'1F', h'00', h'00', h'04', h'0A', h'0A', h'1F', h'11', h'1F', h'00', h'00', h'07', h'04', h'05', h'1D', h'11', h'11', h'00', h'00', h'1F', h'00', h'1F', h'1F', h'1F', h'1F', h'00', h'00', h'1F', h'01', h'1D', h'1D', h'1D', h'1D', h'00', h'11', h'11', h'1D', h'05', h'04', h'07', h'00', h'00', h'1F', h'1F', h'1F', h'1F', h'00', h'1F', h'00', h'00', h'1D', h'1D', h'1D', h'1D', h'01', h'1F', h'00', h'00', h'00', h'00', h'01', h'03', h'06', h'0C', h'1F', h'00', h'0F', h'19', h'13', h'06', h'0C', h'19', h'13', h'00', h'19', h'13', h'06', h'0C', h'19', h'13', h'1E', h'00', h'1F', h'06', h'0C', h'18', h'10', h'00', h'00', h'00', h'0E', h'1B', h'11', h'11', h'11', h'11', h'1F', h'00',        h'43', h'43', h'50', h'31', h'26', h'4C', h'43', h'44'

;-----------------------------------------------------------
		END
;___________________________________________________________