;************************************************************************
;*					ESSAIS PIC 12F675 - TEST ADC test 2 				*
;************************************************************************

	LIST	p=12F675				; Définition de processeur
	include	"P12F675.inc"			; Définitions de variables
	
; Définition des variables qui varient ;c)

	CBLOCK 0x20						; debut de la zone variables
	
	
	ENDC							; fin de la zone variables

; macros

BANK0	macro
	bcf	STATUS, RP0
	ENDm
	
BANK1	macro
	bsf	STATUS, RP0
	ENDm
	
; Démarrage sur reset

	org	0x000
	goto init
	
; Initialisations

init
	
	BANK1
	movlw	B'10000001'				; Pas de resistances pull-up
	movwf	OPTION_REG				; et prescaler 1:4 pour tmr0
	BANK0
	
	movlw	B'00000111'				; comparateurs off
	movwf	CMCON
	
	movlw	B'00000001'				; ADC on, Left justified, Vdd reference
	movwf	ADCON0					; et ANO select. en attente d'une conversion
	
	movlw	B'00000001'				; reglage du timer1,
	movwf	T1CON					; timer1 actif
	
	BANK1
	movlw	B'00010001				
	movwf	ANSEL					; fosc/8 et an0 en mode analogique
	
	bcf		TRISIO,1				; port GP1 en sortie
	BANK0
	
	goto	start					; on passe au programme principal


; programme principal !

start

; on initialise le timer1 pour 20ms	- 20000 cycles - B'01001110 00100000' en 16 bits
	bcf		PIR1,0					; on efface le flag TMR1IF
	
	movlw	B'01001110'				; on charge les 8 MSB
	sublw	D'255'					; on soustrait 255 de W
	movwf	TMR1H					; on charge les 8 MSB
	movlw	B'00100000'				; on charge les 8 LSB
	sublw	D'255'					; on soustrait
	movwf	TMR1L					; et on charge les 8 LSB
; timer initialisé, on revient pas avant 20 ms ;c)

	bsf		ADCON0,1				; Lance la convertion

adconvert	
	btfss	PIR1,6					; teste si la convertion est finie
	goto	adconvert				; si pas finie on reteste
	
	bcf		PIR1,6					; on efface le flag
	bcf		INTCON,2				; on efface le flag TOIF
	movlw	D'9'					; on charge 255-243 dans W, qui correspond a 988 us
	movwf	TMR0					; on charge W dans le timer
	bsf		GPIO,1					; on active la sortie 1

boucle1
	btfss	INTCON,2				; on teste si le comptage a fini
	goto	boucle1					; si fini, on continue, sinon on reteste
	bcf		INTCON,2				; on efface le flag TOIF
	movf	ADRESH, W				; on transfere le résultat de l'adc dans W
	sublw	D'255'					; on soustrait 255 de W
	movwf	TMR0					; on charge le contenu de W dans le timer	

boucle2	
	btfss	INTCON,2				; on teste si le comptage a fini
	goto	boucle2					; pas fini...
	bcf		GPIO,1					; fini, on désactive la sortie
	
waiting
	btfss	PIR1,0					; comptage des 20 ms fini ou pas ?
	goto	waiting					; non, alors on reteste...
	goto	start					; oui, alors on peut tout recommencer...
	
	END
