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

MFC Discussion :

[MFC] Controle LPT1


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 92
    Par défaut [MFC] Controle LPT1
    Bonjour à tous,

    Je cherche un moyen de lire et modifier l'état des bits du port parrallèle.
    Comment peut on réaliser cela?

    Merci,

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour
    Il y a plusieurs moyen de faire cela.
    Si on veux faire proprement, on ouvre la fichier "\\LPT1" puis on l'utilise comme un vrai fichier text on lisant et écrivant des octects. (c'est lourd à faire)

    Si on veut être plus cochon, on peut faire cela :
    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
    #include <iostream.h>
    char lire(unsigned short adr);
    void ecrire(unsigned short adr,char out_char);
    char lire(unsigned short adr)
    {
        unsigned char ret_char;
        asm 
        {
            mov dx,adr
            in al,dx
            mov ret_char,al
        }
        return(ret_char);
    }
     
    void ecrire(unsigned short adr,char out_char)
    {
        asm
        {
            mov al,out_char
            mov dx,adr
            out dx,al
        }
    }
     
    int main()
    {
       //ecrit sur le port parallele la valeur 10
        ecrire(0X0378,10);
     
        //lit le port parallele
        cout<<lire(0X0378);
        return 0;
    }
    (je serai incapable d'expliquer les partie en assembleur du code, c'est un exemple que j'avais trouvé sur le net)

    mabu

  3. #3
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Si on veut être plus cochon, on peut faire cela :
    ne marche pas sous NT/XP.

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel
    ne marche pas sous NT/XP.
    Il me semblais bien qu'il y avait une limite... Mais comment se fait ce ?

    L'autre méthode fonctionne sous xp, je l'ai testé il y a pas longtemps, je dois avoir les sources sur un cd chez moi, je reviendrai poster le minimum.

  5. #5
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Il me semblais bien qu'il y avait une limite... Mais comment se fait ce ?
    in / out sont des instructions privilégiées, réservées aux drivers. En effet en modifiant les IO ports, tu peux mettre en péril la stabilité de l'OS. Les OS sérieux (XP, Linux...) t'interdisent de les utiliser dans tes progs basiques. Si tu le fait, ton programme sera tué.

    Faudrait spécifier ce que tu entends par "les bits du port parallèle".
    Tu peux ouvrir "LPT1" (ou "\\.\LPT1", mais pas "\\LPT1") comme te l'a expliqué mabu, et tenter d'utiliser GetCommConfig / GetCommProperties / etc... pour avoir des infos. Celà dit le port LPT1 est un peu à part et c'est pas garantie que ça marche. A tester...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 92
    Par défaut
    Merci à tous,


    Dans certain exemple sur le net on trouve cette fonction: _inp, apparament pour lire le port LPT1.


    En fait, mon objectif et d'utiliser le port parrallèle pour communiquer avec un montage éléctronique externe à partir d'un PC et de pouvoir lui envoyer des commandes.

    J'entend par bits toute les broches du port LPT1, elles peuvent être à un niveau haut ou à un niveau bas pour indiquer un 1 ou un 0 logique.

  7. #7
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    _inp, inp, __asm in, ... tout ça c'est pareil, ça passera pas sous NT/XP. Sois tu tentes "LPT1", soit tu utilises un driver qui te fourni une fonction équivalente à _inp.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 92
    Par défaut
    Ok, merci,

    Donc si je résume et avec ce que j'ai trouvé comme info sur le net.

    - Soit j'utilise des drivers, type portIO.dll ou autre
    - Soit j'utilise le code fournit plus haut (Assembleur)
    - Soit j'utilise les fonctions CreateFiles pour avoir un accé au port LPT1.

    La solution assembleur me semble un peu brutale et je préfère une des deux autres.

    Quelqu'un pourrait t'il partager son experience sur le sujet pour voir la meillieur solution ou pour trouver des exemples, surtout avec les drivers.

    Est ce que Windows fournit un driver pour avoir un accé direct au port // (LPT1)?

    Dans le cas des fonctions CreateFiles peut-on connaitre les broches de sorties qui vont être mise à 5Volts ou à 0Volts en fonction des octets envoyés?

Discussions similaires

  1. [MFC] : controls Picture
    Par hitchie dans le forum MFC
    Réponses: 5
    Dernier message: 10/03/2006, 14h58
  2. [MFC] Controler la fin de l'application
    Par gwen1984 dans le forum MFC
    Réponses: 5
    Dernier message: 11/07/2005, 16h20
  3. [MFC] Controler les splitter
    Par toune dans le forum MFC
    Réponses: 6
    Dernier message: 19/01/2005, 12h20
  4. [mfc]control
    Par marseillais57 dans le forum MFC
    Réponses: 3
    Dernier message: 02/06/2004, 11h32
  5. [mfc] controle de la souris
    Par arno2004 dans le forum MFC
    Réponses: 4
    Dernier message: 27/04/2004, 15h22

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