
	list      p=16F690 
	#include <p16F690.inc>
    __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)

	cblock 0x20
	
RESULTLO	
RESULTHI
w_bak
status_bak
fsr_bak

	endc
	
;-------------------------------------------------------------------------------------------------		
; startup
	org 0x0
	goto Main	
	
;-----------------------------------------------------
	

; interrupt handler
	org 0x4 
IntHandle
	; save registers(regiszterek elmentése)
	movwf	w_bak
	swapf	STATUS, W
	clrf	STATUS
	movwf	status_bak
	movfw	FSR
	movwf	fsr_bak
	
	

    btfss	PIR1, TMR2IF	; TIMER2 túlcsordul?0-k bit
	goto	IntHandle_End	; ha NEM akkor regiszterek visszaállítása
	goto	Timer2
;--------------------------------	
Timer2             				       
	bcf		PIR1, TMR1IF		; interrupt flag törlése
	movfw	RESULTLO			; konverzió eredményének kiolvasása
	movwf	CCPR1L				; eredmény betöltése a PWM-be

IntHandle_End
	; regiszterek visszaállítása
	movfw	fsr_bak
	movwf	FSR
	swapf	status_bak, W
	movwf	STATUS
	swapf	w_bak, F
	swapf	w_bak, W
	retfie					; visszatérés az interruptból

;------------------------------------------------------------------------------

Main

; PWM szabályzás

	
; I/O port konfigurálás
		bsf		STATUS,RP0	
		movlw	B'11011111'		; RC PWM P1A 5. láb
		movwf	TRISC

; CCP1 modul programozása PWM módban
		clrf	PIE1			; periféria megszakítások tiltása
		movlw	0x7F			; PR2=0x7F
		movwf	PR2				; a Timer2 periódus regisztere
		bcf		STATUS,RP0		; bank0 kiválasztás
		clrf	CCP1CON
		clrf	TMR2
		movwf	CCPR1L			; kitöltési tényező= 
		movlw	0x2C			;  2C-2F 00 10 1100 single output, alsó két bit, activ high
		movwf	CCP1CON			; PWM mód beállítás
		bsf 	T2CON,TMR2ON	; Timer2 engedélyezés

		

;------------------------------------------------------------------------------------------------
	


;A/D konverzió		
;ini
		BSF	 	STATUS,RP0 			;Bank 1
		BCF	 	STATUS,RP1 			;
		MOVLW 	B'01110000' 		;A/D belső órajel
		MOVWF 	ADCON1 				;
		BSF 	TRISA,0				 ;Set RA0 to input
		BCF		 STATUS,RP0 		;Bank 2
		BSF		STATUS,RP1 			;
		BSF		 ANSEL,0 			;Set RA0 to analog
		BCF 	STATUS,RP1			 ;Bank 0
		MOVLW 	B'10000001'			 ;Right, Vdd Vref, AN0
		MOVWF 	ADCON0 ;
		Banksel TRISC
		movlw	b'00000000'
		movwf	TRISC
				
		
		BSF 	ADCON0,GO 			;Start conversion
		BCF 	STATUS,RP1
		BTFSC	 ADCON0,GO			 ;Is conversion done?
		GOTO	$-1 				;No, test again
		MOVF 	ADRESH,W 			;Read upper 2 bits
		MOVWF 	RESULTHI 			;
		BSF 	STATUS,RP0 			;Bank 1
		MOVF 	ADRESL,W 			;Read lower 8 bits
		BCF 	STATUS,RP0			 ;Bank 0
		MOVWF 	RESULTLO
	
; konverzió vége

     	
	end
	
	
	
	
	
	
	
	