IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MPLAB Discussion :

[Débutant] Remplacer boucle While


Sujet :

MPLAB

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 29
    Points : 26
    Points
    26
    Par défaut [Débutant] Remplacer boucle While
    Bonjour à tous,

    Je réalise une carte électronique gérant des composants Dallas : les iButtons.

    Je programme mon µControleur avec MPLAB, compilateur C18.

    En gros mon programme attend qu'une personne mette son iButton sur le connecteur. Le programme va lire le code d'identification du iButton et ci celui la est correct une LED s'allume.

    Rien de bien fou fou...

    Mais j'aimerai savoir si le choix de ma boucle while(1) n'allait poser des problèmes (boucle infinie) :

    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
    while(1)
    	{
    		
    		unsigned char presence = 0x00;
    		int i = 0;
    		presence = ow_reset_g();
    		
    		if(!presence)
    		{	
    			
    			struct Id_Key key = {0};	
    			unsigned char CRC = 0x00;
    			ecrire_octet(0x33);
    			Delay10TCYx(240);
    			
    			for( i=0 ; i<8 ; i++)
    			{
    			 	key.id[i] = lire_octet();
    			}
    			
    			if((key.id[0] == 0x01) && (key.id[7] != 0x00))
    			{
    				for( i=0 ; i<8 ; i++)
    				{
    					CRC = crc(CRC,key.id[i]);
    				}
    				
    				if(!CRC)
    				{
    					beep();
    					PORTAbits.RA1 = 0;
    					PORTAbits.RA2 = 1;
    				}
    		
    			}	
    		}
    		
    		if(presence)
    		{
    			
    			PORTAbits.RA2 = 0;
    			PORTAbits.RA1 = 1;	
    		
    		} 
    	
    	Delay10KTCYx(240);
    	
    	}
    En effet n'y a t'il pas un autre moyen de faire le test de "presence" par la boucle while.

    Merci.

    Bonne journée

  2. #2
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    Le problème des boucles en générale dans les microcontroleurs, c'est qu'il bloque celui ci.
    Utilises plutôt les interruptions. tu déroules un programme.
    Et lorsque tu appuies sur un bouton, le programme s'arrete et execute un code que tu auras fais.

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Points : 11
    Points
    11
    Par défaut Remplacer une boucle While
    Bonjour,
    Si l'appareil n'a rien à faire tant qu'on ne présente pas de i-bouton, je le mettrais en sommeil (par l'instruction assembleur SLEEP), il ne consommerait plus rien, et le I-bouton appuyerait mécaniquement sur un microcontact relié à la patte 1 du PIC, qui le réveillerait et il ferait son travail de lecture.
    Plus simple que ça est difficile puisqu'il n'y a pas de routine à écrire.
    C'est bien plus simple qu'une interruption, et si l'appareil marche sur pile, c'est parfait, j'ai fait un code de portail comme ça, alimenté par une pile plate de 4,5V. Quand il a fini son action, il dort! Il ne craint pas les pannes EDF.
    pont-

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/08/2014, 14h20
  2. [Débutant]Arreter une boucle while.
    Par kobalt02 dans le forum LabVIEW
    Réponses: 7
    Dernier message: 03/07/2009, 10h25
  3. Réponses: 12
    Dernier message: 18/11/2008, 21h42
  4. [débutant]Documentation? boucle "while"? Session?
    Par o151181 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 19/01/2004, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo