microcontroleur_labo1

10
Bachelier Informatique & Système 2013 Professeur : Najdi Christophe ***** IEPSCF UCCLE RAPPORT MICROCONTROLEUR LABO 1

Upload: gargield63

Post on 11-Apr-2015

146 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Microcontroleur_Labo1

Bachelier Informatique & Système  2013 

Professeur : Najdi     

 Christophe *****  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IEPSCF UCCLE  RAPPORT MICROCONTROLEUR LABO 1  

Page 2: Microcontroleur_Labo1

Bachelier Informatique & Système  2013 

Professeur : Najdi  P a g e  | 1  

 

Table des matières 

 Présentation du Projet ......................................................................................... 2  

Schéma du chenillard avec Proteus ...................................................................... 3  

Mettre à 1 le bit B2 : ............................................................................................ 4  

Mettre à 0 le bit B0 : ............................................................................................ 4  

Modification de RC1 pour qu'il clignote : ............................................................. 5  

Chenillard simple se déplaçant de haut en bas : .................................................. 6  

Chenillard double se déplaçant de haut en bas et de bas en haut simultanément: .................................................................................................... 7  

Chenillard à entassement se déplaçant et s'accumulant vers le bas : ................. 8 

   

 

Page 3: Microcontroleur_Labo1

Bachelier Informatique & Système  2013 

Professeur : Najdi  P a g e  | 2   

 Présentation du Projet  

Préparation : Soit le contenu d'un registre B sur 8 bits .   

B7  B6  B5  B4  B3  B2  B1  B0 

1  1  1  0  0  0  1  1 

  En partant du programme suivant :  Void main () {   TRISC = 0;   PORTC = 0;    While (1)   {     PORTC = 0x01 ;     Delay_ms (1000);     PORTC = 0x00 ;     Delays_ms(1000);   } }  Vous devez mettre à 1 le bit B2 sans changer les autres bits. Comment faites‐vous ?  Vous devez mettre à 0 le bit B0 sans  changer les autres bits. Comment faites vous ?  

1. Ecrire ce programme pour l'essayer, le compiler le charger l'exécuter. Modifier le pour faire clignoter la Led RC1. 

2. Ecrire un chenillard simple une led se déplaçant sur le port c de haut en bas et en utilisant le même  type de temporisation que dans le programme exemple. 

3. Ecrire un chenillard double. Un chenillard de haut en bas et simultanement un autre de bas en haut qui se croisent. 

4. Ecire un chenillard à entassement. 1 led se déplaçant et s'accumulent en bas.  

 

 

 

Page 4: Microcontroleur_Labo1

Bachelier Informatique & Système  2013 

Professeur : Najdi  P a g e  | 3  

Schéma du chenillard avec Proteus 

 

Le chenillard est composé :  

• 8 Led Biby • 1 Microcontrôleur PIC 16F877a fréquence de l'horloge 8 Mhz • 9 Résistance de 3k3 • 1 Masse • 1 Alimentation 

  

    

   

 

 

Page 5: Microcontroleur_Labo1

Bachelier Informatique & Système  2013 

Professeur : Najdi  P a g e  | 4   

Mettre à 1 le bit B2 : 

PORTC  B7 

RC7 

B6 

RC6 

B5 

RC5 

B4 

RC4 

B3 

RC3 

B2 

RC2 

B1 

RC1 

B0 

RC0 

ETAT  1  1  1  0  0  0  1  1 

HEXA 

BINAIRE 

0x80 

128 

0x40 

64 

0x20 

32 

0x00 

0x00 

0x00 

0x02 

0x01 

ETAT  1  1  1  0  0  1  1  1 

HEXA 

BINAIRE 

0x80 

128 

0x40 

64 

0x20 

32 

0x00 

16 

0x00 

0x04 

0x02 

0x01 

ETAT  1  1  1  0  0  1  1  0 

HEXA 

BINAIRE 

0x80 

128 

0x40 

64 

0x20 

32 

0x00 

0x00 

0x04 

0x02 

0x00 

  Il suffit de changer l'hexadécimale de B2 pour que l'état passe à 1  B2 = 0x00 état 0   0x04 état passera à 1 

 

Mettre à 0 le bit B0 : 

  Il suffit de reprendre le tableau ci‐dessus est de changer le code hexadécimale de B0 pour   que l'état pas à 0.   B0 = 0x01 état 1   0x00 état passera à 0 

 

 

 

 

 

 

 

