Bonjour a tous,
Après un passage par le forum C# (ou je vais sûrement retourner) j’ai maintenant un problème avec le C…
J'ai un TPE a faire je vous passe les détails (a moins que ça vous intéresse mais j'en doute) mais en gros je dois contrôler un moteur via le port série de mon ordinateur et l'arrêter quand il arrive a un certain capteur infrarouge.
J'ai trouvé de la documentation sur le sujet mais je suis complètement perdu entre les USR, UDR, UCR, BAUD, USART, UART et j'en passe j’ai essayé de coder tout cela mais je n’y arrive pas du tout. J’ai des erreurs à la compilation.
Voici mon code :En gros j’aimerais bien que vous m’expliquer ou je fais des erreurs parce que la je bute complètement cela fait bientôt 3 heures de suite que je travaille sur ce programme et je n’y arrive pas du tout…
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156 //port série /* Bibliothèque utilisée */ #include <avr/io.h> #include <avr/interrupt.h> #include <C:/winavr/examples/stdiodemo/uart.c> /* Définition des variables d'entrées */ #define Aucun_Capteur (0x00) #define Capteur_Fin_Course_Contact_1 (0x01) #define Capteur_Fin_Course_Conact_6 (0x02) #define Capteur_Ir_2 (0x04) #define Capteur_Ir_3 (0x08) #define Capteur_Ir_4 (0x10) #define Capteur_Ir_5 (0x20) #define BAUD 9600 // vitesse du port série --> 9600bit/s #define UCR (0x18) #define UBRR 25 #define USR (0x80) /* Définitions des variables de sorties */ #define Aucun_Moteur (0x00) #define Marche_Arret_Moteur (0x01) #define Sens_Rotation_Moteur (0x02) #define Marche_Et_Sens (0x04) /* Fonction d'initialisation des périphériques */ unsigned char COMMANDE_PC; //variable contenant la valeur du port série void Init_Periph(void) { PORTA= 0x00; DDRA= 0xFF; PORTB= 0xFF; DDRC= 0x00; } /* ************************************************* */ /* Programme Commande PC */ /* ************************************************* */ void recoit_commande_pc(void) { if((USR & 0x80) == 0x80) //Si une donnée vient d'arriver... { COMMANDE_PC = UDR; //Sauvegarde donnée reçue USR = 0x80; //RAZ bit RXC } else { COMMANDE_PC = 0x00; //Si pas de donnée reçue "00" servira signaler au programme principal que il n'y a rien à faire. } } /* ************************************************* */ /* Programme A */ /* ************************************************* */ void programme_A(void) { if((Capteur_Fin_Course_Contact_1 & 0x01)== 0x01) { PORTB = Marche_Arret_Moteur; /*mise en marche moteur*/ } if((Capteur_Ir_2 & 0x04) == 0x04) { PORTB = Aucun_Moteur; } } /* ************************************************* */ /* Programme B */ /* ************************************************* */ void programme_B(void) { if((Capteur_Fin_Course_Contact_1 & 0x01)== 0x01) { PORTB = Marche_Arret_Moteur; /*mise en marche moteur*/ } if((Capteur_Ir_3 & 0x08) == 0x08) { PORTB = Aucun_Moteur; } } /* ************************************************* */ /* Programme C */ /* ************************************************* */ void programme_C(void) { if((Capteur_Fin_Course_Contact_1 & 0x01)== 0x01) { PORTB = Marche_Arret_Moteur; /*mise en marche moteur*/ } if((Capteur_Ir_4 & 0x10) == 0x10) { PORTB = Aucun_Moteur; } } /* ************************************************* */ /* Programme D */ /* ************************************************* */ void programme_D(void) { if((Capteur_Fin_Course_Contact_1 & 0x01)== 0x01) { PORTB = Marche_Arret_Moteur; /*mise en marche moteur*/ } if((Capteur_Ir_5 & 0x20) == 0x20) { PORTB = Aucun_Moteur; } } /* ************************************************* */ /* Programme principale */ /* ************************************************* */ void main(void) { Init_Periph(); char a=2; while(1) { recoit_commande_PC(); if(COMMANDE_PC == 0x30)/*mémoire tampon rs232*/ { programme_A(); } if(a == 2) /*mémoire tampon rs232*/ { programme_B(); } if(a == 3)/*mémoire tampon rs232*/ { programme_C(); } if(a == 4)/*mémoire tampon rs232*/ { programme_D(); } } /*fin du while(1) */ } /* fin du main*/
Si cela peut vous aider le µC est un AT90S85355 et la carte une STK-200.
Partager