[débutant][circuit integré]multiple problemes
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 :
Code:
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*/ |
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…
Si cela peut vous aider le µC est un AT90S85355 et la carte une STK-200.