Goiânia, 14 de novembro de 2013. Prof. José Wilson Lima Nerys MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 - RESPOSTA ESPERADA Valor: 2,0 1. Escreva as instruções para as configurações pedidas. a) Habilita as interrupções externas zero e um e a interrupção do temporizador 0. As interrupções externas são por transição. A interrupção zero tem prioridade alta. Resposta Esperada: IE EA 1 X 0 X 0 ES 0 ET1 0 EX1 1 ET0 1 EX0 1 TCON TF1 0 TR1 0 TF0 0 TR0 0 IE1 0 IT1 1 IE0 0 IT0 1 IP X 0 X 0 X 0 PS 0 PT1 0 PX1 0 PT0 0 PX0 1 MOV IE,#87H MOV TCON,#05H MOV IP,#01 b) Configura o temporizador 1 para operar no modo 1 com início de contagem em 3CAFH. Habilita a interrupção do temporizador 1. Resposta Esperada: TMOD G1 0 C/T\ 0 M1.1 0 M0.1 1 G0 0 C/T\ 0 M1.0 0 M0.0 0 IE EA 1 X 0 X 0 ES 0 ET1 1 EX1 0 ET0 0 EX0 0 MOV TMOD,#10H MOV TH1,#3CH MOV TL1,#0AFH MOV IE,#88H Parte 4 Parte 1 Tabela 1: Programa para acionamento de motor de corrente contínua RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO CH1 EQU P3.5 OPERA2: CLR P1.2 CH2 EQU P3.2 SETB P1.3 SETB P1.6 ORG 00H MOV R1,#10 LJMP PROB2 V4: LCALL ATRASO DJNZ R1,V4 ORG 30H SJMP V1 PROB2: MOV SP,#2FH MOV TMOD,#01H OPERA1: SETB P1.2 MOV R0,#10 CLR P1.3 MOV R1,#20 Parte 3 2. A Figura 1 mostra um diagrama simplificado de acionamento de um motor de corrente contínua de 12 V e está associada ao programa mostrado na Tabela 1. A Tabela 2 mostra a lógica de funcionamento do motor CC e a Tabela 3 mostra o valor de recarga de um temporizador, no modo 1, para gerar diferentes quantidades de pulsos. O cristal oscilador é de 12 MHz. Valor: 4,0 Microprocessadores e Microcontroladores Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG) CLR P1.2 CLR P1.3 CLR P1.6 JB CH1,V2 SJMP OPERA1 V2: JB CH2,V1 V3: Parte 2 V1: Prof. José Wilson Lima Nerys ATRASO: CPL P1.6 LCALL ATRASO DJNZ R1,V3 SJMP V11 CLR TF0 MOV TH0,#63H MOV TL0,#0BFH SETB TR0 JNB TF0,$ DJNZ R0,ATRASO MOV R0,#10 CLR TR0 RET END Parte 5 Goiânia, 14 de novembro de 2013. Figura 1: Circuito simplificado de acionamento acionamento do motor de corrente contínua Tabela 2: Lógica de operação peração do motor IN1 IN2 Operação do motor 0 0 Motor parado 0 1 Rotação sentido direto 1 0 Rotação sentido reverso 1 1 Motor parado Tabela 3: Recarga do temporizador-modo temporizador 1 TH0 TL0 Início da Contagem 5.535 15H 9FH 15.535 3CH AFH 25.535 63H BFH 35.535 8AH CFH 45.535 B1H DFH 55.535 D8H EFH Questões (Valor de cada questão: 1,0): a) Como funciona a Parte 2? O que ocorre se as chaves CH1 e CH2 permanecerem livres e o que ocorre quando cada uma delas é pressionada? Resposta Esperada: No início ício da Parte 2, as instruções CLR P1.2,, CLR P1.3 e CLR P1.6 desligam o motor e o LED. A seguir o estado da chave CH1 é verificado. Se estiver em nível lógico alto (chave CH1 aberta), pula para verificar o estado da chave CH2. Se CH2 = 1 (chave CH2 aberta), aberta), volta para o início da Parte 2. Se CH1 = 0 (chave CH1 pressionada), o processamento desvia para o endereço OPERA1. Se CH2 = 0 (chave CH2 pressionada), o processamento vai para próxima linha, onde começa a rotina chamada de OPERA2. onamento da Parte 5. Qual o tempo de atraso gerado por essa subrotina? Qual b) Explique o funcionamento papel do registrador R0? Microprocessadores e Microcontroladores Escola de Engenharia Elétrica,, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG) o Goiânia, 14 de novembro de 2013. Prof. José Wilson Lima Nerys Resposta Esperada: A Parte 5 é uma subrotina de atraso de tempo baseada no temporizador 0, operando no modo 1. Cada contagem começa em 63BFH, que corresponde corresponde ao decimal 25.535. Isso significa que o temporizador conta 40.000 pulsos (65.535 - 25.535). Como o cristal oscilador é de 12 MHz, cada pulso do temporizador corresponde a 1 µs. Assim, o tempo de cada contagem resulta em 40 ms. Durante cada contagem em do temporizador, o processamento fica em um loop infinito (JNB TF0,$), aguardando o fim da contagem. Após cada contagem, o registrador R0 é descrementado e verificado se é zero (DJNZ R0,ATRASO); enquanto ele não for zero, o processamento volta para ATRASO, ATR para iniciar uma nova contagem do temporizador. Como R0 = 10, significa que são realizadas 10 contagem de 25.535 até 65. 535, ou seja, a subrotina ATRASO gera um tempo de atraso de 400 ms (10 x 40 ms). Quando R0 = 0, o processamento sai da subrotina. subrotina. Porém, antes de sair, o registrador R0 é redefinido com valor 10 e o temporizador é desligado. c)) Explique o funcionamento da Parte 3. O que ocorre com o motor CC e com o LED? Qual o sentido de rotação do motor? Por quanto tempo o motor funcionará? Resposta Esperada: A Parte 3 é executada quando a chave CH2 é pressionada. As instruções CLR P1.2 (IN2 = 0) e SETB P1.3 (IN1 = 1) faz o motor CC girar no sentido reverso. A instrução SETB P1.6 liga o LED. A seguir, o registrador R1 recebe o valor decimal decimal 10, usado para chamar a subrotina de atraso de tempo. Ou seja, a subrotina ATRASO é chamada 10 vezes, o que significa que o motor vai girar no sentido reverso por um tempo de 10 x 400 ms = 4 s. Passado esse tempo, o processamento volta para V1, onde o motor otor e o LED são desligados. d)) Explique o funcionamento da Parte 4. O que ocorre com o motor CC e com o LED? Qual o sentido de rotação do motor? Por quanto tempo o motor funcionará? Resposta Esperada: A Parte 4 é executada quando a chave CH1 é pressionada. pressionada. As instruções SETB P1.2 (IN2 = 1) e CLR P1.3 (IN1 = 0) faz o motor CC girar no sentido direto. A seguir, o registrador R1 recebe o valor decimal 20, usado para chamar a subrotina de atraso de tempo. Ou seja, a subrotina ATRASO é chamada 20 vezes, o que ue significa que o motor vai girar no sentido direto por um tempo de 20 x 400 ms = 8 s. No entanto, o funcionamento do LED é diferente do item anterior. A instrução CPL P1.6 faz o LED piscar a cada vez que o processamento volta da subrotina de atraso de tempo, ou seja, a cada 400 ms. Ao final das 20 chamadas de subrotina, o processamento volta para V1, onde o motor e o LED são desligados. 3. A Figura 2 mostra uma matriz de LEDs de 3 linhas e 8 colunas. As A linhas, de baixo para cima, estão conectadas, respectivamente ctivamente às portas P0, P1 e P2. Cada LED está conectado a um dos pinos dessas portas (0 a 7), conforme mostrado na Figura F 2.. A Figura 3 mostra essa mesma matriz em 3 instantes diferentes, onde pode-se se ver o deslocamento de uma onda triangular. Faça um programa pr em assembly do 8051 onde a interrupção externa zero, por transição, faz essa onda triangular se deslocar 8 passos para a direita e a interrupção externa 1, por nível, faz a onda se deslocar para a esquerda, passo a passo, enquanto houver pedido de interrupção. i Use uma subrotina de atraso de tempo baseada nos registradores R0 e R1. Valor: 4,0 Microprocessadores e Microcontroladores Escola de Engenharia Elétrica,, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG) Goiânia, 14 de novembro de 2013. Prof. José Wilson Lima Nerys Figura 2: Matriz 3x8 de LEDs Figura 3: Matriz 3x8 em diferentes instantes de acionamento Resposta Esperada: Para produzir o efeito de uma onda triangular se deslocando, observar que o valor enviado para as portas mantém um padrão,, que pode se deslocar usando a instrução RL A ou RR A. A No entanto, deve-se lembrar que essas instruções só são usadas com o acumulador, ou seja, cada valor deve ser transferido tran para o acumulador, rotacionado e devolvido para o registrador de origem. Os valores iniciais a serem enviados para as portas P0, P1 e P2 são, respectivamente, 88H, 55H e 22H. Após a primeira rotação à direita esses valores tornam-se: 44H, AAH e 11H e, depois, 22H, 55H e 88H. Rótulo PROB2: DIREITA: Mnemônico LINHA1 EQU 10H LINHA2 EQU 11H Comentários ; Registrador 10H guarda os valores enviados para P0 ; Registrador 11H H guarda os valores enviados para P1 P LINHA3 EQU 12H ; Registrador 12H guardaa os valores enviados para P2 P ORG 00H LJMP PROB2 ; A próxima instrução está no endereço 00H ; Desvia o processamento para o endereço PROB2 ORG 03H LJMP DIREITA ; A próxima instrução está no endereço 03H (Interrupção externa zero) ; Desvia para o endereço DIREITA ORG 13H LJMP ESQUERDA ; A próxima instrução está no endereço 13H (interrupção externa um) ; Desvia para o endereço ESQUERDA ORG 30H MOV SP,#2FH MOV IE,#85H MOV TCON,#01H MOV R7,#8 MOV LINHA1,#88H HA1,#88H MOV LINHA2,#55H MOV LINHA3,#22H ; Pilha inicia no endereço 2FH ; Habilita as interrupções externas 0 e 1 ; Interrupção externa zero por transição ; Contador do deslocamento para a direita ; Valor inicial da Linha 1 ; Valor inicial da Linha 2 ; Valor inicial da Linha 3 SJMP $ ; Loop infinito esperando interrupção MOV P0,LINHA1 MOV P1,LINHA2 MOV P2,LINHA3 LCALL ATRASO ; Transfere para P0 o conteúdo da Liha 1 ; Transfere para P1 o conteúdo da Liha 2 ; Transfere para P2 o conteúdo da Liha 3 ; Chama subrotina de atraso de tempo MOV A,LINHA1 RR A MOV LINHA1,A ; Transfere para A o conteúdo da Linha 1 (necessário para a rotação) ; Rotaciona conteúdo de A para a direita ; Devolve o conteúdo de A (rotacionado) para a Linha 1 MOV A,LINHA2 RR A MOV LINHA2,A ; Transfere para A o conteúdo da Linha 2 (necessário para a rotação) ; Rotaciona conteúdo de A para a direita ; Devolve o conteúdo de A (rotacionado) para a Linha 2 MOV A,LINHA3 ; Transfere para A o conteúdo da Linha 3 (necessário para a rotação) Microprocessadores e Microcontroladores Escola de Engenharia Elétrica,, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG) Goiânia, 14 de novembro de 2013. ESQUERDA: ATRASO: V1: Prof. José Wilson Lima Nerys RR A MOV LINHA3,A ; Rotaciona conteúdo de A para a direita ; Devolve o conteúdo de A (rotacionado) para a Linha 3 DJNZ R7,DIREITA MOV R7,#8 RETI ; Decrementa o contador R7. Enquanto R7 não for zero, volta para DIREITA ; Recarrega R7 com o valor 8 ; Sai da subrotina de interrupção MOV P0,LINHA1 MOV P1,LINHA2 MOV P2,LINHA3 LCALL ATRASO ; Transfere para P0 o conteúdo da Liha 1 ; Transfere para P1 o conteúdo da Liha 2 ; Transfere para P2 o conteúdo da Liha 3 ; Chama subrotina de atraso de tempo MOV A,LINHA1 RL A MOV LINHA1,A ; Transfere para A o conteúdo da Linha 1 (necessário para a rotação) ; Rotaciona conteúdo de A para a esquerda ; Devolve o conteúdo de A (rotacionado) para a Linha 1 MOV A,LINHA2 RL A MOV LINHA2,A ; Transfere para A o conteúdo da Linha 2 (necessário para a rotação) ; Rotaciona conteúdo de A para a esquerda ; Devolve o conteúdo de A (rotacionado) para a Linha 2 MOV A,LINHA3 RL A MOV LINHA3,A RETI ; Transfere para A o conteúdo da Linha 3 (necessário para a rotação) ; Rotaciona conteúdo de A para a esquerda ; Devolve o conteúdo de A (rotacionado) para a Linha 3 ; Sai da subrotina de atraso de tempo MOV R0,#250 MOV R1,#250 DJNZ R1,$ DJNZ R0,V1 RET ; Subrotina de atraso de tempo baseada nos registradores R0 e R1 END Tabela 4: Alguns Registradores Especiais TCON IE IP PSW TMOD Bit7 TF1 EA X CY G1 Bit6 TR1 X X AC C/T\ Bit5 TF0 X X F0 M1.1 Bit4 TR0 ES PS RS1 M0.1 Bit3 IE1 ET1 PT1 RS0 G0 Bit2 IT1 EX1 PX1 OV C/T\ Tabela 5: Endereços das interrupções Bit1 IE0 ET0 PT0 X M1.0 Bit0 IT0 EX0 PX0 P M0.0 Interrupção Solicitada Reset INT0\ Timer/counter 0 INT1\ Timer/counter 1 Canal Serial Endereço de desvio 0000h 0003h 000Bh 0013h 001Bh 0023h Microprocessadores e Microcontroladores Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)