Page 6: Microcontroleur_Labo1

Bachelier Informatique & Système  2013 

Professeur : Najdi  P a g e  | 5  

Modification de RC1 pour qu'il clignote : 

Pour faire clignoter RC1 il suffit de changer l'état dans la programmation sachant que RC1 correspond à la Led B1 soit en binaire à 2 et en hexadécimal à 0x02 

PORTC = 0x02 qui correspond à RC1 

Le programme sera le suivant : 

void main () {      TRISC = 0 ;      PORTC = 0 ;        while (1)      {            PORTC = 0x02;  // Etat 1 pour RC1            Delay_ms (1000);            PORTC = 0x00;  // Etat 0            Delay_ms (1000);        }  }  

 

 

Page 7: Microcontroleur_Labo1

Bachelier Informatique & Système  2013 

Professeur : Najdi  P a g e  | 6   

Chenillard simple se déplaçant de haut en bas : 

On modifie le programme en initialisant a égal à 1 et une boucle qui s'incrémente de 1 à chaque passage inférieur égal à 8 .  PORTC  prend la valeur de a , a aura un décalage à gauche. 

Le code : 

void main() {   short a = 1 ;    // initialise a   int i ;      // initialise i pour la boucle for   PORTC = 0;                 // Initialize PORTC   TRISC = 0;                 // InitializeTRISC    for (i = 0; i <= 8 ; i++)   {      PORTC = a ; // PORTC prend la valeur de a     a =  a << 1 ; // A s'incrémente de 1 à chaque passage vers la gauche     Delay_ms (1000); // Delai toutes les 1000 ms la led change de position    }  } 

 

Page 8: Microcontroleur_Labo1

Bachelier Informatique & Système  2013 

Professeur : Najdi  P a g e  | 7  

 

 

Chenillard double se déplaçant de haut en bas et de bas en haut simultanément: 

On initialise a pour RC0 le début du chenillard et b pour RC7 la fin de celui‐ci, une boucle qui s'incrémente de 1 à chaque passage inférieur et égal à 8. a s'incrémente de 1 à chaque passage vers la gauche et b se décrémente de 1 à chaque passage vers la droite. PORTC prend la valeur de a et b ce qui permet d'allumer la première Led du haut et la première Led du bas. 

Le code :  

void main() {   int a = 0x01 ;   int b = 0x80 ;   int i ;   PORTC = 0x81;               // Initialize PORTC   TRISC = 0;                 // Configure PORTC as output    for (i = 0; i <= 8 ; i++)   {      (a =  a << 1 )&& (b = b >> 1);      Delay_ms (1000);       PORTC = (a+b);       Delay_ms (1000);   }  }  

Page 9: Microcontroleur_Labo1

Bachelier Informatique & Système  2013 

Professeur : Najdi  P a g e  | 8   

  Chenillard à entassement se déplaçant et s'accumulant vers le bas : 

 

Le code :  

#define  DELAI_ATTENTE 1000 #define NB_DE_BITS 8  void course_chen(void) {      static int valeur = 0 ;      static int nb_de_bits_actifs = 0 ;       // si valeur est égale à la valeur courante      // alors on décale valeur de 1      // sinon valeur = 1      valeur = (valeur?(valeur << 1) : 1) ;  //      Affiche //      On soustrait ou décale d 1 bit //      Utilisation de + et non | pour permettre affichage du chenillard éteint      PORTC = ~((1 << nb_de_bits_actifs) ‐ 1) + valeur ;       // S'il n'y a pas de bits actifs ou si valeur = 1 et décalage = 0      if ((!nb_de_bits_actifs) || (valeur == 1 << (nb_de_bits_actifs ‐ 1)))      { 

Page 10: Microcontroleur_Labo1

Bachelier Informatique & Système  2013 

Professeur : Najdi  P a g e  | 9  

      valeur = 0 ;       // s'il y a encore des bits actifs alors nb_de_bits_actifs ‐ 1       // sinon  nb_de_bits_actifs =  NB_DE_BITS       nb_de_bits_actifs = (nb_de_bits_actifs)?(nb_de_bits_actifs ‐ 1) : NB_DE_BITS ;      }  }  int main (void) {     TRISC = 0x00;      for(;;)     {       course_chen() ;       delay_ms(DELAI_ATTENTE);     } }