Cours:TPS 2103 1 : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
m (Ex 1: mise en jambe !)
m
Ligne 21 : Ligne 21 :
 
{
 
{
 
   if ( (PIND & 0x?? ) != 0 )    // on observe l'état de l'entrée
 
   if ( (PIND & 0x?? ) != 0 )    // on observe l'état de l'entrée
         PORTD |= 0x??;          // on modifie en conséquence l'état de la sortie
+
         PORTD = 0x??;          // on modifie en conséquence l'état de la sortie
 
   else
 
   else
         PORTD &= 0x??;
+
         PORTD = 0x??;
 
}
 
}
  
 +
</source>
 +
 +
 +
{{Question|On peut simplifier le programme précédent en utilisant l'opérateur décalage : il suffit de "recopier" l'état du bouton poussoir sur la led en décalant de 4 bits vers la gauche}}
 +
 +
<source lang=c>
 +
void setup()
 +
{
 +
  DDRD = 0x?? ; // configuration des e/s (registre de direction DDRx) sur le port D.
 +
}
 +
 +
void loop()
 +
{
 +
  PORTD = (PIND&0x??)<<4;
 +
}
 
</source>
 
</source>

Version du 23 mars 2014 à 22:46

Nous avons abordé la programmation des cartes arduino au premier semestre en utilisant des fonctions de haut niveau ce qui, bien que pouvant simplifier certaine tâche, présente un certain nombre de limitation.

L'objectif de ces TPs est de découvrir le fonctionnement du µcontrôleur Atmega328p et d'en explorer les possibilités.

Nous commencerons simplement de façon analogue au premier TP du module M1102 en configurant des e/s (il est sans doute utile de jeter un coup d’œil au lien précédent !).

Ex 1: mise en jambe !

Nous considérons pour le moment le bouton A et la led de droite (p0).

Question.jpg Complétez le programme suivant pour que la led s'allume si le bouton est appuyé

void setup()
{
   DDRD = 0x?? ;                 // configuration des e/s (registre de direction DDRx) sur le port D.
}

void loop()
{
   if ( (PIND & 0x?? ) != 0 )    // on observe l'état de l'entrée
         PORTD = 0x??;          // on modifie en conséquence l'état de la sortie
   else
         PORTD = 0x??;
}


Question.jpg On peut simplifier le programme précédent en utilisant l'opérateur décalage : il suffit de "recopier" l'état du bouton poussoir sur la led en décalant de 4 bits vers la gauche

void setup()
{
  DDRD = 0x?? ; // configuration des e/s (registre de direction DDRx) sur le port D.
}

void loop()
{
  PORTD = (PIND&0x??)<<4;
}