Oui, corrigé.Envoyé par Emcy
Reprend mes fichiers sources, ils fonctionnent.
Oui, corrigé.Envoyé par Emcy
Reprend mes fichiers sources, ils fonctionnent.
Pas de Wi-Fi à la maison : CPL
j'ai toujours le même probleme...
=> ça peut être une piste....aussi, ce que je trouve de bizzare, c'est que dans le projet d'exemple que j'ai chargé, la definition de tous les prototype sont uniquement dans mon fichier main.h....
je vois que personne ne trouve...
alors voici le lien pour telecharger le logiciel que j'utilise pour programmer :
ZiLOG Developer Studio II (ZDS II)
http://www.zilog.com/software/zds2.asp
et voici mon projet :
http://cjoint.com/?iFoVKteNQ7
avec ça vous devriez mieux y arriver...
Remarque : je n'ai créé que les fichiers "affichage", le reste est issu d'un projet (exemple) livré avec le logiciel.
personne ne trouve la solution ???
Peux tu ajouter la librairie suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 /* afficher.c */ #include <ez8.h> #include <sio.h> // non-standard I/O #include "afficheur.h"
Puis mettre aussi le fichier d'entête:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 #include <stdio.h>
tout au début
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 #include "afficheur.h"
Bonjour,
Il suffit de supprimer les const de la déclaration:
Je suis trèss novice mais j'ai lu dans la documentation que le compilateur C utilisé par Z8 a quelques particularités. Une des particularités concerne le mot clé 'const'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 static const TypeTableau TabA = { { 0, 1, 1, 1, 0 } , { 1, 0, 0, 0, 1 } , { 1, 0, 0, 0, 1 } , { 1, 1, 1, 1, 1 } , { 1, 0, 0, 0, 1 } , { 1, 0, 0, 0, 1 } , { 1, 0, 0, 0, 1 } } ; static const TypeTableau TabZ = { { 1, 1, 1, 1, 1 } , { 0, 0, 0, 0, 1 } , { 0, 0, 0, 1, 0 } , { 0, 0, 1, 0, 0 } , { 0, 1, 0, 0, 0 } , { 1, 0, 0, 0, 0 } , { 1, 1, 1, 1, 1 } } ;
A toi de lire la documentation et de comprendre le pourquoi de la chose
Bien le bonjour chez vous
Jowo
MMMMEEEEEEERRRRRRCCCCCCIIIIIII !!!!!!!!!!!!!!!!!!!!!!!!!
tu l'as choppée ou la doc ?
La doc est située d'habitude sous le menu Help > Help Topics... avec les programmes Windows.
Voici mes dernières sources:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 /* main.c */ #include "afficher.h" int main () { MyMain(); return 0; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #ifndef H_AFFICHER #define H_AFFICHER /* afficher.h */ /* J'ai supprimé le mot clé const */ typedef int TypeTableau[7][5]; TypeTableau *RenvoieTableau(int MyChar); int MyMain (void); #endifMes "Project Settings" (Menu > Project > Settings ou Alt+F7)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102 /* afficher.c */ #include <stdio.h> // #include <ez8.h> // #include <sio.h> // non-standard I/O #include "afficher.h" /* J'ai laissé le mot clé const */ static const TypeTableau TabA = { { 0, 1, 1, 1, 0 } , { 1, 0, 0, 0, 1 } , { 1, 0, 0, 0, 1 } , { 1, 1, 1, 1, 1 } , { 1, 0, 0, 0, 1 } , { 1, 0, 0, 0, 1 } , { 1, 0, 0, 0, 1 } } ; static const TypeTableau TabZ = { { 1, 1, 1, 1, 1 } , { 0, 0, 0, 0, 1 } , { 0, 0, 0, 1, 0 } , { 0, 0, 1, 0, 0 } , { 0, 1, 0, 0, 0 } , { 1, 0, 0, 0, 0 } , { 1, 1, 1, 1, 1 } } ; TypeTableau *RenvoieTableau(int MyChar) { TypeTableau *PtTab = NULL; switch (MyChar) { case 'A': PtTab = &TabA; break; case 'Z': PtTab = &TabZ; break; } return PtTab; } int MyMain(void) { int i; TypeTableau *PtTab = RenvoieTableau('A'); for (i = 0; i < 7; i++) { int j; for (j = 0; j < 5; j++) { printf ("%d", (*PtTab)[i][j]); } printf ("\n"); } return 0; }
En espérant que ça puisse t'aider.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7Onglet C Category: Code Generation v User Defined v Limit Optimization for Easier Debugging Memory Model: Small Frames: Dynamic
Bien le bonjour chez vous
Jowo
=> c'est quoi ces lignes de code ? tu les sorts d'ou ?Envoyé par jowo
Excuse-moi ce n'est pas du code. Ce sont les settings du projet (Menu > Project > Settings ou ALT+F7).
Bien le bonjour chez vous
Jowo
=> c'est pas grave, l'important c'est que tu es trouvé la solution.Envoyé par jowo
Je viens de finir mon premier petit programe en C
Pouvez-vous me dire si j'ai bien codé la fonction AfficheLettre ? n'y a t-il pas une methode plus rapide (notament sur l'utilisation de la puissance de 2 : je suis pas sure que ça soit cette methode qui soit la plus puissante) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117 /* afficher.c */ #include <ez8.h> #include <stdio.h> //#include <sio.h> // non-standard I/O //#include "main.h" #include "afficheur.h" static const TypeTableau TabA = { {0, 1, 1, 1, 0}, {1, 0, 0, 0, 1}, {1, 0, 0, 0, 1}, {1, 1, 1, 1, 1}, {1, 0, 0, 0, 1}, {1, 0, 0, 0, 1}, {1, 0, 0, 0, 1} }; static const TypeTableau TabZ = { {1, 1, 1, 1, 1}, {0, 0, 0, 0, 1}, {0, 0, 0, 1, 0}, {0, 0, 1, 0, 0}, {0, 1, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 1, 1, 1, 1} }; TypeTableau *RenvoieTableau(int MyChar) { TypeTableau *PtTab = NULL; switch (MyChar) { case 'A': PtTab = &TabA; break; case 'Z': PtTab = &TabZ; break; } return PtTab; } int puissance(int n, int x) { int p = 1; while(n--) p *= x; return p; } // affihce la lettre selectionnée sur l'afficheur selectionné (ne fait qu'un passage) int AfficheLettre(int MyChar, int SelectionAfficheur) { TypeTableau *PtTab; int i; int j; int MASQUE_SELECTION_E; int MASQUE_SELECTION_G; int PORT_E; // le port E : 8 bit int PORT_G; // le port G : 8 bit // crée le masque pour activer le bon afficheur switch(SelectionAfficheur) { case 1: // selection afficheur 1 MASQUE_SELECTION_G = 0x00; MASQUE_SELECTION_E = 0x80; //b1000 0000 break; case 2: // selection afficheur 2 MASQUE_SELECTION_G = 0x80; //b1000 0000 MASQUE_SELECTION_E = 0x00; break; case 3: // selection afficheur 3 MASQUE_SELECTION_G = 0x00; MASQUE_SELECTION_E = 0x20; //b0010 0000 break; case 4: // selection afficheur 4 MASQUE_SELECTION_G = 0x00; MASQUE_SELECTION_E = 0x40; //b0100 0000 break; default : MASQUE_SELECTION_G = 0x00; MASQUE_SELECTION_E = 0x00; break; } // recupère le bon tableau PtTab = RenvoieTableau(MyChar); // allume les lED une par une for (j = 0; j < 7; j++) { for (i = 0; i < 5; i++) { PGOUT = ((*PtTab)[j][i])*puissance(j, 2); // tous les bits sont à 0 sauf le bit n° j qui vaut (*PtTab)[j][i] PEOUT = ((*PtTab)[j][i])*puissance(i, 2); // tous les bits sont à 0 sauf le bit n° i qui vaut (*PtTab)[j][i] PEOUT = !PEOUT; // rafraichissement de l'affichage PGOUT |= MASQUE_SELECTION_G; PEOUT |= MASQUE_SELECTION_E; } } return 0; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void main () { while(1) { AfficheLettre('A', 1); } }
COMMENTAIRE:
Pour les puissance de 2, il est plus efficace d'utiliser l'opération de décalage vers la gauche.
2^0 = 1 = b00000001
2^1 = 2 = b00000010
2^2 = 4 = b00000100
2^3 = 8 = b00001000
En plus pour les opérations d'E/S, j'utiliserais de préférence les types nombre non-signé.
Pour masquer un bit, il faut utiliser l'opérateur & (and bitwise).
Bien le bonjour chez vous
Jowo
=> d'accord, je ne connaissais pas l'operateur <<Envoyé par jowo
est-ce qu'il existe un commande pour mettre toutes les valeurs d'un tableau à 0 ?
j'ai aussi fait une erreur :
PEOUT = !PEOUT;
c'est plutot : PEOUT = ~PEOUT;
=> comment faire pour ne pas recharger les tableaux (boucle case de la fonction RenvoieTableau(unsigned int MyChar)) si MyChar n'a pas changer entre deux appels de fonctions (sans utiliser de variable globale) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137 /* afficher.c */ #include <ez8.h> #include <stdio.h> #include "afficheur.h" static const TypeTableau TabA = { {0, 1, 1, 1, 0}, {1, 0, 0, 0, 1}, {1, 0, 0, 0, 1}, {1, 1, 1, 1, 1}, {1, 0, 0, 0, 1}, {1, 0, 0, 0, 1}, {1, 0, 0, 0, 1} }; .... .... static const TypeTableau TabZ = { {1, 1, 1, 1, 1}, {0, 0, 0, 0, 1}, {0, 0, 0, 1, 0}, {0, 0, 1, 0, 0}, {0, 1, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 1, 1, 1, 1} }; TypeTableau *RenvoieTableau(unsigned int MyChar) { TypeTableau *PtTab = NULL; switch (MyChar) { case 'A': PtTab = &TabA; break; ... ... case 'Z': PtTab = &TabZ; break; } return PtTab; } // affiche la lettre selectionnée sur l'afficheur selectionné (ne fait qu'un passage) int AfficheLettre(unsigned int MyChar, unsigned int SelectionAfficheur) { TypeTableau *PtTab; unsigned int i; unsigned int j; unsigned int MASQUE_SELECTION_E; unsigned int MASQUE_SELECTION_G; unsigned int PEOUT_TEMP; unsigned int PGOUT_TEMP; unsigned int PORT_E; // le port E : 8 bit unsigned int PORT_G; // le port G : 8 bit // crée le masque pour activer le bon afficheur switch(SelectionAfficheur) { case 1: // selection afficheur 1 MASQUE_SELECTION_G = 0x00; MASQUE_SELECTION_E = 0x80; //b1000 0000 break; case 2: // selection afficheur 2 MASQUE_SELECTION_G = 0x80; //b1000 0000 MASQUE_SELECTION_E = 0x00; break; case 3: // selection afficheur 3 MASQUE_SELECTION_G = 0x00; MASQUE_SELECTION_E = 0x20; //b0010 0000 break; case 4: // selection afficheur 4 MASQUE_SELECTION_G = 0x00; MASQUE_SELECTION_E = 0x40; //b0100 0000 break; default : MASQUE_SELECTION_G = 0x00; MASQUE_SELECTION_E = 0x00; break; } // recupère le bon tableau PtTab = RenvoieTableau(MyChar); // allume les lED une par une for (j = 0; j < 7; j++) { for (i = 0; i < 5; i++) { PGOUT_TEMP = ((*PtTab)[j][4-i]); // [4-i] : pour faire une symetrie horizontale de l'affichage PGOUT_TEMP = PGOUT_TEMP << j; PGOUT = PGOUT_TEMP; // tous les bits sont à 0 sauf le bit n° j qui vaut (*PtTab)[j][i] PEOUT_TEMP = ((*PtTab)[j][4-i]); PEOUT_TEMP = PEOUT_TEMP << i; // decal à gauche PEOUT_TEMP = ~PEOUT_TEMP; // inversion des bits PEOUT_TEMP &= 0x1F; // mise à 0 des 3 premiers bits b0001 1111; PEOUT = PEOUT_TEMP; // tous les bits sont à 0 sauf le bit n° i qui vaut (*PtTab)[j][i] // rafraichissement de l'affichage PGOUT |= MASQUE_SELECTION_G; PEOUT |= MASQUE_SELECTION_E; } } // éteind toutes les LEDs PGOUT = 0x00;//b0000 0000; PEOUT = 0x1F;//b0001 1111; //pour perdre du temps car l'affichage n'est pas très jolie pour la derniere LED for (j = 0; j < 7; j++) { i=j; } PGOUT |= MASQUE_SELECTION_G; PEOUT |= MASQUE_SELECTION_E; return 0; }
aussi, sur ma carte microcontrolleur, je recupère une lettre envoyé sur le port série comme ceci :
=> le probleme est que ça n'a pas l'air de marcher : n'y a t-il pas une conversion à faire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part AfficheLettre(getchar(), 1);
Remarque : j'ai tester avec le prototype suivant :
=> je n'ai pas testé avec des entiers non-signés (j'ai pas la carte pour le moment sous la main)
Code : Sélectionner tout - Visualiser dans une fenêtre à part int AfficheLettre(int MyChar, int SelectionAfficheur)
En C, il n'existe pas de commande mais seulement des fonctions. A ma connaissance, il n'existe pas une telle fonction.Envoyé par Emcy
Mais tu as deux possibilités
1) une boucle for qui met à zéro chaque cellule de ton tableau.
2) l'utilisation de la fonction memset.
Bien le bonjour chez vous
Jowo
Où vois-tu que le tableau est rechargé?Envoyé par Emcy
Bien le bonjour chez vous
Jowo
c'est vrai, je reaffecte seulement l'adresse donc ça ne bouffe pas trop de ressource...
rebonjour,
j'ai de nouveaux problemes
voici le lien pour telecharger le logiciel que j'utilise pour programmer :
ZiLOG Developer Studio II (ZDS II)
http://www.zilog.com/software/zds2.asp
et voici mon projet :
http://cjoint.com/?jvo3AV0i6V
=> j'ai un probleme : j'ai une erreur de compilation dans mon projet et je ne vois pas d'ou ça vient
Je crois que tu rêves un peu là. Personne ne va installer un environnement de développement sur sa machine pour tester ton projet. C'est à toi de réduire le code au minimum qui montre le problème et de le montrer.Envoyé par Emcy
Pas de Wi-Fi à la maison : CPL
le probleme est que je n'arrive pas à identifier l'emplacement de l'erreur
voici mon rapport d'erreur :
C:\PROGRA~1\ZILOG\ZDSII_~1.0\SAMPLES\PROJET~1\SRC\MAIN.C (44,38) : WARNING (204) Ignoring space specifier (e.g. near, far, rom) on local, parameter or struct member
C:\PROGRA~1\ZILOG\ZDSII_~1.0\SAMPLES\PROJET~1\SRC\MAIN.C (44,38) : ERROR (210) Invalid use of placement or alignment option
C:\PROGRA~1\ZILOG\ZDSII_~1.0\SAMPLES\PROJET~1\SRC\MAIN.C (45,38) : WARNING (204) Ignoring space specifier (e.g. near, far, rom) on local, parameter or struct member
C:\PROGRA~1\ZILOG\ZDSII_~1.0\SAMPLES\PROJET~1\SRC\MAIN.C (45,38) : ERROR (210) Invalid use of placement or alignment option
C:\PROGRA~1\ZILOG\ZDSII_~1.0\SAMPLES\PROJET~1\SRC\MAIN.C (57,2) : ERROR (100) Syntax error
C:\PROGRA~1\ZILOG\ZDSII_~1.0\SAMPLES\PROJET~1\SRC\MAIN.C (60,7) : ERROR (193) Missing "{" detected
C:\PROGRA~1\ZILOG\ZDSII_~1.0\SAMPLES\PROJET~1\SRC\MAIN.C (60,7) : ERROR (126) Identifier "init_uart0" not in function argument list, ignored
C:\PROGRA~1\ZILOG\ZDSII_~1.0\SAMPLES\PROJET~1\SRC\MAIN.C (60,7) : WARNING (198) "old style" formal parameter declarations are obsolescent
C:\PROGRA~1\ZILOG\ZDSII_~1.0\SAMPLES\PROJET~1\SRC\MAIN.C (61,8) : ERROR (156) Expression must be an lvalue
C:\PROGRA~1\ZILOG\ZDSII_~1.0\SAMPLES\PROJET~1\SRC\MAIN.C (64,2) : ERROR (109) Cannot return a value from a function returning "void"
C:\PROGRA~1\ZILOG\ZDSII_~1.0\SAMPLES\PROJET~1\SRC\MAIN.C (64,2) : ERROR (112) Expression not compatible with function return type
par exempel j'ai une erreur sur ce bout de code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 // recupère un caratère unsigned int getbyte(void) { unsigned int ch; while (!(U0STAT0 & 0x80)); // Wait for receive data available ch = U0D; return(ch); }=> alors qu'il y a bien l'acoladeERROR (193) Missing "{" detected
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager