Problème avec l'instruction if(UART1_Data_Ready())
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Problème avec l'instruction if(UART1_Data_Ready())



  1. #1
    invite57334019

    Problème avec l'instruction if(UART1_Data_Ready())


    ------

    Bonjour à tous!

    contexte:
    J'écris un programme sur mikroC où je dois lire des informations du port série, le micro-controleur envoie des commandes AT et reçois instantanément des réponses, je dois alors utiliser l'instruction if(UART1_Data_Ready()){UART1_R ead_Text(txt,"OK",255);}

    Problème:
    Le problème c'est que parfois la conditon UART1_Data_Ready()==1 ne se réalise pas, et la réponse aux commandes AT n'est pas reçu correctement (un sms par exemple).

    Est ce que quelqu'un peut me dire pourquoi? Et comment puis-je forcer qu'elle se réalise?

    -----

  2. #2
    katmai

    Re : Problème avec l'instruction if(UART1_Data_Ready())

    Salut,

    Je ne connais pas mikroC, mais peut être que tu regardes trop tôt si il y a des données sur ton UART?

    Essayes peut-être de faire (grosso modo):
    while(!UART1_Data_Ready());
    UART1_Read_Text(txt, "OK", 255);

    Puis par la suite de rajouter une variable pour faire un genre de timeout?

    A+

  3. #3
    invite57334019

    Re : Problème avec l'instruction if(UART1_Data_Ready())

    J'ai fait ce que tu as écrit, malheureusement le programme reste dans la boucle, je suppose alors que UART1_Data_Ready() ne devient égale à 1 que lorsque la première information est arrivé, le programme attend ensuite le "delimiter", et en tous cas merci pour ta réponse

  4. #4
    pilatomic

    Re : Problème avec l'instruction if(UART1_Data_Ready())

    Essaye sans faire de boucle bloquante .

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

    Re : Problème avec l'instruction if(UART1_Data_Ready())

    Enfin j'ai résolue le problème, c'était en utilisant l'instruction goto comme suit:

    a:if(UART1_Data_Ready()) {
    UART1_Read_Text(ur,"\n",255);
    } else goto a;

  7. #6
    katmai

    Re : Problème avec l'instruction if(UART1_Data_Ready())

    C'est pas équivalent a ma boucle while?

    Tant que UART1_Data_Ready() est faux tu restes dans ta boucle...
    et dès qu'il est vrai tu fais un UART1_Read_Text() et tu sors.

    A+

  8. #7
    luc_1049

    Re : Problème avec l'instruction if(UART1_Data_Ready())

    Bonjour

    En C le goto c'est moyen, interdit dans les règles de codage en industrie !

    Pour une boucle vous avez beaucoup de possibilité entre le do... while, le while ..., le for (..;..;..) .
    Utile aussi le break pour sortir des boucles et moins choquant qu'un goto en C.

    Pour revenir à la boucle, il est bien d'y insérer un compteur que l'on incrémente à chaque test.
    L'idée c'est :
    Si condition vérifier ok en moins de xx passage dans la bouche de test, OK
    Si condition passage de plus de xx passage dans la bouche de test, ERREUR_HORS_TEMPS ou TIMEOUT

    Gérer ensuite cette erreur afin de faire un logiciel qui traite aussi les cas d'erreurs !

    C'est une bonne habitude à prendre.
    cdlt

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/05/2013, 10h18
  2. A propos de l'instruction for en C
    Par invitecce9331d dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 30/11/2010, 07h05
  3. Problème avec l'instruction TRIS [p18f4520 + picdem 2+]
    Par invite8d0b7120 dans le forum Électronique
    Réponses: 5
    Dernier message: 09/06/2010, 09h10
  4. petite question pour l'instruction btfsc et btfss
    Par LABTOOL48 dans le forum Électronique
    Réponses: 5
    Dernier message: 16/04/2010, 04h28
  5. L'instruction en France
    Par Etile dans le forum Discussions scientifiques
    Réponses: 11
    Dernier message: 14/01/2007, 19h57
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...