terça-feira, 30 de janeiro de 2007

Circuito simples na porta paralela.


(Montado em um protoboard ;P usando 7 leds)

------------------------------------------------------------------------------------

#include <stdio.h>
#include <windows.h> //Necessário para: LoadLibrary(), GetProcAddress() e
HINSTANCE.
#define LPT1 0x378

//Declaração dos ponteiros para função.

typedef short _stdcall (*PtrInput)(short EndPorta);
typedef void _stdcall (*PtrOutput)(short EndPorta, short valor);

int main(void)
{
HINSTANCE hLib; //Instância para a DLL inpout32.dll.
PtrInput inportB; //Instância para a função Imp32().
PtrOutput 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 = (PtrInput) 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 = (PtrOutput) 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():

int i, k;
unsigned char Valor=255; //Em binário: 11111111
while( Valor > 0 )
{
for(i=0;i<100;i++) { printf("sleep
;P\n"); }

outportB(LPT1, Valor); // Envia para
a Porta LPT1

Valor = Valor >> 1; //A cada
passagem, o bit 1 é movido para a direita

if (Valor == 0) { Valor = 255; }
}

}


---------------------------------------------------------------------------------
Fonte: rogercom. adaptação: david

requisitos: 8 leds, 8R de 470 ohms, um cabo de impressora.

Muito interessante. Para q funcione eh importante resaltar q precisa ter a dll input32 pq são usadas 2 funções(inp32, out32) para ter acesso a lpt, já no caso do linux não precisa, pode usar função ioperm .

IOPERM

int ioperm(unsigned long from, unsigned long num, int turn_on)

obs: precisa de privilegios de root.



D0 -----led----resistor----- (grd)
D1 -----led----resistor----- (grd)
D2 -----led----resistor----- (grd)
D3 -----led----resistor----- (grd)
D4 -----led----resistor----- (grd)
D5 -----led----resistor----- (grd)
D6 -----led----resistor----- (grd)
D7 -----led----resistor----- (grd)

D0 .. D7 pinos 2 a 9 respectivamente.

Endereço para enviar byte para lpt:
Registro de Dados
lpt1: 378h
lpt2: 278h


,.,,
display de 7 segmentos, next step! ;P

Nenhum comentário: