Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Autres EDI > MPLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 09/06/2010, 15h39   #1
crimetime
Invité régulier
 
Inscription : 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
crimetime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2010, 20h37   #2
Flob91
Membre expérimenté
 
Avatar de Flob91
 
Florent
Ingénieur
Inscription : mai 2005
Messages : 791
Détails du profil
Informations personnelles :
Nom : Florent
Âge : 29
Localisation : France, Paris (Île de France)

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

Informations forums :
Inscription : mai 2005
Messages : 791
Points : 548
Points : 548
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.
Flob91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 18h09   #3
pont-
Invité régulier
 
Inscription : 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-
pont- est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h15.


 
 
 
 
Partenaires

Hébergement Web