« Utiliser les PIC 16F et 18F/Exercices/Les ports et le langage C » : différence entre les versions

m
Robot : Remplacement de texte automatisé (-(<|</)source([ \t>]) +\1syntaxhighlight\2)
m (Robot : Remplacement de texte automatisé (-\n(==={0,3})(?: *)([^\n=]+)(?: *)\1(?: *)\n +\n\1 \2 \1\n))
m (Robot : Remplacement de texte automatisé (-(<|</)source([ \t>]) +\1syntaxhighlight\2))
 
== Exercice 1 ==
Pour vérifier la bonne compréhension de ce qui a été dit sur les bits (et le MikroC), nous donnons le fichier d'entête des bits correspondant au registre INTCON.
<sourcesyntaxhighlight lang="c">
//********* bits de INTCON
GIE = 0x0007,
INTF = 0x0001,
RBIF = 0x0000,
</sourcesyntaxhighlight>
1°) Dessiner le registre correspondant
 
 
1-a) Donner les 4 valeurs possibles de la variable interrupteurs avec l'instruction
<sourcesyntaxhighlight lang="c">
interrupteurs = PORTB & 0x12;
</syntaxhighlight>
</source>
1-b) Compléter alors le programme :
<sourcesyntaxhighlight lang="c">
// boucle d'attente ATTENTION PB4=1 et PB1=0 au repos
while(interrupteurs.F1==0 && interrupteurs.F4==1)
}
Delay_ms(1000);
</syntaxhighlight>
</source>
2°) Peut-on modifier facilement le programme pour que les deux LEDs fonctionnent à deux fréquences différentes ?
 
1°) Calculer les six valeurs prédéfinies pour allumer correctement le dé et les ranger dans un tableau si la première case du tableau éteint tout.
Quel est l’affichage du dé correspondant à :
<sourcesyntaxhighlight lang="c">
unsigned char tableau[7]={0x00,0x08,0x22,0x2A,0x55,0x5D,0x77};
</syntaxhighlight>
</source>
2°) Écrire un programme complet qui affiche les 6 valeurs du dé avec un délai d'attente de 3s utilisant la fonction "Delay_ms()" de la librairie MikroC.
 
3°) On désire maintenant générer de manière aléatoire le score affiché sur le dé. Pour cela on vous propose d’utiliser la fonction ci-dessous.
<sourcesyntaxhighlight lang="c">
unsigned char pseudoAleat(int Lim) {
unsigned char result;
return Result;
}
</syntaxhighlight>
</source>
3-a) Calculer la première valeur de cette fonction si Lim=6.
 
 
<u>'''Question 1'''</u> : on met alors tous les fils verticaux à 0 (3 bits de poids faible du '''PORTB''') et on cherche sur quelle touche on a appuyé en cherchant où est le 0 ? Cela nous donnera une colonne.
<sourcesyntaxhighlight lang="c">
// question 1 TD8
#define NOTAKEY 127
}
}
</syntaxhighlight>
</source>
<u>'''Question 2'''</u> : on met alors tous les fils horizontaux à 0 (4 bits p6...p3 du '''PORTB''') et on cherche sur quelle touche on a appuyé en cherchant où est le 0 ? Cela nous donnera la ligne.
<sourcesyntaxhighlight lang="c">
// #define NOTAKEY 127
// ligne 1 en haut
}
}
</syntaxhighlight>
</source>
<u>'''Question 3'''</u> : la conversion ligne colonne vers caractère paut se faire avec un simple tableau 2 dimensions comme suit :
<sourcesyntaxhighlight lang="c">
#include <htc.h> // a modifier si autre compilateur que Hitech C
#define NOTAKEY 127
while(1);
}
</syntaxhighlight>
</source>
On fait une attente de touche qui ne permet pas de faire autre chose !!! Il est naturellement possible de ne pas enfermer les "lecture_colonne()" et "lecture_ligne()" dans un boucle. Cette façon de faire est laissée au lecteur.
}}
== Exercice 6 (d'après les TPs) ==
Le PORTB est relié à un ensemble de LEDs permettant la réalisation de [[w:Chenillard|chenillards]]. Un chenillard est donné par le programme suivant :
<sourcesyntaxhighlight lang="c">
// MikroC
main(){
}
}
</syntaxhighlight>
</source>
 
Compléter la suite des états de ce chenillard (ceux où une ou plusieurs leds sont allumées).
143 371

modifications