Escola de Engenharia Elétrica, Mecânica e de Computação Universidade Federal de Goiás Laboratório de Microprocessadores e Microcontroladores Experimento 2: Teclado e Rotação de LEDs Alunos: Matrícula: Prof. Dr. José Wilson Lima Nerys Goiânia, 1º semestre de 2017
Laboratório de Microprocessadores e Microcontroladores 1-2 SUMÁRIO 1 Teclado e Rotação de LEDs... 1-3 1.1 Introdução Geral... 1-3 1.2 Teclado... 1-3 1.3 Conjunto de LEDs... 1-4 2 Tarefas do Experimento 2... 2-5 2.1 Tarefa 1 Rotação de LEDs... 2-5 2.2 Tarefa 2 Rotação de LEDs... 2-6 2.3 Tarefa 3 Mapeamento do Teclado... 2-6 2.4 Tarefa 4 Efeito sobre os LEDs usando o Teclado... 2-9
Laboratório de Microprocessadores e Microcontroladores 1-3 1 Teclado e Rotação de LEDs 1.1 Introdução Geral O presente experimento faz uso de um kit didático, Fig. 1, que contém um teclado de 16 teclas conectado à porta P2, um conjunto de 8 LEDs conectado à porta P1, um conector com acesso a todas as Portas (P0, P1, P2 e P3) e um módulo de comunicação serial, além de chaves do tipo push-button para reset e para as interrupções 0 e 1. Fig. 1 - Esquemático com os componentes do Kit didático O microcontrolador deverá ser gravado através de uma gravadora separada do Kit. As chaves INT0 e INT1 conectam, respectivamente, os pinos P3.2 e P3.3 ao Terra. 1.2 Teclado As conexões do teclado são mostradas na Fig. 2. As teclas são conectadas na forma de uma matriz 4 x 4. As linhas 1 a 4 são conectadas, respectivamente aos pinos P2.7, P2.6, P2.5 e P2.4. As colunas 1 a 4 são conectadas, respectivamente aos pinos P2.3, P2.2, P2.1 e P2.0. Fig. 2 - Teclado do kit didático
Laboratório de Microprocessadores e Microcontroladores 1-4 A leitura da tecla digitada é feita por varredura do teclado. Inicialmente todos os pinos da porta P2 estão em nível lógico alto. Assim, por exemplo, coloca-se a Linha L1 em nível lógico baixo (L1=0), através da instrução CLR L1 e verifica-se (varredura) o estado das colunas C1 a C4. Se a coluna C1 estiver em nível lógico baixo, significa que a tecla "1" foi pressionada. Se, ao invés disso, a coluna C3 estiver em nível lógico baixo, a tecla pressionada foi "3". Dessa forma, a varredura completa do teclado é feita colocando-se cada linha em nível lógico baixo e verificando o estado das colunas. 1.3 Conjunto de LEDs A capacidade de corrente do microcontrolador 8051 de 40 pinos não é suficiente para acionar diretamente um LED, cuja corrente prevista está em torno de 10 ma. Assim, é utilizado o drive ULN2803, mostrado na Fig. 3. Fig. 3 - drive ULN2803 para o motor de passo Os 8 LEDs são, portanto, conectados à porta P1 através do drive ULN2803.
Laboratório de Microprocessadores e Microcontroladores 2-5 2 Tarefas do Experimento 2 Cada um dos experimentos será realizado em duas etapas: no simulador do Kit Didático e no Kit didático real. A compilação dos programas pode ser feita no simulador MCU 8051. 2.1 Tarefa 1 Rotação de LEDs Passo 1: Digite e compile no simulador MCU 8051 o programa da Tabela 1. Não é necessário digitar os comentários. Tabela 1: Rotação de LEDs para a esquerda na porta P1 Rótulo Mnemônico Comentário ORG 00H ; A instrução a seguir está no endereço 00H LJMP INICIO ORG 30H ; A instrução a seguir está no endereço 30H INICIO: MOV SP,#2FH ; O apontador de pilha assume o valor 2FH MOV A,#01H ; O acumulador A recebe o valor 01H V1: JB P3.2,V1 ; Enquanto P3.2=1, espera em um loop infinito MOV P1,A ; O conteúdo de A é enviado para os LEDs LCALL ATRASO ; Chama subrotina de atraso de tempo RL A ; Rotaciona para a esquerda o conteúdo de A SJMP V1 ; Retorna para a linha V1 ATRASO: MOV R0,#10 ; R0 recebe o valor 10 decimal V3: MOV R1,#100 ; R1 recebe o valor 100 decimal V2: MOV R2,#200 ; R2 recebe o valor 200 decimal DJNZ R2,$ ; O registrador R2 é decrementado até zerar DJNZ R1,V2 ; Enquanto R1 0, retorna para V2 DJNZ R0,V3 ; Enquanto R0 0, retorna para V3 RET ; Retorna da subrotina de atraso de tempo END Passo 2: Use o simulador do Kit Didático para simular o programa da Tabela 1. VERIFIQUE e COMENTE o que ocorre quando a chave conectada ao pino P3.2, é mantida pressionada e quando ela é liberada. COMENTÁRIO: Passo 3: Use o gravador MaxLoader para gravar o programa da Tabela 1 no microcontrolador do kit didático. Repita o procedimento de verificação de funcionamento usado no simulador do kit didático.
Laboratório de Microprocessadores e Microcontroladores 2-6 2.2 Tarefa 2 Rotação de LEDs Passo 1: A Tabela 2 mostra o programa da Tabela 1 com uma alteração na rotina que mostra o conteúdo de A nos LEDs da Porta P1. Faça a alteração necessária, compile o programa e utilize o kit didático para verificar o funcionamento do mesmo. Tabela 2: Rotação de LEDs para a esquerda na porta P1 Rótulo Mnemônico Comentário ORG 00H ; A instrução a seguir está no endereço 00H LJMP INICIO ORG 30H ; A instrução a seguir está no endereço 30H INICIO: MOV SP,#2FH ; O apontador de pilha assume o valor 2FH MOV A,#01H ; O acumulador A recebe o valor 01H V1: JB P3.2,V1 ; Enquanto P3.2=1, espera em um loop infinito V1B: MOV P1,A ; O conteúdo de A é enviado para os LEDs LCALL ATRASO ; Chama subrotina de atraso de tempo RL A ; Rotaciona para a esquerda o conteúdo de A CJNE A,#01H,V1B ; Continua a rotação até A = 01H SJMP V1 ; Retorna para a linha V1 ATRASO: MOV R0,#10 ; R0 recebe o valor 10 decimal V3: MOV R1,#100 ; R1 recebe o valor 100 decimal V2: MOV R2,#200 ; R2 recebe o valor 200 decimal DJNZ R2,$ ; O registrador R2 é decrementado até zerar DJNZ R1,V2 ; Enquanto R1 0, retorna para V2 DJNZ R0,V3 ; Enquanto R0 0, retorna para V3 RET ; Retorna da subrotina de atraso de tempo END Passo 2: Qual a diferença no funcionamento do programa da Tabela 2, comparado com o funcionamento do programa da Tabela 1? 2.3 Tarefa 3 Mapeamento do Teclado Passo 1: Digite e compile no simulador MCU 8051 o programa da Tabela 3. Não é necessário digitar os comentários. Tabela 3: Mapeamento do Teclado, conectado à porta P2 Rótulo Mnemônico Comentário L1 EQU P2.7 ; Linha L1 equivale ao pino P2.7 L2 EQU P2.6 ; Linha L2 equivale ao pino P2.6 L3 EQU P2.5 ; Linha L3 equivale ao pino P2.5 L4 EQU P2.4 ; Linha L4 equivale ao pino P2.4 C1 EQU P2.3 ; Coluna C1 equivale ao pino P2.3 C2 EQU P2.2 ; Coluna C2 equivale ao pino P2.2 C3 EQU P2.1 ; Coluna C3 equivale ao pino P2.1 C4 EQU P2.0 ; Coluna C4 equivale ao pino P2.0
Laboratório de Microprocessadores e Microcontroladores 2-7 ORG 00H LJMP INICIO ; A instrução a seguir está no endereço 00H ORG 30H ; A instrução a seguir está no endereço 30H INICIO: MOV SP,#2FH ; O apontador de pilha assume o valor 2FH LINHA_L1: CLR L1 ; Faz L1 = 0 (Limpa Linha L1 Habilita Linha L1) SETB L2 ; Faz L2 = 1 SETB L3 ; Faz L3 = 1 SETB L4 ; Faz L4 = 1 C11: JB C1, C21 ; Verifica se C1 = 1. Se C1 = 1, desvia para C21 MOV A,#01H ; Se C1 = 0, então faz A = 01H LJMP MOSTRA ; Desvia para "MOSTRA" C21: JB C2, C31 ; Verifica se C2 = 1. Se C2 = 1, desvia para C31 MOV A,#02H ; Se C2 = 0, então faz A = 02H C31: JB C3, C41 ; Verifica se C3 = 1. Se C3 = 1, desvia para C41 MOV A,#03H ; Se C3 = 0, então faz A = 03H C41: JB C4, LINHA_L2 ; Verifica se C4 = 1. Se C4 = 1, desvia para LINHA_L2 MOV A,#04H ; Se C4 = 0, então faz A = 04H LINHA_L2: SETB L1 ; Faz L1 = 1 CLR L2 ; Faz L2 = 0 (Limpa Linha L2 Habilita Linha L2) SETB L3 ; Faz L3 = 1 SETB L4 ; Faz L4 = 1 Parte 1 Parte 2 Parte 2 Parte 2 Parte 2 Parte 1 C12: JB C1, C22 ; Verifica se C1 = 1. Se C1 = 1, desvia para C22 MOV A,#05H ; Se C1 = 0, então faz A = 01H C22: JB C2, C32 ; Verifica se C2 = 1. Se C2 = 1, desvia para C32 MOV A,#06H ; Se C2 = 0, então faz A = 02H C32: JB C3, C42 ; Verifica se C3 = 1. Se C3 = 1, desvia para C42 MOV A,#07H ; Se C3 = 0, então faz A = 03H C42: JB C4, LINHA_L3 ; Verifica se C4 = 1. Se C4 = 1, desvia para LINHA_L3 MOV A,#08H ; Se C4 = 0, então faz A = 04H LINHA_L3: SETB L1 ; Faz L1 = 1 SETB L2 ; Faz L2 = 1 CLR L3 ; Faz L3 = 0 (Limpa Linha L3 Habilita Linha L3) SETB L4 ; Faz L4 = 1 Parte 1 C13: JB C1, C23 ; Verifica se C1 = 1. Se C1 = 1, desvia para C23 MOV A,#09H ; Se C1 = 0, então faz A = 09H C23: JB C2, C33 ; Verifica se C2 = 1. Se C2 = 1, desvia para C33 MOV A,#00H ; Se C2 = 0, então faz A = 00H
Laboratório de Microprocessadores e Microcontroladores 2-8 C33: JB C3, C43 ; Verifica se C3 = 1. Se C3 = 1, desvia para C43 MOV A,#0AH ; Se C3 = 0, então faz A = 0AH C43: JB C4, LINHA_L4 ; Verifica se C4 = 1. Se C4 = 1, desvia para LINHA_L4 MOV A,#0BH ; Se C4 = 0, então faz A = 0BH LINHA_L4: SETB L1 ; Faz L1 = 1 SETB L2 ; Faz L2 = 1 SETB L3 ; Faz L3 = 1 CLR L4 ; Faz L4 = 0 (Limpa Linha L4 Habilita Linha L4) Parte 1 C14: JB C1, C24 ; Verifica se C1 = 1. Se C1 = 1, desvia para C24 MOV A,#0CH ; Se C1 = 0, então faz A = 0CH C24: JB C2, C34 ; Verifica se C2 = 1. Se C2 = 1, desvia para C34 MOV A,#0DH ; Se C2 = 0, então faz A = 0DH C34: JB C3, C44 ; Verifica se C3 = 1. Se C3 = 1, desvia para C44 MOV A,#0EH ; Se C3 = 0, então faz A = 0EH C44: JB C4, V1 ; Verifica se C4 = 1. Se C4 = 1, desvia para V1 MOV A,#0FH ; Se C4 = 0, então faz A = 0FH MOSTRA: MOV P1,A ; MOSTRA NOS LEDs A TECLA PRESSIONADA V1: LJMP LINHA_L1 ; VOLTA PARA A LINHA_L1 END Passo 2: Use o simulador do Kit Didático para simular o programa da Tabela 3. Pressione uma a uma as teclas do Teclado e verifique o resultado nos LEDs. Passo 3: Comente a finalidade das Partes 1 e 2, destacadas na Tabela 3. Finalidade da Parte 1: Finalidade da Parte 2: Passo 4: Use o gravador MaxLoader para gravar no microcontrolador do kit didático o programa da Tabela 3. Verifique o funcionamento do programa pressionando uma a uma todas as teclas do teclado. Comente.
Laboratório de Microprocessadores e Microcontroladores 2-9 2.4 Tarefa 4 Efeito sobre os LEDs usando o Teclado Passo 1: Digite e compile no simulador MCU 8051 o programa da Tabela 4. Tabela 4: Efeitos sobre os LEDs na porta P1, usando o Teclado, conectado à porta P2 Rótulo Mnemônico Comentário L1 EQU P2.7 ; Linha L1 equivale ao pino P2.7 C1 EQU P2.3 ; Coluna C1 equivale ao pino P2.3 C2 EQU P2.2 ; Coluna C2 equivale ao pino P2.2 C3 EQU P2.1 ; Coluna C3 equivale ao pino P2.1 ORG 00H LJMP INICIO ; A instrução a seguir está no endereço 00H ORG 30H ; A instrução a seguir está no endereço 30H INICIO: MOV SP,#2FH ; O apontador de pilha assume o valor 2FH MOV R6,#0FH ; Valor inicial de R6 V00: MOV A,#01H ; Acumulador recebe o valor 01H V0: LCALL TECLADO ; Chama subrotina que faz leitura do teclado CJNE R7,#01H,V1 ; Verifica se R7 = 01H. Se R7 01H, desvia para V1 SJMP DIREITA ; Se R7 = 01H, desvia para DIREITA V1: CJNE R7,#02H,V4 ; Verifica se R7 = 02H. Se R7 02H, desvia para V4 SJMP ESQUERDA ; Se R7 = 02H, continua na próxima linha. Rotação à esquerda V4: CJNE R7,#03H,V0 ; Verifica se R7 = 03H. Se R7 03H, desvia para V0 ; Se R7 = 03H, continua na próxima linha com a alternância de Leds ALTERNA: MOV P1,R6 ; Envia conteúdo do registrador R6 para a porta P1 LCALL ATRASO ; Chama subrotina de atraso de tempo MOV A,R6 ; Copia conteúdo de R6 no acumulador CPL A ; Complementa o conteúdo do acumulador MOV R6,A ; Copia em R6 o conteúdo complementado de A LJMP V00 ESQUERDA: MOV P1,A ; Envia para os LEDs o conteúdo de A RL A ; Rotaciona conteúdo de A para a esquerda LCALL ATRASO ; Chama subrotina de atraso de tempo LJMP V0 ; Volta para ler novamente o Teclado DIREITA: MOV P1,A ; Envia para os LEDs o conteúdo de A RR A ; Rotaciona conteúdo de A para a direita LCALL ATRASO ; Chama subrotina de atraso de tempo LJMP V0 ; Volta para ler novamente o Teclado TECLADO: CLR L1 ; Faz L1 = 0 (Limpa Linha L1) JB C1, C12 ; Verifica se C1 = 1. Se C1 = 1, desvia para C12 MOV R7,#01H ; Se C1 = 0, então faz R7 = 01H C12: JB C2, C13 ; Verifica se C2 = 1. Se C2 = 1, desvia para C13 MOV R7,#02H ; Se C2 = 0, então faz R7 = 02H C13: JB C3,SAI ; Verifica se C3 = 1. Se C2 = 1, desvia para SAI MOV R7,#03H ; Se C3 = 0, então faz R7 = 03H SAI: SETB L1 ; Retorna Linha L1 para nível alto RET ; Retorna da subrotina Teclado ATRASO: MOV R0,#10 ; R0 recebe o valor 10 decimal V3: MOV R1,#100 ; R1 recebe o valor 100 decimal V2: MOV R2,#200 ; R2 recebe o valor 200 decimal DJNZ R2,$ ; O registrador R2 é decrementado até zerar
Laboratório de Microprocessadores e Microcontroladores 2-10 DJNZ R1,V2 DJNZ R0,V3 RET ; Enquanto R1 0, retorna para V2 ; Enquanto R0 0, retorna para V3 ; Retorna da subrotina de atraso de tempo END Passo 2: Use o simulador do Kit Didático para simular o programa da Tabela 4. O que ocorre quando a tecla 1 é pressionada? O que ocorre quando a tecla 2 é pressionada? O que ocorre quando a tecla 3 é pressionada? Por que o conteúdo de R6 foi transferido para o acumulador A (na rotina chamada de ALTERNA), antes de ser complementado? Passo 3: Grave o programa da Tabela 4 no microcontrolador do kit didático e verifique o funcionamento do programa. Revisão: Explique a função de cada um dos comandos dados na Tabela 5. Tabela 5: Função de alguns comandos Comandos Função SETB P2.7 CLR P2.6 JB P2.3,V1 RL A RR A CJNE R0,#01H,V2 MOV P1,A DJNZ R1,V3 DJNZ R2,$ CPL A