Ir ao conteúdo
  • Cadastre-se
miniman12

Porta Paralela

Recommended Posts

Dae, eu to querendo fazer um programa que controle as portas paralelas.

Mas eu não tenho ideia de como funcionaria o código será que alguem poderia me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou te passar um programa pronto aí voce se vira aí, que tal?

Mas antes voce tem que colar uma DLL na pasta onde vai estar o executável, daí então é só compilar este código que vai ligar o pino D0 da sua saída paralela:

Faça o download da DLL inpout32.dll em algum site por aí...

#Não se esqueça de colocar seus códigos usando as tags de spoiler e code.Reincidencia será considerada infração.


#include <stdio.h> //printf() entre outras.
#include <conio.h> //getch().
#include <windows.h> //Necessário para: LoadLibrary(), GetProcAddress() e HINSTANCE.
//Declaração dos ponteiros para função.
typedef short _stdcall (*PtrInp)(short EndPorta);
typedef void _stdcall (*PtrOut)(short EndPorta, short valor);

int main(void)
{
HINSTANCE hLib; //Instância para a DLL inpout32.dll.
PtrInp inportb; //Instância para a função Imp32().
PtrOut outportb; //Instância para a função Out32().

//Carrega a DLL na memória.
hLib = LoadLibrary("inpout32.dll");

if(hLib == NULL) //Verifica se houve erro.
{
printf("Erro. O arquivo inpout32.dll não foi encontrado.n");
getch();
return -1;
}

//Obtém o endereço da função Inp32 contida na DLL.
inportb = (PtrInp) GetProcAddress(hLib, "Inp32");

if(inportb == NULL) //Verifica se houve erro.
{
printf("Erro. A função Inp32 não foi encontrada.n");
getch();
return -1;
}

//Obtém o endereço da função Out32 contida na DLL.
outportb = (PtrOut) GetProcAddress(hLib, "Out32");

if(outportb == NULL) //Verifica se houve erro.
{
printf("Erro. A função Out32 não foi encontrada.n");
getch();
return -1;
}

//-------------------------------------------------------------------------------------------------------------------------
//Uso das funções outportb() e inportb():
printf("Pressione uma tecla para ligar o pino D0.n");
getch();
outportb(0x378,1); //Ativa o pino D0 do Registro de Dados da porta paralela.
printf("Pressione uma tecla para desligar o pino D0.n");
getch();
outportb(0x378,0); //Desativa os pino do Registro de Dados da porta paralela.

FreeLibrary(hLib); //Libera memória alocada pela DLL.
return(0);
}
[/spoiler]


Editado por Plateu

Compartilhar este post


Link para o post
Compartilhar em outros sites
Cara,tu define o endereço da LPT 1

#define LPT1 0x378

as funcoes para tu ler e enviar para a porta paralela são da stdio.h

outportb(LPT1,x);

inportb(LPT1,x);

Após o Windows Millenium, não conseguimos mais utilizar dessas duas funções(out e inportb) que faziam parte do conjunto de funções da biblioteca <dos.h>.O interessante é trabalhar usando DLLs, como sugeriu o usuário acima.Sugiro a você que vá ao domínio www.rogercom.com/pparalela/ContadorObjetos.htm

e confira o conteúdo relacionado.Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, meu programa roda numa boa , os LEDs acendem na porta paralela e tudo mais,mas quando eu tento fazer uma função void utilizando o outportb, nao roda, nao entendo porque.

O erro é esse : 'outportb' undeclared (first use this function)

e a funçao que eu tentei construir é essa (ela esta depois do main() ):


void voltas(int N,int t)
{
for (int i= 0;i<N;i++)
{
Sleep(t);
outportb(0x378,5);
Sleep(t);
outportb(0x378,6);
Sleep(t);
outportb(0x378,10);
Sleep(t);
outportb(0x378,9);
}
}

A funçao e as variáveis estão todas ja declaradas. Se alguem sabe de alguma coisa que esta faltando, ou quiser dar uma dica eu agradeço.

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Galera, meu programa roda numa boa , os LEDs acendem na porta paralela e tudo mais,mas quando eu tento fazer uma função void utilizando o outportb, nao roda, nao entendo porque.

O erro é esse : 'outportb' undeclared (first use this function)

e a funçao que eu tentei construir é essa (ela esta depois do main() ):


void voltas(int N,int t)
{
for (int i= 0;i<N;i++)
{
Sleep(t);
outportb(0x378,5);
Sleep(t);
outportb(0x378,6);
Sleep(t);
outportb(0x378,10);
Sleep(t);
outportb(0x378,9);
}
}

A funçao e as variáveis estão todas ja declaradas. Se alguém sabe de alguma coisa que esta faltando, ou quiser dar uma dica eu agradeço.

Abraços.

Boa noite,Xuxa_Bauru,tudo bem?Para que isso funcione corretamente, você,primeiramente, terá que acabar com a restrição que o Windows tem para termos acesso direto a hardware(de uma conferida no link acima que postei do RogerCom).Posteriormente, terás que implementar funções do assembly para trabalhar com o endereço hex da porta paralela.Existe isso já implementado no site que citei logo acima.Dúvida é só falar.Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×