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

Monky

[AJUDA] Porta Paralela + Leds

4 mensagens neste tópico

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???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Entendi, muito obrigado AMigo... Fiquei esclarecido....

Muito obrigado pela ajuda...

Cumprimentos

Monky

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