• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

fabio123

Acessar a porta paralela

22 mensagens neste tópico

Boas

Gostava que me ajudassem a criar um progrma em C, que enviasse bits para a porta paralela

Basta um programa simples capaz de fazer acender led's, por exemplo tendo 8 led's ligados a porta paralela, e fazer acender um de cada vez. Este é o meu objectivo. Mas gostava de ficar a saber o que faço. Ou seja se me podessem explicar cada passo dado no programa agradecia

Cumpz

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eh pessoal ajudem me la

Eu andei a ver linhas de codigo de uns programas na net, pelo mens acho, que aquilo funciona

Vou por aqui um deles

Este envia bits para a porta paralela

#include <stdio.h>
#include <dos.h>
#include <conio.h>
/*********************************************/
/* 	Este programa seta todos os bits da porta 	      */
/*********************************************/
void main (void)
{
clrscr();
outportb(0x378,0xff); // no lugar de 0xff pode por 255,
outportb(0x37a,0xff); // e' que esta em Hexa.
getch();
}

Mas nao sei como funciona exatamente!!

Se alguem me podesse explicar melhor o que ele faz agradecia

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu vou explicar melhor o que quero

Imaginemos 8 led's ligados a porta

Como nesta imagem abaixo

Projeto4.gif

O que eu pretendia era construir um programa que eu podesse por exemplo acender o led L2 a seguir o L5, depois desligava o L2, aseguir ligava o L8, depois apagava o L5, estao a ver o que quero, Sou eu é que atravez do programa controlo o circuito de led's

Cumpz

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já fiz um programa em QBasic que acendia leds na porta paralela, deverá ser parecido.

Funciona basicamente assim:

Pino  2 = 1

Pino  3 = 2

Pino  4 = 4

Pino  5 = 8

Pino  6 = 16

Pino  7 = 32

Pino  8 = 64

Pino  9 = 128

O valor que envias para a porta representa a soma dos valores dos pinos que queres que estejam ligados.

Por exemplo se quiseres ter o pino 3, 6 e 9 ligados, mandas o valor 146 em decimal que corresponde a 2+16+128.

Para ligares apenas um pino mandas apenas o valor corresponde ao pino.

O valore 255 liga os pinos todos porque 1+2+4+8+16+32+64+128 = 255.

Em hexadecimal a lógica será a mesma.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hum ja começo a entender mais qual quer coisa, mas falando mesmo de linguagem C. nimguem me sabe dizer o que é que aquele programa acima faz?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um apartezinho

O que significa cprintf??

printf é mostrar no ecra e a letra c significa o que??

E ja agora o comando fflush??

Nao avera nenhum "dicionario" ou algo parecido com estes significados??

Cumpz

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O exemplo que encontraste utiliza uma biblioteca do turbo c/c++ chamada "Conio". A função cprintf permite "colorar" o output na consola (lembra-te MSDOS). Se conheceres as bibliotecas curses ou ncurses do Unix/Linux, a função é similar à printw.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O exemplo que encontraste utiliza uma biblioteca do turbo c/c++ chamada "Conio". A função cprintf permite "colorar" o output na consola (lembra-te MSDOS). Se conheceres as bibliotecas curses ou ncurses do Unix/Linux, a função é similar à printw.

Ou seja a unica diferença entre cprintf e printf é basicamente que o cprintf muda a cor das letras!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

alguem me pode explicar o que significa

#define LPT1 0x378 ??

Ao definires isso, cada vez que utilizares LPT1 no código ao compilar é substituido por 0x378 penso eu.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso é uma macro, serve precisamete para o que o andré disse.

Se quiseres perceber melhor o que é uma macro podes seguir este link:

http://66.102.9.104/search?q=cache:ZD7UsnfIM1cJ:elearning.embnet.org/file.php/29/ctutorial/Macros.html+http://elearning.embnet.org/file.php/43/ctutorial/Macros.html%23Macros&hl=sv&ct=clnk&cd=1&gl=se&client=firefox-a

guarda a pagina pois ela já não está disponivel na web... este link é para a cache do google

Anyway, este tópico não é para falar de macros.

Interessa perceber aqui uma coisa: o uso de bases com base 2. Ok... eu explico melhor.

O porque so uso de por exemplo hexadecimal e não decimal.

Nós estamos habituados a pensar em decimal pois foi assim que aprendemos. Mas os computadores funcionam em binário ( zeros e uns ) . Teoricamente pode usar-se um computador apenas com um interruptor on/off e escrever um programa em código máquina, mas isso é completamente inintiligivel para um ser humano. Para isso usam-se coisas como linguagens de programação, código ascii, notação hexadecimal etc.

