Programa Porta Serial RS-232

1. Programa Porta Serial RS-232

Renan Bottero
renanbottero

(usa Ubuntu)

Enviado em 19/08/2011 - 12:28h

Ola pessoal sou novo aqui. Como também sou novo em programação. Faço uma bolsa de pesquisa e tenho que desenvolver um programa em C para enviar e ler dados da porta serial.
Eis o programa que eu desenvolvi.


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/io.h>

#define ttyS 0x3f8
// #define ttyS 0x2f8


int main(int argc, char *argv[])
{
int escolha=0;
char byte;
do{

printf ("1- Enviar Dados para porta \n");
printf ("2- Ler dados da porta \n");
printf ("3- Sair\n" );

printf ("Escolha: \n");
scanf ("%d",&escolha);
scanf("%*[^\n]");/*limpa canal de entrada*/
scanf("%*c");


switch (escolha)
{


case 1:
if (ioperm(ttyS, 3, 1)) {
perror ("ioperm");exit(1);
}

printf ("Valor: ");
scanf ("%c",&byte);
scanf("%*[^\n]");/*limpa canal de entrada*/
scanf("%*c");
printf("Valor digitado: %d\n",byte);
outb( byte, ttyS );
usleep(200000);
printf ("valor lido da serial:%d \n",inb (ttyS+1));
usleep(200000);

break;

case 2: if (ioperm(ttyS, 2, 1)) {
perror ("ioperm");exit(1);
}
printf ("valor:%d \n",inb (ttyS+1));

break;

case 3:
ioperm(ttyS, 3, 0);
printf ("Portas Fechadas, saindo...\n");

}

}while (escolha!=3);

// system("PAUSE");
return 0;
}

Ele consegue enviar dados para a porta, mas não consegue ler os mesmos.
Alguém pode dar uma luz por favor, aguardo resposta obrigado.


  


2. Re: Programa Porta Serial RS-232

José Mário
miura 787

(usa Ubuntu)

Enviado em 19/08/2011 - 14:03h

Veja este site, deve ajudar!

http://www.rogercom.com/


3. Re: Programa Porta Serial RS-232

Willian Alves
Willianra

(usa Ubuntu)

Enviado em 28/03/2014 - 16:49h

Consegui fazer?
Posta a solução e marca como resolvido.


4. Re: Programa Porta Serial RS-232

Douglas Cipolato
coopatrigo

(usa Outra)

Enviado em 17/12/2014 - 15:31h

Cara posta a solução estou atras de um programa assim.




5. Re: Programa Porta Serial RS-232

Paulo
paulo1205

(usa Ubuntu)

Enviado em 17/12/2014 - 16:54h

O que quer que seja, se for usando ioperm() ou iopl(), tem grandes chances de ser um “bacalhau”.

Basicamente:

- chamar open() sobre /dev/ttyS* (talvez incluindo a opção O_NONBLOCK, convém testar);
- (opcional) ajustar o driver de baixo nível e/ou controle de fluxo, através de chamada(s) de ioctl() (bom lugar para consultar, apesar de não ser -- ou talvez justamente por não ser -- Linux, é http://netbsd.gw.com/cgi-bin/man-cgi?tty+4+NetBSD-current;
- ajustar a velocidade de comunicação;
- realizar a entrada e saída, conforme necessário;
- se for necessário manipular as linhas de controle diretamente (RTS, DTR, DCD/CI, CTS, DSR e RI), será necessário também fazer as devidas chamadas a ioctl() (ver referência acima).






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts