; ez a program az analóg átalakítás talán legegyszerűbb módját mutatja be
; a mikrovezérlő AN1 bemenetére egy hőfokfüggő és egy diszkrét ellenállással 
; készített feszültségosztó analóg módon változó értékét kapcsoljuk
; az analóg-digitális átalakítás eredményének kezelésére két példát is láthatunk:
;	1.) az eredmény kijelzése 8 bites ledsoron bináris formátumban (csak a látvány miatt, amúgy nem túl értelmezhető forma
;			de innen már csak egy lépés a decimális forma, vagy a 7 szegmenses kijelző)
;	2.) az eredményt egy előre meghatározott értékhez hasonlítjuk, és ettől függően kapcsolunk egy kimenetet. Ez lehet led is, de ha 
;			relét húzunk meg vele, akkor már hűtőgépet, ventillátort, redőny motorját kapcsolhatja

; az előző programozástechnikai magyarázatok már elmaradnak, de 
; bizonyos megjegyzések továbbra is szerepelnek, a későbbi értelmezhetőség, az 
; esetleges hibakeresés miatt


	list p=16f819			
	INCLUDE <P16F819.INC>	
	__CONFIG 0x3f10				

	cblock 0x20
		delay
		delay2
		ertek
	endc

	org 0
	goto start

start
	bsf STATUS,RP0
	bcf STATUS,RP1		;BANK1 választás a következő regiszterek miatt
	bcf	OPTION_REG,7 	;PORTB ellenállásai
	movlw .4
	movwf ADCON1		;az analóg csatornák kiválasztása:A0, A1, A3
						; az eredmény balra igazított 10 bites érték 2 bájton ábrázolva

	movlw b'11101111'	; az A port adatiránya. A határérték kapcsolásához kimenet legyen az egyik láb
	movwf TRISA
	clrf TRISB			;a B port minden lába kimenet legyen

	bsf OSCCON,6		;8MHz órajel beállítása 3 biten
	bsf OSCCON,5
	bsf OSCCON,4

	bcf STATUS,RP0		; váltás vissza BANK0-ra

	clrf PORTB			;minden kimenetet kapcsoljunk ki
; analóg átalakítás konfigurálása
	BSF ADCON0,6		;a mintavételezés sebességének beállítása 2 biten
	BSF ADCON0,7	
	call alap_var		;várakozás
	bsf	ADCON0,ADON		;AD bekapcs (ezzel még nem indul el az AD átalakítás!)
	call alap_var		;várakozás
AD_inditasa	
	BCF ADCON0,5		;csatorna kiválasztása (A1) 3 biten
	BCF ADCON0,4
	BSF ADCON0,3
	call alap_var		;várakozás
	bsf ADCON0,GO		;indulhat az AD átalakítás
meg_tart_AD
	btfsc ADCON0,GO
	goto meg_tart_AD	;várakozás addig, amíg kész nincs az AD átalakítás
AD_keszen_van
	movf ADRESL,W		;?ADRESH?
	movwf ertek			;tároljuk el az átalakítás eredményét, a felső 8 bitet
;**************************
; KIÍRÁS
	movwf PORTB			; az AD átalakítás eredményét egyszerűen bináris formátumban irassuk ki a B porton
;********************************
	bcf PORTA,4			;a határérték jelzést kapcsoljuk ki
hofokkapcsolas
	movfw ertek			
	sublw	.128		;nagyobb, mint a következő kijelzési érték?
	btfss	STATUS,C	;Ha ertek>=hatar...
	bsf		PORTA,4		; ... akkor kapcsoljuk be a határérték jelzést
;********************************
	goto AD_inditasa	; ha ertek kisebb mint a határ, akkor is ide ugrik, csak átugorja a határérték bekapcsolását

;----------------------------------
; egy kis szoftveres késleltetés
;----------------------------------
alap_var 
	movlw	.255
	movwf delay
	decfsz	delay,F
	goto $-1
	return
;----------------------------------

	END