A vantagem do hexadecimal, que é como quem diz base 16... 16 é o mesmo que 2^4. Teoria à parte isto significa que podemos passar de hexadecimal a binário substituindo cada algarismo exadecimal por quatro algarismos binários. Muito mais simples do que se fosse por exemplo em decimal.

Agora olha para os números do andré. Pega numa combinação de leds... por exemplo o primeiro e o último acesos. que dá 128+1 = 129

se convertes esse número para binário obtens: 10000001

tás a ver a correspondencia? :)

Basicamente enviaste um byte para a saída... esse byte é enviado sob forma de tensão, um bit por pino na porta paralela. Por isso é que se chama 'paralela' porque os bits são enviados em paralelo. Se fosse série eram enviados à bruta em fila indiana apenas por um pino, como é o caso do USB.

Espero que isto ajude. Estas coisas dão um pouco de trabalho a por a funcionar.

Fica aqui um pequeno conselho: não brinces com a tua porta paralela de qualquer maneira. Vale mais gastas uns 15 ou 20 euros num interface USB -> LPT do que queimares a tua placa mãe do teu computador.

Já agora... para enviar dados directamente para a porta paralela na linha de comandos podes usar estes pequeno snippets:

*nix:

copy file.txt lpt1

windows:

cat file.txt >/dev/lp0

file.txt é o ficheiro com os dados em formato de texto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pelo exclarecimento e pela dica pedrotuga

Eu sei que estou a por em risco a minha placa mae, ou melhor a placa mae de um pc la da escola, isto é um projecto que eu decidi fazer, e tinha o objectivo de fazer o programa, estou a tentar neste topico perceber como o programa funciona, e o que quer dizer cada comando!! Eu estou a utilizar o TurboC

Ah o meu objectivo nao vai ser controlar aque le circuito de led's, mas sim um mais complexo mas, o programa acaba por funcionar da mesma forma, enviando bits para a porta paralela. O circuito utiliza um buffer para impedir queal quer descarga na porta paralela, o que torna o risco de queimar a board quase nulo

Vou continuando a por as minhas duvidas e estou a contar convosco para me ajudarem

Cumpz

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ja agora nimguem sabe o que este comando significa fflush??

Faz com que o conteúdo do buffer seja enviado para a stream (atenção que só funciona para streams de output).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ja agora nimguem sabe o que este comando significa fflush??

Faz com que o conteúdo do buffer seja enviado para a stream (atenção que só funciona para streams de output).

peço desculpa pela minha ignorancia. mas dava para me explicares melhor, o que sao streams?? E buffer??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

;) toda a gente gosta de documentação!

No que toca a C/C++ há, na minha opinião dois sites de referencia:

http://cplusplus.com

http://cprogramming.com

O primeiro é brilhante na minha opiniao, tudo bem explicado, a informação que interessa sobre praticamente toda a linguagem.

O segundo é mais académico e pode ser utilizado como uma sebenta alternativa pois aborda os temas normalmente estudados nas universidades portuguesas.

Espero que o ingles não seja problema, aqui vão dois links que te explicam o que é isso do buffer e das streams e para que serve a função fflush()

http://www.cplusplus.com/reference/clibrary/cstdio/fflush.html

http://www.cplusplus.com/reference/iostream/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Espero que o ingles não seja problema, aqui vão dois links que te explicam o que é isso do buffer e das streams e para que serve a função fflush()

http://www.cplusplus.com/reference/iostream/

Esse link não está relacionado com o assunto, estamos a falar de C e não de C++.

Está pois. Esse link é para ele perceber o que é um stream e para poder ver como funciona, ainda que não possa usar essa biblioteca em C.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pessoal a livraria conio.h serve para que??

Nao é para as cores pois nao??

E o dos.h eu tenho uma ideia do que é mas nao sei explicar

Alguem me ajuda??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No teu caso vais utilizar varias funções  de entrada e saída de dados que essas bibliotecas têm.

A biblioteca 'dos' como o proprio nome indica,  é composta por uma colecção de funções que permitem aceder a funcionalidades do antigo MS-dos

A biblioteca conio tem outros utilitários para interegir com o utilizador em modo de texto, getchar() e afins

http://www.google.com/search?q=conio.h

http://www.google.com/search?q=dos.h

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A biblioteca conio tem outros utilitários para interegir com o utilizador em modo de texto, getchar() e afins

getchar() é da standard C library. O que existe no conio.h são funções de unbuffured I/O tipo getch().

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora