;***********************Beállítások********************************************

        PROCESSOR '16F877A'
        INCLUDE <P16F877A.INC>

        __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_OFF & _CP_OFF & _LVP_OFF & _BODEN_OFF
		
		ORG 0x0000
;*************************************************************************

     cblock  0x20             ; Az általános célú regiszterek kezdőcíme.
             count            ; Számláló a ciklus-rutinokhoz.
             count1           ; Számlálók a késleltető rutinhoz.
             counta
             countb
	    	 count2
             tmp1             ; Átmeneti tárolás.
             tmp2
             templcd          ; Átmeneti tároló a 4 bites módhoz.
             templcd2
     endc

LCD_PORT Equ PORTD
LCD_TRIS Equ TRISD
LCD_RS   Equ 0x04             ; A Register Select (RS) vonal változója.
;LCD_RW   Equ 0x06             ; A Read/Write      (RW) vonal változója.
LCD_E    Equ 0x07             ; Az Enable         (E)  vonal változója.

     org 0x0000               ; Beállítja a kezdeti címet
                              ; (itt indul a program).

	 movlw	 b'0001111'
	 movwf	 count2
Start
     movlw   0x07             ; Kikapcsoljuk a komparátort
     movwf   CMCON            ; (így a 16F84-re hasonlít).
	 decf	 count2

Initialise                    ; Inicializálás (kezdeti értékek beállítása).
		clrf    count
		clrf    PORTD
		clrf    PORTC
        BANKSEL	TRISC
		CLRF	TRISC			; PortC kimenet
		BANKSEL	ADCON1
		MOVLW	b'01000100'
		MOVWF	ADCON1			; PortA O, 1, 3 bitje analóg bemenet, Vref+ = Vdd	Vref- = Vss
		BANKSEL	ADCON0
		MOVLW	b'10000101'		; Fosc/64, AN0 konverzió
		MOVWF	ADCON0			
		BANKSEL	TRISB
		MOVLW	b'00010000'
		MOVWF	TRISB			; PortB 4.-bitje bemenet
		
        ;PWM Frekvencia beállítása
        BSF 	STATUS, RP0 ;BANK 01
        MOVLW 	D'202' ;PR2 = D'202' PWM periódus = 2,03*10^-4 s => PWM frekvencia = 4,9 kHz 
        MOVWF 	PR2
        BCF 	STATUS, RP0 ;BANK 00
        
        ;PWM kitöltés beállítása 
        CLRF 	CCPR1L
        MOVLW 	B'00001100' 
        MOVWF 	CCP1CON
        
        ;PWM kimenet beállítása
        BSF 	STATUS, RP0 ;BANK 01
        BCF 	TRISC, 2 ;PortC 2 bitje a PWM kimenet
        BCF 	STATUS, RP0  ;BANK 00
        
        ;TIMER 2 előosztás 1:1
        MOVLW 	B'00000100'
        MOVWF 	T2CON
        
        CLRF 	TMR2	;TIMER 2 törlése
                
        BSF 	T2CON, TMR2ON	;TIMER 2 indítása	 

SetPorts                      ; Portok beállítása.
     bsf     STATUS,RP0       ; Kiválasztjuk a Register Page 1-et.
     movlw   0x00             ; Összes kapu kimenet.
     movwf   LCD_TRIS
     bcf     STATUS,RP0       ; Vissza a Register Page 0-ra.
     call    Kesleltet100     ; Várakozás az LCD inicializálására.
     call    LCD_Init         ; LCD beállítása.
     clrf    count            ; Számláló regiszter törlése.

     movlw	 b'00000100'
	 call	 LCD_Line1W
Message                       ; Üzenetek kezelése.
     movf    count,W          ; Számláló értéke a W regiszterbe.
     call    Szoveg1          ; Beolvas egy karaktert az 1. táblázatból.
     xorlw   0x00             ; Zéró a státuszbit értéke?
     btfsc   STATUS,Z
     goto    NextMessage
     call    LCD_Char
     incf    count,f
     goto    Message
NextMessage
     call    LCD_Line2        ; A 2. sor 1. oszlopába állítja a kurzort.
     clrf    count            ; Számláló regiszter törlése.
