Goiânia, 18 de junho de 2015. Prof. José Wilson Lima Nerys MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 – Resposta Esperada Aluno: Matrícula: 1. Na figura a seguir 8 Leds são conectados à porta P1 e 8 à porta P2. Valor: 2,5 Faça um programa em assembly do 8051 em que as interrupções externas INT0 e INT1 são usadas para a rotação dos Leds da figura, conforme mostrado na Tabela 1 a seguir. Use uma subrotina de atraso de tempo baseada em registradores. Tabela 1: descrição dos efeitos para cada interrupção Interrupção Configuração e efeito INT0 INT1 Por transição. Todos os Leds rotacionam no sentido anti-horário e, em seguida, no sentido horário, antes de voltar para o loop infinito. Rotação começa em P1.0. Por nível. Leds são ligados 1 a 1 (e mantidos ligados), a partir de P1.0, e rotacionando no sentido anti-horário. Todos os Leds são desligados a cada ciclo completo. Resposta Esperada Rótulo INICIO: EFEITO1: V5: Mnemônico ORG 00H LJMP INICIO Comentário Desvia para o Inicio, no endereço 30h ORG 03H SJMP EFEITO1 ; Desvia para “Efeito1” quando a INT0 for solicitada ORG 13H SJMP EFEITO2 ; Desvia para “Efeito2” quando a INT1 for solicitada ORG 30H MOV SP,#2FH MOV IE,#85H MOV TCON,#01H MOV R0,#00H MOV R1,#00H SJMP $ ; Pilha na posição inicial 2F ; IE = 1000 0101 – Interrupções 0 e 1 habilitadas ; Interrupção 0 por transição. Int. 1 por nível ; Valor inicial de R0 para o efeito 2 ; Valor inicial de R1 para o efeito 2 ; Loop infinito aguardando interrupção ; Rotação no sentido anti-horário MOV A,#01H MOV P2,#00H MOV P1,A RL A LCALL ATRASO ; Valor inicial de A para a rotação de Leds ; P2 recebe o valor 00h ; P1 recebe o valor atual de A ; Rotaciona conteúdo A para a esquerda ; Chama subrotina de atraso de tempo Microprocessadores e Microcontroladores Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG) Goiânia, 18 de junho de 2015. V4: V5B: V4B: EFEITO2: V2: V1: ATRASO: V3: Prof. José Wilson Lima Nerys CJNE A,#01H,V5 MOV P1,#00H MOV P2,A RL A LCALL ATRASO CJNE A,#01H,V4 ; Enquanto A ≠ 01h, desvia para V5. ; P1 recebe o valor 00h ; P2 recebe o valor atual de A ; Rotaciona conteúdo de A para a esquerda ; Chama subrotina de atraso de tempo ; Enquanto A ≠ 01h, desvia para V4. ; Rotação no sentido horário RR A MOV P2,A LCALL ATRASO CJNE A,#01H,V5B MOV P2,#00H RR A MOV P1,A LCALL ATRASO CJNE A,#01H,V4B RETI ; Rotaciona conteúdo de A para a direita ; P2 recebe o valor atual de A ; Chama subrotina de atraso de tempo ; Enquanto A ≠ 01h, desvia para V5B. ; P2 recebe o valor 00h ; Rotaciona conteúdo de A para a direita ; P1 recebe o valor atual de A ; Chama subrotina de atraso de tempo ; Enquanto A ≠ 01h, desvia para V4B. ; Retorna da subrotina de interrupção CJNE R0,#0FFH,V1 MOV P1,R0 MOV P2,R1 LCALL ATRASO MOV A,R1 RL A ORL A,#01H MOV R1,A CJNE R1,#0FFH,V2 MOV P2,R1 LCALL ATRASO MOV R0,#00H MOV R1,#00H NOP RETI ; Enquanto R0 ≠ FFh, desvia para V1. ; P1 recebe o conteúdo atual de R0 ; P2 recebe o conteúdo atual de R1 ; Chama subrotina de atraso de tempo ; A recebe o conteúdo atual de R1 ; Rotaciona o conteúdo de A para a esquerda ; Faz a operação A OU 01h (acrescenta 1 ao bit 0). ; Atualiza o conteúdo de R1 ; Enquanto R1 ≠ FFh, desvia para V4. ; P2 recebe o conteúdo atual de R1 ; Chama subrotina de atraso de tempo ; R0 recebe o valor 00h ; R1 recebe o valor 00h ; Nenhuma operação ; Retorna da subrotina de interrupção MOV P1,R0 MOV P2,R1 LCALL ATRASO MOV A,R0 RL A ORL A,#01H MOV R0,A RETI ; P1 recebe o conteúdo atual de R0 ; P2 recebe o conteúdo atual de R1 ; Chama subrotina de atraso de tempo ; A recebe o conteúdo atual de R0 ; Rotaciona o conteúdo de A para a esquerda ; Faz a operação A OU 01h (acrescenta 1 ao bit 0). ; Atualiza o conteúdo de R0 ; Retorna da subrotina de interrupção MOV R7,#200 MOV R6,#250 DJNZ R6,$ DJNZ R7,V3 RET END Microprocessadores e Microcontroladores Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG) Goiânia, 18 de junho de 2015. Prof. José Wilson Lima Nerys 2. O programa da Tabela 2 foi desenvolvido em assembly do 8051. O cristal oscilador é de 12 MHz. A Tabela 3 mostra alguns valores (decimal e hexadecimal) de recarga de um temporizador no modo 1. Mnemônico ORG 00H LJMP INICIO Rótulo V2: ORG 0BH LJMP V1 MOV SP,#2FH MOV IE,#82H MOV TMOD,#01H MOV TH0,#63H MOV TL0,#0BFH SETB TR0 MOV R0,#10 Parte 1 V1: INICIO: V3: Tabela 3: Valores Temporizador Mnemônico JNB F0,$ CPL P1.0 CLR F0 SJMP V2 MOV TH0,#63H MOV TL0,#0BFH DJNZ R0,V3 SETB F0 MOV R0,#10 NOP RETI END Recarga 5.535 25.535 45.535 TH 15H 63H B1H TL 9FH BFH DFH Parte 3 Rótulo Parte 2 Tabela 2: Programa em linguagem assembly do 8051 A partir do programa da Tabela 2 e da informação da Tabela 3, responda às questões: (a) O que ocorre na parte 1? Como é configurado o temporizador zero? (Valor: 0,5) Resposta Esperada A interrupção do temporizador zero é habilitada (IE = 82h) e o temporizador zero é configurado para operar no modo 1 (16 bits). A contagem inicial do temporizador zero é 63BFh (25.535), ou seja, a contagem é de 40.000 pulsos (65.535 – 25.535). Como o cristal é de 12 MHz, cada pulso é de 1 µs, ou seja, cada contagem corresponde a 40.000 µs = 40 ms. R0 assume o valor 10, para ser usado na Parte 3. (b) O que ocorre na parte 2? Qual a função da flag F0? (Valor: 0,5) Resposta Esperada Enquanto a flag F0 for zero, o processamento fica aguardando em um loop. Quando F0 se tornar 1 (o que ocorre na Parte 3) o pino P1.0 é complementado e a flag F0 limpada. Em outras palavras, a cada vez que a flag F0 é setada, o pino P1.0 é complementado, resultando em uma onda quadrada nesse pino. (c) Explique o funcionamento da parte 3. (Valor: 0,5) Resposta Esperada A cada execução da Parte 3, os registradores TH0 e TL0 são recarregados com o valor inicial da contagem 63BFH. O registrador R0 é decrementado e comparado com zero (ele torna-se zero depois da décima vez que a Parte 3 é executada, pois inicialmente R0 = 10). Enquanto R0 não for zero, o processamento apenas sai da Parte 3, voltando para o loop da Parte 2. Quando R0 = 0, a flag F0 é setada, indicando que já se passaram 400 ms (10 x 40 ms). R0 assume o valor 10 novamente. (d) Qual a função do programa da Tabela 2? (Valor: 1,0) Resposta Esperada Observando o que ocorre nas Partes 2 e 3, verifica-se que o programa gera uma onda quadrada no pino P1.0. Cada meio período da onda corresponde a 400 ms, resultando em um período de 800 ms. 3. Suponha que uma lâmpada é acionada através do pino P1.0 de um microcontrolador 8051. Faça um programa em assembly do 8051 para ligar/desligar a lâmpada via porta serial. A taxa de comunicação deve ser de 1200 bps. Cristal oscilador de 11,0592 MHz. O caractere L (4Ch) é usado para ligar a lâmpada. O caractere D (44h) é usado para desligar. Valor: 2,5 Microprocessadores e Microcontroladores Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG) Goiânia, 18 de junho de 2015. Prof. José Wilson Lima Nerys Resposta Esperada Rótulo INICIO: V1: V2: Mnemônico LAMP EQU P1.0 Comentário ; É atribuído o nome LAMP ao pino P1.0 ORG 00H LJMP INICIO Desvia para INICIO, no endereço 30h ORG 30H MOV SP,#2FH MOV SCON,#40H MOV TMOD,#20H MOV TH1,#0E8H MOV TL1,#0E8H CLR LAMP SETB TR1 SETB REN ; Pilha na posição inicial 2F ; SCON = 0100 0000 – Serial no modo 1 ; Temporizador 1 no modo 2 (recarga automática) ; Recarga para gerar Baud rate de 1200 bps ; Valor inicial de contagem do temporizador ; Lâmpada começa apagada ; Dispara temporizador 1, para começar geração de baud rate ; Habilita recepção serial JNB RI,$ CLR RI MOV A,SBUF ; Aguarda em um loop, a recepção de um caractere via serial ; Limpa flag que indica que recebeu caractere via serial ; Acumulador recebe conteúdo de SBUF (recebido via serial) CJNE A,#4CH,V2 SETB LAMP SJMP V1 ; Se A ≠ 4Ch (L), desvia para V2. ; Se A = 4Ch, então a lâmpada em P1.0 é ligada ; Volta para loop de espera de dados via serial CJNE A,#44H,V1 CLR LAMP SJMP V1 ; Se A ≠ 44h (D), desvia para V1 (loop de espera de caractere). ; Se A = 44h, então a lâmpada em P1.0 é desligada ; Volta para loop de espera de dados via serial END 4. A figura a seguir é parte de um sistema com mapeamento de memória. O decodificador é usado para selecionar o componente que se deseja acionar. São mostrados apenas os pinos que acionam um conjunto de 8 Leds e um motor de passo (conectado no nibble inferior). Valor: 2,5 A15 A14 A13 RD\ WR\ LEDS PASSO Supondo que o sistema também contém duas chaves liga/desliga conectando os pinos P1.0 e P1.1 ao nível lógico zero, faça um programa com as seguintes características: (a) Enquanto P1.0 = 0, os Leds devem girar para a esquerda; se P1.0 = 1, não há rotação de Leds. (b) Enquanto P1.1 = 0, o motor de passo deve girar para a direita; se P1.1 = 1, o motor de passo permanece parado. Microprocessadores e Microcontroladores Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG) Goiânia, 18 de junho de 2015. Prof. José Wilson Lima Nerys Resposta Esperada A partir da figura, verifica-se que os pinos A15, A14 e A13 foram usados para a seleção das regiões da memória, o que significa regiões de 8K, como mostrado na tabela a seguir: A15 0 0 0 0 1 1 1 1 A14 0 0 1 1 0 0 1 1 A13 0 1 0 1 0 1 0 1 Endereço inicial 0000H 2000H 4000H 6000H 8000H A000H C000H E000H Endereço final 1FFFH 3FFFH 5FFFH 7FFFH 9FFFH BFFFH DFFFH FFFFH Assim, os 8 Leds estão na região que começa no endereço 0000H e termina no endereço 1FFFH e o motor de passo está na região que começa no endereço 8000H e termina no endereço 9FFFH. Rótulo Mnemônico ORG 00H Comentários LJMP INICIO ORG 30H INICIO: V1: PASSO: MOV SP,#2FH MOV R0,#01H ; Valor inicial para os Leds MOV R1,#11H ; Valor inicial para o motor de passo LCALL ATRASO ; Chama subrotina de atraso de tempo JB P1.0,PASSO ; Se P1.0 = 1, verifica a chave que liga o motor de passo MOV DPTR,#0000H ; DPTR assume o valor do endereço dos Leds MOV A,R0 ; A recebe o valor atualizado para ser enviado aos Leds MOVX @DPTR,A ; O conteúdo de A é enviado aos Leds RL A ; Rotaciona conteúdo de A (para rotacionar os Leds) MOV R0,A ; Atualiza valor de R0 JB P1.1,V1 ; Se P1.1 = 1, verifica a chave que rotaciona os Leds MOV DPTR,#8000H ; DPTR recebe o endereço do motor de passo MOV A,R1 ; A recebe o valor atualizado para ser enviado aos Leds MOVX @DPTR,A ; O conteúdo de A é enviado ao motor de passo RR A ; Rotaciona conteúdo de A (para acionar o motor de passo) MOV R1,A ; Atualiza valor de R1 SJMP V1 ; Volta para V! ATRASO: MOV R7,#250 V2: MOV R6,#250 DJNZ R6,$ DJNZ R7,V2 RET END Microprocessadores e Microcontroladores Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG) Goiânia, 18 de junho de 2015. Prof. José Wilson Lima Nerys ---------------------------------------------------------------------------------------------------------------------Tabela 4: Lógica de operação do motor CC 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 5: Endereços das interrupções Interrupção Solicitada Reset INT0\ Timer/counter 0 INT1\ Timer/counter 1 Canal Serial Endereço de desvio 0000h 0003h 000Bh 0013h 001Bh 0023h Tabela 6: Alguns Registradores Especiais TCON IE IP PSW TMOD SCON Bit7 TF1 EA X CY G1 SM0 Bit6 TR1 X X AC C/T\ SM1 Bit5 TF0 X X F0 M1.1 SM2 Bit4 TR0 ES PS RS1 M0.1 REN Bit3 IE1 ET1 PT1 RS0 G0 TB8 Bit2 IT1 EX1 PX1 OV C/T\ RB8 Bit1 IE0 ET0 PT0 X M1.0 TI Bit0 IT0 EX0 PX0 P M0.0 RI Tabela 7: Taxas de transmissão mais comuns Baud Rate (bits/seg) Modo 0 Máx: 1MHz Modo 2 Máx: 375K Modo 1, 3: 62,5K 19,2K 9,6K 4,8K 2,4K 1.2K 137,5 110 110 Freq. Osc. (MHz) 12 12 12 11,059 11,059 11,059 11,059 11,059 11,059 6 12 SMOD X 1 1 1 0 0 0 0 0 0 0 C/Tbarra X X 0 0 0 0 0 0 0 0 0 Timer 1 Modo Valor Recar. X X X X 2 FFh 2 FDh 2 FDh 2 FAh 2 F4h 2 E8h 2 1Dh 2 72h 1 FEEBh Microprocessadores e Microcontroladores Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)