Programação de Periféricos
Exercícios com a Porta Serial RS-232C no Linux


Prof. Eduardo Augusto Bezerra
FACIN/FENG, PUCRS, Porto Alegre, RS, Agosto, 2008
EEL, UFSC, Florianópolis, SC, Outubro, 2012


  1. Utilizando as dicas sobre acesso a porta serial no Linux existentes nos slides apresentados nas aulas (ver a seção "Acesso a periférico – Porta Serial"), estudar e entender o programa Robot.c. Esse programa é utilizado para envio de comandos para um braço robô conectado a porta serial de um microcomputador. Responder as seguintes questões:
    • Onde é realizada a abertura da porta serial (qual função)?
    • Como é realizada a abertura da porta serial? Qual a função de cada parâmetro utilizado?
    • Qual a função da instrução fcntl() no procedimento de abertura da porta serial?
    • Como funciona a instrução tcgetattr()? Qual a necessidade de utilizar essa instrução no programa?
    • Para que e como é utilizada a struct options?
    • Como é configurada a velocidade (taxa de transferência de dados) da porta serial?
    • Quais são os valores configurados para a transferência de dados (taxa de transferência, tamanho dos dados, número de stop bits e paridade)?
    • Em que momento (qual instrução) a configuração da porta é efetivamente realizada, ou seja, quem envia os parâmetros definidos para os registradores da UART?
    • Qual função do programa é responsável por enviar dados para a porta serial?
    • Quantos bytes são enviados por vez para a porta serial?
    • Quantos bytes são lidos por vez da porta serial?
    • Qual a necessidade/utilidade das instruções fcntl utilizadas antes e após a leitura do byte recebido pela porta serial?

  2. Escrever um programa em C para simular o comportamento do braço robô citado no exercício 1. Esse programa deverá ser executado em um microcomputador conectado via cabo serial RS-232C a um outro microcomputador, onde o programa Robot.c estará em execução. O programa Robot.c não deve ser modificado. O programa a ser implementado deverá receber os comandos enviados pelo Robot.c (ver programa test.c), escrever uma mensagem na tela informando o que o braço robô está fazendo (ex. "movendo base para a direita"), e enviar o que for necessário pela serial para o programa Robot.c funcionar corretamente. Assim como o Robot.c, o programa test.c também não deverá ser alterado. Estes dois programas estarão em execução em um microcomputador, enviando comandos para o outro microcomputador, que estará se comportando como se fosse o braço robô. Os comandos a serem recebidos estão listados a seguir. Os códigos a serem recebidos no programa a ser implementado podem ser obtidos na função setMotor() do Robot.c (ex. 0x01 = "move base para esquerda", 0x02 = "move base para direita"). Lista de comandos:
    • 'a', move base para esquerda
    • 'd', move base para direita
    • 's', move braço para baixo
    • 'w', move braço para cima
    • 'o', abre a mão
    • 'c', fecha a mão
    • '1', acende LED
    • '0', acende LED (também)
    • 'q', fim - sai do programa

  3. Desenvolver um programa para descobrir informações sobre um microcomputador remoto, via porta serial. Os dois microcomputadores devem ser conectados via porta serial RS-232C, e um deles deverá executar um programa, em background, para responder perguntas enviadas pelo outro microcomputador. Exemplos de perguntas são: "Qual o seu IP?"; "Quem são os usuários da máquina no momento?"; "Qual sua configuração (CPU, memória, ...)?". Preparar um menu de opções, e a cada opção selecionada, o microcomputador remoto envia uma string contendo a resposta da questão formulada. Essa resposta deverá ser apresentada na tela do microcomputador que gerou a questão.