Cours:TpiiChenillardSimple
Révision datée du 19 décembre 2012 à 21:09 par Bjacquot (discussion | contributions)
retour vers la page des Tps II
Sommaire
Remarques
Si vous copiez les solutions telles quelles
- l'affichage se fait par défaut sur votre PC avec des printf
- ne modifiez pas la fonction printbits, elle sert uniquement à faire un affichage binaire
- il suffit de décommenter les lignes utiles pour faire l'affichage sur les leds de la carte
Solution détaillée
Description
Pour réaliser un chenillard simple, nous devons envoyer successivement les valeurs suivantes sur le port parallèle :
Binaire | Décimal | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
val2 = | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | |
val2 = | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 2 | |
val3 = | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 4 | |
val4 = | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 8 | |
val5 = | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 16 | |
val6 = | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 32 | |
val7 = | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 64 | |
val8 = | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 128 |
Port parallèle
Ecrivons le programme ... On commence par demander un accès au port parallèle :
// on ajoute les fonctions de communications
#include "commcarte.h"
int main()
{
int device;
// on ouvre un accès au port parallèle. La valeur retournée permet ensuite d'envoyer/lire des données.
device=openParPort("/dev/parport0");
// notre programme sera décrit
// dans cette partie
// on utilise la fonction
// ecrireParPort pour changer les données
// fermeture de l'accès
closeParPort(device);
}
Boucle
Nous devons envoyer 8 valeurs différentes. Donc nous architecturons le programme autour d'une boucle. On choisit une boucle for.
for (i=1;i<8;i++)
{
// liste des
// instructions à répéter
}
Solution avec une boucle while
#include "commcarte.h"
void printbits(unsigned char n)
{
int i;
for (i=7;i>=0;i--) printf("%d", (n >> i ) & 1);
}
int main()
{
int device;
//device=openParPort("/dev/parport0");
unsigned char val,cpt=0;
while (cpt<3)
{
cpt++;
val=0x01;
while (val)
{
//ecrireParPort(device,val);
printbits(val);printf("\n");
val=val<<1 ;
//usleep(100000);
}
}
//closeParPort(device);
}
Solution avec boucle for
multiplication par 2
#include "commcarte.h"
void printbits(unsigned char n)
{
int i;
for (i=7;i>=0;i--) printf("%d", (n >> i ) & 1);
}
int main()
{
int device;
//device=openParPort("/dev/parport0");
unsigned char i,cpt;
for (cpt=0;cpt<3;cpt++)
{
for (i=1;i>0;i*=2)
{
//ecrireParPort(device,i);
printbits(i);printf("\n");
//usleep(100000);
}
}
//closeParPort(device);
}
décalage de n bits
#include "commcarte.h"
void printbits(unsigned char n)
{
int i;
for (i=7;i>=0;i--) printf("%d", (n >> i ) & 1);
}
int main()
{
int device;
//device=openParPort("/dev/parport0");
unsigned char i,cpt;
for (cpt=0;cpt<3;cpt++)
{
for (i=0;i<8;i++)
{
//ecrireParPort(device,1<<i);
printbits(1<<i);printf("\n");
//usleep(100000);
}
}
//closeParPort(device);
}