;Lamináló gép vezérlő programja
;Készítette: én
;2010.01.24.


	list	P=18F14K50
#include	"P18F14K50.INC"
     config CPUDIV = NOCLKDIV
     config USBDIV = OFF
     config FOSC   = IRC
     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 
     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 

;***************** DEFINÍCIÓK *******************************
#define	FUTES		LATC,4
#define	MOTOR		LATC,5

#define	MOTOR_HUZAS	d'10'	;mennyi időre kapcsoljon be a motor? (értéke 0,1 másodperc-szerese)
#define	MOTOR_VARAS	d'100'	;mennyi időt álljon a motor? (értéke 0,1 másodperc-szerese)

cblock
	W_TEMP
	STATUS_TEMP
	delay0
	delay1
	delay2
	delay3
	IDOZITES
endc	

;***********************************************************
org	0
goto START

org	0x008
bra 0x018
org 0x018	;megszakítási cím
;*****************************************************************
;*********************** MEGSZAKÍTÁS *****************************
;*****************************************************************
	movwf	W_TEMP			;W regiszter eltárolása
	swapf	STATUS,W		
	movwf 	STATUS_TEMP		;STATUS regiszter eltárolása

	btfss	INTCON,T0IF		;TMR0 megszakítás ellenőrzése
		goto	megszakitas_kilepes

	movlw	MOTOR_HUZAS
	subwf	IDOZITES, W
	btfss	STATUS, Z	;ha az IDOZITES regiszter egyenlő a MOTOR_HUZAS értékével, akkor ugrik
		bra	cimke1
	btfsc	PORTC, 5	;a motor be van kapcsolva? (ha nem, akkor ugrik)
		bcf	LATC, 5		;ha be van kapcsolva, akkor kapcsold ki!
		bra	cimke1		
cimke1
	movlw	MOTOR_VARAS
	subwf	IDOZITES, W
	btfss	STATUS, Z	;ha az IDOZITES regiszter egyenlő a MOTOR_VARAS értékével, akkor ugrik
		bra	megszakitas_kilepes
	bsf		LATC, 5		;kapcsold be a motort!
	movlw	d'255'
	movwf	IDOZITES	;IDOZITES regiszter nullázása (az időzítés előrről kezdődjön!)

megszakitas_kilepes
	incf	IDOZITES
	movlw	b'11111001'
	movwf	TMR0H
	movlw	b'11100110'	;63974
	movwf	TMR0L		;4Mhz-es órajellel, 256-os osztás és 16 bites mód esetén 0,1 másodperc kell a TMR0 túlcsordulásához

	swapf	STATUS_TEMP,W	
	movwf 	STATUS			;az elementett STATUS regiszter visszaállítása
	swapf	W_TEMP,F
	swapf	W_TEMP,W		;az elementett W regiszter visszaállítása
	bcf		INTCON, T0IF	;TMR0 megszakítást jelzőbitjét töröljük
	bsf		INTCON, GIE		;általános megszakítás engedélyezése
RETFIE
;*****************************************************************
;*********************** FŐ PROGRAM ******************************
;*****************************************************************
START
	call	PIC_inicializalas
	clrf	IDOZITES








goto $
;*****************************************************************
;********************** SZUBRUTINOK ******************************
;*****************************************************************

PIC_inicializalas:
;Órajel beállítása:
	movlw	b'01010000'
	movwf	OSCCON			;4MHz-es belső órajel beállítása
;Portok konfigurációja:
	movlw	b'00001111'
	movwf	TRISC			;RC0, RC1, RC2, RC3 bemenet, többi kimenet lesz
	movlw	b'00000000'
	movwf	TRISB			;PORTB kimenet lesz
;A/D konfigurációja:
	movlw	b'00011101'
	movwf	ADCON0			;AN7 lesz használva, engedélyezve
	movlw	b'00000101'	
	movwf	ADCON1			;külső referencia használata
	movlw	b'10011101'
	movwf	ADCON2			;eredmény jobbra igazítása, 6TAD, Fosc/16
;TMR0 konfigurációja:
	movlw	b'10010111'		; számláló engedélyezve, 16 bites mód, belső oszcillátorról, lefutó élre, 1:256-os előosztó
	movwf	T0CON
;Megszakítások konfigurációja
	clrf	INTCON
	bsf		INTCON, GIE		;globális megszakítás engedélyezés
	bsf		INTCON, T0IE	;timer0 túlcsordulás-megszakítás engedélyezése
RETURN






delay100us:
	movlw	d'25'
	decfsz	WREG
	goto	$-2
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
