A maior rede de estudos do Brasil

Grátis
120 pág.
ApostilaANSI-C

Pré-visualização | Página 18 de 27

*/ 
/* void _stdcall Out32(short PortAddress, short data); */ 
 
/* prototype (function typedef) for DLL function Inp32: */ 
typedef short _stdcall (*inpfuncPtr)(short portaddr); 
typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum); 
 
HINSTANCE hLib; 
inpfuncPtr inp32; 
oupfuncPtr oup32; 
 
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS 
Departamento de Ensino do 2o grau - Coordenação de Eletrônica 
Disciplina: Laboratório de Introdução a Programação 
Professora: Rosângela Fátima da Silva 
 
 
79 
/*--------------------------------------------------------------------- 
Função: inportb 
Descrição: Lê um byte de uma porta. 
Entrada: end - endereço da porta em que será lido o byte 
Saída: unsigned char - dado lido 
---------------------------------------------------------------------*/ 
 
unsigned char inportb(short end) 
{ 
return((inp32)(end)); 
} 
 
/*--------------------------------------------------------------------- 
Função: outportb 
Descrição: Escreve um byte em uma porta. 
Entrada: end - endereço da porta em que será lido o byte 
 dado - dado que sera escrito 
Saída: - 
---------------------------------------------------------------------*/ 
void outportb(short end, unsigned char dado) 
{ 
(oup32)(end,dado); 
} 
 
/*--------------------------------------------------------------------- 
Função: init 
Descrição: Verifica a existência da DDL para 
 suporte as operações de I/O. 
 Pega endereço das funções de I/O. 
Entrada: 
Saída: char - 0 inicialização OK 
 - 1 falha na inicialização 
---------------------------------------------------------------------*/ 
char init() 
{ 
/* Load the library */ 
hLib = LoadLibrary("inpout32.dll"); 
 
if (hLib == NULL) 
 { 
 printf("LoadLibrary Failed.\n"); 
 return -1; 
 } 
 
/* get the address of the function */ 
inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32"); 
 
if (inp32 == NULL) 
 { 
 printf("GetProcAddress for Inp32 Failed.\n"); 
 return -1; 
 } 
 
oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32"); 
 
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS 
Departamento de Ensino do 2o grau - Coordenação de Eletrônica 
Disciplina: Laboratório de Introdução a Programação 
Professora: Rosângela Fátima da Silva 
 
 
80 
if (oup32 == NULL) 
 { 
 printf("GetProcAddress for Oup32 Failed.\n"); 
 return -1; 
 } 
return(0); 
} 
 
/***************************************************************************** 
Programa 30 
Este programa verifica a presença da livraria que suporta as 
operações de I/O. Caso ela exista, ele aciona um led ligado 
ao bit 0 do registro de dados da porta paralela. 
 
******************************************************************************/ 
int main(void) 
{ 
if(init()==-1) 
 return(-1); 
 
short dado; 
short end; 
 
/* estabelece o registro de dados como saída (bit 5 do registro 
 de controle igual a zero */ 
end=0x37A; 
dado= inportb(end); 
dado&=0xDF; 
outportb(end,dado); 
dado=inportb(end); 
 
// coloca todos os bits em nível baixo 
end=0x378; 
dado=0x00; 
outportb(end,dado); 
printf("\nLed desligado"); 
 
// Liga LED 
dado=0x01; 
outportb(end,dado); 
printf("\nLed ligado"); 
// Desliga LED 
dado=0x00; 
outportb(end,dado); 
printf("\nLed desligado"); 
 
FreeLibrary(hLib); 
printf("\n\n"); 
system("pause"); 
return 0; 
} 
 
 
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS 
Departamento de Ensino do 2o grau - Coordenação de Eletrônica 
Disciplina: Laboratório de Introdução a Programação 
Professora: Rosângela Fátima da Silva 
 
 
81 
9.2 Analise o programa apresentado a seguir, monte o hardware necessário ao 
seu funcionamento e execute o programa. 
 
/******************************************************/ 
/*** ***/ 
/*** TEST.c -- test interface to inpout32.dll ***/ 
/*** ( http://www.logix4u.net/inpout32.htm ) ***/ 
/*** ***/ 
/*** Copyright (C) 2003, Douglas Beattie Jr. ***/ 
/*** ***/ 
/*** <beattidp@ieee.org> ***/ 
/*** http://www.hytherion.com/beattidp/ ***/ 
/*** ***/ 
/*****************************************************/ 
 
/*******************************************************************/ 
/* */ 
/* Builds with Borland's Command-line C Compiler */ 
/* (free for public download from Borland.com, at */ 
/* http://www.borland.com/bcppbuilder/freecompiler ) */ 
/* */ 
/* Compile with: */ 
/* */ 
/* BCC32 -IC:\BORLAND\BCC55\INCLUDE TEST.C */ 
/* */ 
/* */ 
/* Be sure to change the Port addresses */ 
/* accordingly if your LPT port is addressed */ 
/* elsewhere. */ 
/* */ 
/*****************************************************************/ 
 
#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 
#include <time.h> 
#include <windows.h> 
 
 
/* Definitions in the build of inpout32.dll are: */ 
/* short _stdcall Inp32(short PortAddress); */ 
/* void _stdcall Out32(short PortAddress, short data); */ 
 
 
/* prototype (function typedef) for DLL function Inp32: */ 
 
typedef short _stdcall (*inpfuncPtr)(short portaddr); 
typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum); 
 
 
HINSTANCE hLib; 
inpfuncPtr inp32; 
oupfuncPtr oup32; 
 
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS 
Departamento de Ensino do 2o grau - Coordenação de Eletrônica 
Disciplina: Laboratório de Introdução a Programação 
Professora: Rosângela Fátima da Silva 
 
 
82 
/*--------------------------------------------------------------------- 
Função: inportb 
Descrição: Lê um byte de uma porta. 
Entrada: end - endereço da porta em que será lido o byte 
Saída: unsigned char - dado lido 
---------------------------------------------------------------------*/ 
unsigned char inportb(short end) 
{ 
return((inp32)(end)); 
} 
 
/*--------------------------------------------------------------------- 
Função: outportb 
Descrição: Escreve um byte em uma porta. 
Entrada: end - endereço da porta em que será lido o byte 
 dado - dado que sera escrito 
Saída: - 
---------------------------------------------------------------------*/ 
void outportb(short end, unsigned char dado) 
{ 
(oup32)(end,dado); 
} 
 
/*--------------------------------------------------------------------- 
Função: init 
Descrição: Verifica a existência da DDL para suporte 
 as operações de I/O. 
 Pega endereço das funções de I/O. 
Entrada: 
Saída: char - 0 inicialização OK 
 - 1 falha na inicialização 
---------------------------------------------------------------------*/ 
char init() 
{ 
/* Load the library */ 
hLib = LoadLibrary("inpout32.dll"); 
 
if (hLib == NULL) 
 { 
 printf("LoadLibrary Failed.\n"); 
 return -1; 
 } 
 
/* get the address of the function */ 
inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32"); 
 
if (inp32 == NULL) 
 { 
 printf("GetProcAddress