;ledflash
ERRORLEVEL 2
#include"p18f14k22.inc"
RADIX DEC
#DEFINE LED PORTA,5
#DEFINE ON	PORTA,2
#DEFINE	OFF PORTA,4
CONFIG	FOSC = IRC
CONFIG	WDTEN = ON
CONFIG	LVP = ON

;NEM FOGLALKOZOK BEÁLLÍTÁSOKKAL, CSAK A LÉNYEGGEL
;31 kHz (kb óra kvarc)
;Ha ekkora az oszcillátor frekije akkor 129uS egy
;utasítás ideje. A nyomógombok prelleznek, ezért
;nem egyértelm? a lekérdezése tehÁT TRÜKKÖSEN kell ;lekérdezni
;Mivel a gombok lekérdezése is igen gyors,ezért kell
;várakozási id?ket is beépíteni, hiszen ha 1mp alatt
;le tudja kérdezni a gombot 1000x akkor 1000x n?velné
;a számláló értékét is ezért úgy írom meg a progit, hogy
;amíg a gomb nyomva van "áll" a progi és gomb ;felengedéskor megy tovább

CBLOCK
GOMBCNT
ENDC
org 0
CALL INIT
GOTO PRG
;
;
INIT:
MOVLW	B'11101111'
MOVWF	TRISB
CLRF	GOMBCNT	;ON SZÁMLÁLÓ=0
RETURN
;*** 100mS KÉSLELTETÉS W REGISZTERBEN, HOGY HÁNYSZOR ****
CBLOCK
DL
DH
WT
ENDC
DELAY_100mS	;775 CIKLUS
MOVWF	WT	;W REG MENTÉSE
MOVLW	0XFF
MOVWF	DL
MOVLW	0X01
MOVWF	DH
DECFSZ	DL
BRA	$-2
DECFSZ	DH
BRA	$-6
DECFSZ	WT
BRA	$-18
NOP
RETURN
;***************************************
GET_GOMB
CBLOCK
KEY
ENDC
MOVF	PORTB,W
ANDLW	B'11000000'	;TÖBBI BIT KIZÁRÁSA
BNZ	$+4	;MEGNYOMVA
RETURN	;NINCS MEGNYOMVA
MOVWF	KEY	;A MEGNYOMOTT BILLENTY?(K) ELMENTÉSE
MOVF	PORTB,W
CPFSEQ	KEY
BRA	$+4	;VÁLTOZOTT
BRA	$-6	;AZONOS VISSZA
MOVLW	0XC0
XORWF	KEY,W	;MINDKÉT BILLENTY? KIZÁRÁSA
BNZ	$+6
CLRF	WREG
RETURN
MOVF	KEY,W	;ON = 0X40
RETURN	;OFF= 0X80
;*************************************************************
PRG:
MOVLW	0X01
CALL	DELAY_100mS	;HOGY LASSABB LEGYEN A PROGI
MOVF	GOMBCNT,F	;HA ON SZÁMLÁLÓ NULL KIKAPCSOLNI
BNZ	$+6
BCF	LED
BRA	P00
BSF	LED	;HA NEM NULLA BEKAPCSOLNI
P00	CALL	GET_GOMB	;EREDMÉNY-> WREG
BTFSS	WREG,6	;ON
GOTO	P01
MOVLW	0XFF
XORWF	GOMBCNT
BZ	PRG	;255 NÉL MÁR NEM NÖVELÜNK
INCF	GOMBCNT,F
GOTO	PRG
P01 BTFSS	WREG,7	;OFF
BRA	PRG
MOVF	GOMBCNT,F	;MÁR NULLA?
BZ	PRG
DECF	GOMBCNT,F
GOTO	PRG
END
;végül is betettem egy védelmet, mert ha többször nyomod meg az off gombot, (kontakthiba) akkor nulla alá is tudná rakni a számlálót, ami végül is "bekapcsolást" eredményez
;A progi teszteléséhez ajánlom:
;MPLAB esetén: VIEW fül -> WATCH ott beírhatóak az egyes regiszterek
;és Be kell kapcsolni a debuggert : debugger-> select tool ->MPLAB SIM
;A Watch ablakban a trisb regisztert nullára kell állítani ekkor bármikor felül írható a BPORT regiszter
;tesztelve és m?ködik üdv.



