Una esperienza con XC8
Target delle prove : 16F1619
PORTC e PORTB
Se osserviamo il PORTC, dal foglio
data vediamo che RC5:4 non hanno
analogica.
Così pure per il PORTB, dove RB5:4
non hanno capacità analogica.
Nella struttura, come ci si può aspettare, mancano ANSC5
e ANSC4.
Di conseguenza, nella struttura ANSELB
dovrebbero mancare ANSB5 e ANSB4.
Ma non è così:
- la struttura ANSELB assegna ANSB4,
ANSB5, ANSB6, ANSB7, come se tutti i pin fossero dotati di
funzione analogica.
- in debug, al POR il contenuto di ANSELC
è , come ci si aspetta 0xCF, ma quello
di ANSELB non è 0xC0,
come ci si aspetterebbe dal foglio dati, bensì 0xF0.
Ovvero: ANSB4 e ANSB5
esistono anche fisicamente?
Per il punto 1. potrebbe trattarsi di una svista dovuta al
copia-e-incolla durante la stesura del foglio dati, ma questo non giustifica il
punto 2.
Il problema è stato trattato nel forum Microchip, con i soliti risultati
inconcludenti.
Nel file di errata del componente non c'è alcuna indicazione della cosa,
la quale non sembra creare problemi. Ma, nello specifico, compilando:
#include <xc.h>
// EN pin
#define EN LATBbits.LATB5
#define EN_tris TRISBbits.TRISB5
#ifdef _ANSELB_ANSB5_POSN
#define EN_ansel ANSELBbits.ANSB5
#endif
// RW pin
#define RW LATBbits.LATB4
#define RW_tris TRISBbits.TRISB4
#ifdef _ANSELB_ANSB4_POSN
#define RW_ansel ANSELBbits.ANSB4
#endif
void main ()
{
EN = 0;
EN_tris = 0;
#ifdef EN_ansel
EN_ansel = 0;
#endif
RW = 0;
RW_tris = 0;
#ifdef RW_ansel
RW_ansel = 0;
#endif
while (1);
}
che è compilato senza errori.
Se ANSB4 e ANSB5
non sono fisicamente esistenti (stando al foglio dati), abbiamo l'inserzione di 4 istruzioni inutili.
520 ;Ansc1.c: 22: ANSELBbits.ANSB5 = 0;
521 07F4 0023 movlb 3 ; select bank3
522 07F5 128D bcf 13,5 ;volatile
529 ;Ansc1.c: 27: ANSELBbits.ANSB4 = 0;
530 07F9 0023 movlb 3 ; select bank3
531 07FA 120D bcf 13,4 ;volatile
Niente di male, ma la situazione non è chiara.
Da cosa dipende la differenza tra foglio dati, struttura e apparente realtà?
Al momento il quesito attende ancora una risposta