Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité régulier
    Inscrit en
    mai 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 29
    Points : 9
    Points
    9

    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 :
    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 expérimenté Avatar de Flob91
    Profil pro Florent
    Ingénieur
    Inscrit en
    mai 2005
    Messages
    810
    Détails du profil
    Informations personnelles :
    Nom : Florent
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2005
    Messages : 810
    Points : 549
    Points
    549

    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
    Invité régulier
    Inscrit en
    mai 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : mai 2009
    Messages : 7
    Points : 9
    Points
    9

    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-

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •