;	 
;    
;			.................. adatgyüjtő modul V1.3 2015 09.
;   64MHZ/4= 16 MHZ   10 mikrosec 0,01 ezred fotocella lekérdezés !!
;	           

           LIST    p=p18f65k22
		#include "P18f65K22.INC"
;==================================================================================================================================================
	; Deklarációk a memóriához !!!


	config RETEN = OFF
	config INTOSCSEL = HIGH
	config SOSCSEL = DIG		;Digital (SCLKI) mode
	config XINST = OFF
	config FOSC = HS2			; HS oscillator (High power, 16 MHz - 25 MHz)
	config PLLCFG = ON
	config FCMEN = OFF
	
	
   	;	config	OSC = ECIOSWPLL
   	;	config	OSC = ECIOPLL
;	config	FSCM = OFF
	config	IESO = OFF
	config  PWRTEN = ON
;		config	PWRT = ON
	config  BOREN = OFF
;		config	BOR = ON
	config  BORV = 2
;		config	BORV = 27
	config  BORPWR = HIGH
;		config	WDT = OFF
	config  WDTEN = OFF
	config  WDTPS = 65536
;		config	WDTPS = 64

	config  RTCOSC = INTOSCREF
	config	MCLRE = ON
;	config	mode = MC
;	config  WAIT = OFF
	config  CCP2MX = PORTC
;	config  CCP2MX = OFF
	config	MSSPMSK = MSK7
;	config	PBAD = DIG
	config	STVREN = ON
	config	BBSIZ = BB1K
;		config	STVR = OFF
;		config	LVP = OFF
;		config	DEBUG = ON
		config	CP0 = OFF
		config	CP1 = OFF
		config	CP2 = OFF
		config	CP3 = OFF
;		config	CP4 = OFF
;		config	CP5 = OFF
;		config	CP6 = OFF
;		config	CP7 = OFF
		config	CPB = OFF
		config	CPD = OFF
		config	WRT0 = OFF
		config	WRT1 = OFF
		config	WRT2 = OFF
		config	WRT3 = OFF
;		config	WRT4 = OFF
;		config	WRT5 = OFF
;		config	WRT6 = OFF
;		config	WRT7 = OFF
		config	WRTB = OFF
		config	WRTC = OFF
		config	WRTD = OFF
		config	EBRT0 = OFF
		config	EBRT1 = OFF
		config	EBRT2 = OFF
		config	EBRT3 = OFF
		config	EBRTB = OFF

;		config	EBTR0 = OFF
;		config	EBTR1 = OFF
;		config	EBTR2 = OFF
;		config	EBTR3 = OFF
;		config	EBTR4 = OFF
;		config	EBTR5 = OFF
;		config	EBTR6 = OFF
;		config	EBTR7 = OFF
;		config	EBTRB = OFF
		
;   Set User ID Memory
	__idlocs    _IDLOC0, 0x0  
	__idlocs    _IDLOC1, 0x0  ;IDLOC register 1 will be
  	__idlocs    _IDLOC2, 0x0  ;IDLOC register 2 will be
  	__idlocs    _IDLOC3, 0x0  ;IDLOC register 3 will be
  	__idlocs    _IDLOC4, 0x8  ;IDLOC register 4 will be
  	__idlocs    _IDLOC5, 0x9  ;IDLOC register 5 will be
 	__idlocs    _IDLOC6, 0x5  ;IDLOC register 6 will be
  	__idlocs    _IDLOC7, 0xf  ;IDLOC register 7 will be

stek0	    equ     00h
stek1	    equ	    01h
stek2	    equ     02h    
stek3	    equ     03h    
stek4	    equ     04h	  
stek5  	    equ     05h   
stek6		equ     06h   
stek7		equ     07h   
stekH0		equ     08h   
stekH1		equ     09h   
stekH2		equ		0ah	  ;Magas proritasu megszak tempjei
stekH3		equ		0bh
AA			equ		0ch
BB			equ		0dh
CC			equ     0eh  
DD			equ     0fh   
EE			equ		10h
lcd			equ		11h		;
tizes		equ		12h
egyes		equ		13h		;
szazas		equ		14h 	;
tmpa0		equ		15h 	;
tmpa1		equ		16h 	;
tmpa2		equ		17h		;
tmpa3		equ		18h		;
a0			equ		19h		;
a1			equ		1ah
a2			equ		1bh
a3			equ		1ch
b0			equ		1dh	 ;
b1			equ		1eh	 ;
b2			equ		1fh	 ; 
b3			equ     20h	 ;
hany0		equ     21h   
hany1	    equ     22h   
hany2	    equ     23h   ;32 bites regek  a reg
hany3	    equ     24h 
tmp0	    equ     25h
tmp1	    equ     26h 
tmp2	    equ     27h   ;
tmp3	    equ     28h   
tmpb0		equ		29h
tmpb1		equ		30h		
tmpb2		equ		31h		;
tmpb3		equ		32h		
e2			equ		33h		
lcdido	    equ     34h		 
lcdido1		equ     35h		;
e3			equ     36h	  
seti0		equ     37h	  
seti1		equ		38h	  
ww13			equ		39h		;
ww14			equ		3ah
ww3				equ		3bh	 
ww4				equ		3ch
lcdcim		equ		3dh		;temp reg LCD nek
ww0			equ		3eh		;LCD varakorázi ertektara
bilido		equ		3fh	  
Adat1		equ     40h		;
Adat2		equ     41h		;ebben tároladnók a beolvasott fotocella adatok 1,2
Adat3		equ     42h		;
Adat4		equ     43h	  	;ebben van a start adat !!! 0-as bit !
byte1		equ		44h		;soros porton küldendő adatok
byte2		equ		45h		;
byte3		equ		46h
adattmp1	equ		47h	
adattmp2	equ		48h	  
admintasz	equ		49h	
adin		equ		4ah	; 
adkesz1		equ		4bh	;Áram értéke
adkesz1t	equ		4ch	;tizedes erteke 
adkesz2		equ		4dh	;35V fő táp
adkesz2t	equ		4eh	
adkesz3		equ		4fh	;15V out 1
adkesz3t	equ		50h
adkesz4		equ		51h	;15V out 2
adkesz4t	equ		52h
adkesz5		equ		53h	;15V out 3	
adkesz5t	equ		54h		
ido0		equ		55h		
ido1		equ		56h		
;		equ		57h
;		equ		58h
;		equ		59h
;		equ		5ah
;		equ		5bh
; 		equ		5ch	;
;		equ		5dh	;
;		equ		5eh
;		equ		5fh
;===================================================================================================
            org     0
            clrf	BSR,0
            goto    inicia
            org     h'8'
            goto	megszH	;Magas prioritasu Megszakaitasi rutinra ugras 
            org		h'18'
            goto	megszL	;Ua. csaka alacsony prioritasu
;------ Szovegtablazat ------------------------------------------------------------
 
;==================================================
;    Megszakitasi  Rutin FELSO
;==================================================
megszH		nop
	;    Megszakitasi  Rutin FELSO
;=================================================================================
			movff	BSR,stekH3
			clrf	BSR,0
			movwf	stekH0,0
			movff	AA,stekH1
			movff	STATUS,stekH2
;-----------------------------------------------------------------------
	btfsc	INTCON,INT0IF,0
	goto	STARTlefut
	btfsc	INTCON3,INT2IF,0
	goto	STARTfelfut
	btfsc	PIR5,TMR6IF,0	;5
	goto	fotocella
;-----------------------------------------------------------------------
irqvege		movff	stekH2,STATUS
			movff	stekH1,AA
			movf	stekH0,w,0
			movff	stekH3,BSR
			retfie
;==========================================================================================================
;=========== fotocella lekérdezések !! ====================================================================
;--------- Alapban a bejövő adat mindig magas, meg kell fordítani és úgy kerül elküldésre soros porton ------------------------
fotocella		clrwdt

	bra		irqvege
