ERRORLEVEL 2
LIST P=16F684
	#INCLUDE "P16F684.INC"
	__CONFIG _INTOSCIO&_CP_OFF&_WDT_OFF


;------------------------------------------------------------------------------
;VÁLTOZÓK:

COUNT1	EQU	0X20
CODES	EQU	0X21
HIGHER	EQU	0X22
LOWER	EQU	0X23
RS		EQU	0X24
COUNT2	EQU	0X25
COUNT3	EQU	0X26
COUNT4	EQU	0X27


	ORG 0x00

;------------------------------------------------------------------------------
;INICIALIZÁLÁS
	BCF	STATUS,RP1
 	BCF 	STATUS,RP0   ;BANK0-ba lépünk
	BSF	OPTION_REG,7	;PULL-UP OFF (RA3)

 ;PORTC ÉS PORTA Digitális I/O-vá tétel

	MOVLW 	0X07 ;comparator off
	MOVWF 	CMCON0
	BSF 	STATUS,RP0 ;Bank 1
	CLRF 	ANSEL ;digital I/O
	MOVLW	0X00
	MOVWF 	TRISC  ;set RC<5:0> as outputs
 
	BCF 	STATUS,RP0 ;Bank 0
	CLRF 	PORTC ;Init PORTA
	MOVLW 	0X07 ;comparator off
	MOVWF 	CMCON0 ;digital I/O
	BSF 	STATUS,RP0 ;Bank 1
	BSF	OSCCON,SCS	;RA5 ACTIVATED
	MOVLW 	0X3C
	MOVWF	TRISA ;set RA<1,0> as outputs RA<5,4,3,2> as Inputs
	BCF 	STATUS,RP0 ;Bank 0
	CLRF	PORTA

;---------------------------
;LCD INICIALIZÁLÁS
;INDÍTÁSHOZ
	BANKSEL	PORTC
	BSF		PORTC,0
	BSF		PORTC,1
	BCF		PORTC,2
	BCF		PORTC,3
	BSF		PORTC,4		;ENABLE OFF FIGYELNI KELL ÍGY LESZ KIKAPCSOLVA HA 5V-OT AD
	BCF		PORTC,5
	CLRF	COUNT1		;SZÁMLÁLÓK TÖRLÉSE
	CLRF	COUNT2
	CLRF	COUNT3
	CLRF	COUNT4
	BCF		PORTC,5		;RS-T 0-RA KAPCSOLNI PARANCS MÓD PORTC5=RS
	MOVLW	B'00011111'
	MOVWF	RS		;RS VÁLTOZÓ 5. BITJÉNEK NULLÁZÁSA A TÖBBI 1-ES AMI SZÁMÍT A MARADÉK 0 KIVÉVE E MIVEL 
;várakozás
;AZ 1-NÉL AZAZ 5V-NÁL VAN KIKAPCSOLVA; A 6. ÉS 7. BIT NINCS HASZNÁLATBAN
LOOP1
	CALL	WAITING
	INCF	COUNT2,F	;SORSZAM2 NÖVELÉSE 1-EL
	MOVFW	COUNT2		;SORSZÁM BETÖLTÉSE A WORKBE
	XORLW	D'10'		;3-MAL XOROLVA HA 3 AZ ÉRTÉKE XOROLVA 0-T AD
	BTFSC	STATUS,Z	;HA 3 AZ ÉRTÉK AKKOR A KÖVETKEZŐ UTASÍTÁST NEM UGORJA ÁT, HA HAMIS AKKOR ÁTUGORJA AZAZ 
;NEM ÉRTE EL MÉG AZ 3-AT

	GOTO	NEXT		;LÉNYEGÉBEN 3-SZOR ADJUK KI AZ UTASÍTÁST AZ LCD-NEK HOGY BIZTOSAN INDULJON
	GOTO	LOOP1
NEXT
	CLRF	COUNT2

;LCD TOVÁBBI INICIALIZÁLÁSA
;4 BITES ÁTVITELI MÓD BEÁLLÍTÁSA PARANCS 00100000
	
	BCF	PORTC,0		;FELSŐ 0.BIT 0
	BSF	PORTC,1		;FELSŐ 1.BIT 1
	BCF	PORTC,2		;FELSŐ 2.BIT 0
	BCF	PORTC,3		;FELSŐ 3.BIT 0 A PANACS 00100000 UTOLSÓ 4 BIT NULLA NINCS BEKÖTVE A KIJELZŐBE AZZAL ;NEM KELL FOGLALKOZNI A FELSŐ 4 BIT SZÁMÍT 0010
	CALL	WAITING

;2 SOROS MÓD BEÁLLÍTÁSA PARANACS 00101000 ELŐSZÖR A FELSŐ 4 BITET MAJD AZ ALSÓT
;FELSŐ 4 BIT
	BCF	PORTC,0		;FELSŐ 0.BIT 0
	BSF	PORTC,1		;FELSŐ 1.BIT 1
	BCF	PORTC,2		;FELSŐ 2.BIT 0
	BCF	PORTC,3		;FELSŐ 3.BIT 0
	CALL	WAITING
;ALSÓ 4 BIT
	BCF	PORTC,0		;ALSÓ 0.BIT 0
	BCF	PORTC,1		;ALSÓ 1.BIT 0
	BCF	PORTC,2		;ALSÓ 2.BIT 0
	BSF	PORTC,3		;ALSÓ 3.BIT 1
	CALL	WAITING

;KURZOR BEÁLLÍTÁS PARANCS 00001111
;FELSŐ 4 BIT
	BCF	PORTC,0		;FELSŐ 0.BIT 0
	BCF	PORTC,1		;FELSŐ 1.BIT 0
	BCF	PORTC,2		;FELSŐ 2.BIT 0
	BCF	PORTC,3		;FELSŐ 3.BIT 0
	CALL	WAITING
;ALSÓ 4 BIT
	BSF	PORTC,0		;FELSŐ 0.BIT 1
	BSF	PORTC,1		;FELSŐ 1.BIT 1
	BSF	PORTC,2		;FELSŐ 2.BIT 1
	BSF	PORTC,3		;FELSŐ 3.BIT 1
	CALL	WAITING

;------------------------------------------------------------------------------

;KIJELZŐ 2 SOR 4 karakter 10000011

;FELSŐ 4 BIT
	BCF	PORTC,0		;FELSŐ 0.BIT 0
	BCF	PORTC,1		;FELSŐ 1.BIT 0
	BSF	PORTC,2		;FELSŐ 2.BIT 1
	BSF	PORTC,3		;FELSŐ 3.BIT 1
	CALL	WAITING
;ALSÓ 4 BIT
	BSF	PORTC,0		;FELSŐ 0.BIT 1
	BSF	PORTC,1		;FELSŐ 1.BIT 1
	BCF	PORTC,2		;FELSŐ 2.BIT 0
	BCF	PORTC,3		;FELSŐ 3.BIT 0
	CALL	WAITING

;KARAKTERÍRÁS
	BSF		PORTC,5

;FELSŐ 4 BIT
	BCF	PORTC,0		;FELSŐ 0.BIT 0
	BCF	PORTC,1		;FELSŐ 1.BIT 0
	BSF	PORTC,2		;FELSŐ 2.BIT 1
	BCF	PORTC,3		;FELSŐ 3.BIT 0
	CALL	WAITING
;ALSÓ 4 BIT
	BSF	PORTC,0		;FELSŐ 0.BIT 1
	BCF	PORTC,1		;FELSŐ 1.BIT 0
	BCF	PORTC,2		;FELSŐ 2.BIT 0
	BCF	PORTC,3		;FELSŐ 3.BIT 0
	CALL	WAITING


;------------------------------------------------------------------------------
MAIN
;KIJELZŐ BEÁLLÍTÁS ALAP: (NYOMÓGOMBBAL MENET KÖZBEN VÁLTHATÓ ÖSSZ FORD 000000 -RA)
;	FORD SZAM
;	 00000 1/min
	MOVLW	B'10000011'	;KIJELZŐ 4 KARAKTER HELYÉRE UGRÁS
	MOVWF	CODES
	CALL	COMMAND
	GOTO	MAIN

;------------------------------------------------------------------------------
;VÁRAKOZÁS 2 PARANCS KÖZÖTT

WAITING
	INCF	COUNT1,F	;SORSZAM NÖVELÉSE 1-EL
	MOVFW	COUNT1		;SORSZÁM BETÖLTÉSE A WORKBE
	XORLW	D'200'		;200-AT XOROLVA HA 200 AZ ÉRTÉKE XOROLVA 0-T AD, LÉNYEGÉBEN KÉSLELTETÉS SZEREPE VAN 	BTFSC	STATUS,Z	;HA 200 AZ ÉRTÉK AKKOR A KÖVETKEZŐ UTASÍTÁST NEM UGORJA ÁT, HA HAMIS AKKOR ÁTUGORJA 	GOTO	LOOPNEXT
	GOTO	WAITING
LOOPNEXT
	INCF	COUNT4,F
	MOVFW	COUNT4
	XORLW	D'6'
	BTFSC	STATUS,Z
	GOTO	LOOPEND
	GOTO	WAITING
LOOPEND
	CLRF	COUNT1
	CLRF	COUNT4
	RETURN


;------------------------------------------------------------------------------
;PARANCSKIADÁS
COMMAND
;HIGH-LOW
	MOVFW	CODES		;CODE LOW-BA KERÜL
	MOVWF	LOWER
	SWAPF	CODES,W		;MEGCSERÉLI A FELSŐ ÉS ALSÓ 4 BITET EREDMÉNY W-BEN
	MOVWF	HIGHER
	MOVLW	0X0F		;00001111 ÖSSZEÉSELI
	ANDWF	LOWER,F		;LOW 0000XXXX
	MOVLW	0X0F		;00001111 ÖSSZEÉSELI
	ANDWF	HIGHER,F		;HIGH 0000XXXX
	BSF		HIGHER,4	;ENABLE OFF MIATT 5V=OFF=LOGIKAI 1    0001XXXX
	BSF		LOWER,4		;SZINTÉL ENABLE OFF MIATT
	MOVFW	RS
	ANDWF	LOWER,F		;RS-SEL ÖSSZEÉSELVE KEZDETBEN 00011111 TOVÁBBIAKBAN AZ 5. BITET FOGJUK MINDIG ÁLLÍTANI ;ÍGY ADJA ÁT RS ÉRTÉKÉT
	MOVFW	RS
	ANDWF	HIGHER,F		;SZINTÉN RS-T KÜLÖN KELL ÁLLÍTANI ATTÓL FÜGGŐEN, HOGY UTASÍTÁS VAGY ;KARAKTERKIKÜLDÉS LESZ

;ÉRTÉKEK KIKÜLDÉSE
	MOVFW	HIGHER
	MOVWF	PORTC
	BCF	PORTC,4
	NOP
	BSF	PORTC,4
	CALL	WAITING
	MOVFW	LOWER
	MOVWF	PORTC
	BCF	PORTC,4
	NOP
	BSF	PORTC,4
	CALL	WAITING
	RETURN

;------------------------------------------------------------------------------

END