Message2
     movf    count,W          ; Számláló értéke a W regiszterbe.
     call    Szoveg2          ; Beolvas egy karaktert a 2. táblázatból.
     xorlw   0x00             ; Zéró a státuszbit értéke?
     btfsc   STATUS,Z
     goto    EndMessage
     call    LCD_Char
     incf    count,f
     goto    Message2
     
EndMessage
     movlw	 b'00001001'
	 call	 LCD_Line1W

MAIN:
		MOVLW	b'10000101'	; Fosc/64, AN0 konverzió
		MOVWF	ADCON0			
        BSF		ADCON0,	GO	;A/D konvertálás indítása
		BTFSC	ADCON0,	GO	;Várakozás a konvertálás végére
		GOTO	$-1			;Ha nincs vége a konvertálásnak, visszalép egyet
		;Feltételkezelés
		BTFSS	PORTB,4		;meg van nyomva a PortB 4.-bitjére kötött gomb?
		GOTO	PWM_KI		;ha igen akkor ugrás a PWM_KI-re
		MOVLW	d'50'		;ha nem akkor itt folytatódik
		SUBWF	ADRESH,W	;50-et kivonunk az A/D értékéből
							;Ha az A/D nagyobb mint 50 akkor C=1
							;Ha az A/D kisebb mint 50 akkor C=0
		BTFSS	STATUS,C	;Ha C=0 akkor a következő sort végrehajtja
							;Ha C=1 akkor átugorja a következő sort
		GOTO	PWM_KI		
		MOVF	ADRESH,W	;A/D értéke W-be
		MOVWF 	CCPR1L		;A/D értéke a kitöltési tényezőbe
		GOTO 	AKKU_MER
PWM_KI:
		CLRF 	CCPR1L		;Ha C=0 volt, kikapcsolja a PWM kimenetet
		BTFSS	PORTB,4		;meg van nyomva a PortB 4.-bitjére kötött gomb?
		GOTO	FEK_BE		;ha igen akkor ugrás a FEK_BE-re
		GOTO	AKKU_MER	;ha nem akkor ugrás
FEK_BE:
		MOVLW	b'0000001'	;PortB 0 bitjére kötött LED
		BSF		PORTB,0		;világít
		GOTO	AKKU_MER	;ugrás
		
AKKU_MER:
		MOVLW	b'10001101'	; Fosc/64, AN1 konverzió
		MOVWF	ADCON0			
		BSF		ADCON0,	GO	;A/D konvertálás indítása
		BTFSC	ADCON0,	GO	;Várakozás a konvertálás végére
		GOTO	$-1			;Ha nincs vége a konvertálásnak, visszalép egyet

AKKU_100:		
		MOVLW	d'252'		
		SUBWF	ADRESH,W	;252-öt kivonunk az A/D értékéből
							;Ha az A/D nagyobb mint 252 akkor C=1
							;Ha az A/D kisebb mint 252 akkor C=0
		BTFSS	STATUS,C	;Ha C=1 akkor a következő sort végrehajtja
							;Ha C=0 akkor átugorja a következő sort
		GOTO	AKKU_99
		movlw   b'00110001'	;100-at írunk az LCD-re
		call    LCD_Char
		movlw   b'00110000'
		call    LCD_Char
		movlw   b'00110000'
		call    LCD_Char
		goto	FEK_KI
