
_main:

;MPPT_PIC.c,6 :: 		void main() {
;MPPT_PIC.c,8 :: 		TRISC.F2 = 0;                 //uscita pwm portc 2
	BCF         TRISC+0, 2 
;MPPT_PIC.c,10 :: 		PR2 = 0x3F;                   //valore per garantire una frequenza di 31KHZ del pwm con quarzo da 8MHz
	MOVLW       63
	MOVWF       PR2+0 
;MPPT_PIC.c,11 :: 		T2CON = 0b00000100;           //setting tmr2: postascaler 1:1, tmr2 on, prescaler 1:1
	MOVLW       4
	MOVWF       T2CON+0 
;MPPT_PIC.c,12 :: 		CCP1CON = 0b00001100;         //utilizza pwm e setta il valore di comparazione con i due lsb = 11
	MOVLW       12
	MOVWF       CCP1CON+0 
;MPPT_PIC.c,13 :: 		CCPR1L = value;               //valore DC
	MOVF        _value+0, 0 
	MOVWF       CCPR1L+0 
;MPPT_PIC.c,14 :: 		ADC_Init();                   //inizializza l'ADC
	CALL        _ADC_Init+0, 0
;MPPT_PIC.c,15 :: 		check = 1;                    //Inizializzo le variabili a 0
	BSF         _check+0, BitPos(_check+0) 
;MPPT_PIC.c,16 :: 		PotenzaT1 = 0;
	CLRF        _PotenzaT1+0 
	CLRF        _PotenzaT1+1 
	CLRF        _PotenzaT1+2 
	CLRF        _PotenzaT1+3 
;MPPT_PIC.c,17 :: 		PotenzaT0 = 0;
	CLRF        _PotenzaT0+0 
	CLRF        _PotenzaT0+1 
	CLRF        _PotenzaT0+2 
	CLRF        _PotenzaT0+3 
;MPPT_PIC.c,18 :: 		delay_ms(500);                //Delay assestamento
	MOVLW       8
	MOVWF       R11, 0
	MOVLW       157
	MOVWF       R12, 0
	MOVLW       5
	MOVWF       R13, 0
L_main0:
	DECFSZ      R13, 1, 1
	BRA         L_main0
	DECFSZ      R12, 1, 1
	BRA         L_main0
	DECFSZ      R11, 1, 1
	BRA         L_main0
	NOP
	NOP
;MPPT_PIC.c,20 :: 		while(1){
L_main1:
;MPPT_PIC.c,22 :: 		Tensione = ADC_Get_Sample(0);                 //Leggi il valore di tensione
	CLRF        FARG_ADC_Get_Sample_channel+0 
	CALL        _ADC_Get_Sample+0, 0
	MOVF        R0, 0 
	MOVWF       _Tensione+0 
	MOVF        R1, 0 
	MOVWF       _Tensione+1 
;MPPT_PIC.c,23 :: 		Corrente = ADC_Get_Sample(1);                 //Leggi il valore di corrente
	MOVLW       1
	MOVWF       FARG_ADC_Get_Sample_channel+0 
	CALL        _ADC_Get_Sample+0, 0
	MOVF        R0, 0 
	MOVWF       _Corrente+0 
	MOVF        R1, 0 
	MOVWF       _Corrente+1 
;MPPT_PIC.c,24 :: 		PotenzaT1 = Tensione * Corrente;              //Ottieni valore potenza
	MOVF        _Tensione+0, 0 
	MOVWF       R4 
	MOVF        _Tensione+1, 0 
	MOVWF       R5 
	CALL        _Mul_16x16_U+0, 0
	MOVF        R0, 0 
	MOVWF       _PotenzaT1+0 
	MOVF        R1, 0 
	MOVWF       _PotenzaT1+1 
	MOVLW       0
	MOVWF       _PotenzaT1+2 
	MOVWF       _PotenzaT1+3 
;MPPT_PIC.c,26 :: 		if (check){                                   //Se è stato effettuauo il primo controllo
	BTFSS       _check+0, BitPos(_check+0) 
	GOTO        L_main3
;MPPT_PIC.c,27 :: 		if (PotenzaT1 > PotenzaT0)                  //Se la potenza attuale è maggiore della precedente
	MOVF        _PotenzaT1+3, 0 
	SUBWF       _PotenzaT0+3, 0 
	BTFSS       STATUS+0, 2 
	GOTO        L__main15
	MOVF        _PotenzaT1+2, 0 
	SUBWF       _PotenzaT0+2, 0 
	BTFSS       STATUS+0, 2 
	GOTO        L__main15
	MOVF        _PotenzaT1+1, 0 
	SUBWF       _PotenzaT0+1, 0 
	BTFSS       STATUS+0, 2 
	GOTO        L__main15
	MOVF        _PotenzaT1+0, 0 
	SUBWF       _PotenzaT0+0, 0 
L__main15:
	BTFSC       STATUS+0, 0 
	GOTO        L_main4
;MPPT_PIC.c,28 :: 		if(value < 0x3D) value ++;                //Incrementa valore
	MOVLW       61
	SUBWF       _value+0, 0 
	BTFSC       STATUS+0, 0 
	GOTO        L_main5
	INCF        _value+0, 1 
	GOTO        L_main6
L_main5:
;MPPT_PIC.c,31 :: 		check = 0;                                //cambia ciclo controllo
	BCF         _check+0, BitPos(_check+0) 
;MPPT_PIC.c,32 :: 		if(value > 0x03) value --;                //riduci il duty cycle
	MOVF        _value+0, 0 
	SUBLW       3
	BTFSC       STATUS+0, 0 
	GOTO        L_main7
	DECF        _value+0, 1 
L_main7:
;MPPT_PIC.c,33 :: 		}
L_main6:
L_main4:
;MPPT_PIC.c,34 :: 		}
	GOTO        L_main8
L_main3:
;MPPT_PIC.c,36 :: 		if (PotenzaT1 > PotenzaT0){                 //Se la potenza è maggiore
	MOVF        _PotenzaT1+3, 0 
	SUBWF       _PotenzaT0+3, 0 
	BTFSS       STATUS+0, 2 
	GOTO        L__main16
	MOVF        _PotenzaT1+2, 0 
	SUBWF       _PotenzaT0+2, 0 
	BTFSS       STATUS+0, 2 
	GOTO        L__main16
	MOVF        _PotenzaT1+1, 0 
	SUBWF       _PotenzaT0+1, 0 
	BTFSS       STATUS+0, 2 
	GOTO        L__main16
	MOVF        _PotenzaT1+0, 0 
	SUBWF       _PotenzaT0+0, 0 
L__main16:
	BTFSC       STATUS+0, 0 
	GOTO        L_main9
;MPPT_PIC.c,37 :: 		if(value > 0x03) value --;                //Riduci il duty cycle
	MOVF        _value+0, 0 
	SUBLW       3
	BTFSC       STATUS+0, 0 
	GOTO        L_main10
	DECF        _value+0, 1 
	GOTO        L_main11
L_main10:
;MPPT_PIC.c,39 :: 		check = 1;                                //cambia ciclo di controllo
	BSF         _check+0, BitPos(_check+0) 
;MPPT_PIC.c,40 :: 		if(value < 0x3D) value ++;                //incrementa valore DC
	MOVLW       61
	SUBWF       _value+0, 0 
	BTFSC       STATUS+0, 0 
	GOTO        L_main12
	INCF        _value+0, 1 
L_main12:
;MPPT_PIC.c,41 :: 		}
L_main11:
;MPPT_PIC.c,42 :: 		}
L_main9:
;MPPT_PIC.c,43 :: 		}
L_main8:
;MPPT_PIC.c,45 :: 		PotenzaT0 = PotenzaT1;                       //Salva valore di potenza
	MOVF        _PotenzaT1+0, 0 
	MOVWF       _PotenzaT0+0 
	MOVF        _PotenzaT1+1, 0 
	MOVWF       _PotenzaT0+1 
	MOVF        _PotenzaT1+2, 0 
	MOVWF       _PotenzaT0+2 
	MOVF        _PotenzaT1+3, 0 
	MOVWF       _PotenzaT0+3 
;MPPT_PIC.c,46 :: 		CCPR1L = value;                              //Aggiorna DC
	MOVF        _value+0, 0 
	MOVWF       CCPR1L+0 
;MPPT_PIC.c,47 :: 		delay_ms(100);                               //Delay di assestamento
	MOVLW       2
	MOVWF       R11, 0
	MOVLW       134
	MOVWF       R12, 0
	MOVLW       153
	MOVWF       R13, 0
L_main13:
	DECFSZ      R13, 1, 1
	BRA         L_main13
	DECFSZ      R12, 1, 1
	BRA         L_main13
	DECFSZ      R11, 1, 1
	BRA         L_main13
;MPPT_PIC.c,48 :: 		}
	GOTO        L_main1
;MPPT_PIC.c,49 :: 		}
L_end_main:
	GOTO        $+0
; end of _main
