ELEMANIA
PIC16F690 - ANSEL, ANSELH e TRISx

Vediamo ora nel dettaglio quali registri devono essere programmati prima di poter utilizzare correttamente le porte del PIC.

ANSEL e ANSELH

Per programmare il funzionamento analogico oppure digitale dei pin di una porta si utilizza una coppia di registri denominati ANSEL e ANSELH. In particolare gli input analogici AN0, AN1,..., AN7 sono controllati da ANSEL, mentre AN8,..., AN11 sono controllati da ANSELH:

ANSEL e ANSELH

Il valore 1 su un bit di ANSEL o ANSELH indica che il pin corrispondente è programmato come analogico; viceversa un valore 0 indica che il pin è programmato come digitale.

Osserviamo che alcuni pin di alcune porte (RA3, RA5, RC4, RC5, RB6, RB7) non sono presenti nei registri ANSEL e ANSELH in quanto non sono collegati internamente al convertitore AD e dunque possono essere utilizzati solo come pin digitali.

Supponendo per esempio di non voler usare il convertitore AD, la cosa più semplice e rapida è azzerare tutti i bit del registro ANSEL e ANSELH (in modo da programmare tutti i pin come digitali). Dunque possiamo scrivere:

        BANKSEL ANSEL ; Seleziona il banco di ANSEL e ANSELH
        CLRF ANSEL; Azzera tutti i bit di ANSEL (digital I/O)
        CLRF ANSELH ; Azzera tutti i bit di ANSELH

NOTA 1:

La programmazione dei registri ANSEL e ANSELH per azzerare i bit corrispondenti ai pin usati come digital i/o è indispensabile, dal momento che all'avvio del PIC (o dopo un RESET) tutti i pin dei registri ANSEL sono settati a '1', cioè come analog input.

A proposito dello stato iniziale (di default) dei registri del PIC è utile consultare il manuale nelle sezioni che forniscono, per ogni registro, il Value on POR/BOR Reset e il Value on all other Resets. Senza voler entrare qui nei dettagli, riportiamo solo per comodità i valori forniti a proposito dei registri ANSEL e ANSELH:

Osserviamo che tutti i bit dei due registri vengono settati a 1 durante il reset, come detto.

Programmazione di TRISx

Ogni porta è associata a un registro TRISx (TRISA per PORTA, TRISB per PORTB e TRISC per PORTC) che consente di impostare la direzione (input oppure output) di ogni pin della porta. Ogni bit di un registro TRISx corrisponde al bit di stessa posizione nella corrispondente porta PORTx. Per esempio la figura seguente mostra la corrispondenza fra TRISC e PORTC:

Scrivendo il valore 1 in uno dei bit di TRISC, il corrispondente bit di PORTC viene programmato in input; viceversa scrivendo un valore 0 si programma il biti in output (discorso perfettamente analogo vale per le altre porte, con l'eccezione del bit RA3 che può essere usato solo come input). Supponiamo per esempio di voler programmare i bit RC0 e RC1 come output e i restanti bit di PORTC come input. Le istruzioni da usare sono le seguenti:

        BANKSEL TRISC
        MOVLW b'11111100' ; Salva la costante binaria in W
        MOVWF TRISC ; Scrive W su TRISC

Siccome non esiste un'istruzione per copiare una costante numerica direttamente in un registro, abbiamo dovuto prima passare attraverso il registro W.

ATTENZIONE:

Nel PIC16F690 le porte PORTA e PORTB non sono costituite da 8 bit, tuttavia i corrispondenti registri hanno sempre 8 bit (associati ai pin di uguale posizione - esempio TRISB4 è associato a RB4). I bit associati a pin non esistenti (per esempio TRISB0 che corrisponderebbe a un pin RB0 che non esiste) non hanno alcuna funzione e dunque non è necessario programmarli.

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it