;**************************************************************************
;                                ESEMPIO 3
;                          Los Convertitori A/D
;                          Autore: Jorge R. Mu¤oz                                                    
;**************************************************************************
; Il seguente esempio è una applicazione con æC PIC 16C71 della casa 
; Microchip.
; L'applicazione consiste nell'implementare due convertitori A/D,(RA0-AN0 e 
; RA1-AN1),le cui uscite sono n riflesse in RB<0-7>(leds) selezionabili 
; mediante un interruttore in RA2.
; La frequenza di lavoro è di 4MHz il cui periodo è di 250ns.
;**************************************************************************
;
        list P =16C71            ; æC PIC16C71
        list C =132              ; Elenco a 132 caratteri.
;
OPZIONI  equ  01h                ; Registro di opzioni.
STATUS  equ  03h                 ; Registro di stato.
PORT_A  equ  05h                 ; Porta A.
PORT_B  equ  06h                 ; Porta B.
TRIS_A  equ  05h                 ; Reg. di programmazione di PA.
TRIS_B  equ  06h                 ; Reg. di programmazione di PB.
ADCON0  equ  08h                 ; Reg. di programmazione e controllo del ADC.
ADCON1  equ  08h                 ; Reg. di programmazione del ADC.
ADDRES  equ  09h                 ; Reg. di memorizzazione della conversione.
INTCON  equ  0Bh                 ; Reg. di controllo di interrupt.
CONTA   equ  0Ch                 ; Variabile di Temporizzazione.
;
;**************************************************************************
;


                org 0            ; Vettore di Reset.
                goto INIZIO      ; Salta all'inizio.
;
                org 5            ; Indirizzo di inizio.
;
;********************** Programma principale ********************************
;
;                                
INIZIO          bsf STATUS,5     ; Selezione del Banco 1.

                clrf TRIS_B      ; RB<7-0> uscita di convertitori A/D.
;
                movlw B'00000111'; RA0,RA1 e RA2 come entrate del 
                movwf TRIS_A     ; interruttore e del convertitore A/D.
;
                movlw B'00000010'; Configurazione di piedini del ADCON1 come 
                movwf ADCON1     ; entrate.RA0 e RA1=Analogiche,RA2 Digitale
                                 ; e Vref=Vdd.
;
                movlw B'10000000'; Programmazione del Reg. di Opzioni
                movwf OPZIONI

                movlw B'00000000'; Disattivare interrupt.
                movwf INTCON     ;
;                
                bcf STATUS,5     ; Selezione del Banco 0.
;
;******************** Procedura di scelta del convertitore ********************
;                
CHIII_E        btfss PORT_A,2   ; E' il bit RA2=1 (E digitale).
                goto E_AN_0     ; NO.
;
;******************** Procedura di configurazione del convertitore ***************
;
                movlw B'10001001'; SI.Attivare convertitore,cancellare ADIF,GO      
                movwf ADCON0     ; (ADCON0<2>),canale RA1/AN1 e Fosc/32.
                goto NO_FIN

E_AN_0         movlw B'10000001'; Attivare conversore,cancellare ADIF,GO
                movwf ADCON0     ; (ADCON0<2>),canale RA0/AN0 e Fosc/32.
;
;******************** Procedura di attesa di fine conversione **************
;
NO_FIN          movlw B'00001010'
                movwf CONTA      ; Carica il contatore.
DELAY           decfsz CONTA,1
                goto DELAY
                bsf ADCON0,2     ; Attivare Convertitore GO.
NO_FIN_1        btfsc ADCON0,2   ; E' DONE(ADCON0<2>)=0(Fine di conversione)?
                goto NO_FIN_1    ; NO.Aspettare la fine di conversione.
;
;******************** Procedura di campionatura in PB ****************************
;
                movf ADDRES,0    ; SI.ADRES==>W Raccogli risultato della                                                     
                movwf PORT_B     ; conversione e togli in RB<0-7>.
                bcf ADCON0,1     ; Abbassare flag ADIF.
                goto CHIII_E    ; Riniziare il ciclo.
                
                end