;========= LEFUTÓ Élre Start küldés de 3 byte elküldöm fotocella adatokat is ! ========================================================================
STARTlefut		
				bcf		INTCON,INT0IF,0
			bra		irqvege
;========= felfutÓ Élre Start küldés de 3 byte elküldöm fotocella adatokat is ! ========================================================================
STARTfelfut		clrwdt
		
				bcf		INTCON3,INT2IF,0
			bra		irqvege
;=================================================================================
		;..........  START adat küldés.................................................
elkuldadat				nop
	
				return
;====================================================================================
;==================================================
;    Megszakitasi  Rutin  ALSO
;==================================================
megszL		nop
		;==================================================
;    Megszakitasi  Rutin  ALSO
;==================================================
			movff	BSR,stek7
			clrf	BSR,0
			movwf	stek0,0			;w reg
			movff	FSR0L,stek1
			movff	FSR0H,stek2
			movff	AA,stek3
			movff	lcd,stek4
			movff	STATUS,stek6
;----------------------------------------------------
			btfsc	PIR1,RC1IF,0
			bra		adatjott1
			btfsc	PIR3,RC2IF,0
			bra		adatjott2
			btfsc	INTCON,TMR0IF
			goto	timer0
			btfsc	PIR1,ADIF,0
			goto	ADkonvertal
			btfsc	PIR1,TMR1IF,0	;lcd kikapcsolashoz
			goto	lcdkikap
			btfsc	PIR2,TMR3IF,0	;10 perces idozito!
			goto	ido10perc

			clrf	PIR1
			clrf	PIR2
;----------------------------------------------------
irqvegeL	clrf	TMR3H
	;	bcf		PIE1,RC1IE,0
	;	bcf		PIE3,RC2IE,0
			movff	stek6,STATUS
			movff	stek4,lcd
			movff	stek3,AA
			movff	stek2,FSR0H
			movff	stek1,FSR0L
			movf	stek0,w,0
			movff	stek7,BSR
			retfie
;=====================================================================================================
;---- pc-től jövö adat 1 !!! ------------------------------------------------------
adatjott1	clrwdt

nemez5	bcf		PIR1,RC1IF,0
		goto	irqvegeL
;-------- pc-től jövö adat 2 !!! ------------------------------------------------------------------------------------------------
adatjott2	clrwdt
	
		bcf		PIR3,RC2IF,0
		goto	irqvegeL
;=================================================================================================================
;---------- TMR0 A/D inditasa ! -------------------------------------------------------------------------------------------------
timer0			bcf		T0CON,TMR0ON	;TMR0 leallitasa
			bsf		ADCON0,GO/DONE		;AD konverzio ujra inditasa
				movlw	0xe0			;ef
				movwf	TMR0H
				clrf	TMR0L
				bcf		INTCON,TMR0IF	;megszakitas torlese
				goto	irqvegeL
;====================================================================================================================
;--------- A/D Konvertálás eredmeny az FSR2 által jelzett memoriaban van !! 4db mintat vesz es 5 bemenet van ----------------------------------------------------
ADkonvertal			clrwdt				
					
					bcf		PIR1,ADIF,0			;megszak törlése
					goto	irqvegeL
;-------------------------------------------------------------------------------------------------------------------
;==========================================================================================================================
;-------------------- TMR1 LCD kikapcsolashoz ------------------------------------------------
lcdkikap			clrwdt
				
lcdveg				nop
					clrf	TMR1H,0
					clrf	TMR1L,0
					bcf		PIR1,TMR1IF,0
					goto	irqvegeL	
;===========================================================================================================================
;-------------------- TMR3 10 perces idozito ha nincs nullazva kikapcsolja modult !! -----------------------------------------------------
ido10perc	clrwdt
				
			goto	irqvegeL		
