Codigo C++ LPT

Propaganda
Código C++ para comunicação com a porta paralela
//-------------------------------------------------------------------------------------------------------//-------------------------------------------------------------------------------------------------------//
INICIO - Enviar_LPT(BYTE Valor,BYTE Endereco)
//-------------------------------------------------------------------------------------------------------//-------------------------------------------------------------------------------------------------------// Escrever dados no FPGA através porta LPT
//-------------------------------------------------------------------------------------------------------// Entrada: Endereco - Endereço 8 bits que identifica o registo de leitura
//
Valor - Byte a enviar para um registo de escrita
//-------------------------------------------------------------------------------------------------------// Saída : do tipo boleano: FALSE - indicação de insucesso
//
TRUE - indicação de sucesso.
//-------------------------------------------------------------------------------------------------------// Funções necessárias:
//
- void Enviar_Endereco(BYTE Endereco)
//-------------------------------------------------------------------------------------------------------//-------------------------------------------------------------------------------------------------------BOOL Enviar_LPT(BYTE Valor,BYTE Endereco)
{
// Altera a porta LPT para o modo ESCRITA
BYTE AUX=INV_C;
_outp(CONTROLO, AUX );
// Verificar se já se encontra no modo ESCRITA
int cont=0;
do{
cont++;
AUX=_inp(ESTADO);
AUX=AUX >> 3;
AUX=AUX & 1;
if (cont>1000)
{
_outp(CONTROLO, ESCREVER^INV_C);
AfxMessageBox("A porta paralela não responde!");
return FALSE;
} // if ( cont>1000 )
}while(AUX!=0); // do{
// Escreve o valor do endereço (8 bits) no descodificador de endereços
Enviar_Endereco(Endereco);
// Escreve no BUS I/O (8 bits) da porta LPT
_outp(DADOS, Valor );
1/5
Código C++ para comunicação com a porta paralela
// Dá um CLOCK aos registos de escrita
AUX=CLK^INV_C;
_outp(CONTROLO, AUX ); // Clock=1;
AUX=INV_C;
_outp(CONTROLO, AUX ); // Clock=0
// Escreve o valor ZERO no descodificador de endereços
Enviar_Endereco(0);
// Põe todas as linhas de controlo a ZERO
AUX=INV_C;
_outp(CONTROLO, AUX );
// Escreve no BUS I/O o valor ZERO
_outp(DADOS, 0 );
return TRUE;
}
//-------------------------------------------------------------------------------------------------------//
FIM - BOOL Enviar_LPT(BYTE Valor,BYTE CMD)
//------------------------------------------------------------------------------------------------------//------------------------------------------------------------------------------------------------------//*********************************************************************
//*********************************************************************
//*********************************************************************
//------------------------------------------------------------------------------------------------------//------------------------------------------------------------------------------------------------------// Ler dados da FPGA através porta LPT
//------------------------------------------------------------------------------------------------------// Entrada: Endereco - Endereço 8 bits que identifica o registo de leitura
//------------------------------------------------------------------------------------------------------// Saída : Dado de 8 bits lido
//-------------------------------------------------------------------------------------------------------// Funções necessárias:
//
- void Enviar_Endereco(BYTE Endereco)
//-------------------------------------------------------------------------------------------------------//-------------------------------------------------------------------------------------------------------BYTE Ler_LPT(BYTE Endereco)
{
// Altera a porta LPT para o modo ESCRITA
BYTE AUX=INV_C;
_outp(CONTROLO, AUX );
// Verificar se já se encontra no modo ESCRITA
2/5
Código C++ para comunicação com a porta paralela
int cont=0;
do{
cont++;
AUX=_inp(ESTADO);
AUX=AUX >> 3;
AUX=AUX & 1;
if (cont>1000)
{
_outp(CONTROLO, ESCREVER^INV_C);
AfxMessageBox("A porta paralela não responde!");
return FALSE;
} // if ( cont>1000 )
}while(AUX!=0); // do{
// Escreve o valor do endereço (8 bits) no descodificador de endereços
Enviar_Endereco(Endereco);
// Altera a porta LPT para o modo LEITURA
AUX=LER^INV_C;
_outp(CONTROLO, AUX );
// Verificar se já se encontra no modo LEITURA
cont=0;
do{
cont++;
AUX=_inp(ESTADO);
AUX=AUX >> 3;
AUX=AUX & 1;
if (cont>1000)
{
_outp(CONTROLO, INV_C);
AfxMessageBox("A porta paralela não responde!");
return FALSE;
} // if ( cont>1000 )
}while( AUX!=1
);
// Lê o BUS I/O (8 bits) da porta LPT
BYTE Res;
Res=_inp(DADOS);
// Altera a porta LPT para o modo ESCRITA
AUX=INV_C;
_outp(CONTROLO, AUX );
3/5
Código C++ para comunicação com a porta paralela
// Verificar se já se encontra no modo ESCRITA
cont=0;
do{
cont++;
AUX=_inp(ESTADO);
AUX=AUX >> 3;
AUX=AUX & 1;
if (cont>1000)
{
_outp(CONTROLO, ESCREVER^INV_C);
AfxMessageBox("A porta paralela não responde!");
return FALSE;
} // if ( cont>1000 )
}while(AUX!=0); // do{
// Escreve o valor ZERO no descodificador de endereços
Enviar_Endereco(0);
// Põe todas as linhas de controlo a ZERO
AUX=INV_C;
_outp(CONTROLO, AUX );
// Escreve no BUS I/O o valor ZERO
_outp(DADOS, 0 );
// Retorna o valor lido
return Res;
}
//------------------------------------------------------------------------------------------------------//
FIM - BYTE Ler_LPT(BYTE Endereco)
//------------------------------------------------------------------------------------------------------//------------------------------------------------------------------------------------------------------//*********************************************************************
//*********************************************************************
//*********************************************************************
//------------------------------------------------------------------------------------------------------//------------------------------------------------------------------------------------------------------// Escreve o valor do endereço (8 bits) no descodificador de endereços
//------------------------------------------------------------------------------------------------------// Entrada: Endereco - Endreço 8 bits que identifica o registo de leitura
//------------------------------------------------------------------------------------------------------// Saída : void
//-------------------------------------------------------------------------------------------------------
4/5
Código C++ para comunicação com a porta paralela
// Funções necessárias:
//------------------------------------------------------------------------------------------------------//------------------------------------------------------------------------------------------------------void Enviar_Endereco(BYTE Endereco)
{
// Escreve no BUS I/O o endereço
_outp(DADOS, Endereco );
// Activa o ENABLE do registo de endereços
BYTE AUX=ADDR^INV_C;
_outp(CONTROLO, AUX );
// Dá um CLOCK ao registo de endereços
AUX = Clock | ADDR; // 0000 0110
AUX=AUX^INV_C;
_outp(CONTROLO, AUX ); // Clock =1;
AUX=ADDR^INV_C;
_outp(CONTROLO, AUX ); // Clock=0
// Desactiva o ENABLE do registo de endereços
AUX=INV_C;
_outp(CONTROLO,AUX );
}
//------------------------------------------------------------------------------------------------------//
FIM – void Enviar_Endereco(BYTE Endereco)
//------------------------------------------------------------------------------------------------------//-------------------------------------------------------------------------------------------------------
Constantes usadas:
#define DADOS 0x378
#define CONTROLO DADOS+2
#define ESTADO DADOS+1
#define INV_C 11
#define INV_S 128
#define ESCREVER
#define LER
#define CLK 2
#define ADDR 4
#define Clock 8
#define END_A
#define END_B
#define END_C
//00001011
//10000000
0x00 //00000000
0x21 //00100001
//00000010
//00000100
//00001000
1
2
3
5/5
Download