AKKU_99:
		MOVLW	d'250'		
		SUBWF	ADRESH,W	;250-et kivonunk az A/D értékéből
							;Ha az A/D nagyobb mint 250 akkor C=1
							;Ha az A/D kisebb mint 250 akkor C=0
		BTFSS	STATUS,C	;Ha C=1 akkor a következő sort végrehajtja
							;Ha C=0 akkor átugorja a következő sort
		GOTO	AKKU_98
		movlw   b'00100000'	;99-et írunk az LCD-re
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		goto	FEK_KI
AKKU_98:
		MOVLW	d'247'		
		SUBWF	ADRESH,W	;247-et kivonunk az A/D értékéből
							;Ha az A/D nagyobb mint 247 akkor C=1
							;Ha az A/D kisebb mint 247 akkor C=0
		BTFSS	STATUS,C	;Ha C=1 akkor a következő sort végrehajtja
							;Ha C=0 akkor átugorja a következő sort
		GOTO	AKKU_97
		movlw   b'00100000'	;98-at írunk az LCD-re
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		goto	FEK_KI
AKKU_97:
		MOVLW	d'245'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_96
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		goto	FEK_KI
AKKU_96:
		MOVLW	d'242'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_95
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		goto	FEK_KI
AKKU_95:
		MOVLW	d'240'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_94
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		goto	FEK_KI
AKKU_94:
		MOVLW	d'237'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_93
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		goto	FEK_KI
AKKU_93:
		MOVLW	d'235'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_92
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		goto	FEK_KI
AKKU_92:
		MOVLW	d'232'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_91
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		goto	FEK_KI
AKKU_91:
		MOVLW	d'230'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_90
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		goto	FEK_KI
AKKU_90:
		MOVLW	d'227'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_89
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		movlw   b'00110000'
		call    LCD_Char
		goto	FEK_KI
AKKU_89:
		MOVLW	d'225'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_88
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		goto	FEK_KI
AKKU_88:
		MOVLW	d'222'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_87
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		goto	FEK_KI
AKKU_87:
		MOVLW	d'220'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_86
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		goto	FEK_KI
AKKU_86:
		MOVLW	d'217'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_85
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		goto	FEK_KI
AKKU_85:
		MOVLW	d'215'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_84
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		goto	FEK_KI
AKKU_84:
		MOVLW	d'212'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_83
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		goto	FEK_KI
AKKU_83:
		MOVLW	d'210'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_82
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		goto	FEK_KI
AKKU_82:
		MOVLW	d'207'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_81
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		goto	FEK_KI	
AKKU_81:
		MOVLW	d'205'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_80
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		goto	FEK_KI
AKKU_80:
		MOVLW	d'202'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_79
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		movlw   b'00110000'
		call    LCD_Char
		goto	FEK_KI		
AKKU_79:
		MOVLW	d'200'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_78
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		goto	FEK_KI
AKKU_78:
		MOVLW	d'197'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_77
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		goto	FEK_KI
AKKU_77:
		MOVLW	d'195'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_76
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		goto	FEK_KI
AKKU_76:
		MOVLW	d'192'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_75
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		goto	FEK_KI
AKKU_75:
		MOVLW	d'190'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_74
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		goto	FEK_KI
AKKU_74:
		MOVLW	d'187'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_73
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		goto	FEK_KI
AKKU_73:
		MOVLW	d'185'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_72
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		goto	FEK_KI		
AKKU_72:
		MOVLW	d'182'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_71
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		goto	FEK_KI
AKKU_71:
		MOVLW	d'180'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_70
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		goto	FEK_KI	
AKKU_70:
		MOVLW	d'177'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_69
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		movlw   b'00110000'
		call    LCD_Char
		goto	FEK_KI		
AKKU_69:
		MOVLW	d'175'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_68
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		goto	FEK_KI
AKKU_68:
		MOVLW	d'172'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_67
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		goto	FEK_KI
AKKU_67:
		MOVLW	d'170'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_66
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		goto	FEK_KI
AKKU_66:
		MOVLW	d'167'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_65
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		goto	FEK_KI
AKKU_65:
		MOVLW	d'165'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_64
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		goto	FEK_KI
AKKU_64:
		MOVLW	d'162'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_63
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		movlw   b'0011'
		call    LCD_Char
		goto	FEK_KI
AKKU_63:
		MOVLW	d'160'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_62
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		goto	FEK_KI
AKKU_62:
		MOVLW	d'157'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_61
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		goto	FEK_KI
AKKU_61:
		MOVLW	d'157'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_60
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		goto	FEK_KI
AKKU_60:
		MOVLW	d'155'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_59
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		movlw   b'0011000'
		call    LCD_Char
		goto	FEK_KI
