IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Question lecture port // inp32


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 23
    Points : 16
    Points
    16
    Par défaut Question lecture port // inp32
    Bonjour,
    j'ai réalisé un petit projet en électronique envoyant des informations sur les 8 entrées data du port parallèle.

    J' emploie donc la fonction inp32 pour lire sur ce port data..

    mon problème est que, je ne comprends pas trop ce que renvoie le inp32 et que je ne peux pas tester mon prog pour le moment étant donné que mon montage en électronique n'est pas fini..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    temp = Inp32(0x379);
    Si je veux obtenir un nombre décimale que dois je faire ?
    Est ce que ma variable temp contiendra un byte avec la valeur de chaque entrée (genre 11001110) ou une valeur décimale ?

    si quelqu'un pourrait m'expliquer ça m'aiderait beaucoup car la je suis perdu..
    merci d'avance

  2. #2
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    859
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 859
    Points : 714
    Points
    714
    Par défaut
    Il faudrait le prototype de cette fonction.

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned int Inp32(unsigned char);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned char Inp32(unsigned char);
    Mais, à priori vous parler de byte, donc c'est unsigned char

    Ceci indique le type de la variable: 8 bits.
    Ces bits n'ont pas de format d'affichage particulier.

    C'est 8 bits peuvent être représenté en format :
    binaire "00001100"
    décimal "12"
    hexa "C" on parle 0xC pour éviter toute ambiguité

    Pour créer une chaîne de caractère affichable avec un format, il existe printf.
    Je vous laisse chercher printf dans google.
    Si tu ne vis pas ce que tu penses alors tu penses ce que tu vis.

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Bayard Voir le message
    Il faudrait le prototype de cette fonction.

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned int Inp32(unsigned char);
    En x86, un numéro de port peut utiliser jusqu'à 16 bits...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned Inp32(unsigned port);
    (en tout cas, pour 0x378, il en faut plus que 8).
    Pas de Wi-Fi à la maison : CPL

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    merci pour vos réponses,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <windows.h>
    #include <dos.h>
     
    typedef short (_stdcall *inpfuncPtr) (short portaddr);
    typedef void (_stdcall *oupfuncPtr) (short portaddr, short datum);
     
     
    main()
    {
    	HINSTANCE hLib;
    	inpfuncPtr Inp32;
    	oupfuncPtr oup32;
     
     
    	int portetat=0x378;
    	int portdata=0x379;
    	int portctrl=0x37A;
     
     
    	/** Chargement libraire et fonctions inp oup **/
    	hLib = LoadLibrary("inpout32.dll");
    	if(hLib==NULL)
    	{
    			printf(" Le chargement de la librairie a échouer.");
    			return -1;
    	}
     
    	Inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");     /** chargement fct Inp32 **/
    	if(Inp32==NULL)
    	{
    		printf("Problème Inp32");
    		return -1;
    	}
     
        oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");       /** cbargement fct Oup32 **/
    	if(oup32==NULL)
    	{
    		printf("Problème Oup32");
    		return -1;
    	}
     
     
     
     
    	(oup32)(portctrl,32);                                   /** active le mode lecture **/
     
            temp =Inp32(portdata);             /** ??? **/
     
            printf("Port read (%04X)= %d\n",portdata,temp);
     
     
    }
    Voici mon code concernant mon imp32,dans mon cas ici, mon printf m'afficherait directement la valeur décimale ?

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par wokba Voir le message
    Voici mon code concernant mon imp32,dans mon cas ici, mon printf m'afficherait directement la valeur décimale ?
    temp n'est pas déclarée... Ce code fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #include <windows.h>
     
    typedef short (_stdcall * inpfuncPtr) (short portaddr);
    typedef void (_stdcall * oupfuncPtr) (short portaddr, short datum);
     
    int main (void)
    {
       HINSTANCE hLib;
       inpfuncPtr Inp32;
       oupfuncPtr oup32;
     
       int const portetat = 0x378;
       int const portdata = 0x379;
       int const portctrl = 0x37A;
     
     /** Chargement libraire et fonctions inp oup **/
       hLib = LoadLibrary ("inpout32.dll");
       if (hLib == NULL)
       {
          printf (" Le chargement de la librairie a échouer.");
          return -1;
       }
     
       Inp32 = (inpfuncPtr) GetProcAddress (hLib, "Inp32");  /** chargement fct Inp32 **/
       if (Inp32 == NULL)
       {
          printf ("Problème Inp32");
          return -1;
       }
     
       oup32 = (oupfuncPtr) GetProcAddress (hLib, "Out32");       /** cbargement fct Oup32 **/
       if (oup32 == NULL)
       {
          printf ("Problème Oup32");
          return -1;
       }
     
       (oup32) (portctrl, 32);                               /** active le mode lecture **/
       {
          int temp = Inp32 (portdata);            /** ??? **/
     
          printf ("Port read (%04X)= %d\n", portdata, temp);
       }
       return 0;
    }
    Tu cherches ceci :

    http://delahaye.emmanuel.free.fr/clib/pio/
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    temp n'est pas déclarée... Ce code fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #include <windows.h>
     
    typedef short (_stdcall * inpfuncPtr) (short portaddr);
    typedef void (_stdcall * oupfuncPtr) (short portaddr, short datum);
     
    int main (void)
    {
       HINSTANCE hLib;
       inpfuncPtr Inp32;
       oupfuncPtr oup32;
     
       int const portetat = 0x378;
       int const portdata = 0x379;
       int const portctrl = 0x37A;
     
     /** Chargement libraire et fonctions inp oup **/
       hLib = LoadLibrary ("inpout32.dll");
       if (hLib == NULL)
       {
          printf (" Le chargement de la librairie a échouer.");
          return -1;
       }
     
       Inp32 = (inpfuncPtr) GetProcAddress (hLib, "Inp32");  /** chargement fct Inp32 **/
       if (Inp32 == NULL)
       {
          printf ("Problème Inp32");
          return -1;
       }
     
       oup32 = (oupfuncPtr) GetProcAddress (hLib, "Out32");       /** cbargement fct Oup32 **/
       if (oup32 == NULL)
       {
          printf ("Problème Oup32");
          return -1;
       }
     
       (oup32) (portctrl, 32);                               /** active le mode lecture **/
       {
          int temp = Inp32 (portdata);            /** ??? **/
     
          printf ("Port read (%04X)= %d\n", portdata, temp);
       }
       return 0;
    }
    Tu cherches ceci :

    http://delahaye.emmanuel.free.fr/clib/pio/

    oui en fait, j'ai supprimer quelques informations pour alléger le code que je montre ici, pour facilité la lecture. J'avais bien déclaré temp dans mon code.

    Donc si j'ai 00010001 comme entrée sur les pins D0 à D7 de mon port data, avec mon printf il écrira directement la valeur décimale : 17 ? c'est correct ?


    un tout grand merci pour l'aide

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par wokba Voir le message
    Donc si j'ai 00010001 comme entrée sur les pins D0 à D7 de mon port data, avec mon printf il écrira directement la valeur décimale : 17 ? c'est correct ?
    Affiche en hexa, ça m'évitera les crampes au cerveau...

    00010001 en hexa ça fait 11h.

    11h = 10h + 1h = 16 + 1 = 17

    Oui, c'est correct si le port // est de type étendu et qu'il est configuré en E/S, ce qui n'est pas forcément la config par défaut au niveau du BIOS du PC...
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Affiche en hexa, ça m'évitera les crampes au cerveau...

    00010001 en hexa ça fait 11h.

    11h = 10h + 1h = 16 + 1 = 17

    Oui, c'est correct si le port // est de type étendu et qu'il est configuré en E/S, ce qui n'est pas forcément la config par défaut au niveau du BIOS du PC...
    désolé pour le binaire et crampe au cerveau ! mais un grand merci pour l'aide

    problème résolu..

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par wokba Voir le message
    désolé pour le binaire
    Le problème, c'est pas le binaire. C'est l'usage du décimal pour exprimer une valeur binaire. C'est absurde. Pour un format 8-bit (ou multiple), l'hexa est fait pour ça. La conversion est immédiate :

    0x15 = 0001 0101
    0xE34 = 0000 1110 0011 0100
    0xDEADBEEF = 1101 1110 1010 1101 1011 1110 1110 1111

    c'est pas compliqué...
    Pas de Wi-Fi à la maison : CPL

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lecture port série
    Par alex2395 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 28/03/2007, 15h59
  2. lecture port serie tcomport
    Par STEPH42160 dans le forum C++Builder
    Réponses: 30
    Dernier message: 22/02/2007, 00h19
  3. [API Win32 sans MFC] Lecture port série: thread bloqué
    Par dacid dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 24/05/2006, 13h34
  4. Pb de lecture port série
    Par amalis dans le forum Bibliothèques tierces
    Réponses: 1
    Dernier message: 18/03/2006, 16h21
  5. Lecture port RS232
    Par hamster dans le forum MFC
    Réponses: 9
    Dernier message: 07/06/2005, 14h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo