Jump to content

Porta Paralela + Leds


Monky
 Share

Recommended Posts

Pessoal Tou aqui com um problrema.... Srá que me podem dar uma ajudninha...

Nao estou a perceber porque é que este codigo nao compila:

 

#include <stdio.h>
#include <conio.h>
#include <dos.h>
#define LPT1 0x378
int main(void)
{
    unsigned char Valor=128; //Em binário: 10000000
    while( Valor > 0 )
   {   
              outportb(LPT1, Valor); // Envia para a Porta LPT1
              printf("\nPressione uma tecla para ascender o próximo LED...");
              getch( );
              Valor = Valor >> 1; //A cada passagem, o bit 1 é movido para a direita
    }
}

O Que é que esta aqui mal???

Isto ta me a dar um erro assim:

      C:\Documents and Settings\xxxx\Ambiente de trabalho\Sem Título1.cpp In function `int main()':

13  C:\Documents and Settings\xxxxx\Ambiente de trabalho\Sem Título1.cpp `outportb' undeclared (first use this function)

                                                                      (Each undeclared identifier is reported only once for each function it appears in.)

Alguem pode dar uma maozinha???

Melhor Jogo Online De Sempre....::SYSTEM EMPIRES::.Para quando a nova versao???

Link to comment
Share on other sites

Problema resolvido...

Em vez daquele codigo coloquei este:

#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);
} 

Agora tenho uma duvida.... Esse programa acende apenas o D0, como é que eu faço para acender os restantes 7 Leds???

Melhor Jogo Online De Sempre....::SYSTEM EMPIRES::.Para quando a nova versao???

Link to comment
Share on other sites

Nesta linha:

   outportb(0x378,1); //Ativa o pino D0 do Registro de Dados da porta paralela.

é só alterares o valor 1. Tens que pensar em valores binários, e fazer OR entre eles. Para acenderes o led 1, tens que passar o valor binário 00000001 (1 em decimal); para acenderes o led 2, tens que passar o valor binário 00000010 (2 em decimal); para acenderes os leds 1 e 2, tens que passar o resultado do OR bit a bit entre os valores binários 00000001 e 00000010, que é 00000011 (3 em decimal). Assim sendo,

	outportb(0x378,1); //Activa o led 1
outportb(0x378,2); //Activa o led 2
outportb(0x378,3); //Activa os leds 1 e 2

Desaparecido.

Link to comment
Share on other sites

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
 Share

×
×
  • 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.