;LED vezérlés
;Készítette: én
;2010.07.14.

;------------------------------------------------------------
	list	P=18F14K50
#include	"P18F14K50.INC"
;	__CONFIG _HS_OSC&_CP_OFF&_WDT_OFF	;Kvarc oszcillátor, kódvédelem ki, wdt ki
;__config _MCLRE_ON & _CP_OFF & _WDT_OFF & _IntRC_OSC
; MCLR láb sima I/O, kódvédelem ki, watchdog ki, belső RC oszcillátor


              config CPUDIV = NOCLKDIV
              config USBDIV = OFF
              config FOSC   = HS
              config PLLEN  = ON
              config FCMEN  = OFF
              config IESO   = OFF
              config PWRTEN = OFF
              config BOREN  = OFF
              config BORV   = 30
              config WDTEN  = OFF
              config WDTPS  = 32768
              config MCLRE  = ON      ;ez mos legyen inább ON!
              config HFOFST = OFF
              config STVREN = ON
              config LVP    = OFF
              config XINST  = OFF
              config BBSIZ  = OFF
              config CP0    = OFF
              config CP1    = OFF
              config CPB    = OFF
              config WRT0   = OFF
              config WRT1   = OFF
              config WRTB   = OFF
              config WRTC   = OFF
              config EBTR0  = OFF
              config EBTR1  = OFF
              config EBTRB  = OFF 


;Programverzió:
#define	verzió_egészek	d'1'
#define	verzió_tizedek	d'2'
#define	verzió_századok	d'0'

#define	dátum_év1000	d'2'
#define	dátum_év100		d'0'
#define	dátum_év10		d'1'
#define	dátum_év1		d'0'

#define	dátum_hónap10	d'0'
#define	dátum_hónap1	d'6'

#define	dátum_nap10		d'0'
#define	dátum_nap1		d'4'

;***************************************************************************************

#define	LED_1		LATC,0
#define	LED_2		LATC,1
#define	LED_3		LATC,2
#define	LED_4		LATC,3
#define	LED_5		LATC,4
#define	IRÁNY		ÜZEMMÓD, 0
#define	GIE_temp		ÜZEMMÓD3,0

;***************************************************************************************

    UDATA_ACS
	W_TEMP					res 1
	STATUS_TEMP				res 1
	delay0					res	1
	delay1					res	1
	Fényerő_TEMP			res	1
	REGISZTER_1				res	1
	LED_1_fényerő			res 1
	LED_2_fényerő			res 1
	LED_3_fényerő			res 1
	LED_4_fényerő			res 1
	LED_5_fényerő			res 1
	Aktuális_LED			res	1
	ÜZEMMÓD					res	1
		;0. bit: Ha növekszik a fényerő akkor 1, ha csökken akkor 0
;	GÖRBE					res	100
;GÖRBE
;	de	'a', 'u';d'0',d'5',d'10',d'15',d'20',d'25',d'30',d'35',d'40',d'45';,		d'50',d'60',d'65',d'70',d'75',d'80',d'85',d'90',d'95',d'100',		d'110',d'115',d'120',d'125',d'130',d'135',d'140',d'145',d'150',d'155',		d'160',d'165',d'170',d'175',d'180',d'185',d'190',d'195',d'200',d'205',		d'210',d'215',d'220',d'225',d'230',d'235',d'240',d'245',d'250',d'255',		d'255',d'250',d'245',d'240',d'235',d'230',d'225',d'220',d'215',d'210',		d'205',d'195',d'190',d'185',d'180',d'175',d'170',d'165',d'160',d'155',		d'150',d'0',d'145',d'140',d'130',d'125',d'120',d'115',d'110',d'105',		d'100',d'95',d'90',d'85',d'80',d'75',d'70',d'65',d'60',d'55',		d'50',d'45',d'40',d'35',d'30',d'25',d'20',d'15',d'5',d'0'
;GÖRBE_vége

;*************** VEKTOROK ******************	
RST CODE 0x0000
	goto	START1		;melyik program fusson?
HI_VEC	CODE 0x0008		;megszakítási cím
    goto	hi_isr
LO_VEC	CODE 0x0018
    goto	hi_isr


;**************** MEGSZAKÍTÁSOK ***********************
PGM	CODE
lo_isr
	RETFIE

hi_isr
	movlw	UPPER(GÖRBE_vége)
	cpfseq	TBLPTRU	;a tábla végére értünk már (U bájt vizsgálata)?
	bra		b01
	movlw	HIGH(GÖRBE_vége)
	cpfseq	TBLPTRH	;a tábla végére értünk már (H bájt vizsgálata)?
	bra		b01
	movlw	LOW(GÖRBE_vége)
	cpfseq	TBLPTRL, W		;a tábla végére értünk már (L bájt vizsgálata)?
	bra		b01


;ha a tábla végére értünk:
	incf	Aktuális_LED
	movlw	d'6'
	cpfseq	Aktuális_LED
	bra		c00
	movlw	d'1'
	movwf	Aktuális_LED
c00	movlw	LOW(GÖRBE)
	movwf	TBLPTRL
	movlw	HIGH(GÖRBE)
	movwf	TBLPTRH
	movlw	UPPER(GÖRBE)
	movwf	TBLPTRU			;a tábla legalsó értékéhez lépünk
	bra		Megszakítás_kilépés
