salut


je n'arrive pas a récupéré une valeur d'un octet dans un fichier texte envoyé par un pic"on appuie sur un boutton" au pc
par contre avec l'hyperterminal je récupéré des symboles
l'ouverture du port fonctionne
mais c'est la fonction réception ou je bloque
le fichier test est bien créer avec valeur 0 pour réponse
donc pouvez-vous me dire ou sont les erreurs dans mon programme?

Code:
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <winbase.h>

// CONSTANTES
//-------------------------------------------------------------------------------
// Définition du code d'erreurs
typedef enum
{
    e_ErrCom_None, // Pas d'erreur
    e_ErrCom_Creation, // Erreur lors de la création du flux e_ErrCom_Utilise, // Le port com est déjà utilisé
    e_ErrCom_Inexistant, // Le port com n'existe pas
    e_ErrCom_Timeout, // Timeout lors d'une émission-réception
    e_ErrCom_Emission, // Erreur lors de l'émission
    e_ErrCom_Reception, // Erreur lors de la réception
    e_ErrCom_Definition_Trame, // Erreur de définition de la trame
    e_ErrCom_Nack, // Demande non prise en coompte
    e_ErrCom_Checksum // Erreur de checksum
} e_ErrCom;

// Nom du port série
#define PORT1 "COM1"
#define PORT2 "COM2"

// Définition des vitesses de communication
#define V1200 1200
#define V2400 2400
#define V4800 4800
#define V9600 9600

// Définition du nombre de bits
#define BITS_7 7
#define BITS_8 8

// Définition du nombre de bits de stop
#define BIT_DE_STOP_1 1
#define BIT_DE_STOP_2 2

// Définition de la parité
#define PAS_DE_PARITE 'N'
#define PARITE_IMPAIRE 'O'
#define PARITE_PAIRE 'E'

// Codes de retour génériques
#define OK 1
#define KO 0

// Longueur max réservée pour une trame
#define LG_TRAME 100

// PROTOTYPES
//----------------------------------------------------------------------------
e_ErrCom OuvreCom(char *strPort,long BaudRate,int BitsSize,int Parity,int StopBits);

e_ErrCom ReceptionCom(void *lpBuf, unsigned int nCountMax, unsigned int *pCountRead);
void FermeCom();

DCB PortDCB; // structure dcb du port
e_ErrCom g_ErrCom= e_ErrCom_None; // Variable des erreurs de com
HANDLE g_hCom = 0; // handle de la com



int main (int argc,char *argv[])
{

    FILE *fichier=NULL;
    int i=0;
    unsigned char  buf[1]={0};
    unsigned int pCountRead;
    g_ErrCom=OuvreCom(PORT1,V9600,BITS_8,PAS_DE_PARITE,BIT_DE_STOP_1);
    ReceptionCom( buf, sizeof(buf), &pCountRead);
    fichier = fopen("test.txt", "w");
    if (fichier != NULL)
    {
        for (i=0;i<=pCountRead;i++)

            fprintf(fichier, "valeur  %d", buf[0]);

        fclose(fichier);
    }
    FermeCom();
    if ( g_ErrCom==0)
    {
        printf("pas d'erreur");
    }
}









e_ErrCom OuvreCom(char *strPort,long BaudRate,int BitsSize,int Parity,int StopBits)
{
    g_ErrCom = e_ErrCom_None;

// On ouvre le port série
    g_hCom = CreateFile(strPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING,NULL);

    if (g_hCom == INVALID_HANDLE_VALUE)
    {
// Echec
        g_ErrCom=e_ErrCom_Creation;
    }
    else
    {
// On vide les buffers
        PurgeComm(g_hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);

// On paramètre le port série
        PortDCB.DCBlength = sizeof(DCB);
//Configuration actuelle
        GetCommState(g_hCom, &PortDCB);
//Modification du DCB

        PortDCB.DCBlength = sizeof (DCB);
        PortDCB.BaudRate = 9600;
        PortDCB.fBinary = TRUE;
        PortDCB.fParity = FALSE;
        PortDCB.fOutxCtsFlow = FALSE;
        PortDCB.fOutxDsrFlow = FALSE;
        PortDCB.fDtrControl = DTR_CONTROL_ENABLE;
        PortDCB.fDsrSensitivity = FALSE;
        PortDCB.fTXContinueOnXoff = FALSE;
        PortDCB.fOutX = FALSE;
        PortDCB.fInX = FALSE;
        PortDCB.fErrorChar = FALSE;
        PortDCB.fNull = FALSE;
        PortDCB.fRtsControl = RTS_CONTROL_ENABLE;
        PortDCB.fAbortOnError = FALSE;
        PortDCB.ByteSize = 8;
        PortDCB.Parity = NOPARITY;
        PortDCB.StopBits = ONESTOPBIT;

//Configuration de la liaison serie
        SetCommState(g_hCom,&PortDCB);
    }
    return g_ErrCom;
}
//---------------------------------------------------------------------------
// FONCTION : ReceptionCom
//---------------------------------------------------------------------------
// DESCRIPTION :
// Reception de caractères sur la liaison série
//
//---------------------------------------------------------------------------
// PARAMETRES :
// -lpBuf Pointeur sur le buffer de caractère a lire
// -nCountMax Nombre maxi de caractère a lire
// -pCountRead Pointeur sur le nombre de caractères lus
//---------------------------------------------------------------------------
// RETOUR :Code d'erreur
//---------------------------------------------------------------------------
e_ErrCom ReceptionCom(void *lpBuf,unsigned int nCountMax, unsigned int* pCountRead)
{
    COMSTAT Stat;
    DWORD Errors;
    unsigned int nCarALire;
    unsigned long NCarLus=0;

    if (g_hCom!=NULL)
    {
//on pari sur pas d'erreur
        g_ErrCom=e_ErrCom_None;

//Pour éviter de gérer un time out
        Sleep(500);

//Pour connaitre le nombre d'octets dans le buffer d'entrée
        ClearCommError(g_hCom,&Errors,&Stat);
        nCarALire=Stat.cbInQue;

//On effectue la lecture si il y a des caractères présents
        if ( (nCarALire>0)&&(nCarALire<=nCountMax) )
        {
            if (ReadFile(g_hCom,lpBuf,nCarALire,&NCarLus,NULL)==0)
            {
                g_ErrCom=e_ErrCom_Reception;
            }

        }
        *pCountRead=NCarLus;
    }
    else

        //Le port n a pas été ouvert
        g_ErrCom=e_ErrCom_Creation;
//Compte rendu de l'exécution
    return g_ErrCom;
}
void FermeCom()
{
    if (g_hCom!=NULL)
    {
        CloseHandle(g_hCom);
    }
}