;*********************************************************************************************
;===
;*********************************************************************************************
elindul		
;--------------------------------------------------------------------------------------
st0		nop
		nop

	;		bcf		INTCON,INT0IF,0		;torlom megszakit jelzoket ha esetleg bekapcsolaskor volt valtozas
	;		bcf		INTCON3,INT2IF,0
	;		bsf		INTCON,INT0IE,0		;Start Interrupt enable !!
	;		bsf		INTCON3,INT2IE,0
	;	bsf		seti0,5,0			;lcd kikapcs jelzoje
	;		bsf		T1CON,TMR1ON,0		;engedem TMR1 et lcd idozitoje 
	;		bsf		T3CON,TMR3ON,0		;10 perces idozito ON !!!!
	;		bsf		T5CON,TMR5ON,0	;Fotocellek lekerdezese 0,01 ezredenkent
	movlb	0x0f		;15. lap	
			bsf		T6CON,TMR6ON,1	;Fotocellak
	clrf	BSR
	
;********* Foprogi *******************************************************************************
start			clrwdt					
				nop
				nop
				nop
				nop
				nop
				nop
				nop
				nop
				nop
				nop
				nop
				nop
				nop
				nop
				nop
				nop
				nop
				nop
				nop
				nop
		goto	start
;-------------------------------------------------------------------------------------------------

;==============================================================================================================
;**************************************************************************************************************


;---- Inicializalasok -----------------------------------------------------------------------------------------
inicia	clrwdt
		;============================================================================================
;       Inicializalas  **********************************************************************
;============================================================================================
	clrf	BSR,0
		movlw	B'00010000'
		movwf	REFOCON,0	;Oscillator Control Reg
		movlw	B'00000000'
		movwf	OSCCON,0
		movlw	B'00001000'
		movwf	OSCCON2,0
		movlw	B'01000000'
		movwf	OSCTUNE,0
		clrf	REFOCON
		clrf	PORTA,0
	    clrf	PORTB,0
	    clrf	PORTC,0
	    clrf	PORTD,0
	    clrf	PORTE,0
	    clrf	PORTF,0
	    clrf	PORTG,0
		clrf    LATA,0
	    clrf    LATB,0
	    clrf	LATC,0
	    clrf	LATD,0
	    clrf	LATE,0
	    clrf	LATF,0
	    clrf	LATG,0
	movlb	0x0f		;15. lap
				movlw	B'00011111'
				movwf	ANCON0,1	;15 os Lapon !!! analog in An0,An1,An2 An3,An4
				clrf	ANCON1,1	;a többi analog IN = OFF
				clrf	ANCON2,1	;15 ös Lapon van !!!
				nop
	    movlw   B'10111111'
	    movwf	TRISA,0
	    movlw	B'10000111'
	    movwf   TRISB,0
	    movlw	B'10000100'
	    movwf	TRISC,0
	    movlw	B'11111111'
		movwf	TRISD,0
		clrf	TRISE,0
		movlw	B'11111111'
		movwf	TRISF,0
		movlw   B'00000100'
		movwf	TRISG,0	
;----------- Analog bemenet beállítása -------------------------------------------------------
		nop
		movlw	B'10110000'	;TMR1, Vref+ 4,096V!, Vref - GND AVss
		movwf	ADCON1,0
		movlw	B'10000110'	;Right igazitva, automata tiltva és A/D conv. ido Fosc/64
		movwf	ADCON2,0
		bcf		IPR1,ADIP	;A/D prioritas alacsony
		movf	ADRESH,0
		movf	ADRESL,0
		nop
		movlw	B'00000001'	;AD on
		movwf	ADCON0,0
	clrf	BSR
;----- egy kis varakozas bekapcsolasi zorok tranziensek miatt !! -------------------------------------------------------------------------------------------
			movlw	0xff
			movwf	AA,0
loop0		movlw	0xff
			movwf	BB,0
loop1		nop
			decfsz	BB,f
			bra		loop1
			nop
			decfsz	AA,f
			bra		loop0		
;----------------------------------------------------------------------------------------------------------------------
	movlb	0x0f		;15. lap
		movlw	0xff
		movwf	PMD3,1		;Modulok Disabdle CCP modulok Off
		movlw	B'11101111'	;TMR5 Off 3,as bit  TMR6 ON 4 bit
		movwf	PMD2,1
		movlw	B'11110001'	;TMR1 tmr2 tmr3 on
		movwf	PMD1,1		;ezek is 15. Lapon vannak !!!
		movlw	B'11100110'
		movwf	PMD0,1		;15. ös lapon van
	clrf	BSR 		
