Etant débutant dans la programmation de microcontrôleur (pour ma part un PIC18F45k80) je butte sur un problème de port inactif si je configure mon pic par défaut. Il s'agit des pin 15 et 16 (PORT RC0 et RC1) qui ne veulent pas se mettre à 1. Or je dois commander un circuit de puissance en sortie sur 12 voies, en numérique. Le port D fonctionne correctement mais pas les 2 premiers bits du port C...
Après des heures passés sur des forums et pas de solution, j'ai choisit de contourner le problème, sans me prendre la tête avec la configuration des registres internes de mon pic : Je veux donc assigner les sorties RA0 et RA1 (qui elles fonctionnent correctement) à la place des sorties RC0 et RC1. Pour me simplifier la tache, je crée un tableau intermédiaire pour le " nouveau port C ", sachant de les 2 bits de poids le plus faible s'écriront sur les sortie RA0 et RA1.
Voici mon code sur MPLAB (Je veux au départ forcer toutes les valeurs à 1) :
Modération : Ajout des balises "codes"
Code : Tout sélectionner
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#define _XTAL_FREQ 8000000
/*# define LATCbits.LATC7 TabPortC[7]
# define LATCbits.LATC6 TabPortC[6]
# define LATCbits.LATC5 TabPortC[5]
# define LATCbits.LATC4 TabPortC[4]
# define LATCbits.LATC3 TabPortC[3]
# define LATCbits.LATC2 TabPortC[2]
# define LATAbits.LATA1 TabPortC[1]
# define LATAbits.LATA0 TabPortC[0]
# define LATDbits.LATD3 TabPortD[3]
# define LATDbits.LATD2 TabPortD[2]
# define LATDbits.LATD1 TabPortD[1]
# define LATDbits.LATD0 TabPortD[0]
*/
int TabPortC[8];
int TabPortD[8];
void main(void)
{
ANCON0=0;
ANCON1=0;
TRISB=0;
TRISC=0;
TRISA=0;
TRISD=0;
PORTB=0b00000000;
PORTC=0b00000000;
PORTA=0b00000000;
PORTD=0b00000000;
while(1)
{
LATCbits.LATC7 = TabPortC[7];
LATCbits.LATC6 = TabPortC[6];
LATCbits.LATC5 = TabPortC[5];
LATCbits.LATC4 = TabPortC[4];
LATCbits.LATC3 = TabPortC[3];
LATCbits.LATC2 = TabPortC[2];
LATAbits.LATA1 = TabPortC[1];
LATAbits.LATA0 = TabPortC[0];
LATDbits.LATD3 = TabPortD[3];
LATDbits.LATD2 = TabPortD[2];
LATDbits.LATD1 = TabPortD[1];
LATDbits.LATD0 = TabPortD[0];
TabPortC[] = 255;
TabPortD[] = 255;
}
}
Il s'avère qu'une erreur est présente sur la ligne d'écriture de la valeur du tableau... Quel est votre diagnostic?

