Pb avec petit programme port parallèle

llorden Messages postés 2 Date d'inscription lundi 26 janvier 2004 Statut Membre Dernière intervention 24 mai 2008 - 27 avril 2008 à 19:20
llorden Messages postés 2 Date d'inscription lundi 26 janvier 2004 Statut Membre Dernière intervention 24 mai 2008 - 24 mai 2008 à 16:59
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

cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011
28 avril 2008 à 11:08
ca bloque à quel niveau??
0
llorden Messages postés 2 Date d'inscription lundi 26 janvier 2004 Statut Membre Dernière intervention 24 mai 2008
24 mai 2008 à 16:59
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
0
Rejoignez-nous