;...........................................................
		clrf	CM1CON,0		;comparator OFF
		clrf	CM2CON,0
		clrf	CM3CON,0		;Comparator 3 off
		clrf	CVRCON,0	;comparator referencia fesz OFF
		clrf	HLVDCON,0	;High/Low Volt figyelés
		clrf	CTMUICON,0
		clrf	CTMUCONH,0
		clrf	CTMUCONL,0	
		clrf	PIE1,0
		clrf	PIE2,0
		clrf	IPR1,0
		clrf	IPR2,0
		clrf	CCP1CON,0
		clrf	CCP2CON,0
		clrf	CCP3CON,0
		clrf	CCP4CON,0
		clrf	CCP5CON,0
		clrf	CCP6CON,0
		clrf	CCP7CON,0
		clrf	CCP8CON,0
		clrf	PSPCON,0
		movlw   B'00000100'
		movwf	PADCFG1,0	;Pull Up disabled
		clrf	ODCON1,0	;Open drain out
		clrf	ODCON2,0
		clrf	ODCON3,0	;USART1=6 bit, USART2=7 bit
		clrf	SSP1CON1
		clrf	SSP2CON1
;-------kinullazom memoriat-------------------------------------------------
				movlw	0xff
				movwf	FSR0L
meg				clrf	INDF0		;torlom mem tartalmat
				decfsz	FSR0L,f,0	;csokkentem mem ha nulla kov.utasitast atlepi
				bra		meg	
	;---------------------------------------
;		bsf		INTCON1,INT0IE	;külső megszamítás engedélyezője  START jel	    
	    bsf		INTCON2,RBPU,0		;Bport flhuzo ell. OFF
;	    bcf		INTCON2,INTEDG0,0	;A B0 bemenet megszakitas LEFUTÓ elre DEKONTAKTOS NC Bemenet
;	    bsf		INTCON2,INTEDG2,0	;A START jel ide is be van kötve csak FELFUTO élre !!
;	    bsf		INTCON3,INT2IP		;magas prioritasu
	    bsf		RCON,IPEN,0			;prioritasos megszakitas ON
   		clrf	TBLPTRU,0		;Ez mindig nulla
;----- PC felé Soros port1 beallitasa -----------------------------------------------
		movlw	B'00000000'		;8 bites aszinkron BRGH 16
		movwf	TXSTA1,0		;adás TILTVA
		movlw	B'10000000'		;Soros bekapcsolva, 8 bites folyamatos vete engedve
		movwf	RCSTA1,0
			
			movlw	0x22			;1e 64MHZ esetén A16  BRG=30  Közel 128,000 baud 129,032
			movwf	SPBRG1,0		;Focs/16*34+1=114,285 ez 0,0080625% elteres
			clrf	SPBRGH1
			movlw	B'00001000'
			movwf	BAUDCON1,0		;16 bites baud rate kontroll reg
			
		bsf		PIE1,RC1IE,0	;Vétel megszakítas engedve
		bcf		PIE1,TX1IE,0	;Adás megszakitas tiltva
		bcf		IPR1,RC1IP,0	;mindkét megszakítás alacsony prioritasú
		bcf		IPR1,TX1IP,0
		bsf		TXSTA1,TXEN,0	;adás Engedve
		bsf		RCSTA1,CREN,0	;folyamatos vetel engedve !!
;----- PC felé Soros port2 beallitasa 15.ös mem lapon van !!! -----------------------------------------------
			movlb	0x0f		;15. lap
		movlw	B'00000000'		;8 bites aszinkron BRGH on
		movwf	TXSTA2,1		;15. ös lapon van !!!adás TILTVA
		movlw	B'10000000'		;Soros bekapcsolva, 8 bites folyamatos vete engedve
		movwf	RCSTA2,1
		
			movlw	0x22			;30 64MHZ esetén ;     A16  BRG=30  Közel 128,000 baud 129,032
			movwf	SPBRG2,1		;Focs/16*34+1=114,285 ez 0,0080625% elteres
			clrf	SPBRGH2,1
			movlw	B'00001000'
			movwf	BAUDCON2,1		;16 bites baud rate kontroll reg
		
		bsf		PIE3,RC2IE,0	;Vétel megszakítas engedve
		bcf		PIE3,TX2IE,0	;Adás megszakitas tiltva
		bcf		IPR3,RC2IP,0	;mindkét megszakítás alacsony prioritasú
		bcf		IPR3,TX2IP,0
		bsf		TXSTA2,TXEN,1	;15. ös lapon van !!!! adás Engedve
		bsf		RCSTA2,CREN,1	;15. ös lapon van !!! vetel engedve !!
				clrf	BSR
;---------------------------------------------------------------------
;----- TMR0 idoszito két AD inditas kozott !! ------------------------
		movlw	B'00000111'	;TMR0 16 bits 256 eloosztas és all a szamlalo
		movwf	T0CON,0
		movlw	0xff	;216  a teljes ertek 55'535 10'000 et oszt
		movwf	TMR0H,0
		movlw	0x00	;239
		movwf	TMR0L,0
		bcf		INTCON2,TMR0IP,0 ;Alacsony proiritasu
;		bsf		INTCON,TMR0IE,0	;megszakitasa on
;---------------------------------------------------
;------- TMR1 kijelzo kikapcshoz !! ------------------------------------------------
 		clrf	TMR1H,0
		clrf	TMR1L,0
		movlw	B'00110000'		;elöosztás 8 belso ora Fosc/4
		movwf	T1CON,0			;
		movlw	B'00000011'		;Gate control off 
		movwf	T1GCON,0	
;		bsf		PIE1,TMR1IE,0		;TMR1 interrupt ON
		bcf		IPR1,TMR1IP,0		;also megszakitasi prioritasu
		bcf		PIR1,TMR1IF,0		;törlom megszak bitet
;------	TMR2 szamalalo kijelzo kikapcsolashoz ha nem nyomok semmit és bekopcsolas után minden oke 30mp eltetevel kikapcsolja lcd-t---------------------------------
		bcf		PIR1,TMR2IF,0
		bcf		PIE1,TMR2IE,0		;
		bcf		IPR1,TMR2IP,0		;alacsony megszakitasu
		movlw	B'01111011'		;16 es elöoszás 16 utoosztas TMR2 off
		movwf	T2CON,0			;
		movlw	0xff
		movwf	PR2
;------- TMR3 !! ------------------------------------------------
		movlw	B'00111000'		;elöosztás 8 belso ora Fosc/4
		movwf	T3CON,0			;	
		movlw	B'00000011'		;Gate control off 
		movwf	T3GCON,0
 		clrf	TMR3H,0
		clrf	TMR3L,0
;		bsf		PIE2,TMR3IE,0		;TMR3 interrupt ON
		bcf		IPR2,TMR3IP,0		;also megszakitasi prioritasu
		bcf		PIR2,TMR3IF,0		;törlom megszak bitet
;------- TMR6 !! Fotocella bemenet lekérdezés 0,01 ezredenként 100KHZ 16.000.000/8/20=100.000 Hz----------------------------------------------
	movlb	0x0f		;15. lap
			movlw	B'01000000'		;elöosztás 1 belso ora Fosc/4 16MHZ/8=2.000.000/20=100.000
			movwf	T6CON,1			;elooasztas 1 utoosztas 8
			movlw	0x14			;20
 			movwf	PR6,1
 	clrf	BSR
			nop
			bsf		PIE5,TMR6IE,0		;TMR5 interrupt ON
			bsf		IPR5,TMR6IP,0		;Magas prioritasu!!!!
			bcf		PIR5,TMR6IF,0		;törlom megszak bitet

			bsf		INTCON,GIEH,0	;magas prioritasu megszak ON
	    	bsf		INTCON,GIEL,0
				
		goto	elindul

;**********************************************************************************************************************
;**********************************************************************************************************************

  end

