communication µC 8051=>PC
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 48

communication µC 8051=>PC



  1. #1
    invite5ed70a3a

    communication µC 8051=>PC


    ------

    Bonjour,
    J'ai un problème pour la communication entre un µC et le PC au niveau soft.
    Je programme avec Keil, mais je ne suis pas très fort en prog, du coup je ne comprends pas réellement comment lire et écrire une trame de caractères (16 ou 32octet par exemple).
    Je cherche donc des "cours" qui expliquent la démarche à suivre, avec des exemples de code en C ou des explications sur la lecture/l'écriture d'une trame.
    Toutes les remarques sont les bienvenues!
    Merci.

    -----

  2. #2
    invite5ed70a3a

    Re : communication µC 8051=>PC

    personne pour m'aider?

  3. #3
    invite5ed70a3a

    Re : communication µC 8051=>PC

    Vraiment personnes ?
    petit oubli=> La liaison entre le pc et le µC est une liaison série RS422.

  4. #4
    Jack
    Modérateur

    Re : communication µC 8051=>PC

    Je ne connais pas le 8051, mais l'envoi de trame série ne me pose pas trop de problème. Quel est ton problème exactement? La configuration et l'exploitation des registres ou est-ce un pur problème de gestion de tableau en C?

    A+

  5. A voir en vidéo sur Futura
  6. #5
    invite5ed70a3a

    Re : communication µC 8051=>PC

    Ca serait plutôt un problème de gestion des registres, configuration.
    En fait, ce que je cherche à faire c'est un peu le principe d'une carte interface entre le hard et le soft, je reçoit des données et doit les envoyer au pc par l'intermédaire d'une liaison série, et inversement, le pc envoi des données à la carte par cette même liaison.

  7. #6
    Jack
    Modérateur

    Re : communication µC 8051=>PC

    Un petit peu de lecture alors ...

    http://www.jls-info.com/julien/8051/8051.htm

  8. #7
    invite5ed70a3a

    Re : communication µC 8051=>PC

    merci beaucoup,
    et concrètement, quel est la "démarche" à utiliser en C? on utilise un tableau de taille voulue (la trame) qu'on envoi par la liaison série?
    Comment se déroule une transmission?
    -on li un port, on range les caractères dans un tableau puis on les sauvegardes dans un buffer, on li un 2ème ports=>stckage caractère dans le tableaux=>sauvegarde dans le buffer,
    une fois qu'on a toutes les données voulues, on envoi le tableau contenu dans le buffer par la liaison série?
    c'est un peu confu je l'accorde....

  9. #8
    Jack
    Modérateur

    Re : communication µC 8051=>PC

    Oui, ce que tu dis est correct. Tu peut ajouter un checksum ou un crc en bout de trame de manière à s'assurer de la validité des données transmises.

    une fois qu'on a toutes les données voulues, on envoi le tableau contenu dans le buffer par la liaison série?
    le tableau peut servir de buffer.

  10. #9
    invite5ed70a3a

    Re : communication µC 8051=>PC

    ok merci,
    je vais me pencher dessus dans quelques jours, je reviendrais si je comprends pas qque chose (et ya des chances pour que je reviene...)

  11. #10
    invite5ed70a3a

    Re : communication µC 8051=>PC

    Re,
    Je pense utiliser la structure switch case mais j'ai un peu de mal, j'aimerais faire:
    switch (tab_reception[25]):
    case 0x1:
    portB = tab_reception();
    case 0x8:
    bit 3 du port C = tab_reception();
    case 0x9:
    bit 4 du port C = tab_reception();
    .
    .
    .
    Une fois la tableaux rempli, je l'envoi par la liaison série.
    C'est possible d'utiliser le switch case comme ça?
    Plus concretement, c'est de la gestion d'entrées/sorties que je souhaite faire.

  12. #11
    Jack
    Modérateur

    Re : communication µC 8051=>PC

    Pourquoi pas, il faut voir ce qu'il y a dans "tab_reception[25]".

    A+

  13. #12
    invite5ed70a3a

    Re : communication µC 8051=>PC

    ok,
    tab_reception[25] c'est la trame qui sera transmise au µC.

  14. #13
    Jack
    Modérateur

    Re : communication µC 8051=>PC

    Non, "tab_reception[25]" c'est le 26ème élément du tableau.

    A+

  15. #14
    invite5ed70a3a

    Re : communication µC 8051=>PC

    tab_reception[25] est un tableau qui contiendra les caractères ou bit des ports du µC, et c'est ce tableau que j'enverrai au PC.
    Je comprends pas le "c'est le 26ème élément du tableau"

  16. #15
    Jack
    Modérateur

    Re : communication µC 8051=>PC

    Si tu écris
    unsigned char tab_reception[25];
    ça veut dire que tu déclares un tableau appelé tab_reception et qui peut mémoriser 25 octets.

    Si tu écris maintenant

    switch (tab_reception[25]){
    ...

    Ca veut dire que tu testes le 26ème élément de ce tableau , le premier étant tab_reception[0]

    A+

  17. #16
    invite5ed70a3a

    Re : communication µC 8051=>PC

    d'accord,
    je déclare un tableau de 25octets (la trame qui sera envoyée ou reçue), mais dans ce cas je ne peux pas utiliser le switch ?
    en fait, ce que je voulais faire c'est si tab_reception[0] alors portB = tab_reception[0], que le portB se copie dans l'octet 0 du tableau.
    Peut-être comme ça?
    switch (tab_reception[]){
    case 0: portB = tab_repcetion[0];
    case 1: portC = tab_reception[1];

  18. #17
    Jack
    Modérateur

    Re : communication µC 8051=>PC

    si tab_reception[0]
    il ne manque rien derrière, genre " si tab_reception[0] = x" ?

    alors portB = tab_reception[0], que le portB se copie dans l'octet 0 du tableau
    dans ce cas il faut écrire "alors tab_reception[0] = portB, que le portB se copie dans l'octet 0 du tableau.

    Si je comprends bien, tu veux recopier le contenu des ports à certaines conditions. Dans ce cas, ceci ne te conviendrait pas?

    Code:
    for (i=0; i<25;i++){
       switch (i){
         0: if (portB == x)  tab_reception[i] = portB; break;
         1: if (portC == y)  tab_reception[i] = portC; break;
    etc.
         24:  if (portK == z)  tab_reception[i] = portK;
       }
    }

  19. #18
    invite5ed70a3a

    Re : communication µC 8051=>PC

    merci,
    Il n'y a pas de conditions dans un premier temps, je souhaite juste copier le port B dans l'octet 0, le port C dans l'octet 1 du tableau par exemple.
    for (i=0; i<25;i++){
    switch (i){
    0: tab_reception[i] = portB; break;
    1: tab_reception[i] = portC; break;
    etc.
    24: tab_reception[i] = portK;
    }
    }

  20. #19
    Jack
    Modérateur

    Re : communication µC 8051=>PC

    Donc, c'est bon? Tu n'as plus besoin de rien?

    A+

  21. #20
    invite5ed70a3a

    Re : communication µC 8051=>PC

    merci de l'aide, pour l'instant c'est bon.

  22. #21
    invite5ed70a3a

    Re : communication µC 8051=>PC

    Encore des soucis,
    Je dois mettre en oeuvre un CNA et un CAN, est-ce qu'il y a une "procédure" à suivre?
    Sinon 3 questions:
    1//Je souhaite sotcker dans mon tableau (ici à l'emplacement tab_reception[2], donc au 3eme octet du tableau) un mot qui arrive sur un seul bit du portB.
    Mon idée est d'utiliser un timer pour que le µC lise 8fois le bit PB1 et stocker au fur et à mesure les bits dans tab_reception[2]??
    2// J'ai un problème pour faire la trame que le µC reçoit par liaison série et envoi les éléments de la trame sur les ports, j'ai par exemple un octet situé tab_envoi[4] à envoyer sur des bits de ports différents, je pensais à :
    bit PB12 & bit PB20 & bit PB32...=tab_envoi[4] ??
    3//Je souhaite aussi réceptionner un mot de 2octets du tableau tab_envoi venant du pc et envoyer ce mot sur 1 bit du portB, il faut utiliser un timer un peu peu comme dans la question1?
    J'ai vraiment beaucoup de mal à faire cette gestion d'entrées/sorties.
    Merci pour votre aide,

  23. #22
    Jack
    Modérateur

    Re : communication µC 8051=>PC

    Je dois mettre en oeuvre un CNA et un CAN, est-ce qu'il y a une "procédure" à suivre?
    Celle de la doc. Sans elle, comment répondre?

    1//Je souhaite sotcker dans mon tableau (ici à l'emplacement tab_reception[2], donc au 3eme octet du tableau) un mot qui arrive sur un seul bit du portB.
    Mon idée est d'utiliser un timer pour que le µC lise 8fois le bit PB1 et stocker au fur et à mesure les bits dans tab_reception[2]??
    Et quelle est la question? Comment on fait cà? Il faut faire des décalages et des opérations logiques: val (PortB & 0x02) >> 1 ; // permet de mettre val à 0 ou 1 selon PB1
    res = (res << 1) | val; // permet d'ajouter ce bit en poids faible de res.

    2// J'ai un problème pour faire la trame que le µC reçoit par liaison série et envoi les éléments de la trame sur les ports, j'ai par exemple un octet situé tab_envoi[4] à envoyer sur des bits de ports différents, je pensais à :
    bit PB12 & bit PB20 & bit PB32...=tab_envoi[4] ??
    Le langage C possède les bit fields pour traiter au niveau du bit.

  24. #23
    invite5ed70a3a

    Re : communication µC 8051=>PC

    merci,
    le cna c'est un ad7233 (12bit):
    http://www.analog.com/static/importe...ets/AD7233.pdf
    et le can (12bits):
    http://www.farnell.com/datasheets/9547.pdf

    "Il faut faire des décalages et des opérations logiques: val (PortB & 0x02) >> 1 ; // permet de mettre val à 0 ou 1 selon PB1
    res = (res << 1) | val; // permet d'ajouter ce bit en poids faible de res."
    ok, ensuite je copie res dans tab_reception[2]?

    "Le langage C possède les bit fields pour traiter au niveau du bit. "
    Je vais voir ça, merci,

  25. #24
    Jack
    Modérateur

    Re : communication µC 8051=>PC

    Pas ce soir, fatigué la Jack
    ok, ensuite je copie res dans tab_reception[2]?
    Je t'ai donné l'idée, montre le code.

    A+

  26. #25
    invite5ed70a3a

    Re : communication µC 8051=>PC

    pour les convertisseurs, il faut suivre tout bêtement les chronogrammes de la doc? j'aimerais beaucoup un exemple, ou la démarche à faire.

    sinon:

    int val;
    unsigned res;
    unsigned tab_reception[25];
    for(i=0;i<7;i++){
    switch(i){
    case 0:
    val = (PortB & 0x02) >> 1;
    res = (res << 1) | val;
    tab_reception[i]=res;
    case 1:.........................

  27. #26
    Jack
    Modérateur

    Re : communication µC 8051=>PC

    pour les convertisseurs, il faut suivre tout bêtement les chronogrammes de la doc? j'aimerais beaucoup un exemple, ou la démarche à faire.
    Ton µC n'aurait-il pas de SPI, parce que ça simplifierait quand même beaucoup les choses.

    Pourquoi un "switch ... case" dans ta boucle?

    A+

  28. #27
    invite5ed70a3a

    Re : communication µC 8051=>PC

    il n'y a pas de SPI, c'est un vieux µC.
    Pour le switch case, tu me l'a proposé en page 1.

  29. #28
    Jack
    Modérateur

    Re : communication µC 8051=>PC

    La spi est très ancienne aussi, mais d'origine motorola.

    Pour le switch case, tu me l'a proposé en page 1.
    Oui, mais il n'y avait pas de boucle et les bits venait de pins différentes de plusieurs ports il me semble.

    Il faudrait énoncer clairement ce que tu veux faire: récupérer des bits dispersés sur des ports, ou sérialiser des données arrivant sur une pin d'un même port.

    dans le premier cas, il n'y a pas de relation entre des bits donc on utilise un switch case
    dans le second, il y a une relation et on utilise une boucle.

    A+

  30. #29
    invite5ed70a3a

    Re : communication µC 8051=>PC

    J'ai déjà fait une partie du programme, à présent il me reste à:
    -mettre en oeuvre le CAN (la réception du mot sur le port du µC est déjà faite), c'est sur ce point que j'ai quelques problèmes.
    -mettre en oeuvre le CNA
    -faire la trame qu'envoi le pc au micro (cette trame comprend notamment le mot du cna) et redistribuer les octets sur ses ports. Sur cette trame je dois dispatcher les bit d'un octet sur différetntes pins du micro, je voulais utiliser le champ de bit qui semblé plus simple que des opérations arithmétique et logique, mais j'ai quelques problèmes, il faut que je regarde comment ça fonctionne plus précisémment et si c'est possible dans mon cas.
    Voila, et il ny' a pas de SPI sur ce micro je confirme. Il faut faire la comm entre le micro et le convertisseur "à la main".

  31. #30
    Jack
    Modérateur

    Re : communication µC 8051=>PC

    Tu veux faire de la conversion série / parallèle finalement.

    Est-ce que les pins de tes ports sont consécutives (Pa0 à Pa7 et Pb0 à Pb3 par exemple)? Dans ce cas, le plus simple est de faire une boucle (pour recevoir les 12 bits du CAN) et de décaler à gauche une variable de type int en mettant en bit de poids faible chaque bit entrant.
    A la fin, tu balances l'octet de poids faible sur le port A et l'octet de poids fort sur le port B.

    A+

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. 8051 89c450
    Par invite819d0622 dans le forum Électronique
    Réponses: 0
    Dernier message: 07/02/2009, 14h18
  2. Assembleur 8051
    Par invite13e724e8 dans le forum Électronique
    Réponses: 0
    Dernier message: 01/06/2008, 22h20
  3. Problème micro 8051
    Par VIIV dans le forum Électronique
    Réponses: 0
    Dernier message: 08/04/2008, 20h10
  4. Palm et 8051
    Par inviteb2ad6b3f dans le forum Électronique
    Réponses: 1
    Dernier message: 01/03/2007, 22h29
  5. Simulateur 8051??
    Par invitee0eacd98 dans le forum Électronique
    Réponses: 1
    Dernier message: 05/03/2004, 07h36
Découvrez nos comparatifs produits sur l'informatique et les technologies.