#!/usr/local/bin/php
Toutes les broches peuvent être configurées indépendamment en entrées ou sorties logiques.
Au Reset les broches sont toujours configurées en entrées.
Attention les ports A et B sont partagés avec le module adc.Toutes les combinaisons Analogique/Digitale ne sont pas possibles.
Le port A est configuré en analogique au Reset. Sauf RA4 qui est toujours digitale
RA4 : drain ouvert en sortie / trigger de smith en entrée.
La configuration au reset des broches RB4:RB0 du port B dépend du bit de config PBADEN : OFF : RB4:RB0 digitales au reset , ON : analogique
On peut activer des résistances de pullup internes sur le PORTB.
RB6 et RB7 sont dédiées à l'ICD Ne pas utiliser si l'icd est utilisé.
PORTA , PORTB et PORTE : Partagé avec le module convertisseur analogique/numérique
PORTA : Analogique au reset.
PORTB : Analogique ou digital au reset selon l'état du bit de configuration PBADEN
Les configurations de chaque broches ne sont pas indépendantes. Voir le registre ADCON1
(DS39631A page 224)
PORTC et PORTD : partagés avec d'autres fonctions mais toujours digital.
Trois registres importants :
PORTx : bits représentants l'état réel de lignes d'E/S
LATx : bits représentants l'état forcé des sorties
TRISx : bits de configuration 1 : entrée (valeur au reset) 0 : sortie
Normalement pour une sortie LATx = PORTx sauf dans quelques cas particulier : court-circuit entre broches,drain ouvert,surconsommation…
Configuration (inutile au reset) :
TRISBbits.TRISB0 = 1 ;
Lecture :
if(PORTBbits.RB0 == 0 ) { ...... ; // action si 1 } else { ..... ; // action si 0
Ecriture : sans effet (PORTBbits.RB0 = 1 ;)
Configuration :
PORTBbits.RB3 = 0 ; TRISBbits.TRISB3 = 0 ; // il vaut mieux fixer l'état avant que la broche ne soit une sortie
Ecriture :
PORTBbits.RB3 = 0 ; ou LATBbits.LATB3 = 0 ;
Relecture :
on relit l'état réel (detection de cc,etc..)
if ( PORTBbits.RB3==1) {....
ou on relit l'état forcé (souhaité)
if (LATBbits.LATB3==1) {....