AKKU_59:
		MOVLW	d'152'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_58
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		goto	FEK_KI
AKKU_58:
		MOVLW	d'150'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_57
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		goto	FEK_KI
AKKU_57:
		MOVLW	d'147'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_56
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		goto	FEK_KI
AKKU_56:
		MOVLW	d'145'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_55
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		goto	FEK_KI
AKKU_55:
		MOVLW	d'142'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_54
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		goto	FEK_KI										
AKKU_54:
		MOVLW	d'140'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_53
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		goto	FEK_KI
AKKU_53:
		MOVLW	d'137'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_52
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		goto	FEK_KI
AKKU_52:
		MOVLW	d'135'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_51
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		movlw   b'0011010'
		call    LCD_Char
		goto	FEK_KI
AKKU_51:
		MOVLW	d'132'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_50
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		goto	FEK_KI
AKKU_50:
		MOVLW	d'130'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_49
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		movlw   b'00110000'
		call    LCD_Char
		goto	FEK_KI
AKKU_49:
		MOVLW	d'127'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_48
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		goto	FEK_KI
AKKU_48:
		MOVLW	d'125'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_47
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		goto	FEK_KI
AKKU_47:
		MOVLW	d'122'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_46
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		goto	FEK_KI
AKKU_46:
		MOVLW	d'120'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_45
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		goto	FEK_KI
AKKU_45:
		MOVLW	d'117'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_44
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		goto	FEK_KI
AKKU_44:
		MOVLW	d'115'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_43
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		goto	FEK_KI
AKKU_43:
		MOVLW	d'112'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_42
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		goto	FEK_KI
AKKU_42:
		MOVLW	d'110'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_41
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		goto	FEK_KI
AKKU_41:
		MOVLW	d'107'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_40
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		goto	FEK_KI
AKKU_40:
		MOVLW	d'105'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_39
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		movlw   b'00110000'
		call    LCD_Char
		goto	FEK_KI
AKKU_39:
		MOVLW	d'102'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_38
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		goto	FEK_KI
AKKU_38:
		MOVLW	d'100'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_37
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		goto	FEK_KI
AKKU_37:
		MOVLW	d'97'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_36
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		goto	FEK_KI
AKKU_36:
		MOVLW	d'95'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_35
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		goto	FEK_KI
AKKU_35:
		MOVLW	d'92'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_34
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		goto	FEK_KI
AKKU_34:
		MOVLW	d'90'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_33
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		goto	FEK_KI	
AKKU_33:
		MOVLW	d'87'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_32
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		goto	FEK_KI	
AKKU_32:
		MOVLW	d'85'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_31
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		goto	FEK_KI
AKKU_31:
		MOVLW	d'82'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_30
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		goto	FEK_KI
AKKU_30:
		MOVLW	d'80'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_29
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		movlw   b'00110000'
		call    LCD_Char
		goto	FEK_KI	
AKKU_29:
		MOVLW	d'77'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_28
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		goto	FEK_KI	
AKKU_28:
		MOVLW	d'75'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_27
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		goto	FEK_KI		
AKKU_27:
		MOVLW	d'72'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_26
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		goto	FEK_KI		
AKKU_26:
		MOVLW	d'70'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_25
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		goto	FEK_KI		
AKKU_25:
		MOVLW	d'67'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_24
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		goto	FEK_KI		
AKKU_24:
		MOVLW	d'65'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_23
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		goto	FEK_KI		
AKKU_23:
		MOVLW	d'62'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_22
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		goto	FEK_KI		
AKKU_22:
		MOVLW	d'60'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_21
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		goto	FEK_KI		
AKKU_21:
		MOVLW	d'57'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_20
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		goto	FEK_KI		
AKKU_20:
		MOVLW	d'55'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_19
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		movlw   b'00110000'
		call    LCD_Char
		goto	FEK_KI		
