A maior rede de estudos do Brasil

Grátis
120 pág.
ApostilaANSI-C

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

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 
 
 
83 
if (oup32 == NULL) 
 { 
 printf("GetProcAddress for Oup32 Failed.\n"); 
 return -1; 
 } 
return(0); 
} 
 
/*--------------------------------------------------------------------- 
Função: delay 
Descrição: Calcula o tempo de timeout e atualiza 
 resultado na tela 
Entrada: - 
Saída: int - tempo já transcorrido do processo 
 de espera moeda 
---------------------------------------------------------------------*/ 
void delay(time_t delay) 
{ 
time_t outro,tempo = time(NULL); 
 outro=time(NULL); 
while((outro-tempo)<delay) 
 outro=time(NULL); 
} 
 
/***************************************************************************** 
Programa 31 
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 que pisca 11 
vezes. 
 
******************************************************************************/ 
int main(void) 
{ 
if(init()==-1) 
 return(-1); 
 
short dado,x; 
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=0x0; 
outportb(end,dado); 
printf("\nTa piscando..."); 
 
 
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 
 
 
84 
 
 
 
for(x=0; x<=10; x++) 
 { 
 // Liga LED 
 dado=0x01; 
 outportb(end,dado); 
 delay(1); 
 // Desliga LED 
 dado=0x0; 
 outportb(end,dado); 
 delay(1); 
 } 
printf("\nFim da festa. AH!!!\n"); 
system("pause"); 
 
FreeLibrary(hLib); 
return 0; 
} 
 
9.3 Identifique a subrotina de tempo no Programa 31 e faça as alterações 
necessárias no Programa 30 para que você não tenha que executá-lo passo a 
passo. 
 
9.4 Reescreva o Programa 31 de tal maneira que ele acione dois leds, ligados ao 
bit 0 e bit 1 da porta paralela. Os leds devem piscar alternadamente, ou seja, 
enquanto um estiver aceso o outro está apagado e vice-versa. 
 
9.5 Faça um pisca-pica para uma árvore de natal com 4 leds, ou seja, acenda 
seqüencialmente todos os leds duas vezes. 
 
9.6 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/ ***/ 
/*** ***/ 
/*****************************************************/ 
 
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 
 
 
85 
 
/*******************************************************************/ 
/* */ 
/* 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. */ 
/* */ 
/*****************************************************************/ 
 
/* 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; 
 
/*--------------------------------------------------------------------- 
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)); 
} 
 
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 
 
 
86 
 
/*--------------------------------------------------------------------- 
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"); 
 
if (oup32 == NULL) 
 { 
 printf("GetProcAddress for Oup32 Failed.\n"); 
 return -1; 
 } 
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