[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
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-