﻿
	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

	endc
	
;-------------------------------------------------------------------------------------------------		
; startup
	org 0x0
	goto Main	
	

;------------------------------------------------------------------------------

Main

; 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
		movlw	b'00001100'		;  2C-2F 00 10 1100 single output, alsó két bit, activ high
		banksel	CCP1CON
		movwf	CCP1CON

		banksel	TMR2
		clrf	TMR2
		banksel	T2CON
		bsf 	T2CON,TMR2ON	; Timer2 engedélyezés
;------------------------------------------------------------------------------------------------
;A/D konverter beállítása		
;ini
		MOVLW 	B'01110000' 		;A/D belsõ órajel
		banksel	ADCON1
		MOVWF 	ADCON1 				;
		BSF 	TRISA,0				 ;Set RA0 to input
		banksel	ANSEL
		BSF		ANSEL,0 			;Set RA0 to analog
		banksel	ADCON0
		MOVLW 	B'00000001'			 ;Left justify, Vdd Vref, AN0, A/D on
		MOVWF 	ADCON0 ;
		banksel TRISC
		movlw	b'00000000'
		movwf	TRISC
				
loop
		banksel	PIR1
		BTFSC	PIR1, TMR2IF		; bebillent-e a Timer2 flag?
		GOTO	loop				; ha nem, akkor nem csinálunk semmit
		BCF		PIR1, TMR2IF		; töröljük a Timer2 flag-et
		banksel	ADCON0
		BTFSC	ADCON0,GO 			; konverzió kész?
		GOTO	loop				; ha nem, akkor nem csinálunk semmit
		banksel ADRESH
		MOVF	ADRESH, w
		banksel CCPR1L
		MOVWF	CCPR1L				; a konverzió eredményének felső bájtját közvetlenül áttöltjük a kitöltési tényező felső bájtjába
		banksel	CCP1CON
		MOVLW	b'11001111'		
		ANDWF	CCP1CON, F			; na ez egy érdekes mutatvány, ezzel töröljük a kitöltési tényező két alsó bitjét, miközben a CCP modul egyéb beállítását nem bántjuk
		banksel	ADRESL
		MOVF	ADRESL, W
		banksel	RESULTLO
		MOVWF	RESULTLO
		BTFSC	RESULTLO, 7			; megnézzük, hogy az AD konverzió eredményének utolsó előtti bitje egyes-es
		BSF		CCP1CON, 5			; ha igen, akkor a kitöltési tényező utolsó előtti bitjét egyesre billentjük
		BTFSC	RESULTLO, 6			; ugyanez az utolsó bitre
		BSF		CCP1CON, 4
		BSF		ADCON0, GO			; elindítjuk az újabb konverziót
		
		GOTO loop
	
; konverzió vége

     	
	end
	
	
	
	
	
	
	
	