Salut!
Je dois programmer un microcontrolleur F310XP. Pour cela, j'utilise l'IDE Silicon laboratories, et sdcc.
J'ai une librairie de base, qui définis un le port P2: il est sur 8 bits, 4 bits pour les boutons et 4 bits pour les leds. Je doit programmer P2. Voila l'énnoncé.
Maintenant, je veux créer une fonction pour allumer certaines leds, et eteindre d'autre... Le proto:
Code :
- void UI_Leds (char led0, char led1, char led2, char led3);
- /* Args: trois valeurs possibles:
- 0: allume la Led concernée
- 1: eteint la Led concernée
- 2: Ne change pas l'état de la Led concernée
- Retour: void
- */
|
Le seul hic, c'est que mon P2 n'est pas accessible depuis la fonction, donc, normal, je fais un pointeur.
Code :
- // Allume éteint les leds
- void UI_Leds (char *port, char led0, char led1, char led2, char led3){
- /* Args: trois valeurs possibles:
- 0: allume la Led concernée
- 1: eteint la Led concernée
- 2: Ne change pas l'état de la Led concernée
- Retour: void
- */
- char P2 = *port;
- if (led0 == 1)
- P2 = P2 | 0x10 ; // 0001
- else if (led0 == 0)
- P2 = P2 & ~0x10 ; // 1110
- if (led1 == 1)
- P2 = P2 | 0x20 ; // 0010
- else if (led1 == 0)
- P2 = P2 & ~0x20 ; // 1101
- if (led2 == 1)
- P2 = P2 | 0x40 ; // 0100
- else if (led1 == 0)
- P2 = P2 & ~0x40 ; // 1011
- if (led3 == 1)
- P2 = P2 | 0x80 ; // 1000
- else if (led1 == 0)
- P2 = P2 & ~0x80 ; // 0111
- *port = P2 & 0x0F;
- *port = P2 | 0xF0;
- }
|
Le seul truc qui peut aider, et encore, je ne sais pas ce que cela signifie réellement:
Code :
- sfr P2 = 0xA0; //ds le header de la lib du microcontrolleur
|
note: j'appelle mes fonctions dans mon main via:
Code :
- if (UI_Boutons (&P2,0,0,2,2)) UI_Leds (&P2,0,0,0,0);
- else UI_Leds (&P2,1,1,1,1);
|
Et pas d'erreur de compilation
Mais là rien ne marche Alors si vous pouviez m'aider, ou me donner une autre solution que les pointeurs? Merci d'avance
Message édité par rc_jk78 le 22-11-2007 à 19:52:08