Programmation port série en C

Résolu/Fermé
Notus Messages postés 14 Date d'inscription mardi 23 décembre 2008 Statut Membre Dernière intervention 13 juillet 2009 - 18 févr. 2009 à 10:53
Notus Messages postés 14 Date d'inscription mardi 23 décembre 2008 Statut Membre Dernière intervention 13 juillet 2009 - 21 févr. 2009 à 18:55
Bonjour a tous,

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] //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*/

[/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…
Si cela peut vous aider le µC est un AT90S85355 et la carte une STK-200.

1 réponse

Notus Messages postés 14 Date d'inscription mardi 23 décembre 2008 Statut Membre Dernière intervention 13 juillet 2009
21 févr. 2009 à 18:55
vous cassez pas la tête a essayer de répondre j'ai trouvé mon bonheur sur des forums COMPÉTENTS.....
0