Pb avec petit programme port parallèle

Signaler
Messages postés
2
Date d'inscription
lundi 26 janvier 2004
Statut
Membre
Dernière intervention
24 mai 2008
-
Messages postés
2
Date d'inscription
lundi 26 janvier 2004
Statut
Membre
Dernière intervention
24 mai 2008
-
Bonjour,

J'ai fait un petit programme pour écrire et lire le port parallèle mais ça ne fonctionne pas.
De plus quand je branche mon montage toutes les LED sont allumées, pourtant j'ai bien vérifié mon montage et je ne vois rien de particulier.

Est ce normal ou alors ai je fait une erreur quelque part ???

Voici mon code:
#include <stdio.h>
#include <string.h>
unsigned char inportb (unsigned short _port)
{
    unsigned char rv;
    __asm__ __volatile__ ("inb %1, %0" : "=a" (rv) : "dN" (_port));
    return rv;
}

void outportb (unsigned short _port, unsigned char _data)
{
    __asm__ __volatile__ ("outb %1, %0" : : "dN" (_port), "a" (_data));
}

int main(int argc,char *argv[])
{
    int i=0;
    char out_char;
 
    unsigned char data;
    strcpy(&data,"0");
    unsigned short port = 0x378;
    printf("Début du test \n");
    outportb(0X378,data);
    printf("Fin du test \n");
    data = inportb(0X378);
    printf("data : %c\n",data);

    return 0;
}

Avez vous une ou plusieurs idées?

Merci à vous

2 réponses

Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

ca bloque à quel niveau??
Messages postés
2
Date d'inscription
lundi 26 janvier 2004
Statut
Membre
Dernière intervention
24 mai 2008

Bonjour

Désolé pour le retard dans ma réponse.

En fait j'ai trouvé comment sous XP avec Dev-C++ communiquer avec le port parallèle (c'est pas de moi !! Dommage !!).

Voici le code source:
/**************************************************/
/*** TEST.c  -- test interface to inpout32.dll  ***/
/**************************************************
Méthode:                                                   
Méthode permettant de charger la DLL en mémoire via LoadLibrary(),
ce qui te fournira un handle vers cette DLL. Puis, via la fonction
GetProcAddress(), tu récupères l'adresse de la fonction que tu utilises pour
accéder à cette fonction. Quand c'est terminé la DLL doit être libérée
avec FreeLibrary().
/*******************************************************/
#include <stdio.h>
#include <conio.h>
#include <windows.h>

/* Definitions in the build of inpout32.dll are:            */
/*   short _stdcall Inp32(short PortAddress);               */
/*   void _stdcall Out32(short PortAddress, short data);    */
/* prototype (function typedef) for DLL function Inp32: */

     typedef short _stdcall (*inpfuncPtr)(short portaddr);
     typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);

int main(void)
{
     HINSTANCE hLib;
     inpfuncPtr inp32;
     oupfuncPtr oup32;

     short x;
     int i;

     /* Chargement de la librairie*/
     hLib = LoadLibrary("inpout32.dll");

     if (hLib == NULL)
    {
          printf("LoadLibrary Failed.\n");
          return -1;
     }
     /* Récupération de l'adresse de la fonction avec "GetProcAddress" */
     inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
     /* Vérification que la fonction existe */
     if (inp32 == NULL) {
          printf("GetProcAddress for Inp32 Failed.\n");
          return -1;
     }
     /* Récupération de l'adresse de la fonction avec "GetProcAddress" */
     oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");
     /* Vérification que la fonction existe */
     if (oup32 == NULL) {
          printf("GetProcAddress for Oup32 Failed.\n");
          return -1;
     }
/***************************************************************/
/* now test the functions */

     /* Try to read 0x378..0x37F, LPT1:  */
     for (i=0x378; (i<0x380); i++)
    {
         x = (inp32)(i);
          printf("port read (%04X)= %04X\n",i,x);
     }
     /*****  Write the data register */

     i=0x378;
     x=0x77;
     (oup32)(i,x);
     printf("port write to 0x%X, datum=0x%2X\n" ,i ,x);

     /***** And read back to verify  */
     x = (inp32)(i);
     printf("port read (%04X)= %04X\n",i,x);

     /*****  One more time, different value */

     i=0x378;
     x=0x0;

     (oup32)(i,x);
     printf("port write to 0x%X, datum=0x%2X\n" ,i ,x);

     /***** And read back to verify  */
     x = (inp32)(i);
     printf("port read (%04X)= %04X\n",i,x);

     FreeLibrary(hLib);
     return 0;
}

C'est un code qui  a été développé avec Borland C++.

Il ne faut surtout pas oublié de mettre la DLL inpout32.dll dans le même dossier que l'exécutable.

Voilou

A+
MOI