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)
Download

Resposta esperada da Prova 2 - Escola de Engenharia Elétrica