UNIBRATEC – Ensino Superior e Técnico em Informática DHD – Desenvolvimento em Hardware 1 Aula 18 – Porta Paralela: Introdução Capítulo 1 – Conceitos Básicos Terça-feira, Terça-feira, 77 de de Novembro Novembro de de 2006 2006 UNIBRATEC – Ensino Superior e Técnico em Informática DHD – Desenvolvimento em Hardware Porta Paralela: Introdução 1. 2. 3. 4. Introdução Conector DB25 Endereços Auto-avaliação Prof. Frederico Brito Fernandes [email protected] 2 Aula 18 – Porta Paralela: Introdução Capítulo 1 – Conceitos Básicos Terça-feira, Terça-feira, 77 de de Novembro Novembro de de 2006 2006 DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (1) Introdução • Porta Paralela: – Interface de comunicação entre o computador e um periférico – Inicialmente criado para conectar uma impressora • Porém, surgiram scanners, câmeras que se conectavam via porta paralela • Pode-se controlar qualquer aparelho que se conheça o funcionamento – Conector DB25 Macho 3 Fêmea Aula 18 – Porta Paralela: Introdução Terça-feira, 7 de Novembro de 2006 DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (2) Conector DB25 Macho Finalidade de cada pino: http://www.ctv.es/pckits/tutorial.html 4 Aula 18 – Porta Paralela: Introdução Terça-feira, 7 de Novembro de 2006 DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (2) Conector DB25 Macho e Fêmea Fêmea 5 Aula 18 – Porta Paralela: Introdução Macho Terça-feira, 7 de Novembro de 2006 DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (3) Endereços • Endereço padrão da porta paralela: – Hexadecimal: 378h • Ou em decimal: 888 – Também conhecido por LPT1 • Algumas máquinas possuem duas portas paralelas PORTA Endereço LPT1 LPT2 378h 278h • O que aconteceria, se lêssemos do endereço 378h? int * ptr=0x378h; printf(“%d”, *ptr); 6 Aula 18 – Porta Paralela: Introdução Terça-feira, 7 de Novembro de 2006 DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (3) Endereços • O acesso à porta paralela não pode ser feito diretamente: – Windows 9.X • As linguagens de programação, oferecem bibliotecas de acesso à porta paralela • Ex: no Turbo C++, pode-se usar as funções inport() e outport() da biblioteca dos.h – Windows NT/2000/XP • O hardware só pode ser acessado via comandos do Sistema Operacional • Solução: usar as funções inp32() e oup32() da inpout32.dll (http://www.logix4u.net/) – Olhar aplicação exemplo, implementada no DevC++ em: » http://www.fredbf.com/disciplinas/unibratec/dhd/Aplicacao1.c • Questionamento: – Quantos bits serão lidos da DB25, usando essas funções? 7 Aula 18 – Porta Paralela: Introdução Terça-feira, 7 de Novembro de 2006 DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (3) Endereços • Endereços e pinagem para acesso da porta paralela: OBS: S7, a barra indica que o pino (no caso o 11) é lido com valor invertido TIPO PINOS ENDEREÇO Dados 2..9 378h Leitura/Escrita Status 10,11,12,13 e 15 379h Leitura Controle 1,14,16 e 17 37Ah Leitura/Escrita 378h LEGENDA Leitura/Escrita Leitura Terra 379h 8 37Ah Aula 18 – Porta Paralela: Introdução Terça-feira, 7 de Novembro de 2006 DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (3) Endereços: 378h • Endereços e pinagem para acesso da porta paralela: 8 – Ligaremos LEDs aos pinos de dados – Faremos uma função que verifica se o LED passado está aceso ou apagado – Ex: #define LPT1_D 0x378 #define LED1 0 #define LED2 1 ... #define LED8 7 9 Aula 18 – Porta Paralela: Introdução 7 6 5 4 3 2 1 LEDs 378h int taLigado(int porta, int led){ int entrada = inp32(porta); return ( (entrada >> led) % 2); } main(){ printf(“%d”, taLigado(LPT1_D, LED4) ); } Terça-feira, 7 de Novembro de 2006 DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (3) Endereços: 379 • Endereços e pinagem para acesso da porta paralela: – Ligaremos CHAVES aos pinos de controle – Podemos usar a mesma função anterior, exceto para a chave 5 379h – Ex: #define LPT1_S 0x379 #define CH1 0 #define CH2 1 #define CH3 0 #define CH4 1 #define CH5 3 10 Aula 18 – Porta Paralela: Introdução 5 4 3 2 1 CHAVEs int taPressionada(int porta, int chave){ int entrada = inp32(porta), saida; saida = (entrada >> led) % 2; if (chave==CH5) return !saida; else return saida; } main(){ printf(“%d”, taPressionada(LPT1_S, LED4) ); } Terça-feira, 7 de Novembro de 2006 DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (4) Auto-avaliação • Considere que você possui 5 chaves conectadas aos pinos de Status e 8 leds conectados aos pinos de Dados, de acordo com a figura abaixo. LEDs 378h 8 7 6 5 4 3 2 1 a) Faça um loop infinito de modo que ele fique imprimindo na tela qual tecla foi pressionada b) Altere o programa anterior, de modo que, quando pressionada a chave: – 4, o programa se encerra – 6, liga todos os leds – 5, desliga dos os leds 6 5 7 8 4 CHAVEs 379h 11 Aula 18 – Porta Paralela: Introdução c) Altere o programa da letra (a), de modo que, quando pressionada uma chave, deve-se acender o led correspondente. Ex: se a chave5 for pressionada, acende-se o led5 Terça-feira, 7 de Novembro de 2006