Jump to content

Acessar a porta paralela


fabio123

Recommended Posts

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

Link to comment
Share on other 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

Link to comment
Share on other sites

Eu vou explicar melhor o que quero

Imaginemos 8 led's ligados a porta

Como nesta imagem abaixo

http://www.rogercom.com/pparalela/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

Link to comment
Share on other 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.

Link to comment
Share on other 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!!

Link to comment
Share on other 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.

Link to comment
Share on other 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

Link to comment
Share on other 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/

Link to comment
Share on other 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.

Link to comment
Share on other sites

  • 4 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.