AKKU_19:
		MOVLW	d'52'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_18
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		goto	FEK_KI		
AKKU_18:
		MOVLW	d'50'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_17
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		goto	FEK_KI		
AKKU_17:
		MOVLW	d'47'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_16
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		goto	FEK_KI		
AKKU_16:
		MOVLW	d'45'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_15
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		goto	FEK_KI		
AKKU_15:
		MOVLW	d'42'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_14
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		goto	FEK_KI		
AKKU_14:
		MOVLW	d'40'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_13
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		goto	FEK_KI		
AKKU_13:
		MOVLW	d'37'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_12
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		goto	FEK_KI		
AKKU_12:
		MOVLW	d'35'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_11
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		goto	FEK_KI		
AKKU_11:
		MOVLW	d'32'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_10
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		goto	FEK_KI		
AKKU_10:
		MOVLW	d'30'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_9
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		movlw   b'00110000'
		call    LCD_Char
		goto	FEK_KI		
AKKU_9:
		MOVLW	d'27'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_8
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111001'
		call    LCD_Char
		goto	FEK_KI		
AKKU_8:
		MOVLW	d'25'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_7
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00111000'
		call    LCD_Char
		goto	FEK_KI		
AKKU_7:
		MOVLW	d'22'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_6
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110111'
		call    LCD_Char
		goto	FEK_KI		
AKKU_6:
		MOVLW	d'20'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_5
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110110'
		call    LCD_Char
		goto	FEK_KI		
AKKU_5:
		MOVLW	d'17'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_4
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110101'
		call    LCD_Char
		goto	FEK_KI		
AKKU_4:
		MOVLW	d'15'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_3
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110100'
		call    LCD_Char
		goto	FEK_KI		
AKKU_3:
		MOVLW	d'12'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_2
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110011'
		call    LCD_Char
		goto	FEK_KI		
AKKU_2:
		MOVLW	d'10'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_1
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110010'
		call    LCD_Char
		goto	FEK_KI		
AKKU_1:
		MOVLW	d'7'		
		SUBWF	ADRESH,W	
		BTFSS	STATUS,C	
		GOTO	AKKU_0
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110001'
		call    LCD_Char
		goto	FEK_KI		
AKKU_0:
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00100000'
		call    LCD_Char
		movlw   b'00110000'
		call    LCD_Char
		goto	FEK_KI		
		
FEK_KI:
		BTFSC	PORTB,4		;meg van nyomva a PortB 4.-bitjére kötött gomb?
		GOTO	EndMessage	;ha igen, ugrás
		CLRF	PORTB		;ha nem akkor töröljük a PortB-t, LED kikapcs
Stop
     goto  EndMessage               ; Végtelen hurok.


; Szubrutinok és szövegtáblák

; LCD rutinok

; Alaphelyzetbe állítja az LCD-t (inicializál)
LCD_Init
     movlw   0x20             ; A 4 bites mód beállítása.
     call    LCD_Cmd

     movlw   0x28             ; Shift (betűemelés) beállítása.
     call    LCD_Cmd

     movlw   0x06             ; Karakter mód beállítása.
     call    LCD_Cmd

     movlw   0x0c             ; Kijelző ki/be és kurzor parancs.
     call    LCD_Cmd

     call    LCD_Clr          ; Kijelző törlése.

     retlw    0x00

; Parancs-üzemmód beállítása.
LCD_Cmd
     movwf   templcd
     swapf   templcd,W        ; Elküldi a felső nibble-t.
     andlw   0x0f             ; Törli a felső 4 bitet a W regiszterből.
     movwf   LCD_PORT
     bcf     LCD_PORT,LCD_RS  ; RS vonalat nullára állítja.
     call    Pulse_e          ; Magas impulzust küld az Enable lábra.

     movf    templcd,W        ; Elküldi a alsó nibble-t.
     andlw   0x0f             ; Törli a felső 4 bitet a W regiszterből.
     movwf   LCD_PORT
     bcf     LCD_PORT,LCD_RS  ; RS vonalat nullára állítja.
     call    Pulse_e          ; Magas impulzust küld az Enable lábra.
     call    Kesleltet5
     retlw   0x00

; Karakter-üzemmód beállítása.
LCD_CharD
     addlw   0x30
