120 pág.

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