|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Jun 2006
Messaggi: 13
|
[c linux] inviare e ricevere dati esadecimali da seriale
sto scrivendo un programma che deve inviare e ricevere dati in esadecimale su seriale
definisco due buffer come variabili globali Codice:
//fd della seriale extern int fd; /*buffer della seriale*/ extern char buffer_ingresso[10]; /*ingresso*/ extern char buffer_uscita[10]; /*uscita*/ setto i parametri della seriale Codice:
/*apro la seriale*/ fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK); //non bloccante comunicazione asincrona if (fd==0) { fprintf(spy_knx_err, "problemi nell'apertura della seriale\n\r"); exit(-1); } //installo il signal hander che scattera' quando ci sono dati sulla seriale saio.sa_handler = signal_handler_IO; //nome della funzione che gestira' il segnale //saio.sa_mask = 0; //maschera degli altri segnali 0 default sigemptyset(&saio.sa_mask); saio.sa_flags = 0; saio.sa_restorer = NULL; sigaction(SIGIO,&saio,NULL); fcntl(fd, F_SETOWN, getpid()); //registro il pid del processo che si deve occupare del segnale (questo) fcntl(fd, F_SETFL, FASYNC); //abilito il segnale //setto la seriale tcgetattr(fd,&newtio); //salvo le vecchie impostazioni della seriale //setto le nuove impostazioni cfsetispeed(&newtio, BAUDRATE); //NUOVA FUNZIONE PER SETTARE LA VELOCITA' POSSO SCEGLIERE INGRESSO E USCITA, NON PIU' IN C_CFLAG cfsetospeed(&newtio, BAUDRATE); newtio.c_cflag |= (CLOCAL | CREAD); newtio.c_cflag |= PARENB; newtio.c_cflag &= ~PARODD; newtio.c_cflag &= ~CSTOPB; newtio.c_cflag &= ~CSIZE; newtio.c_cflag |= CS8; //newtio.c_cflag &= ~CNEW_RTSCTS; newtio.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); newtio.c_iflag |= (INPCK | ISTRIP); newtio.c_iflag &= ~(IXON | IXOFF | IXANY); tcflush(fd, TCIFLUSH); tcsetattr(fd,TCSANOW,&newtio); //applico le impostazioni subito } Codice:
buffer_uscita[0]=(char)8; buffer_uscita[1]=(char)sc; buffer_uscita[2]=(char)0xB1; buffer_uscita[3]=(char)address.int_stat_sist_sup; buffer_uscita[4]=(char)address.int_stat_sist_inf; buffer_uscita[5]=(char)0; buffer_uscita[6]=(char)stato_polling; buffer_uscita[7]=(char)(0xA5+buffer_uscita[0]+buffer_uscita[1]+buffer_uscita[2]+buffer_uscita[3]+buffer_uscita[4]+buffer_uscita[5]+buffer_uscita[6])%256; write(fd, buffer_uscita, 8); tcdrain(fd); 80 00 02 0A 06 00 04 0A F8 in lettura ho ho lo stesso problema, leggo valori diversi, tipo invio FF e ottengo 127 dove sbaglio? grazie Ultima modifica di sandro76 : 09-11-2009 alle 10:24. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:50.