LCD_Char
     movwf   templcd
     swapf   templcd,W        ; Elküldi a felső nibble-t.
     andlw   0x0f             ; Törli a felső 4 bitet a W regiszterből.
     movwf   LCD_PORT
     bsf     LCD_PORT,LCD_RS  ; RS vonalat egyre állítja.
     call    Pulse_e          ; Magas impulzust küld az Enable lábra.

     movf    templcd,W        ; Elküldi a alsó nibble-t.
     andlw   0x0f             ; Törli a felső 4 bitet a W regiszterből.
     movwf   LCD_PORT
     bsf     LCD_PORT,LCD_RS  ; RS vonalat egyre állítja.
     call    Pulse_e          ; Magas impulzust küld az Enable lábra.
     call    Kesleltet5
     retlw   0x00

; Kurzor pozicionálása.
LCD_Line1
     movlw   0x80             ; Az 1. sor 1. oszlopába helyezi a kurzort.
     call    LCD_Cmd
     retlw   0x00

LCD_Line2
     movlw   0xc0             ; A 2. sor 1. oszlopába helyezi a kurzort.
     call    LCD_Cmd
     retlw   0x00

LCD_Line1W
     addlw   0x80             ; Az 1. sor W oszlopába helyezi a kurzort
     call    LCD_Cmd
     retlw   0x00

LCD_Line2W
     addlw   0xc0             ; A 2. sor W oszlopába helyezi a kurzort.
     call    LCD_Cmd
     retlw   0x00

LCD_CurOn
     movlw   0x0d             ; Kijelző ki/be és kurzor parancs.
     call    LCD_Cmd
     retlw   0x00

LCD_CurOff
     movlw   0x0c             ; Kijelző ki/be és kurzor parancs.
     call    LCD_Cmd
     retlw   0x00

LCD_Clr
     movlw   0x01             ; Törli a kijelzőt.
     call    LCD_Cmd
     retlw   0x00

LCD_HEX
     movwf   tmp1
     swapf   tmp1,w
     andlw   0x0f
     call    HEX_Table
     call    LCD_Char
     movf    tmp1,W
     andlw   0x0f
     call    HEX_Table
     call    LCD_Char
     retlw   0x00

Kesleltet255
     movlw   0xff             ; A késleltetés 255ms.
     goto    K0
Kesleltet100
     movlw   d'100'           ; A késleltetés 100ms.
     goto    K0
Kesleltet50
     movlw   d'50'            ; A késleltetés 50ms.
     goto    K0
Kesleltet20
     movlw   d'20'            ; A késleltetés 20ms.
     goto    K0
Kesleltet5
     movlw   0x05             ; A késleltetés 5.000 ms (4 MHz órajel).
K0
     movwf   count1
K1
     movlw   0xC7             ; A késleltetés 1ms.
     movwf   counta
     movlw   0x01
     movwf   countb
Kesleltet_0
     decfsz  counta,f
     goto    $+2
     decfsz  countb,f
     goto    Kesleltet_0

     decfsz  count1,f
     goto    K1
     retlw   0x00

Pulse_e
     bsf     LCD_PORT,LCD_E   ; Magasra állítja az LCD Enable bemenetét.
     nop                      ; Egy óraciklus idejére magasan tartja.
     bcf     LCD_PORT,LCD_E   ; Törli az E bemenetet (alacsony szint).
     retlw   0x00

; LCD rutinok vége.

HEX_Table
     addwf   PCL,f
     retlw   0x30
     retlw   0x31
     retlw   0x32
     retlw   0x33
     retlw   0x34
     retlw   0x35
     retlw   0x36
     retlw   0x37
     retlw   0x38
     retlw   0x39
     retlw   0x41
     retlw   0x42
     retlw   0x43
     retlw   0x44
     retlw   0x45
     retlw   0x46

Szoveg1
     addwf   PCL,f
     retlw   'A'
     retlw   'k'
     retlw   'k'
     retlw   'u'
     retlw   ':'
	 retlw   ' '
	 retlw   ' '
	 retlw   ' '
	 retlw   '%'
     retlw   0x00

Szoveg2
     addwf   PCL,f
     retlw   'S'
     retlw   'e'
     retlw   'b'
     retlw   'e'
     retlw   's'
     retlw   's'
     retlw   'e'
     retlw   'g'
     retlw   ':'
     retlw   ' '
     retlw   ' '
     retlw   'k'
     retlw   'm'
     retlw   '/'
     retlw   'h'
     retlw   0x00


     end