C > liaison série

Titreliaison série
Postée le28-04-2011
Affichée320
Mini-lien
Description

liaison serie qui ne renvoie pas la bonne reponse

EtatNe contient pas d'erreurs. Ne contient pas d'erreurs.
Code d'insertion
Options
Afficher les numéros de lignes  Mettre la source en plein ecran  Selectionner la source  Partager sur Facebook 
Téléchargement Telecharger en format txt  Telecharger en format pdf  Telecharger en format c
Plein ecran
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>

int main(void)

{

        int port_serie;
        struct termios options;
        int reception;

char buffer[200] = "";

        char data[] = ":0103070D005098\r\n";

        port_serie = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);//lecture et ecriture | pas controlling terminal | ne pas attendre DCD

        //cas d'erreur d'ouverture

        if(port_serie < 0)

        {

                perror("Erreur d'ouverture du port serie");

                exit(-1);

        }

        else
        {

                printf("Port serie numero %d bien ouvert. \n", port_serie);

               

                //chargement des données

                tcgetattr(port_serie, &options);

                //B115200 bauds

                cfsetospeed(&options, B115200);

                options.c_cflag |= (CLOCAL | CREAD);//programme propriétaire du port

                //structure en 8N1 !!

                options.c_cflag &= ~PARENB; //pas de parité

                options.c_cflag &= ~CSTOPB; // 1 bit de stop

                options.c_cflag &= ~CSIZE; //option a 0

                options.c_cflag |= CS8; //8 bits

                tcsetattr(port_serie, TCSANOW, &options); //enregistrement des valeurs de configuration

                printf("Configuration OK strcuture en 8N1 !. \n");

               

                        // Envoie de donnees.

                        printf("Envoie des donnees en cours ... \n");

                        if (write(port_serie, data, 17) < 0){perror("ERROR\n");}

                        printf("le message envoyé est : %s\n",data);

                        //printf("Envoie Termine. \n");


                        // Lecture des donnees.

                        //printf("Lecture des donnees en cours ... \n");

                        fcntl(port_serie,F_SETFL,10);//mode bloquant pour la fonction read() si aucun caractere dispo, programme attend

                       
                        for(int i;i<10;i++)
                        {      

                        reception=read(port_serie,buffer,200);//buffer contitendra les données, 16 est le nombre d'octets a copier dans cet espace

                        }
                        printf("message recu : %s\n",buffer);

                        if (reception == -1)

                        printf("Erreur lecture port serie\n");

               

                        printf("Reception finie.\n" );


        }

        close(port_serie);//fermeture du port serie


return 0;

}