Bonjour,
désolé de te répondre que maintenant, je regarde ça se matin et je te tiens au courant...
-----
Bonjour,
désolé de te répondre que maintenant, je regarde ça se matin et je te tiens au courant...
Déjà, il s'agit plutot du fichier openxlcd.C et pas .h, ensuite peut tu nous dire quelle est le type d'erreur.
Pour ma part, j'ai la même chose d'écrit que toi..
Bonjour,
oui c'est bien un fichier.c. J'ai les deux erreurs suivantes :
D:\stef\MCC18\src\extended\pmc \XLCD\openxlcd.c:35:Error [1205] unknown member 'PSPMODE' in '__tag_38'
D:\stef\MCC18\src\extended\pmc \XLCD\openxlcd.c:35:Error [1131] type mismatch in assignment
Et là je te mets mon fichier openxclc.c , si tu peux me dire en quoi le tien diffère:
#include <p18cxxx.h>
#include <xlcd.h>
void Delay10TCYx(PARAM_SCLASS unsigned char);
void Delay100TCYx(PARAM_SCLASS unsigned char);
void Delay10KTCYx(PARAM_SCLASS unsigned char);
void Delay1KTCYx(PARAM_SCLASS unsigned char);
/****************************** ****************************** ********
* Function Name: OpenXLCD (Pour PICDEM2plus) *
* Return Value: void *
* Parameters: lcdtype: sets the type of LCD (lines) *
* Description: This routine configures the LCD. Based on *
* the Hitachi HD44780 LCD controller. The *
* routine will configure the I/O pins of the *
* microcontroller, setup the LCD for 4- or *
* 8-bit mode and clear the display. The user *
* must provide three delay routines: *
* DelayFor18TCY() provides a 18 Tcy delay *
* DelayPORXLCD() provides at least 15ms delay *
* DelayXLCD() provides at least 5ms delay *
****************************** ****************************** ********/
void OpenXLCD(unsigned char lcdtype)
{
// The data bits must be either a 8-bit port or the upper or
// lower 4-bits of a port. These pins are made into inputs
ADCON1bits.PCFG0 = 0; /* Permettre au port RA de fonctionner en numérique */
ADCON1bits.PCFG1 = 1; /* sauf pour le Bit RA0 pour la conversion anal/num */
ADCON1bits.PCFG2 = 1;
ADCON1bits.PCFG3 = 1;
TRISAbits.TRISA1 = 0; /* Config des Bits du port RA1 à RA3 en Sortie pour */
TRISAbits.TRISA2 = 0; /* l'afficheur LCD */
TRISAbits.TRISA3 = 0;
DDREbits.PSPMODE = 0; /* Configure le port D en mode Entrées / Sorties générales */
TRIS_DATA_PORT &= 0xf0;
DATA_PORT &= 0b00000011;
TRIS_RW = 0; // All control signals made outputs
TRIS_RS = 0;
TRIS_E = 0;
RW_PIN = 0; // R/W pin made low
RS_PIN = 0; // Register select pin made low
E_PIN = 0; // Clock pin made low
// Delay for 15ms to allow for LCD Power on reset
DelayPORXLCD();
// Setup interface to LCD
TRIS_DATA_PORT &= 0xf0;
DATA_PORT &= 0xf0;
DATA_PORT |= 0x03; // Function set cmd(4-bit interface)
E_PIN = 1; // Clock the cmd in
Delay100TCYx(1);
E_PIN = 0;
// Delay for at least 4.1ms
DelayXLCD();
// Setup interface to LCD
DATA_PORT &= 0xf0; // Function set cmd(4-bit interface)
DATA_PORT |= 0x03;
E_PIN = 1; // Clock the cmd in
Delay10TCYx(5);
E_PIN = 0;
// Delay for at least 100us
Delay100TCYx(20);
// Setup interface to LCD
DATA_PORT &= 0xf0; // Function set cmd(4-bit interface)
DATA_PORT |= 0x03;
E_PIN = 1; // Clock cmd in
Delay10TCYx(5);
E_PIN = 0;
TRIS_DATA_PORT |= 0xf0; // Make data nibble output
DATA_PORT &= 0xf0; // Function set cmd(4-bit interface)
DATA_PORT |= 0x02;
E_PIN = 1; // Clock cmd in
Delay10TCYx(5);
E_PIN = 0;
// Set data interface width, # lines, font
while(BusyXLCD()); // Wait if LCD busy
WriteCmdXLCD(0b00101000); // Function set cmd
// Turn the display on then off
while(BusyXLCD()); // Wait if LCD busy
WriteCmdXLCD(0b00001000); // Display OFF/Blink OFF
while(BusyXLCD()); // Wait if LCD busy
WriteCmdXLCD(0b00001101); // Display ON/Blink ON
// Clear display
while(BusyXLCD()); // Wait if LCD busy
WriteCmdXLCD(0b00000110); // Clear display
// Set entry mode inc, no shift
while(BusyXLCD()); // Wait if LCD busy
WriteCmdXLCD(0b00000001); // Entry Mode
// Set DD Ram address to 0
while(BusyXLCD()); // Wait if LCD busy
SetDDRamAddr(0); // Set Display data ram address to 0
return;
}
J'ai comparé le fichier Openxlcd.c, et c'est exactement le même...
Et en ce qui concerne l'erreur, je vois pas trop...n'aurais-tu pas oublié de remettre un #include <p18cxxx.h> quelque part???
Bonjour,
bon j'ai été voir un prof qui m'a dit de supprimer cette ligne DDRE...
Maintenant j'ai une nouvelle erreur mismatch :
D:\stef\MCC18\src\traditional\ pmc\XLCD\putrxlcd.c:17:Error [1109] type mismatch in redeclaration of 'putrsXLCD'
Halting build on first failure as requested.
BUILD FAILED: Tue Apr 22 11:15:11 2008
Bonjour,
peut tu me dire comment est déclaré cette fonction dans le fichier :
C:\...\MCC18\h\xlcd.h
de meme que dans ton fichier :
C:\MCC18\src\pmc_common\XLCD\p utrxlcd.c
Je crois qu'il y avait un problème dans cette fonction...
PS:As tu eu des problèmes a te connecté sur le forum ce matin?
Voila le fichier putrxlcd.c:
Code:/* $Id: putrxlcd.c,v 1.1 2003/12/09 22:52:09 GrosbaJ Exp $ */ #include <p18cxxx.h> #include <xlcd.h> /******************************************************************** * Function Name: putrsXLCD * Return Value: void * Parameters: buffer: pointer to string * Description: This routine writes a string of bytes to the * Hitachi HD44780 LCD controller. The user * must check to see if the LCD controller is * busy before calling this routine. The data * is written to the character generator RAM or * the display data RAM depending on what the * previous SetxxRamAddr routine was called. ********************************************************************/ void putrsXLCD(const rom char *buffer) { while(*buffer) // Write data to LCD up to null { while(BusyXLCD()); // Wait while LCD is busy WriteDataXLCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } et le fichier xlcd.h: // xlcd.h Modifié pour PICDEM2plus // voir fin fichier xlcd.h // C.D 11/2005 #ifndef __XLCD_H #define __XLCD_H #include <delays.h> // temporisation pour afficheur LCD /* PIC 17Cxxx and 18Cxxx XLCD peripheral routines. * * Notes: * - These libraries routines are written to support the * Hitachi HD44780 LCD controller. * - The user must define the following items: * - The LCD interface type (4- or 8-bits) * - If 4-bit mode * - whether using the upper or lower nibble * - The data port * - The tris register for data port * - The control signal ports and pins * - The control signal port tris and pins * - The user must provide three delay routines: * - DelayFor18TCY() provides a 18 Tcy delay * - DelayPORXLCD() provides at least 15ms delay * - DelayXLCD() provides at least 5ms delay */ /* Interface type 8-bit or 4-bit * For 8-bit operation uncomment the #define BIT8 */ /* #define BIT8 */ /* When in 4-bit interface define if the data is in the upper * or lower nibble. For lower nibble, comment the #define UPPER */ /*#define UPPER */ /* DATA_PORT defines the port to which the LCD data lines are connected */ #define DATA_PORT PORTD #define TRIS_DATA_PORT TRISD /* CTRL_PORT defines the port where the control lines are connected. * These are just samples, change to match your application. */ #define RW_PIN PORTAbits.RA2 /* PORT for RW */ #define TRIS_RW DDRAbits.RA2 /* TRIS for RW */ #define RS_PIN PORTAbits.RA3 /* PORT for RS */ #define TRIS_RS DDRAbits.RA3 /* TRIS for RS */ #define E_PIN PORTAbits.RA1 /* PORT for E */ #define TRIS_E DDRAbits.RA1 /* TRIS for E */ /* Display ON/OFF Control defines */ #define DON 0b00001111 /* Display on */ #define DOFF 0b00001011 /* Display off */ #define CURSOR_ON 0b00001111 /* Cursor on */ #define CURSOR_OFF 0b00001101 /* Cursor off */ #define BLINK_ON 0b00001111 /* Cursor Blink */ #define BLINK_OFF 0b00001110 /* Cursor No Blink */ #define CLEAR_DISP 0b00000001 /* Clear Display */ #define RET_HOME 0b00000010 /* Return Home */ /* Cursor or Display Shift defines */ #define SHIFT_CUR_LEFT 0b00010011 /* Cursor shifts to the left */ #define SHIFT_CUR_RIGHT 0b00010111 /* Cursor shifts to the right */ #define SHIFT_DISP_LEFT 0b00011011 /* Display shifts to the left */ #define SHIFT_DISP_RIGHT 0b00011111 /* Display shifts to the right */ /* Function Set defines */ #define FOUR_BIT 0b00101111 /* 4-bit Interface */ #define EIGHT_BIT 0b00111111 /* 8-bit Interface */ #define LINE_5X7 0b00110011 /* 5x7 characters, single line */ #define LINE_5X10 0b00110111 /* 5x10 characters */ #define LINES_5X7 0b00111011 /* 5x7 characters, multiple line */ #define PARAM_SCLASS auto #define MEM_MODEL far /* Change this to near for small memory model */ /* OpenXLCD * Configures I/O pins for external LCD */ void OpenXLCD(PARAM_SCLASS unsigned char); /* SetCGRamAddr * Sets the character generator address */ void SetCGRamAddr(PARAM_SCLASS unsigned char); /* SetDDRamAddr * Sets the display data address */ void SetDDRamAddr(PARAM_SCLASS unsigned char); /* BusyXLCD * Returns the busy status of the LCD */ unsigned char BusyXLCD(void); /* ReadAddrXLCD * Reads the current address */ unsigned char ReadAddrXLCD(void); /* ReadDataXLCD * Reads a byte of data */ char ReadDataXLCD(void); /* WriteCmdXLCD * Writes a command to the LCD */ void WriteCmdXLCD(PARAM_SCLASS unsigned char); /* WriteDataXLCD * Writes a data byte to the LCD */ void WriteDataXLCD(PARAM_SCLASS char); /* putcXLCD * A putc is a write */ #define putcXLCD WriteDataXLCD /* putsXLCD * Writes a string of characters to the LCD */ void putsXLCD(PARAM_SCLASS char *); /* putrsXLCD * Writes a string of characters in ROM to the LCD */ void putrsXLCD(PARAM_SCLASS const MEM_MODEL rom char *); /* User defines these routines according to the oscillator frequency */ extern void DelayFor18TCY(void); extern void DelayPORXLCD(void); extern void DelayXLCD(void);
oui oui je n'arrivais pas à acéder au forum ce matin
J'ai les mêmes fichiers que toi... mais je ne sais plus si j'ai les bon, car je bosse avec un autre PC, et je ne me suis pas resservi de la librairie, mais je me souviens qu'il fallait modifier quelque chose...dans la décllaration de la fonction..mais quoi??
il doit y avoir un sujet sur ce forum que j'avais créer et on mavait donné la solution, mais je ne le retrouve pas...
je vais réessayer de retrouver...
JE L'AI.....
http://forums.futura-sciences.com/sh...librairie+xlcd
Lit le sujet..et tu trouveras ta solution...
c'est dans la déclaration de putrsxlcd(...far...)
voila
ça devrait marcher...
Regarde aussi, si il ne prend les bon fichier(fichiers que tu as modifié grace au site AIX MARSEILLE....), et pas ceux de la librairie de base..car j'avais eu ce problème...
Ok je regarde ça et te tiens au courant
Merci
J'ai rajouter le far dans le fichier putrxlcd.c, jai bien maintenant:
void putrsXLCD(const far rom char *buffer)
{...}
Quand je compile je n'ai plus d'erreur: build succeeded
Mais il ne se passe rien sur l'afficheur (enfin je vois juste les rectangles de la ligne du haut en bleu clair) ...
J'ai essayé de rajouter un while(1); à la fin du programme mais ça en change rien
As tu regarder le contraste de ton afficheur...
Ou le paramètrage pour la vitesse du quartz...car il se peut que l'afficheur n'est pas le temps d'acquérir toutes les infos..
Euh comment on règle la vitesse du quartz ?
Dans la configuration des bits...Euh comment on règle la vitesse du quartz ?
soit dans l'onglet sous MPLAB: configure\configuration bits ou en faisant:
Et la tu met HS ou XT ...tout dépend ton type d'oscillateur, et regarde la doc de ton pic..Code:#pragma config OSC = HS //OSCILLATOR
Bonjour,
bon ben en fait c'était pas un pb de quartz, donc mon prof m a conseillé de reprendre le pb du début et de reprogrammer sans se servir des fichiers du dossier xlcd.
Merci qd même pour ton aide
Bon week end
Salut,
Tu trouveras pas mal d'exemples de pilotage de modules LCD externes ici :
http://www.sxlist.com/techref/io/lcd/pic.htm
a+
Bonjour à tous ! Désole je ne suis malheureusement pas là pour apporter des réponses mais pour poser des questions =). Il se trouve que depuis peu j'essaye de programmer un LCD (2*16) en mode 4 bits avec un pic 18F4550. Le problème est le suivant : mon curseur clignote environ 1s (selon les délais mis dans mon code) puis passe tout à droite de la première ligne, puis s'éteint. Pourtant dans ma procédure, il devrait si le code est correct afficher un caractère (A en l'occurrence). Je n'arrive pas à afficher un quelconque symbole. Merci d'avance pour votre aide. Voici mon code (un peu bordélique car je ne dispose pas d'un PORT entier) :
// Initialisation du LCD.
Delay10KTCYx(1); // Démarrage de l'écran.
PORTBbits.RB0 = 0; // RS en niveau bas : le LCD attend des instructions (et non des données).
PORTBbits.RB1 = 0; // R/W en mode écriture.
Delay10KTCYx(1);
// Etape 1 (*3) : Mode 8 bits / 1 ligne / matrice 5*8.
PORTBbits.RB2 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
Delay10KTCYx(1);
PORTBbits.RB6 = 0; // DB7.
PORTBbits.RB5 = 0; // DB6.
PORTBbits.RB4 = 1; // DB5.
PORTBbits.RB3 = 1; // DB4.
Delay10KTCYx(1);
PORTBbits.RB2 = 0;
Delay10KTCYx(1);
PORTBbits.RB2 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
Delay10KTCYx(1);
PORTBbits.RB6 = 0; // DB7.
PORTBbits.RB5 = 0; // DB6.
PORTBbits.RB4 = 1; // DB5.
PORTBbits.RB3 = 1; // DB4.
Delay10KTCYx(1);
PORTBbits.RB2 = 0;
Delay10KTCYx(1);
PORTBbits.RB6 = 0; // DB7.
PORTBbits.RB5 = 0; // DB6.
PORTBbits.RB4 = 1; // DB5.
PORTBbits.RB3 = 1; // DB4.
Delay10KTCYx(1);
PORTBbits.RB2 = 0;
Delay10KTCYx(1);
PORTBbits.RB2 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
Delay10KTCYx(1);
// Etape 2 : Mode 4 bits.
PORTBbits.RB6 = 0; // DB7.
PORTBbits.RB5 = 0; // DB6.
PORTBbits.RB4 = 1; // DB5.
PORTBbits.RB3 = 0; // DB4.
Delay10KTCYx(1);
PORTBbits.RB2 = 0;
Delay10KTCYx(1);
// Etape 3 : Mode 4 bits / 2 lignes / 5*8.
PORTBbits.RB6 = 0; // DB7.
PORTBbits.RB5 = 0; // DB6.
PORTBbits.RB4 = 1; // DB5.
PORTBbits.RB3 = 0; // DB4.
Delay10KTCYx(1);
PORTBbits.RB2 = 0;
Delay10KTCYx(1);
PORTBbits.RB2 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
Delay10KTCYx(1);
PORTBbits.RB6 = 1; // DB7.
PORTBbits.RB5 = 0; // DB6.
PORTBbits.RB4 = 0; // DB5.
PORTBbits.RB3 = 0; // DB4.
Delay10KTCYx(1);
PORTBbits.RB2 = 0;
Delay10KTCYx(1);
// Etape 4 : Display on / cursor on / blink on.
PORTBbits.RB2 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
Delay10KTCYx(1);
PORTBbits.RB6 = 0; // DB7.
PORTBbits.RB5 = 0; // DB6.
PORTBbits.RB4 = 0; // DB5.
PORTBbits.RB3 = 0; // DB4.
Delay10KTCYx(1);
PORTBbits.RB2 = 0;
Delay10KTCYx(1);
PORTBbits.RB2 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
Delay10KTCYx(1);
PORTBbits.RB6 = 1; // DB7.
PORTBbits.RB5 = 1; // DB6.
PORTBbits.RB4 = 1; // DB5.
PORTBbits.RB3 = 1; // DB4.
Delay10KTCYx(1);
PORTBbits.RB2 = 0;
Delay10KTCYx(1);
// Etape 5 : Clear display.
PORTBbits.RB2 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
Delay10KTCYx(1);
PORTBbits.RB6 = 0; // DB7.
PORTBbits.RB5 = 0; // DB6.
PORTBbits.RB4 = 0; // DB5.
PORTBbits.RB3 = 0; // DB4.
Delay10KTCYx(1);
PORTBbits.RB2 = 0;
Delay10KTCYx(1);
PORTBbits.RB2 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
Delay10KTCYx(1);
PORTBbits.RB6 = 0; // DB7.
PORTBbits.RB5 = 0; // DB6.
PORTBbits.RB4 = 0; // DB5.
PORTBbits.RB3 = 1; // DB4.
Delay10KTCYx(1);
PORTBbits.RB2 = 0;
Delay10KTCYx(1);
// Etape 6 : Cursor moves to right.
PORTBbits.RB2 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
Delay10KTCYx(1);
PORTBbits.RB6 = 0; // DB7.
PORTBbits.RB5 = 0; // DB6.
PORTBbits.RB4 = 0; // DB5.
PORTBbits.RB3 = 0; // DB4.
Delay10KTCYx(1);
PORTBbits.RB2 = 0;
Delay10KTCYx(1);
PORTBbits.RB2 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
Delay10KTCYx(10);
PORTBbits.RB6 = 0; // DB7.
PORTBbits.RB5 = 1; // DB6.
PORTBbits.RB4 = 1; // DB5.
PORTBbits.RB3 = 0; // DB4.
Delay10KTCYx(1);
PORTBbits.RB2 = 0;
Delay10KTCYx(1);
// Etape 8 : Attente de données.
PORTBbits.RB0 = 1; // RS en niveau haut : le LCD attend des données (et non des instructions).
PORTBbits.RB1 = 0; // R/W en mode écriture.
Delay10KTCYx(1);
// Coeur du programme.
while (1)
{
// Affichage d'un symbole quelconque (A) :
PORTBbits.RB2 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
Delay10KTCYx(1);
PORTBbits.RB6 = 0; // DB7.
PORTBbits.RB5 = 1; // DB6.
PORTBbits.RB4 = 0; // DB5.
PORTBbits.RB3 = 0; // DB4.
Delay10KTCYx(1);
PORTBbits.RB2 = 0;
Delay10KTCYx(1);
PORTBbits.RB2 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
Delay10KTCYx(1);
PORTBbits.RB6 = 0; // DB7.
PORTBbits.RB5 = 0; // DB6.
PORTBbits.RB4 = 0; // DB5.
PORTBbits.RB3 = 1; // DB4.
Delay10KTCYx(1);
PORTBbits.RB2 = 0;
Delay10KTCYx(1);
}
Bonsoir,
pourquoi ne pas utiliser la libraries XLCD?
Quel Crystal? quelle valeur?
Fusibles de configurations? (PORTB peut être analogue, se référer a la datasheet)
Salut jponnoua,
Plusieurs remarques :
1/ PORTx / LATx
Quand tu programmes les ports en SORTIE sur un PIC18, il faut IMPERATIVEMENT utiliser LATx au lieu de PORTx si tu veux être sur de ne jamais avoir de problèmes. Ce sujet a été abordé de multiples fois sur ce forum.
C'est surtout vrai dans ton cas ou tu manipules les bits d'un même port une instruction après l'autre.
Changes immédiatement toutes les instructions qui manipulent PORTx en SORTIE par des LATx. Exemple :
PORTBbits.RB6 = 0; ===> LATBbits.LATB6 = 0;
2/ A quelle fréquence travailles-tu ? (les délais dépendent de ta vitesse de fonctionnement)
As-tu configuré au début de ton programme les bits de configuration ?
Quel afficheur utilises-tu (quel controleur LCD?)
Tu trouveras ci-après des liens qui montrent des exemples pur les PIC18 :
http://www.aix-mrs.iufm.fr/formation...indexPIC_C.htm
tu peux télécharger les samples files de cette carte : http://www.microchip.com/stellent/id...&part=DM163022
a+
Oki donc j'ai remplacé les PORTB par des LATB et j'obtiens un résultat déjà différent : cette fois-ci, je vois bien apparaitre les 2 lignes (contrairement à avant) comme je le souhaitais, par contre je ne vois que ça, plus de curseur, et toujours pas de caractère. J'ai donc essayer de prolonger mes delais (Delay10KTCYx(10) mais cela ne change rien.
Je travaille en 4 MHz, horloge interne :
#pragma config WDT = OFF // WatchDog désactivé.
#pragma config LVP = OFF // Mode basse consommation désactivé.
#pragma config FOSC = INTOSC_HS // Oscillateur interne.
...
void main (void)
{
// Initialisation de la fréquence d'horloge interne à 4MHz.
OSCCONbits.IRCF2 = 1;
OSCCONbits.IRCF1 = 1;
OSCCONbits.IRCF0 = 0;
Cette horloge fonctionne correctement car j'ai des LEDS sur d'autres pattes et elles ont un clignotement correct.
Le LCD est le gdm 1602A (16*2 caracteres, matrice 5*8).
Voila merci déjà pour ces informations, je sens que l'on est sur la bonne voie !
PS : quelle est la différence entre LATB et PORTB ?
Caaaaaaaaa maaaaarrrrrcheeeeeeeeeeeeee !!!!!!!!!!
Merci a tous !!!
Donc l'erreur venait lors de l'initialisation : j'initialise à 8 bits 3 fois, puis après je passe à 4 bits en envoyant que 4 bits pensant qu'il effectue immédiatement le passage 8 bits -> 4 bits. Hors il faut pour la dernière fois envoyer encore 2 fois 4 bits. J'ai donc rajouté après
// Etape 2 : Mode 4 bits.
LATBbits.LATB6 = 0; // DB7.
LATBbits.LATB5 = 0; // DB6.
LATBbits.LATB4 = 1; // DB5.
LATBbits.LATB3 = 0; // DB4.
Delay10KTCYx(10);
LATBbits.LATB2 = 0;
Delay10KTCYx(10);
l'étape suivante :
LATBbits.LATB2 = 1; // E à 1 puis à 0, après un délai : validation de la configuration.
Delay10KTCYx(10);
LATBbits.LATB6 = 0; // DB7.
LATBbits.LATB5 = 0; // DB6.
LATBbits.LATB4 = 0; // DB5.
LATBbits.LATB3 = 0; // DB4.
Delay10KTCYx(10);
LATBbits.LATB2 = 0;
Delay10KTCYx(10);
En fait il y avait un décalage avant !
Voila je ne sais pas si j 'ai été clair mais je vous remercie !!!
Bon je vais quand même continuer à vous embêter ^^.
Je souhaiterais maintenant simplifier le tout :
J'aimerais pouvoir affecter DATA (4bits) par exemple directement sur les sorties du PIC. Hors, si j'avais câblé mes bits de poids fort (D7 D6 D5 D4) sur B7 B6 B5 B4, cela aurais bien sure simplifier le problème. Mais là par exemple, ils sont sur B6 B5 B4 B3 (au milieu du port B), connaissait vous un moyen rapide et efficace d'affecter DATA sur ces bits (décalage, masque ou je ne sais quoi).
Merci d'avance ^^