;ha nem értünk a tábla végére:
b01	tblrd*+		;a táblát inkrementáljuk!
TÁBLA1
		movf	Aktuális_LED, W
		dcfsnz	WREG
		bra		led1	
		dcfsnz	WREG
		bra		led2
		dcfsnz	WREG
		bra		led3
		dcfsnz	WREG
		bra		led4
		dcfsnz	WREG
		bra		led5
led1	movff	TABLAT, LED_1_fényerő
		bra		Megszakítás_kilépés
led2	movff	TABLAT, LED_2_fényerő
		bra		Megszakítás_kilépés
led3	movff	TABLAT, LED_3_fényerő
		bra		Megszakítás_kilépés
led4	movff	TABLAT, LED_4_fényerő
		bra		Megszakítás_kilépés
led5	movff	TABLAT, LED_5_fényerő
		bra		Megszakítás_kilépés


	
GÖRBE
	de	d'0',d'5',d'10',d'15',d'20',d'25',d'30',d'35',d'40',d'45',		d'50',d'60',d'65',d'70',d'75',d'80',d'85',d'90',d'95',d'100',		d'110',d'115',d'120',d'125',d'130',d'135',d'140',d'145',d'150',d'155',		d'160',d'165',d'170',d'175',d'180',d'185',d'190',d'195',d'200',d'205',		d'210',d'215',d'220',d'225',d'230',d'235',d'240',d'245',d'250',d'255',		d'255',d'250',d'245',d'240',d'235',d'230',d'225',d'220',d'215',d'210',		d'205',d'195',d'190',d'185',d'180',d'175',d'170',d'165',d'160',d'155',		d'150',d'0',d'145',d'140',d'130',d'125',d'120',d'115',d'110',d'105',		d'100',d'95',d'90',d'85',d'80',d'75',d'70',d'65',d'60',d'55',		d'50',d'45',d'40',d'35',d'30',d'25',d'20',d'15',d'5',d'0'
GÖRBE_vége


Megszakítás_kilépés
	bcf		INTCON, T0IF	;TMR0 megszakítást jelzőbitjét töröljük
	RETFIE
;************** MEGSZAKÍTÁS VÉGE *******************
	


;-------------------------------------------------------------------------------
;----------------------START1---------------------------------------------------
;-------------------------------------------------------------------------------
START1
	call	PIC_INICIALIZÁLÁS

	movlw	LOW(GÖRBE)
	movwf	TBLPTRL
	movlw	HIGH(GÖRBE)
	movwf	TBLPTRH
	movlw	UPPER(GÖRBE)
	movwf	TBLPTRU			;a tábla legalsó értékéhez lépünk

	movlw	d'1'
	movwf	Aktuális_LED
	clrf	REGISZTER_1

;	bcf		INTCON, GIE

	movlw	d'0'
	movwf	LED_1_fényerő
	movlw	d'0'
	movwf	LED_2_fényerő
	movlw	d'0'
	movwf	LED_3_fényerő
	movlw	d'0'
	movwf	LED_4_fényerő
	movlw	d'0'
	movwf	LED_5_fényerő




;végtelen ciklus:
a00	incf	REGISZTER_1
	movf	REGISZTER_1, W

	cpfslt	LED_1_fényerő	;Az időzítő értéke kisebb mint a LED fényereje? (Ha igen, akkor ugrik!)
	bra		a01
	bcf		LED_1
	bra		a02
a01	bsf		LED_1

a02	cpfslt	LED_2_fényerő
	bra		a03
	bcf		LED_2
	bra		a04
a03	bsf		LED_2

a04	cpfslt	LED_3_fényerő
	bra		a05
	bcf		LED_3
	bra		a06
a05	bsf		LED_3

a06	cpfslt	LED_4_fényerő
	bra		a07
	bcf		LED_4
	bra		a08
a07	bsf		LED_4

a08	cpfslt	LED_5_fényerő
	bra		a09
	bcf		LED_5
	bra		a00
a09	bsf		LED_5
	bra		a00




goto$




;-------------------------------------------------------------------------
;------------SZUBRUTINOK--------------------------------------------------
;-------------------------------------------------------------------------

PIC_INICIALIZÁLÁS
	movlw	B'00000000'		;0-át írunk a W-be
	movwf	TRISC			;PORTC minden lába kimenet lesz
	bsf		TRISB,7			;RB7 bemenet lesz
	;TMR0 beállítása:
	movlw	B'10000000'
	movwf	T0CON	;bekapcsolva, 16 bites mód, belső oszcillátorról, 1:128-as előosztás
	;megszakítás beállítása:
	movlw	B'11100000'	
	movwf	INTCON	;TMR0 túlcsordulás-megszakítás engedélyezve!

RETURN






delay100us:
	movlw	d'25'
	decfsz	WREG
	goto	$-2
	RETURN

delay1s:
	call	delay100ms
	call	delay100ms
	call	delay100ms
	call	delay100ms
	call	delay100ms
	call	delay100ms
	call	delay100ms
	call	delay100ms
	call	delay100ms
	call	delay100ms
RETURN

delay100ms:
	movlw	d'100'		;100ms
	goto	d2
delay10ms:
	movlw	d'10'		;10ms
	goto	d2
delay1ms:
	movlw	d'1'		;1ms
d2:	movwf	delay1
d1:	movlw	d'248'	
	movwf	delay0	
d0:	decfsz	delay0,f
	goto	d0
	decfsz	delay1,f
	goto	d1

	RETURN





goto$
END