microcontroleur_labo1
TRANSCRIPT
Bachelier Informatique & Système 2013
Professeur : Najdi
Christophe *****
IEPSCF UCCLE RAPPORT MICROCONTROLEUR LABO 1
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
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.
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
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
0
0x00
0
0x00
0
0x02
2
0x01
1
ETAT 1 1 1 0 0 1 1 1
HEXA
BINAIRE
0x80
128
0x40
64
0x20
32
0x00
16
0x00
8
0x04
4
0x02
2
0x01
1
ETAT 1 1 1 0 0 1 1 0
HEXA
BINAIRE
0x80
128
0x40
64
0x20
32
0x00
0
0x00
0
0x04
4
0x02
2
0x00
0
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
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); } }
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 } }
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); } }
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))) {
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); } }