Você está na página 1de 78

Goiânia, 22 de junho de 2010 Prof.

José Wilson Lima Nerys

MICROPROCESSADORES E MICROCONTROLADORES – PROVA 2

UMA POSSÍVEL SOLUÇÃO

1. Na tabela a seguir, escolha as instruções que melhor correspondem à descrição das tarefas da coluna 1.Valor: 3,0

Item Descrição Instruções


Habilita as interrupções externas 0 e 1 e a interrupção da serial MOV IE,#95H
Interrupção externa 0 por transição e externa 1 por nível MOV TCON,#01H
(a)
Define interrupção da serial com prioridade 1 MOV IP,#10H
Aguarda pedido de interrupção em um laço infinito SJMP $
MOV TMOD,#12H
Habilita temporizador 0 no modo 2 e temporizador 1 no modo 1 MOV TH0,#3FH
Configura recarga de temporizador zero para 3FH MOV TH1,#0B1H
(b)
Configura temporizador 1 para contar 20000 pulsos MOV TL1,#0DFH
Dispara os temporizadores 0 e 1 SETB TR0
SETB TR1
MOV SCON,#40H
MOV TMOD,#20H
Configura comunicação serial para operar no modo 1 com baud rate de MOV TH1,#0E8H
1200 bps (frequência de clock = 11,0592 MHz) MOV TL1,#0E8H
(c) Habilita recepção serial SETB TR1
Concluída a recepção de cada dado, transfere valor recebido para a porta P2 SETB REN
JNB RI,$
MOV A,SBUF
MOV P2,A

2. Analise o programa mostrado na tabela a seguir, escrito em assembly do microcontrolador 8051. Valor: 2,0

Rótulo Programa (parte 1) Rótulo Programa (parte 2) Rótulo Programa (parte 3)


$MOD51 V1: PUSH ACC V2: INC DPTR
ORG 00H PUSH DPL POP ACC
LJMP INICIO PUSH DPH INC A
MOV DPTR,#TEXTO SJMP V1
INICIO: ORG 30H MOVC A,@A+DPTR
MOV SP,#2FH POP DPH TEXTO: DB ‘PROVA 2 DE MICRO’
MOV A,#00H POP DPL DB ‘EEEC – UFG – 2010’
MOV DPTR,#0000H MOVX @DPTR,A DB 0FFH
CJNE A,#0FFH,V2
SJMP INICIO
Perde-se:
(a) Qual a finalidade do programa?
O programa tem por finalidade ler o texto do endereço “TEXTO” (instrução MOVC A,@A+DPTR) e enviá-lo
para um dispositivo externo (instrução MOVX @DPTR,A). Esse dispositivo externo pode ser uma memória
externa e o endereço inicial é 0000H (instrução MOV DPTR,#0000H).

(b) Explique o funcionamento do programa passo a passo.


Parte 1:
Inicialmente faz-se A = 0  contador para leitura do “TEXTO” e
DPTR = 0000H  valor inicial do apontador usado para armazenar o “TEXTO” em um dispositivo externo

Parte 2:

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 22 de junho de 2010 Prof. José Wilson Lima Nerys

Nesse trecho de programa o DPTR é redefinido (MOV DPTR,#TEXTO) para a leitura do TEXTO.
A instrução MOVC A,@A+DPTR armazena em A o caractere ASCII de cada letra do TEXTO
Antes desse trecho de programa o DPTR usado para o dispositivo externo e o acumulador usado como
contador para o TEXTO são guardados na pilha. O DPTR é guardado porque, para a leitura do TEXTO, ele
tem que ser redefinido. O acumulador é guardado porque ele é usado como contador e também para receber os
dados do TEXTO.
Depois de recuperar o valor original de DPTR a instrução MOVX @DPTR,A é usada para transferir o
conteúdo do TEXTO para o dispositivo externo.
O último caractere do TEXTO é FFH. Quando esse valor for alcançado o programa volta para o início e repete
todo o processamento anterior de forma indefinida. Antes de chegar a FFH o programa é desviado para V2.

Parte 3:
O DPTR do dispositivo externo e o contador para leitura do TEXTO são incrementados para a leitura e
transferência do próximo caractere.

3. Faça o fluxograma (valor: 1,0) e um programa (valor: 2,0), em assembly do 8051, com as seguintes
características:

(a) Duas chaves (tipo Push-Button) são conectadas dos pinos P1.0 e P1.1 para o Terra;
(b) Um motor de corrente contínua é acionado através dos pinos P2.0 e P2.1 (ver tabela 4);
(c) LEDs são conectados aos pinos P2.3, P2.4 e P2.5;
(d) A chave em P1.0 é usada para habilitar o funcionamento do motor e a chave P1.1 é usada para desligar;
(e) Ao ser pressionada a chave P1.0, o LED em P2.3 é ligado e o programa fica aguardando um comando de
ligação do motor via serial;
(f) Quando for recebida a letra “L” ( 4CH) o motor é ligado no sentido direto. O LED em P2.4 é ligado,
mantendo aceso o LED em P2.3. A recepção serial deverá ser no modo 1 com baud rate de 4800 bps;
(g) Após a inicialização o sentido de rotação do motor é invertido a cada 10 s. O LED em P2.5 indica rotação no
sentido reverso e a chave em P1.1 é usada para desligar o motor e sair do modo de habilitação;
(h) Usar o temporizador zero no modo 1 como base para uma subrotina de atraso de 1 s, a partir da qual é contado
o tempo de 10 s. Supondo um cristal oscilador de 12 MHz.

Solução:

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 22 de junho de 2010 Prof. José Wilson Lima Nerys

RÓTULO INSTRUÇÕES COMENTÁRIO


$mod51
LED_HABILITA EQU P2.3 ; DEFINICAO DE VARIAVEIS
LED_DIRETO EQU P2.4
LED_REVERSO EQU P2.5
CONTADOR1 EQU 00H
CONTADOR2 EQU 01H

ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV TMOD,#21H ; TEMP0 NO MODO 1 E TEMP1 NO MODO 2
MOV SCON,#40H ; SERIAL NO MODO 1
MOV TH1,#0FAH ; BAUD RATE DE 4800 bps COM CRISTAL OSCILADOR DE
MOV TL1,#0FAH 11,0592 MHz
MOV P2,#00H
V2: JB P1.0,$ ; AGUARDA HABILITACAO
SETB LED_HABILITA ; LIGA LED DE HABILITACAO
SETB TR1 ; DISPARA TEMP1
SETB REN ; HABILITA RECEPCAO SERIAL
V1: JNB RI,$ ; AGUARDA DADO VIA SERIAL
CLR RI ; LIMPA FLAG DA SERIAL
MOV A,SBUF ; CARREGA NO ACUMULADOR DADO RECEBIDO VIA SERIAL

CJNE A,#4CH,V1 ; AGUARDA LETRA 'L' PARA LIGAR MOTOR

MOTOR_DIRETO: SETB P2.0


CLR P2.1
SETB LED_DIRETO
CLR LED_REVERSO
LCALL ATRASO10

MOTOR_REVERSO: CLR P2.0


SETB P2.1
CLR LED_DIRETO
SETB LED_REVERSO
LCALL ATRASO10

JB P1.1,MOTOR_DIRETO ; ENQUANTO P1.1 = 1, MOTOR FICA LIGADO

DESLIGA_TUDO: CLR P2.0 ; DESLIGA MOTOR


CLR P2.1
CLR LED_HABILITA ; DESLIGA LED DE HABILITACAO
CLR LED_DIRETO ; DESLIGA LED DIRETO
CLR LED_REVERSO ; DESLIGA LED REVERSO
CLR REN ; DESABILITA RECEPCAO SERIAL
CLR TR1 ; DESLIGA TEMPORIZADOR 1
LJMP V2 ; VOLTA PARA AGUARDAR HABILITACAO

ATRASO: MOV CONTADOR1,#10 ; CARREGA CONTADORES PARA CONTAR 10 x 20 x 50 ms


V4: MOV CONTADOR2,#20
V3: MOV TH0,3CH ; PREPARA TEMP0 PARA CONTAR 50000 PULSOS
MOV TL0,0AFH ; 65535 – 50000 = 15535  3CAF h
SETB TR0 ; DISPARA TEMP0
JNB TF0,$ ; AGUARDA FIM DE CONTAGEM DO TEMP0

CLR TF0 ; LIMPA FLAG DE FIM DE CONTAGEM


DJNZ CONTADOR2,V3 ; DECREMENTA CONTADOR 2 E VOLTA PARA V3
DJNZ CONTADOR1,V4 ; DECREMENTA CONTADOR 1 E VOLTA PARA V4
CLR TR0 ; DESLIGA TEMPORIZADOR 0
RET ; RETORNA DA SUBROTINA DE ATRASO DE TEMPO

END

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 22 de junho de 2010 Prof. José Wilson Lima Nerys

Uma questão de lógica...

Maga e sua filha moram à beira do Rio Tejo e faz parte de suas malévolas bruxarias domésticas o fato de mentirem de
maneira programada. Maga sempre mente às sextas, aos sábados e domingos, dizendo a verdade nos outros dias da
semana. A filha mente sempre às segundas, terças e quartas, fazendo questão de falar a verdade nos outros dias da
semana.

Num certo dia houve um diálogo entre as duas:

Maga: - Eu menti ontem, mas amanhã falarei a verdade

Filha: - Hoje não é domingo!

Com base nas afirmações das duas, determine em que dia da semana essa conversa ocorreu.

Solução:

Dom Seg Ter Qua Qui Sex Sab


Maga Mente Mente Mente
Filha Mente Mente Mente

Os dias possíveis são:

Supondo que Maga tenha dito a verdade, o dia é Segunda-feira. Se ela mentiu, Sexta.

A frase da Filha só pode ter sido dita na Quinta, Sexta ou no Sábado. Se essa frase fosse dita no domingo,
seria uma mentira, mas no domingo ela sempre fala a verdade. Se fosse dita de segunda a quarta, seria uma
verdade, mas nesses dias ela sempre mente.

Conclusão: O dia comum, que torna possível as duas frases, é SEXTA-FEIRA.


----------------------------------------------------------------------------------------------------------------------------- ---------------
Tabela 1: Informações sobre registradores especiais do 8051
TMOD G1\ C1/T1\ M1.1 M1.0 G0\ C0/T0\ M1.0 M0.0
SCON SM0 SM1 SM2 REN TB8 RB8 TI RI
IE EA x x ES ET1 EX1 ET0 EX0
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
IP x x x PS PT1 PX1 PT0 PX0

Tabela 2: Mnemônicos das instruções do 8051


ACALL ADD ADDC AJMP ANL CJNE CLR CPL DA A
DEC DIV DJNZ INC JB JBC JC JMP JNB
JNC JNZ JZ LCALL LJMP MOV MOVC MOVX MUL
NOP ORL POP PUSH RET RETI RL RLC RR
RRC SETB SJMP SUBB SWAP XCH XCHD XRL
Tabela 3: Frequências para comunicação serial do 8051 (tabela simplificada)
Baud rate (bps) Freq. Osc.(MHz) SMOD Recarga Timer 1 (modo 2)
9600 11,0592 0 FD H
4800 11,0592 0 FA H
2400 11,0592 0 F4 H
1200 11,0592 0 E8 H
Tabela 4: Funcionamento do motor de corrente contínua
Pino P2.1 Pino 2.0 Sentido de rotação
0 0 Motor parado
0 1 Motor gira no sentido direto
1 0 Motor gira no sentido reverso
1 1 Motor parado

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 07 de dezembro de 2010 Prof. José Wilson Lima Nerys

MICROPROCESSADORES E MICROCONTROLADORES – PROVA 2

Aluno: ________________________________ Matrícula: _____________


UMA SOLUÇÃO POSSÍVEL

Obs.: Todas as questões têm valor 2,0. Boa prova e Feliz Natal e Ano Novo!!!!

1. Escreva um pequeno programa, em assembly do 8051, onde o temporizador zero, no modo 1 (16 bits), é usado,
com interrupção, para complementar o pino 0 da porta P2, a cada final de contagem (contagem a partir de 0). A
interrupção externa zero deve ser usada, por transição, para disparar e parar o temporizador zero. Qual o período
da onda quadrada formada no pino P2.0, para um cristal oscilador de 12 MHz?
Solução:
RÓTULO MNEMÔNICO COMENTÁRIO
$mod51
LJMP ALFA DESVIA PARA O INÍCIO DO PROGRAMA

ORG 03H
CPL TR0 COMPLEMENTA O BIT TR0 PARA DISPARAR/PARAR O TEMPORIZADOR
RETI ZERO A CADA INTERRUPÇÃO ZERO

ORG 0BH
CPL P2.0 COMPLEMENTA O BIT 0 DA PORTA P2 A CADA FINAL DE CONTAGEM DO
RETI TEMPORIZADOR ZERO

ORG 30H INICIO DO PROGRAMA NA POSIÇÃO 30H


ALFA: MOV SP,#2FH
MOV IE,#83H HABILITA AS INTERRUPÇÕES EXTERNA ZERO E DO TEMPORIZADOR ZERO.
MOV TCON,#01H A EXTERNA ZERO É POR TRANSIÇÃO
MOV TMOD,#01H CONFIGURA TEMPORIZADOR ZERO PARA OPERAR NO MODO 1
SJMP $ AGUARDA EM UM LOOP INFINITO OS PEDIDOS DE INTERRUPÇÃO
END
O temporizador zero no modo 1 conta de 0 a 65.535. Sendo a frequência do cristal igual a 12 MHz, cada passo
da contagem é feito em 1 µs. Assim, meio período da onda quadrada em P2.0 corresponde a 65.535 µs e o período
corresponde a 131.070 µs, ou seja, T = 131,07 ms.

2. Interprete o trecho de programa mostrado na tabela a seguir, feito em assembly do 8051. Há um conjunto de LEDs
conectado à porta P2 e um conjunto de chaves do tipo push-button conectando a porta P1 ao terra.

Rótulo Trecho do Rótulo Trecho do Rótulo Trecho do Rótulo Trecho do


programa programa programa programa
LOOP: JNB P1.0, V1 V1: SETB P2.0 V2: CLR P2.0 V3: CLR P2.0
JB P1.1, V2 CLR P2.1 CLR P2.1 CLR P2.1
JNB P1.2, V3 CLR P2.2 SETB P2.2 CLR P2.2
SJMP LOOP SJMP LOOP SJMP LOOP SJMP LOOP

Solução:
Primeiro Quadro:
1. O programa verifica o estado de cada uma das chaves: P1.0, P1.1 e P1.2
2. Se a chave P1.0 estiver em estado lógico baixo, desvia para V1. Caso contrário, verifica a chave P1.1.
3. Se a chave P1.1 estiver em estado lógico alto, desvia para V2. Caso contrário, verifica a chave P1.2.
4. Se a chave P1.2 estiver em estado lógico baixo, desvia para V3. Caso contrário, verifica novamente V1.

Segundo Quadro:
O programa liga o LED conectado a P2.0 e desliga os LEDs em P2.1 e P2.2. A seguir retorna para o LOOP
principal.
Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 07 de dezembro de 2010 Prof. José Wilson Lima Nerys

Terceiro Quadro:
O programa desliga os LEDs conectados a P2.0 e P2.1 e liga o LED em P2.2. A seguir retorna para o LOOP
principal.

Quarto Quadro:
O programa desliga todos LEDs e retorna para o LOOP principal.

3. Faça um programa, em assembly do 8051, para transferir via serial para um computador, a uma taxa de transmissão
de 1200 bps, o TEXTO a seguir. O cristal oscilador é de 11,0592 MHz.

TEXTO:
DB „PROVA 2 DE MICROPROCESSADORES – 2010‟, 0FFH

Solução:
RÓTULO MNEMÔNICO COMENTÁRIO
$mod51
ORG 00H
LJMP ALFA DESVIA PARA O INÍCIO DO PROGRAMA

ORG 30H
ALFA: MOV SP,#2FH
MOV SCON,#40H CONFIGURA SERIAL PARA O MODO 1 ASSÍNCRONO
MOV TMOD,#20H CONFIGURA TEMPORIZADOR 1 NO MODO 2 (RECARGA AUTOMÁTICA)
MOV TH1,#0E8H FAZ TH1 = E8H, O QUE DEFINE BAUD RATE DE 1200 bps
SETB TR1 DISPARA TEMPORIZADOR
MOV DPTR,#TEXTO DPTR ASSUME O ENDEREÇO INICIAL DO “TEXTO”

V1: MOV R7,#00H O CONTADOR R7 INICIA COM VALOR 0


ENVIA: MOV A,R7 ACUMULADOR RECEBE O VALOR ATUAL DO CONTADOR
MOVC A,@A+DPTR ACUMULADOR RECEBE O O CARACTERE DA POSIÇÃO “A+DPTR”
CJNE A,#0FFH,V2 SE O CARACTERE RECEBIDO FOR DIFERENTE DE “FFH”, VAI PARA V2
SJMP V1 SE O CARACTERE FOR IGUAL A “FFH”, VOLTA PRO INICIO DO TEXTO

V2: MOV SBUF,A INICIA TRANSMISSÃO SERIAL DO CONTEÚDO DO ACUMULADOR


JNB TI,$ AGUARDA FIM DA TRANSMISSÃO DE CADA CARACTERE
CLR TI LIMPA A FLAG DE FINAL DE TRANSMISSÃO
INC R7 INCREMENTA O CONTADOR R7
LCALL ATRASO CHAMA SUBROTINA DE ATRASO DE TEMPO
SJMP ENVIA RETORNA PARA ENVIAR O PRÓXIMO CARACTERE

ATRASO: MOV R6,#255 SUBROTINA DE ATRASO DE TEMPO


V3: MOV R5,#255
DJNZ R5,$
DJNZ R6,V3
RET

TEXTO: DB ' PROVA 2 DE MICROPROCESSADORES - 2010 ', 0FFH

END

4. A figura a seguir mostra uma caixa d´água com controle automático do nível de água e com saída manual de água.
Um sistema com o microcontrolador 8051 é usado para o acionamento das válvulas e da bomba. Faça um programa
em assembly do 8051 com as seguintes características:
1. Quando o nível da água fica abaixo do sensor SV (sensor passa para nível lógico alto – pino P1.0), a bomba é
acionada juntamente com as válvulas V1 (pino P2.1) e V2 (pino P2.2).

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 07 de dezembro de 2010 Prof. José Wilson Lima Nerys

2. A bomba e as válvulas V1 e V2 permanecem ligadas até o nível da água alcançar o sensor SC (sensor passa
para nível lógico baixo – pino P1.1).
3. Uma chave tipo push-button é usada o pino P3.2 ligando ao terra. Essa chave é usada para solicitar uma
interrupção, por transição (interrupção zero) e acionar a bomba (pino P2.0) e as válvulas V2 (pino P2.2) e V3
(pino P2.3), para filtragem da água presente na caixa. Essa operação deve durar por um tempo pré-estabelecido
pelo programador. Faça uma subrotina de atraso de tempo qualquer para simbolizar o tempo de filtragem.

Resumo das operações


Sensor SV Sensor SC Estado da Bomba (P2.0) e das
(P1.1) (P1.0) Válvulas V1 (P2.1) e V2 (P2.2)
0 0 Desliga
0 1 Mantém estado atual (ligado ou desligado)
1 1 Liga
1 0 Situação inexistente

Solução
RÓTULO MNEMÔNICO COMENTÁRIO
$mod51
SV EQU P1.1 ; SENSOR DE VAZIO
SC EQU P1.0 ; SENSOR DE CHEIO

BOMBA EQU P2.0 ; BOMBA DE ÁGUA


V1 EQU P2.1 ; VÁLVULA V1
V2 EQU P2.2 ; VÁLVULA V2
V3 EQU P2.3 ; VÁLVULA V3

ORG 00H
LJMP INICIO ; DESVIA PARA INICIO DO PROGRAMA

ORG 03H
LJMP LIMPEZA ; DESVIA PARA SUBROTINA DA INTERRUPÇÃO ZERO

ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#81H
; HABILITA INTER. EXTERNA 0 POR TRANSIÇÃO
MOV TCON,#01H
MOV P2,#00H ; DESLIGA A BOMBA E TODAS AS VÁLVULAS

VER_SENS: JNB SV,VER_SC ; SE SV = 0, VERIFICAR SC


JB SC,LIGA ; SE SV = 1 E SC = 1  LIGA
SJMP VER_SENS ; SV=1 E SC=0  INEXISTENTE

VER_SC: JNB SC,DESLIGA ; SE SV = 0 E SC = 0  DESLIGA


Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 07 de dezembro de 2010 Prof. José Wilson Lima Nerys

SJMP VER_SENS ; SV=0 E SC=1  MANTÉM ESTADO

LIGA: SETB BOMBA ; LIGA A BOMBA


SETB V1 ; LIGA A VALVULA V1
SETB V2 ; LIGA A VALVULA V2
SJMP VER_SENS ; VOLTA PARA LOOP DE VERIFICAÇÃO DOS SENSORES

DESLIGA: CLR BOMBA ; DESLIGA BOMBA


CLR V1 ; DESLIGA VALVULA V1
CLR V2 ; DESLIGA VALVULA V2
SJMP VER_SENS

LIMPEZA: SETB BOMBA ; LIGA BOMBA


CLR V1 ; DESLIGA VALVULA V1
SETB V2 ; LIGA VALVULA V2
SETB V3 ; LIGA VALVULA V3
LCALL ATRASO ; CHAMA SUBROTINA DE ATRASO
CLR BOMBA ; DESLIGA BOMBA
CLR V2 ; DESLIGA VALVULA V2
CLR V3 ; DESLIGA VALVULA V3
RETI ; SAI DA SUBROTINA DA INTERRUPÇÃO ZERO

ATRASO: MOV R6,#255 SUBROTINA DE ATRASO DE TEMPO


V4: MOV R5,#255
DJNZ R5,$
DJNZ R6,V4
RET

END

5. Uma questão de lógica.... (baseada em um problema do site: http://rachacuca.com.br)

Siga as dicas fornecidas para determinar quem mora em cada casa (João, Paulo ou José), a cor da casa (Branca, Azul ou
Amarela), o animal de estimação (Cachorro, Gato ou Cavalo) e o esporte praticado (Futebol, Voleibol ou Tênis).

Casa 1 Casa 2 Casa 3


Morador João José Paulo
Cor Azul Branca Amarela
Animal Cavalo Gato Cachorro
Esporte Tênis Voleibol Futebol

Dicas:
1. João não mora na segunda casa;
2. Quem cria cachorro gosta de jogar futebol;
3. Tem uma casa entre o jogador de tênis e a casa amarela, que fica à direita;
4. O homem que tem o cavalo como animal de estimação mora exatamente do lado esquerdo do que gosta de
gatos;
5. O homem que cria cachorro mora exatamente do lado direito da casa branca;
6. Paulo mora na terceira casa.

Solução:

1. A partir das dicas 1 e 6 conclui-se que Paulo mora na Casa 3, João na Casa 1 e José na Casa 2.
2. A partir da dica 3 conclui-se que a Casa 3 é amarela e que o jogador de tênis mora na Casa 1.
3. A partir da dica 2 conclui-se que quem cria cachorro e gosta de futebol mora na Casa 2 OU na Casa 3.

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 07 de dezembro de 2010 Prof. José Wilson Lima Nerys

4. A partir da dica 4 conclui-se que o homem que cria cavalo mora na Casa 1. Ele não pode morar na Casa 2
porque, senão, o criador de Gato moraria na Casa 3, o que faria com que o criador de cachorro morasse na
Casa 1; e isso é incompatível com a dica 3, uma vez que ele gosta de futebol e na Casa 1 já foi definido, pela
dica 3, que o esporte é Tênis.
5. Uma vez que o animal da Casa 1 é o cavalo e o da Casa 2 é o Gato, conclui-se que o Cachorro está na Casa 3,
onde o esporte é o futebol. Conclui-se ainda que o esporte da Casa 2 é o Voleibol.
6. A partir da dica 5 conclui-se que a Casa 2 é Branca e a Casa 1 é Azul.

----------------------------------------------------------------------------------------------------------------------------- --------------
Tabela 1: Informações sobre registradores especiais do 8051
TMOD G1\ C1/T1\ M1.1 M1.0 G0\ C0/T0\ M1.0 M0.0
SCON SM0 SM1 SM2 REN TB8 RB8 TI RI
IE EA x x ES ET1 EX1 ET0 EX0
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
IP x x x PS PT1 PX1 PT0 PX0

Tabela 2: Mnemônicos das instruções do 8051


ACALL ADD ADDC AJMP ANL CJNE CLR CPL DA A
DEC DIV DJNZ INC JB JBC JC JMP JNB
JNC JNZ JZ LCALL LJMP MOV MOVC MOVX MUL
NOP ORL POP PUSH RET RETI RL RLC RR
RRC SETB SJMP SUBB SWAP XCH XCHD XRL

Tabela 3: Frequências para comunicação serial do 8051 (tabela simplificada)


Baud rate Frequência do Cristal Recarga Temporizador 1
SMOD
(bps) (MHz) (modo 2)
9600 11,0592 0 FD H
4800 11,0592 0 FA H
2400 11,0592 0 F4 H
1200 11,0592 0 E8 H

Tabela 4: Endereços das interrupções do 8051


Interrupção Solicitada Endereço de desvio
Externa Zero (INT0) 0003 H
Temporizador 0 (TEMP0) 000B H
Externa 1 (INT1) 0013 H
Temporizador 1 (TEMP1) 001B H
Serial 0023 H

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 09 de junho de 2011. Prof. José Wilson Lima Nerys

MICROPROCESSADORES E MICROCONTROLADORES

PROVA 2 – UMA SOLUÇÃO POSSÍVEL


Aluno: Matrícula:

1. Escreva as instruções necessárias para configurar o temporizador zero para operar no modo 1, o
temporizador 1 para operar no modo 2, ambos usando interrupção e, ainda a interrupção externa zero
para operar por transição. O valor de recarga para o temporizador 1 deve ser de 3FH e a contagem
inicial do temporizador 0 deve ser de 40.000 pulsos. Valor: 2,0

MOV IE,#8BH ; IE = 1000 1011 B  INTERRUPÇÕES TEMP 0, TEMP 1 E INT. 0


MOV TCON,#01H ; EXTERNA ZERO POR TRANSIÇÃO
MOV TMOD,#21H ; TEMP ZERO NO MODO 1; TEMP 1 NO MODO 2
MOV TH1,#3FH ; RECARGA DO TEMP 1
MOV TH0,#63H ; CONTAGEM DE 40.000 PULSOS
MOV TL0,#0BFH ; DE 25.535 (63BFH) ATÉ 65.535 (FFFFH)
SETB TR0 ; DISPARA TEMPORIZADOR 0
SETB TR1 ; DISPARA TEMPORIZADOR 1

As questões a seguir referem-se à Fig. 1, onde um microcontrolador da família 8051 é usado com
mapeamento de memória. A memória EEPROM AT28C16 é de 2 K e tem endereço inicial 0800H.
O endereço de acesso aos LEDs é 1000H.

2. Indique as entradas para as portas NAND A e B, da Fig. 1, de modo que a memória EEPROM tenha
endereço inicial 0800H e os LEDs sejam alocados na região que começa no endereço 1000H. Mostre o
procedimento de escolha dessas entradas a partir da divisão da região de 64 K em regiões de 2K. Não é
necessário eliminar as sombras de memória. Valor: 2,0.

Como indicado na Fig. 1, a memória EEPROM tem 11 linhas de endereço (de A0 a A10), o que permite
o acesso a 2K de memória: 211 = 2048 = 2Kbytes. Os endereços internos da memória são, portanto:

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 HEXA


Inicio 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000
Fim 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 07FF

Sendo a memória de 2 K, é conveniente dividir a região de 64 K em regiões de 2 K, como mostrado a


seguir. São mostradas apenas as 4 primeiras regiões. São colocadas em destaque as linhas de endereço A11 e
A12, responsáveis pela seleção das 4 primeiras regiões.
Reg A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 HEXA
Inicio 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000
0
Fim 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 07FF
Inicio 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0800
1
Fim 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0FFF
Inicio 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1000
2
Fim 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 17FF
Inicio 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1800
3
Fim 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1FFF

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 09 de junho de 2011. Prof. José Wilson Lima Nerys

A partir do mapa anterior, faz-se uma tabela-resumo para seleção das 4 primeiras regiões. As regiões de
interesse são as regiões 1 (EEPROM) e 2 (LEDs). As entradas das portas NAND são mostradas a seguir.
A12 A11 Região selecionada Endereço Inicial Endereço Final
0 0 0 0000H 07FFH
0 1 1 0800H 0FFFH
1 0 2 1000H 17FFH
1 1 3 1800H 1FFFH

3. Comente o programa a seguir. O que ele faz? Valor: 2,0


Rótulo Mnemônico Comentários
CHAVE EQU P1.7 ; O pino P1.7 recebe o nome de CHAVE

ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH ; O endereço inicial da pilha é 2Fh
MOV DPTR,#1000H ; DPTR recebe o valor inicial da região dos LEDs

V4: MOV A,#00H ; Se a variável CHAVE for 1 (CH aberta), faz A=00
V2: JNB CHAVE,V1 ; Se a variável CHAVE for zero (CH fechada), desvia para V1
MOVX @DPTR,A ; Se CHAVE=1 (CH aberta), envia o conteúdo de A para os LEDs
LCALL ATRASO ; Chama subrotina de atraso
CPL A ; Complementa conteúdo de A. Alterna entre 00h e FFH
SJMP V2 ; Volta para V2

V1: MOV A,#01H ; Se a variável CHAVE for zero (CH fechada), faz A = 01h
V3: MOVX @DPTR,A ; Envia o conteúdo de A para os LEDs
LCALL ATRASO ; Chama subrotina de atraso de tempo
RL A ; Rotaciona o conteúdo de A para a esquerda
CJNE A,#01H,V3 ; Verifica se A = 01h. Enquanto A for diferente de 01h, desvia para V3.
SJMP V4 ; Quando A = 01h (rotação completa dos LEDs), volta para V2.

ATRASO: MOV R0,#250 ; Subrotina de atraso de tempo


DJNZ R0,$
RET
END

O programa verifica o estado da variável CHAVE, que indica o nível lógico do pino P1.7.
Situação 1 (chave CH pressionada): O pino P1.7 está com tensão zero (nível lógico baixo) e, portanto, a
variável CHAVE é zero. Assim, os LEDs alocados no endereço 1000H (no mapeamento de
memória) são rotacionados para a esquerda (rotação completa do LED 0 ao LED 7).
Situação 2 (chave CH livre): O pino P1.7 está com tensão 5 V (nível lógico alto) e, portanto, a variável
CHAVE é 1. Assim, os valores 00H e FFH são enviados alternadamente para os LEDs, ou seja, os
LEDs são ligados e desligados alternadamente.

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 09 de junho de 2011. Prof. José Wilson Lima Nerys

4. Faça um programa onde o teclado de 4 teclas, conectado à porta P1 (Fig. 1), seja lido por varredura. Ao
ser digitada a tecla 1 os LEDs são rotacionados para a esquerda de forma ininterrupta (mesmo ao ser
liberada a tecla 1). Ao ser digitada a tecla 2 os LEDs são rotacionados para a direita de forma
ininterrupta (mesmo ao ser liberada a tecla 2). Ao serem digitadas as teclas 3 ou 4 o processo de rotação
dos LEDs é interrompido. Valor: 3,0

Rótulo Mnemônico Comentários


$mod51
COLUNA1 EQU P1.0
COLUNA2 EQU P1.1
LINHA1 EQU P1.2
LINHA2 EQU P1.3

ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH ; ENDEREÇO INICIAL DA PILHA = 2FH
MOV DPTR,#1000H ; DPTR RECEBE O ENDERECO DOS LEDS
MOV R0,#00H ; VALOR INICIAL DE R0=0 (R0 GUARDA VALOR LIDO)
MOV A,#01H ; ACUMULADOR RECEBE VALOR 01 P/ ROTACIONAR LEDS

LOOP: LCALL TECLADO ; CHAMA SUBROTINA DE LEITURA DO TECLADO


CJNE R0,#01H,V1 ; SE R0 DIFERENTE DE 01H, DESVIA PARA V1
MOVX @DPTR,A ; SE R0=01H, ENVIA CONTEUDO DE A PARA OS LEDS
RL A ; ROTACIONA ACUMULADOR PARA A ESQUERDA
LCALL ATRASO ; CHAMA ATRASO
SJMP LOOP ; VOLTA PARA A LOOP (NOVA LEITURA DO TECLADO)

V1: CJNE R0,#02H,LOOP ; SE R0 DIFERENTE DE 02, VOLTA PARA LOOP


MOVX @DPTR,A ; SE R0 = 02H, ENVIA CONTEUDO DE A PARA LEDS
RR A ; ROTACIONA ACUMULADOR PARA A DIREITA
LCALL ATRASO ; CHAMA ATRASO
SJMP LOOP ; VOLTA PARA LOOP

; SUBROTINA DE LEITURA DO TECLADO


TECLADO: SETB LINHA1 ; LINHA 1 DO TECLADO EM NÍVEL LÓGICO ALTO
SETB LINHA2 ; LINHA 2 DO TECLADO EM NÍVEL LÓGICO ALTO

CLR LINHA1 ; LIMPA LINHA 1 DO TECLADO


JB COLUNA1,TECLA2 ; SE COLUNA1 = 1, VER COLUNA2
MOV R0,#01H ; SE COLUNA1 = 0 TECLA 1 FOI PRESSIONADA
RET

TECLA2: JB COLUNA2,TECLA3 ; SE COLUNA2 = 1, VER TECLA3 NA LINHA2


MOV R0,#02H ; SE COLUNA2 = 0  TECLA 2 FOI PRESSIONADA
RET

TECLA3: CLR LINHA2 ; LIMPA LINHA2 DO TECLADO


JB COLUNA1,TECLA4 ; SE COLUNA1 = 1, VER COLUNA2
MOV R0,#03H ; SE COLUNA1 = 0 TECLA 3 FOI PRESSIONADA
Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 09 de junho de 2011. Prof. José Wilson Lima Nerys

RET

TECLA4: JB COLUNA2,NADA ; SE COLUNA2 = 1, NENHUMA TECLA FOI PRESSIONADA


MOV R0,#04H ; SE COLUNA2 = 0 TECLA 4 FOI PRESSIONADA
NADA: NOP
RET

ATRASO: MOV R7,#250 ; ATRASO PARA ROTAÇÃO DOS LEDS


V2: MOV R6,#250
DJNZ R6,$
DJNZ R7,V2
RET
END

5. Faça um programa onde o microcontrolador da Fig. 1 recebe dados de um computador, através da porta
serial, a uma taxa (baud rate) de 4800 bps, no modo 1 (assíncrono de 8 bits). Se o caractere recebido for
a letra “M” (4DH) o microcontrolador envia para a memória EEPROM a frase „ DADOS
ARMAZENADOS NA EEPROM: ‟. Se o caractere recebido for a letra “C” (43H), o microcontrolador
envia para o computador a frase „ PREPARANDO PARA RECEBER DADOS: ‟. O cristal oscilador é
de 11,0592 MHz. Valor: 3,0

Fig. 1 – Sistema utilizando o microcontrolador AT89S52 da família 8051

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 09 de junho de 2011. Prof. José Wilson Lima Nerys

Rótulo Mnemônico Comentários


$mod51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH ; ENDEREÇO INICIAL DA PILHA = 2FH
MOV SCON,#40H ; SERIAL NO MODO 1
MOV TMOD,#20H ; TEMP 1 NO MODO 2
MOV TH1,#0FAH ; BAUD RATE: 4800 bps
MOV TL1,#0FAH
SETB TR1 ; DISPARA O TEMPORIZADOR 1  GERA BAUD RATE

; RECEBE CARACTERES DO COMPUTADOR


V1: MOV DPTR,#0800H ; DPTR = ENDEREÇO DA EEPROM
MOV R7,#00H ; CONTADOR PARA LEITURA DOS TEXTOS
CLR RI ; PREPARA PARA RECEBER DADOS
SETB REN ; HABILITA RECEPÇÃO SERIAL
JNB RI,$ ; AGUARDA FIM DA RECEPÇÃO
MOV A,SBUF ; TRANSFERE PARA ACUMULADOR DADO RECEBIDO

; VERIFICA SE O CARACTERE RECEBIDO É A LETRA “M”


CJNE A,#4DH,PROXIMO ; SE NÃO FOR “M”, DESVIA PARA VER SE É “C”
CLR REN ; SE FOR “M” INICIA PROCESSO DE ENVIO PARA EEPROM
V2: PUSH DPH ; GUARDA DPTR DA EEPROM
PUSH DPL
MOV DPTR,#MSGMEM ; DPTR = ENDEREÇO DA MENSAGEM PARA A EEPROM
MOV A,R7 ; ACUMULADOR RECEBE VALOR ATUAL DO CONTADOR
MOVC A,@A+DPTR ; LEITURA DO TEXTO PARA A EEPROM
CJNE A,#0FFH,ENVIA1 ; VERIFICA SE CHEGOU AO FINAL DO TEXTO
SJMP V1 ; QUANDO O TEXTO ACABA, VOLTA PARA V1

ENVIA1: POP DPL ; RECUPERA DPTR DA EEPROM


POP DPH
MOVX @DPTR,A ; ENVIA CONTEUDO DO ACUMULADOR PARA EEPROM
INC DPTR ; INCREMENTA DPTR DA EEPROM
INC R7 ; INCREMENTA CONTADOR DO TEXTO
SJMP V2 ; CONTINUA LEITURA DO TEXTO E ENVIO PARA EEPROM

; VERIFICA SE O CARACTERE RECEBIDO É A LETRA “C”


PROXIMO: CJNE A,#43H,V1 ; SE NÃO FOR “C”, VOLTA PARA V1
CLR REN ; SE FOR “C” ENVIA MSG PARA O MICROCOMPUTADOR
MOV DPTR,#MSGMICRO ; DPTR = ENDEREÇO DA MENSAGEM PARA O MICRO
V3: MOV A,R7 ; ACUMULADOR RECEBE VALOR ATUAL DO CONTADOR
MOVC A,@A+DPTR ; LEITURA DO TEXTO PARA O MICROCOMPUTADOR
CJNE A,#0FFH,ENVIA2 ; VERIFICA SE CHEGOU AO FINAL DO TEXTO
SJMP V1 ; QUANDO O TEXTO ACABA, VOLTA PARA V1

ENVIA2: CLR TI ; PREPARA PARA TRANSMISSÃO SERIAL


MOV SBUF,A ; ENVIA CONTEUDO DE A VIA SERIAL
JNB TI,$ ; AGUARDA FIM DA TRANSMISSÃO
Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 09 de junho de 2011. Prof. José Wilson Lima Nerys

INC R7 ; INCREMENTA CONTADOR DO TEXTO


SJMP V3 ; CONTINUA LEITURA DO TEXTO E ENVIO VIA SERIAL

MSGMEM: DB ' DADOS ARMAZENADOS NA EEPROM: ',0FFH


MSGMICRO: DB 0DH, ' DADOS ARMAZENADOS NA EEPROM: ',0FFH

END

ALGUNS REGISTRADORES ESPECIAIS

TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0


TMOD G1\ C\T M11 M01 G0\ C\T M10 M00
IE EA X X ES ET1 EX1 ET0 EX0
IP X X X OS PT1 PX1 PT0 PX0
PSW CY AC F0 RS1 RS0 0V X P
SCON SM1 SM2 SM3 REN TB8 RB8 TI RI

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 22 de novembro de 2011. Prof. José Wilson Lima Nerys

MICROPROCESSADORES E MICROCONTROLADORES

PROVA 2 – UMA SOLUCAO POSSÍVEL


Aluno: Matrícula:

1. Escreva as instruções necessárias para atender a cada uma das configurações solicitadas. Valor: 2,0
(a) Interrupção externa zero por nível e interrupção externa 1 por transição.
MOV IE,#85H  IE = 1000 0101  EA=1; EX1=1; EX0=1
MOV TCON,#04H  IT1 = 1; IT0 = 0

(b) Temporizador 1 configurado para operar no modo 1 e contar 10.000 pulsos.


MOV TMOD,#10H  Temp 1 no modo 1
MOV TH1,#0D8H  Conta de 55.535 (D8EFH) até 65.535 (FFFFH)
MOV TL1,#0EFH

(c) Temporizador 0 configurado para operar no modo 2 com recarga igual a 90H.
MOV TMOD,#02H  Temp 0 no modo 2
MOV TH0,#90H  Recarga de 90H
MOV TL0,#90H  Contagem começa em 90H

(d) Comunicação serial operando no modo 1 (assíncrono de 8 bits) com taxa de transferência de 2400
bps, com um cristal oscilador é de 11,0592 MHz.
MOV SCON,#40H  SCON = 0100 0000  SM1=0; SM2=1
MOV TMOD,#20H  Temp 1 no modo 2
MOV TH1,#0F4H  Recarga para baud rate de 2400 bps
MOV TL1,#0F4H  Começa contagem a partir de F4H

2. Foi montado um sistema com mapeamento de memória, onde uma pastilha de memória de 1 Kbyte, um
conjunto de 8 LEDs e um LCD são endereçados com o auxílio de um decodificador 74LS138, mostrado
na figura a seguir. Indique (e mostre o procedimento) quais as linhas de endereço deverão ser
conectadas às entradas A2 A1 e A0, de forma que a memória seja acionada através da saída 0 do
decodificador, os LEDs através da saída 4 e o LCD através da saída 7. E indique também a faixa de
endereços correspondente a cada região. Cada região deve ser de 1 K. Obs.: O endereço inicial da região
da memória é 0000H e os endereços das regiões seguintes são subsequentes. Valor: 2,0.

Um vez que as regiões são de 1 K de memória (210 = 1024 = 1 Kbytes), são necessárias 10 linhas de
endereço (de A0 a A9). Assim, as regiões de 0 a 7 são mapeadas como segue:

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 22 de novembro de 2011. Prof. José Wilson Lima Nerys

Reg A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 HEXA


Inicio 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000
0
Fim 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 03FF
Inicio 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0400
1
Fim 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 07FF
Inicio 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0800
2
Fim 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 0BFF
Inicio 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0C00
3
Fim 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0FFF
Inicio 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1000
4
Fim 0 0 0 1 0 0 1 1 1 1 1 1 1 1 1 1 03FF
Inicio 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1400
5
Fim 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 17FF
Inicio 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1800
6
Fim 0 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1BFF
Inicio 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 1C00
7
Fim 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1FFF

3. Na figura a seguir os sensores de presença S0, S1 e S2 estão conectados respectivamente aos pinos P1.0,
P1.1 e P1.2. Na presença de obstáculo esses pinos passam para o nível lógico 0. Os motores são
acionados conforme as tabelas mostradas a seguir. Comente cada linha do trecho de programa a seguir
(valor 1,0) e descreva o funcionamento desse trecho do programa (valor 1,0).

Motor M2 Motor M1
P2.3 P2.2 Estado do motor P2.1 P2.0 Estado do motor
0 0 Motor desligado 0 0 Motor desligado
0 1 Sentido horário 0 1 Sentido horário
1 0 Sentido anti-horário 1 0 Sentiodo anti-horário
1 1 Motor desligado 1 1 Motor desligado

Rótulo Mnemônico Rótulo Mnemônico Rótulo Mnemônico Rótulo Mnemônico


$MOD51 ORG 30H V2: CLR P2.0 V4: CLR P2.0
S0 EQU P1.0 V1: JNB S0,V2 SETB P2.1 SETB P2.1
S1 EQU P1.1 JNB S1,V3 SETB P2.2 CLR P2.2
S2 EQU P1.2 JNB S2,V4 CLR P2.3 SETB P2.3
SETB P2.0 SJMP V1 SJMP V1
ORG 00H CLR P2.1
LJMP V1 CLR P2.2 V3: SETB P2.0 END
SETB P2.3 CLR P2.1
SJMP V1 SETB P2.2
CLR P2.3
SJMP V1

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 22 de novembro de 2011. Prof. José Wilson Lima Nerys

Comentário:
Rótulo Mnemônico Comentário
ORG 30H Programa inicia no endereço 30H da ROM
V1: JNB S0,V2 O estado do sensor S0 é verificado. Se S0=0, desvia para V2; se S0=1, próxima linha
JNB S1,V3 O estado do sensor S1 é verificado. Se S1=0, desvia para V3; se S1=1, próxima linha
JNB S2,V4 O estado do sensor S2 é verificado. Se S2=0, desvia para V4; se S2=1, próxima linha
SETB P2.0
Seta o bit P2.0 e limpa o bit P2.1. Assim, o motor 1 gira no sentido horário
CLR P2.1
CLR P2.2 Limpa o bit P2.2 e seta o bit P2.3. Assim, o motor 2 gira no sentido anti-horário
SETB P2.3 O resultado é que o carro se desloca para a frente. Não tem obstáculo
SJMP V1

Trecho V2: O processamento é desviado para esse trecho quando o sensor S0 detecta um obstáculo. O
sentido de rotação de ambos os motores é invertido, ou seja, o carro se desloca para trás.

Trecho V3: O processamento é desviado para esse trecho quando o sensor S1 detecta um obstáculo. O
motor M1 é mantido no sentido horário, enquanto o motor M2 tem o sentido invertido.
Assim, o carro gira para a esquerda (obstáculo à direita).

Trecho V4: O processamento é desviado para esse trecho quando o sensor S2 detecta um obstáculo. O
motor M2 é mantido no sentido anti-horário, enquanto o motor M1 tem o sentido invertido.
Assim, o carro gira para a direita (obstáculo à esquerda).

Após a atualização do estado dos motores o processamento retorna para o inicio, para verificação do
estado dos sensores.

4. Faça um programa onde uma contagem decimal de dois dígitos é mostrada em dois displays de 7
segmentos. Um dos displays está conectado ao nibble inferior da porta P2 e o outro está conectado ao
nibble superior dessa mesma porta (cada um com seu decodificador). A interrupção zero é usada para
iniciar e parar a contagem e a interrupção um é usada para definir se a contagem é crescente ou
decrescente. As interrupções são por transição. Use uma subrotina de atraso de tempo definida com dois
registradores, cada um com um valor inicial igual a 250 decimal. Valor: 2,0

Rótulo Mnemônico Comentários


$MOD51
ORG 00H
LJMP INICIO

CONTROLE BIT 00H


ORDEM BIT 01H

ORG 03H
CPL CONTROLE
RETI

ORG 13H
CPL ORDEM
RETI

ORG 30H
INICIO: MOV SP,#2FH ; O endereço inicial da pilha é 2Fh

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 22 de novembro de 2011. Prof. José Wilson Lima Nerys

MOV IE,#85H ; Habilita interrupções externas 0 e 1


MOV TCON,#05H ; Interrupções por transição
MOV A,#00H ; Valor inicial do acumulador

V1: JNB CONTROLE,V1 ; Enquanto CONTROLE=0  Aguarda


; Se CONTROLE=1  Executa contagem crescente
CRESC: JB ORDEM,DECRESC ; Se ORDEM=1  Executa contagem decrescente
MOV P2,A ; Transfere para P2 (displays) o conteúdo do acumulador
LCALL ATRASO
ADD A,#01H ; Adiciona 1 ao acumulador
DA A ; Faz o ajuste decimal do acumulador
SJMP V1

DECRESC: MOV P2,A ; Transfere para P2 (displays) o conteúdo do acumulador


LCALL ATRASO
ADD A,#99H ; Adiciona 99H, de modo que a contagem seja decrescente
DA A ; Faz o ajuste decimal do acumulador
SJMP V1

ATRASO: MOV R0,#250 ; Subrotina de atraso de tempo


V2: MOV R1,#250
DJNZ R1,$
DJNZ R0,V2
RET
END

5. Faça um programa onde uma comunicação serial é estabelecida entre um microcontrolador da família
8051 e um computador, a uma taxa (baud rate) de 1200 bps, no modo 1 (assíncrono de 8 bits). Uma
variável de controle do tipo bit é usada para estabelecer o sentido do fluxo de dados. Se a variável de
controle estiver em nível lógico zero, o microcontrolador é configurado para receber dados do
computador e transferir esses dados para uma memória EEPROM de 4 K, cujo endereço inicial é
0000H. Se a variável de controle estiver em nível lógico alto, o microcontrolador é configurado para
transferir os dados da memória (a partir do endereço 0000H) para o computador. O cristal oscilador é de
11,0592 MHz. Use a interrupção externa zero para complementar a variável de controle, cujo valor
inicial deve ser zero. Valor: 2,0

Rótulo Mnemônico Comentários


$MOD51
ORG 00H
LJMP INICIO

FLUXO BIT 00H

ORG 03H RETI


CPL FLUXO ; Complementa o bit que controla o fluxo
MOV DPTR,#0000H ; Reinicia o endereço da memória a cada interrupção
CLR REN ; Desabilita a recepção
SETB RI ; Necessário para sair do loop da recepção
SETB TI ; Necessário para sair do loop da transmissão
RETI

ORG 30H
Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 22 de novembro de 2011. Prof. José Wilson Lima Nerys

INICIO: MOV SP,#2FH ; O endereço inicial da pilha é 2Fh


MOV IE,#81H ; Habilita interrupção externas 0
MOV TCON,#01H ; Interrupções por transição
MOV SCON,#40H ; Serial configurada no modo 1
MOV TMOD,#20H ; Temporizador 1 no modo 1
MOV TH1,#0E8H ; Recarga para baud rate de 1200 bps
MOV TL1,#0E8H
MOV DPTR,#0000H ; Endereço inicial do EEPROM
CLR FLUXO ; Limpa a variável que controla o fluxo
SETB TR1 ; Dispara o temporizador 1  gera taxa de comunicação

V1: JNB FLUXO,V2 ; Se FLUXO =0  Envia dado do computador para a memória


; Se FLUXO = 1  Envia dado da memória para o computador
V3: CLR TI ; Limpa flag de transmissão
MOVX A,@DPTR ; Acumulador recebe conteúdo da EEPROM
MOV SBUF,A ; Transfere do acumulador para o computador
JNB TI,$ ; Aguarda encerrar transmissão
JNB FLUXO,V1 ; Necessário para sair da transmissão quando há interrupção
INC DPTR ; Incrementa endereço da memória
SJMP V1 ; Volta para verificar estado da variável FLUXO

V2: SETB REN ; Habilita recepção serial


CLR RI ; Limpa bit de recepção
JNB RI,$ ; Aguarda fim de recepção. RI é forçado para 1 para sair da recepção
JB FLUXO,V1 ; Necessário para sair da recepção quando há interrupção
MOV A,SBUF ; Acumulador recebe conteúdo do computador
CLR RI ; Limpa flag de recepção
MOVX @DPTR,A ; Transfere para a memória o conteúdo do acumulador
INC DPTR ; Incrementa endereço da memória
SJMP V1 ; Volta para verificar estado da variável FLUXO

END

ALGUNS REGISTRADORES ESPECIAIS


TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TMOD G1\ C\T M11 M01 G0\ C\T M10 M00
IE EA X X ES ET1 EX1 ET0 EX0
IP X X X OS PT1 PX1 PT0 PX0
PSW CY AC F0 RS1 RS0 0V X P
SCON SM1 SM2 SM3 REN TB8 RB8 TI RI

Taxas de transmissão mais comuns

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 22 de novembro de 2011. Prof. José Wilson Lima Nerys

Timer 1
Baud Rate (bits/seg) Freq. Osc. (MHz) SMOD C/Tbarra Modo Valor Recar.
Modo 0 Máx: 1MHz 12 X X X X
Modo 2 Máx: 375K 12 1 X X X
Modo 1, 3: 62,5K 12 1 0 2 FFh
19,2K 11,059 1 0 2 FDh
9,6K 11,059 0 0 2 FDh
4,8K 11,059 0 0 2 FAh
2,4K 11,059 0 0 2 F4h
1.2K 11,059 0 0 2 E8h
137,5 11,059 0 0 2 1Dh
110 6 0 0 2 72h
110 12 0 0 1 FEEBh

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 10 de maio de 2012. Prof. José Wilson Lima Nerys

MICROPROCESSADORES E MICROCONTROLADORES

PROVA 2 – UMA SOLUÇÃO POSSÍVEL


Aluno: Matrícula:

A Figura a seguir refere-se às questões 1, 2 e 3.

1. Analise o programa a seguir.

RÓTULO INSTRUÇÕES RÓTULO INSTRUÇÕES


$MOD51 V2: MOV A,#08H
LJMP INICIO V22: MOV P0,A
RR A
ORG 30H LCALL ATRASO
INICIO: MOV SP,#2FH CJNE A,#80H,V22
V3: JNB P3.0,V1 SJMP V3
JNB P3.1,V2
SJMP V3 ATRASO: MOV R7,#250
V4: MOV R6,#250
V1: MOV A,#01H DJNZ R6,$
V11: MOV P0,A DJNZ R7,V4
RL A RET
LCALL ATRASO
CJNE A,#10H,V11 END
SJMP V3
Tendo o programa e a figura como base, pergunta-se:

O que ocorre quando as chaves CH1 e CH2 estão abertas? Valor: 0,5

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 10 de maio de 2012. Prof. José Wilson Lima Nerys

Solução:

Observação para todos os itens solicitados:


Quando as chaves CH1 e CH2 estão abertas (desligadas), significa que os pinos P3.0 e P3.1 estão em
nível lógico alto, uma vez que nenhuma instrução anterior foi usada para levar esses pinos ao nível lógico
baixo. Quando as chaves CH1 e CH2 estão fechadas (ligadas), os pinos P3.0 e P3.1 são conectados ao
“Terra”, ou seja, ficam em nível lógico baixo.

Assim, quando as chaves CH1 e CH2 estão abertas, a instrução JNB P3.0,V1 faz o processamento ir
para a linha seguinte (se P3.0 estivesse em nível lógico baixo desviaria para V1). Na linha seguinte a
instrução JNB P3.1,V2 também faz o processamento ir para a linha seguinte (se P3.1 estivesse em nível
lógico baixo desviaria para V2). Na linha seguinte a instrução SJMP V3 desvia o processamento para a
instrução JNB P3.0,V1. Em resumo: o programa fica em um laço de espera aguardando uma das duas chaves
(CH1 ou CH2) ser ligada.

O que ocorre quando o programa inicia com as duas chaves CH1 e CH2 fechadas? Valor: 0,5

Solução:
Com as chaves CH1 e CH2 fechadas (ligadas), os pinos P3.0 e P3.1 ficam em nível lógico baixo. A
primeira instrução a ser testada é JNB P3.0,V1, que faz o processamento desviar para V1 (CH1
permanecendo fechada a chave CH2 nunca será testada). Em V1 os valores 01H, 02H, 04H e 08H (resultado
da rotação para a esquerda com “RL A” são enviados para o motor de passo (conectado à porta P0). Assim, o
motor de passo gira para um lado (lado 1). Quando a rotação chegar ao valor 10H (logo após 08H), o
processamento retorna para o laço das chaves CH1 e CH2. Enquanto a chave CH1 permanecer fechada o
motor continua girando para o lado 1.

O que ocorre quando a chave CH1 está fechada e a chave CH2 aberta? Valor: 1,0

Solução:
A situação aqui é idêntica à anterior. Enquanto a chave CH1 permanecer fechada a chave CH2 nunca
será testada e, portanto, seu estado é indiferente. Assim, o motor gira para o lado 1, como no item anterior.

O que ocorre quando a chave CH1 está aberta e a chave CH2 fechada? Valor: 1,0

Solução:
Se a chave CH1 estiver aberta o nível lógico em P3.0 é alto e, portanto, a instrução JNB P3.0,V1 faz
o processamento ir para a próxima linha. Estando a CH2 fechada, o nível lógico de P3.1 é baixo e, portanto,
a instrução JNB P3.1,V2 faz o processamento desviar para V2. Em V2 os valores 08H, 04H, 02H e 01H
(resultado da rotação para a direita com “RR A” são enviados para o motor de passo (conectado à porta P0).
Assim, o motor de passo gira para o lado 2, contrário ao do item anterior. Quando a rotação chegar ao valor
80H (logo após 01H), o processamento retorna para o laço das chaves CH1 e CH2. Enquanto a chave CH1
permanecer aberta e a chave CH2 fechada, o motor continua girando para o lado 2.

2. Faça um programa que mostre uma contagem decimal decrescente nos displays de 7-segmentos da
figura, a partir de um valor definido pelo usuário, através da interrupção externa 0. Valor: 3,5
(a) O programa mostra, inicialmente, o valor 00 nos displays de 7-segmentos e fica aguardando a
interrupção externa 0. Inicialmente a interrupção 1 não está habilitada;
(b) A interrupção externa 0 é usada, por transição, para ajustar o valor de início da contagem. Esse valor
deve ser mostrado nos displays. Ao atender a interrupção 0 a interrupção 1 é habilitada.
(c) A interrupção externa 1, por nível, é usada para fazer a contagem decrescente. Enquanto houver
pedido de interrupção a contagem continua até 00. Ao chegar no valor 00 a interrupção externa 1 é
desabilitada. Ela só será habilitada novamente através da interrupção 0.

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 10 de maio de 2012. Prof. José Wilson Lima Nerys

SOLUÇÃO:
Obs.: Pela figura, os displays de 7 segmentos estão conectados à porta P2
Rótulo Instruções Comentário
$mod51
ORG 00H
LJMP INICIO ; Desvia para o início do programa

ORG 03H ; Endereço da interrupção zero


LJMP AJUSTE ; Desvia para AJUSTE

ORG 13H ; Endereço da interrupção 1


LJMP CONTAGEM ; Desvia para CONTAGEM

ORG 30H
INICIO: MOV SP,#2FH ; Apontador de pilha SP = 2FH
MOV IE,#81H ; Interrupção zero habilitada. EA=1; EX0 = 1
MOV TCON,#01H ; Interrupção zero por transição
MOV A,#00H ; Acumulador começa com valor 00H
MOV P2,A ; Os displays recebem o conteúdo de A, ou seja, 00H.
SJMP $ ; Laço infinito esperando interrupção.

AJUSTE: SETB EX1 ; Habilita a interrupção externa 1 durante atendimento da INT0


ADD A,#01H ; Adiciona 1 ao acumulador
DA A ; Faz o ajuste decimal do acumulador
MOV P2,A ; Os displays recebem o conteúdo de A
RETI ; Retorna da interrupção zero

CONTAGEM: ADD A,#99H ; Subtrai 1 do acumulador usando adição com complemento de 10


DA A ; Faz o ajuste decimal do acumulador
MOV P2,A ; Os displays recebem o conteúdo de A
LCALL ATRASO ; Chama subrotina de atraso de tempo
CJNE A,#00H,V1 ; Compara A com 00H. Se A ≠ 00H, desvia para V1
CLR EX1 ; Quando A = 00H, desabilita a interrupção externa 1 antes de sair
V1: NOP ; Nenhuma operação
RETI ; Retorna da interrupção 1

ATRASO: MOV R5,#5 ; Subrotina de atraso de tempo


V3: MOV R7,#200
V2: MOV R6,#200
DJNZ R6,$
DJNZ R7,V2
DJNZ R5,V3
RET ; Retorna da subrotina de atraso de tempo

END

3. Tendo como base a figura mostrada, faça um programa com as seguintes características: Valor: 3,5
(a) O programa deve habilitar as interrupções externas 0 e 1 por transição e aguardar em um laço
infinito.
(b) Ao ser solicitada a interrupção externa 1, uma contagem decimal crescente de 00 a 99 deve ser
mostrada nos displays.
(c) Ao ser solicitada a interrupção externa 0, todos os LEDs devem piscar 10 vezes;
(d) A interrupção externa 0 deve ser atendida a qualquer momento, mesmo durante a execução da
interrupção externa 1. Nesse caso, ao retornar para a subrotina da interrupção externa 1, a contagem
deve ser retomada da posição em que estava antes de atender a interrupção 0;
(e) Ao final das subrotinas de interrupção o processamento deve voltar para o laço infinito.

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 10 de maio de 2012. Prof. José Wilson Lima Nerys

SOLUÇÃO:
Obs.: Pela figura, os displays de 7 segmentos estão conectados à porta P2 e os LEDs à porta P1
Rótulo Instruções Comentário
$mod51
ORG 00H
LJMP INICIO ; Desvia para o início do programa

ORG 03H ; Endereço da interrupção zero


LJMP ZERO ; Desvia para ZERO

ORG 13H ; Endereço da interrupção 1


LJMP UM ; Desvia para UM

ORG 30H
INICIO: MOV SP,#2FH ; Apontador de pilha SP = 2FH
MOV IE,#85H ; Interrupções externas 0 e 1 habilitadas. IE = 1000 0101
MOV TCON,#05H ; Interrupções INT0 e INT1 por transição
MOV IP,#01H ; Interrupção externa 0 com prioridade 1 (para ser atendida a qq momento)
SJMP $ ; Laço infinito esperando interrupções.

ZERO: PUSH ACC ; Guarda na pilha conteúdo do acumulador. Preserva valor anterior de A.
MOV R0,#10 ; Contador R0 recebe valor 10 decimal (para piscar 10 vezes)
V1: MOV P1,#00H ; O valor 00H é enviado para os LEDs. Eles apagam.
LCALL ATRASO ; Chama subrotina de atraso de tempo
MOV P1,#0FFH ; O valor FFH é enviado para os LEDs. Eles acendem.
LCALL ATRASO ; Chama subrotina de atraso de tempo
DJNZ R0,V1 ; Decrementa R0. Enquanto R0 ≠ 0, desvia para V1
POP ACC ; Recupera da pilha valor de A. Recupera valor de A antes da subrotina.
RETI ; Retorna da interrupção zero

UM: PUSH ACC ; Guarda na pilha o valor atual do acumulador


MOV A,#00H ; Acumulador recebe o valor 00H
V2: MOV P2,A ; Displays recebem o valor atual da contagem, feita através do acumulador
LCALL ATRASO ; Chama subrotina de atraso de tempo
ADD A,#01H ; Adiciona 1 ao acumulador
DA A ; Faz o ajuste decimal do acumulador
CJNE A,#00H,V2 ; Compara A com 00H. Se A ≠ 00H, desvia para V1. A contagem não acabou
V1: POP ACC ; Se A = 00H, encerra contagem e recupera conteúdo do acumulador
RETI ; Retorna da interrupção 1

ATRASO: MOV R5,#4 ; Subrotina de atraso de tempo


V3: MOV R7,#200
V4: MOV R6,#200
DJNZ R6,$
DJNZ R7,V4
DJNZ R5,V3
RET ; Retorna da subrotina de atraso de tempo
END

ALGUNS REGISTRADORES ESPECIAIS


TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TMOD G1\ C\T M11 M01 G0\ C\T M10 M00
IE EA X X ES ET1 EX1 ET0 EX0
IP X X X OS PT1 PX1 PT0 PX0
PSW CY AC F0 RS1 RS0 0V X P
SCON SM1 SM2 SM3 REN TB8 RB8 TI RI

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 10 de maio de 2012. Prof. José Wilson Lima Nerys

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

MICROPROCESSADORES E MICROCONTROLADORES

PROVA 2 - RESPOSTA ESPERADA

1. Escreva as instruções para as configurações pedidas. Valor: 2,0

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 X X ES ET1 EX1 ET0 EX0


1 0 0 0 0 1 1 1

TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0


0 0 0 0 0 1 0 1

IP X X X PS PT1 PX1 PT0 PX0


0 0 0 0 0 0 0 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 C/T\ M1.1 M0.1 G0 C/T\ M1.0 M0.0


0 0 0 1 0 0 0 0

IE EA X X ES ET1 EX1 ET0 EX0


1 0 0 0 1 0 0 0

MOV TMOD,#10H
MOV TH1,#3CH
MOV TL1,#0AFH
MOV IE,#88H

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

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
Parte 3

ORG 00H MOV R1,#10


Parte 1

LJMP PROB2 V4: LCALL ATRASO


DJNZ R1,V4
ORG 30H SJMP V1
PROB2: MOV SP,#2FH
MOV TMOD,#01H OPERA1: SETB P1.2
Parte

MOV R0,#10 CLR P1.3


4

MOV R1,#20
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

V1: CLR P1.2 V3: CPL P1.6


CLR P1.3 LCALL ATRASO
CLR P1.6 DJNZ R1,V3

Parte 2
SJMP V11
JB CH1,V2
SJMP OPERA1 ATRASO: CLR TF0
MOV TH0,#63H
V2: JB CH2,V1 MOV TL0,#0BFH

Parte 5
SETB TR0
JNB TF0,$
DJNZ R0,ATRASO
MOV R0,#10
CLR TR0
RET
END

Figura 1: Circuito simplificado de acionamento


acionamento do motor de corrente contínua

Tabela 2: Lógica de operação


peração do motor Tabela 3: Recarga do temporizador-modo
temporizador 1
IN1 IN2 Operação do motor Início da Contagem TH0 TL0
0 0 Motor parado 5.535 15H 9FH
0 1 Rotação sentido direto 15.535 3CH AFH
1 0 Rotação sentido reverso 25.535 63H BFH
1 1 Motor parado 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 o
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)
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 queue 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 Mnemônico Comentários


LINHA1 EQU 10H ; Registrador 10H guarda os valores enviados para P0
LINHA2 EQU 11H ; Registrador 11H
H guarda os valores enviados para P1
P

LINHA3 EQU 12H ; Registrador 12H guardaa os valores enviados para P2


P

ORG 00H ; A próxima instrução está no endereço 00H


LJMP PROB2 ; Desvia o processamento para o endereço PROB2

ORG 03H ; A próxima instrução está no endereço 03H (Interrupção externa zero)
LJMP DIREITA ; Desvia para o endereço DIREITA

ORG 13H ; A próxima instrução está no endereço 13H (interrupção externa um)
LJMP ESQUERDA ; Desvia para o endereço ESQUERDA

ORG 30H
PROB2: MOV SP,#2FH ; Pilha inicia no endereço 2FH
MOV IE,#85H ; Habilita as interrupções externas 0 e 1
MOV TCON,#01H ; Interrupção externa zero por transição
MOV R7,#8 ; Contador do deslocamento para a direita
MOV LINHA1,#88H
HA1,#88H ; Valor inicial da Linha 1
MOV LINHA2,#55H ; Valor inicial da Linha 2
MOV LINHA3,#22H ; Valor inicial da Linha 3

SJMP $ ; Loop infinito esperando interrupção

DIREITA: MOV P0,LINHA1 ; Transfere para P0 o conteúdo da Liha 1


MOV P1,LINHA2 ; Transfere para P1 o conteúdo da Liha 2
MOV P2,LINHA3 ; Transfere para P2 o conteúdo da Liha 3
LCALL ATRASO ; Chama subrotina de atraso de tempo

MOV A,LINHA1 ; Transfere para A o conteúdo da Linha 1 (necessário para a rotação)


RR A ; Rotaciona conteúdo de A para a direita
MOV LINHA1,A ; Devolve o conteúdo de A (rotacionado) para a Linha 1

MOV A,LINHA2 ; Transfere para A o conteúdo da Linha 2 (necessário para a rotação)


RR A ; Rotaciona conteúdo de A para a direita
MOV LINHA2,A ; 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. Prof. José Wilson Lima Nerys

RR A ; Rotaciona conteúdo de A para a direita


MOV LINHA3,A ; Devolve o conteúdo de A (rotacionado) para a Linha 3

DJNZ R7,DIREITA ; Decrementa o contador R7. Enquanto R7 não for zero, volta para DIREITA
MOV R7,#8 ; Recarrega R7 com o valor 8
RETI ; Sai da subrotina de interrupção

ESQUERDA: MOV P0,LINHA1 ; Transfere para P0 o conteúdo da Liha 1


MOV P1,LINHA2 ; Transfere para P1 o conteúdo da Liha 2
MOV P2,LINHA3 ; Transfere para P2 o conteúdo da Liha 3
LCALL ATRASO ; Chama subrotina de atraso de tempo

MOV A,LINHA1 ; Transfere para A o conteúdo da Linha 1 (necessário para a rotação)


RL A ; Rotaciona conteúdo de A para a esquerda
MOV LINHA1,A ; Devolve o conteúdo de A (rotacionado) para a Linha 1

MOV A,LINHA2 ; Transfere para A o conteúdo da Linha 2 (necessário para a rotação)


RL A ; Rotaciona conteúdo de A para a esquerda
MOV LINHA2,A ; 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)


RL A ; Rotaciona conteúdo de A para a esquerda
MOV LINHA3,A ; Devolve o conteúdo de A (rotacionado) para a Linha 3
RETI ; Sai da subrotina de atraso de tempo

ATRASO: MOV R0,#250 ; Subrotina de atraso de tempo baseada nos registradores R0 e R1


V1: MOV R1,#250
DJNZ R1,$
DJNZ R0,V1
RET

END

Tabela 4: Alguns Registradores Especiais Tabela 5: Endereços das interrupções


Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Interrupção Endereço de
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 Solicitada desvio
IE EA X X ES ET1 EX1 ET0 EX0 Reset 0000h
IP X X X PS PT1 PX1 PT0 PX0 INT0\ 0003h
PSW CY AC F0 RS1 RS0 OV X P Timer/counter 0 000Bh
TMOD G1 C/T\ M1.1 M0.1 G0 C/T\ M1.0 M0.0 INT1\ 0013h
Timer/counter 1 001Bh
Canal Serial 0023h

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 10 de julho de 2013. Prof. José Wilson Lima Nerys

MICROPROCESSADORES E MICROCONTROLADORES

PROVA 2 - Segunda Chamada/Substitutiva (Solução)

1. Analise o programa a seguir, escrito em assembly do 8051, e responda às questões. Valor: 4,0

RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO


ORG 00H V2: MOV A,#01H
LJMP V1 V4: MOV P1,A
RL A
Bloco 1
ORG 03H LCALL ATRASO
LJMP V2 CJNE A,#10H,V4
RETI
ORG 13H
LJMP V3 V3: MOV A,#0FH
MOV P1,A
ORG 30H CPL A
Bloco 2
V1: MOV SP,#2FH LCALL ATRASO
MOV IE,#85H MOV P1,A
MOV TCON,#04H RETI
MOV IP,#04H ATRASO: MOV R1,#200
SJMP $ DJNZ R1,$
RET
END
a) Como estão configuradas as interrupções externas?
Solução:
MOV IE,#85H --> Habilita as interrupções externas 0 e 1
MOV TCON,#04H --> A interrupção externa 0 é por nível e a 1, por transição
MOV IP,#04H --> A interrupção externa 1 tem prioridade alta

b) Explique o funcionamento do Bloco 1.


Solução:
O Bloco 1 é acionado através da interrupção externa 0 (por nível). A cada vez que esse bloco é chamado,
ocorre a rotação de bits na porta P1, do valor 0000 0001 até o valor 0000 1000. O processamento volta para o loop
infinito "SJMP $" quando A alcança o valor 0001 0000.

c) Explique o funcionamento do Bloco 2.


Solução:
O Bloco 2 é acionado através da interrupção externa 1, por transição. A cada transição do pino P3.3 de 1 para
0, o valor 0FH é enviado para a porta P1, complementado e, após um intervalo de tempo (ATRASO), o valor
complentado (F0H) é enviado para a porta P1.

d) Suponha que o processamento está no Bloco 1 e a interrupção externa 1 é solicitada. O que ocorre?
Solução:
A interrupção externa 1 tem prioridade alta. Assim, ao ser solicitada, mesmo durante a execução do Bloco 1,
ela é atendida, executando o Bloco 2. Se o processamento estava no Bloco 1, ele volta para o Bloco 1, ao final da
execução do Bloco 2.

2. A figura a seguir representa um sistema onde um motor de passo é livre para se deslocar lateralmente
(esquerda/direita). Cada 4 passos do motor corresponde a um deslocamento de 1 cm. Em cada extremidade existe
uma chave (sensor) que, pressionada, leva o pino correspondente ao nível lógico zero. Faça um programa, usando
o assembly do 8051, onde o motor de passo é acionado em dois modos diferentes. Uma chave ligada da pino P3.0
é usada para escolher o modo de operação. Valor: 6,0

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 10 de julho de 2013. Prof. José Wilson Lima Nerys

Modo 1 (Pino P3.0 = 0)


O motor se desloca para a esquerda e para a direita, de forma ininterrupta até alcançar a chave. A chave
pressionada faz o motor de passo inverter o sentido de deslocamento. As interrupções externas devem estar
habilitadas por transição. As interrupções são solicitadas através das chaves.
Modo 2 (Pino P3.0 = 1)
O motor se desloca para a esquerda e para a direita, de forma ininterrupta entre os limites
limite de - 5 cm e 5 cm.

Solução:
Rótulo Mnemônico Comentários
MODO EQU P3.0 ; Variável para escolha entre os modos 1 e 2

ORG 00H
LJMP PASSO

ORG 03H
CPL F0 ; Qdo a chave S1 é pressionada, complementa F0
RETI

ORG 13H
CPL F0 ; Qdo a chave S1 é pressionada, complementa F0
RETI

ORG 30H
PASSO: MOV SP,#2FH
MOV IE,#85H ; Interrupções externas habilitadas
MOV TCON,#05H ; INT0 e INT1 por transição
MOV R0,#5 ; Contador de deslocamento
MOV R1,#0 ; Offset para leitura das tabelas

V3: JB P3.0,MODO2
,MODO2 ; Se P3.0 = 1, vai para o MODO 2
; Se P3.0 = 0, executa o MODO 1
MODO1: JNB F0,V1 ; Verifica o nível lógico de F0
MOV DPTR,#ESQUERDA
PTR,#ESQUERDA ; Se F0 = 1, então DPTR = ESQUERDA
SJMP V2
V1: MOV DPTR,#DIREITA ; Se F0 = 0, então DPTR = DIREITA

V2: MOV A,R1 ; Carrega em A o offset de leitura da tabela


MOVC A,@A+DPTR ; Lê a tabela de acionamento do motor
MOV P1,A ; Envia para P1 o conteúdo de A
LCALL ATRASO
INC R1 ; Incrementa offset de leitura da tabela
CJNE R1,#04H,V2 ; Verifica se já é o fim da tabela
MOV R1,#0 ; Recarrega com zero o offset de leitura da tabela
SJMP V3

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica,, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 10 de julho de 2013. Prof. José Wilson Lima Nerys

MODO2: JNB F0,V11


MOV DPTR,#ESQUERDA
SJMP V21
V11: MOV DPTR,#DIREITA

V21: MOV A,R1 ; Carrega em A o offset de leitura da tabela


MOVC A,@A+DPTR ; Lê a tabela de acionamento do motor
MOV P1,A ; Envia para P1 o conteúdo de A
LCALL ATRASO
INC R1 ; Incrementa offset de leitura da tabela
CJNE R1,#04H,V21 ; Verifica se já é o fim da tabela
MOV R1,#0 ; Recarrega com zero o offset de leitura da tabela
DJNZ R0,V21 ; Verifica se já chegou no limite de 5 cm
MOV R0,#10 ; Recarrega contador de deslocamento
CPL F0 ; Complementa a Flag para mudança de direção
SJMP V3 ; Volta para escolha do modo

ATRASO: MOV R7,#250


V4: MOV R6,#250
DJNZ R6,$
DJNZ R7,V4
RET

DIREITA: DB 01H
DB 02H
DB 04H
DB 08H

ESQUERDA: DB 08H
DB 04H
DB 02H
DB 01H
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 2013. Prof. José Wilson Lima Nerys

MICROPROCESSADORES E MICROCONTROLADORES

PROVA 2 - UMA POSSÍVEL SOLUÇÃO

1. Escreva as instruções para as configurações pedidas. Valor: 3,0

a) Habilita interrupção externa zero por nível e interrupção externa 1 por transição e com prioridade
alta.

Solução:
IE EA X X ES ET1 EX1 ET0 EX0
1 0 0 0 0 1 0 1

TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0


0 0 0 0 0 1 0 0

IP X X X PS PT1 PX1 PT0 PX0


0 0 0 0 0 1 0 0

Instruções: MOV IE,#85h ; Habilita INT0 e INT1


MOV TCON,#04H ; Interrupção externa 1 por transição. INT0 por nível
MOV IP,#04H ; Interrupção externa 1 com prioridade alta

b) Complementa o pino P1.0 através da interrupção externa 1, por nível.

Solução:
Interrupção 1: ORG 13H
CPL P1.0 ; Complementa P1.0 toda vez que INT1 é acionada
RETI

Instruções de configuração da interrupção externa 1:


MOV IE,#84H ; IE = 1000 0100 --> Habilita INT1
SJMP $ ; Loop infinito aguardando acionamento da INT1

Uma vez que INT1 é por nível, não há necessidade de definir um valor para TCON. Ele é zero.

c) Habilita interrupção externa zero por transição e com prioridade alta.

Solução:
IE EA X X ES ET1 EX1 ET0 EX0
1 0 0 0 0 0 0 1

TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0


0 0 0 0 0 0 0 1

IP X X X PS PT1 PX1 PT0 PX0


0 0 0 0 0 0 0 1

Instruções: MOV IE,#81h ; Habilita INT0


MOV TCON,#01H ; Interrupção externa 0 por transição.
MOV IP,#01H ; Interrupção externa 0 com prioridade alta

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 2013. Prof. José Wilson Lima Nerys

2. No programa a seguir, escrito em assembly do 8051, um motor de passo é acionado através da porta P1.
Cada passo corresponde a 7,5o. Analise o programa e responda às questões. Valor: 3,0
RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO
ORG 00H INC R7
LJMP PASSO CJNE R7,#04H,V3
MOV R7,#00
ORG 30H DJNZ R0,V2
PASSO: MOV SP,#2FH SJMP V4
MOV R7,#00
V4: JB P3.0,V4 ESQUERDA: DB 01H
MOV R0,#3 DB 02H
V3: JNB P3.1,V1 DB 04H
MOV DPTR,#DIREITA DB 08H
SJMP V2
V1: MOV DPTR,#ESQUERDA DIREITA: DB 08H
V2: MOV A,R7 DB 04H
MOVC A,@A+DPTR DB 02H
MOV P1,A DB 01H
END
a) Explique a função da linha "V4: JB P3.0,V4".
Solução:
Enquanto o pino P3.0 estiver em nível lógico alto (P3.0 = 1), o processamento fica aguardando nesta
linha. Quando P3.0 é levado ao nível lógico zero (P3.0 = 0), o processamento passa para a linha
seguinte. É o pino usado para ligar/desligar o motor de passo.

b) Explique a função da linha "V3: JNB P3.1,V1"


Solução:
O pino P3.1 é usado para definir o sentido de rotação do motor de passo. P3.1 = 0 (nível lógico
baixo) faz o processamento desviar para V1, ou seja, rotação do motor de passo para a esquerda. P3.1 =
1 (nível lógico alto) faz o processamento passar para a linha seguinte e, dessa forma, o motor de passo
gira para a direita. Observar que após MOV DPTR,#DIREITA, os valores lidos da tabela são 08H, 04H,
02H e 01H e após MOV DPTR,#ESQUERDA, os valores lidos da tabela são 01H, 02H, 04H e 08H.

c) Qual a finalidade do registrador R0?


Solução:
O registrador R0 é usado para definir o ângulo de rotação do motor de passo. Como R0 = 3, cada
tabela será lida 3 vezes. A leitura completa da tabela corresponde a 4 passos e, portanto, um ciclo
completo de rotação (antes de voltar para V4) corresponde a 12 x 7,5o = 90o. Assim, se um botão tipo
push-button estiver conectado ao pino P3.0 (chave liga/desliga), a cada acionamento da chave o motor
gira 90 graus para a esquerda ou para a direita, dependendo do nível lógico de P3.1.

d) Qual a finalidade do registrador R7?


Solução:
O registrador R7 é usado como contador para leitura das tabelas. O valor inicial é 0. A leitura da
tabela acaba quando R7 = 4.

e) Explique o funcionamento do motor de passo no programa dado.


Solução:

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 2013. Prof. José Wilson Lima Nerys

O motor de passo pode girar para a esquerda (DPTR = endereço da Tabela ESQUERDA) ou para a
direita (DPTR = endereço da Tabela DIREITA). A tabela lida define o sentido de rotação do motor. A
tabela é lida através do comando "MOVC A,@A+DPTR" e o valor lido é enviado para a porta P1, onde
está conectado o motor de passo. Assim, se P3.1 = 1, o motor de passo gira 90o para a direita. Se P3.1 =
0, o motor gira 90o para a esquerda. A cada 90o de rotação o processamento volta para V4 e verifica o
nível lógico de P3.0. Se P3.0 = 1, o motor é desligado. O processamento fica aguardando em um laço
infinito. Fazendo P3.0 = 1, o motor volta a funcionar.

3. Pensando na segurança das pessoas que frequentam sua boate, o proprietário decidiu implantar um
sistema de monitoramento da quantidade de pessoas no ambiente. Nesse sistema, desenvolvido com o
microcontrolador 8051, um sensor, na entrada, incrementa um contador que registra o número de
pessoas que entram no recinto e outro sensor na saída decrementa esse mesmo contador. Faça um
programa que usa a interrupção externa zero, por transição, ligada ao sensor de entrada e a interrupção
externa 1, por transição, ligada ao sensor de saída. O programa deve mostrar em um conjunto de 4
displays de 7-segmentos a quantidade de pessoas presentes e deve acionar um alarme quando a
quantidade de pessoas ultrapassar 1200. Valor: 4,0
Dados complementares:
Os displays estão conectados às portas P2 (byte superior) e P0 (byte inferior) através de decodificadores.
O alarme está conectado ao pino P3.7.
Os registradores usados para a contagem são R1 (byte superior) e R0 (byte inferior)

RÓTULO MNEMÔNICO COMENTÁRIOS


ALARME EQU P3.7 ; Alarme conectado ao pino P3.7

ORG 00H
LJMP BOATE

ORG 03H
LJMP ENTRADA ; Desvia para a subrotina ENTRADA

ORG 13H
LJMP SAIDA ; Desvia para a subrotina SAIDA

ORG 30H
BOATE: MOV SP,#2FH
MOV IE,#85H ; Habilita as interrupções externas 0 e 1
MOV TCON,#05H ; Interrupções 0 e 1 por transição
MOV R1,#00H ; Valor inicial dos registradores usados na contagem
MOV R2,#00H
CLR ALARME ; Desliga o Alarme

V1: CJNE R1,#12H,MOSTRA ; Verifica se R1 = 12H. Se não for, apenas mostra contagem
CJNE R0,#00H,ALARME ; Se R1 = 12H, verifica se R0 = 00H. Se R0 ≠ 00H, liga alarme
MOSTRA: MOV P2,R1 ; Mostra em P2 os dois dígitos superiores da contagem
MOV P1,R0 ; Mostra em P1 os dois dígitos inferiores da contagem
SJMP V1 ; Volta para verificar se a contagem ultrapassou 1200

ALARME: SETB ALARME ; Dispara o alarme


LCALL ATRASO ; Chama uma subrotina de atraso de tempo
CLR ALARME ; Desliga o alarme

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 2013. Prof. José Wilson Lima Nerys

SJMP MOSTRA ; Volta para mostrar a contagem

ENTRADA: MOV A,R0 ; Essa subrotina incrementa a contagem de pessoas. Faz A = R0


ADD A,#01 ; A contagem é em valores decimais
DA A ; Ajuste decimal da contagem
MOV R0,A ; Devolve valor com ajuste decimal para R0
JNC V2 ; Se CY = 0, sai da subrotina de contagem
; Se CY = 1, byte superior da contagem deve ser incrementado
MOV A,R1 ; Transfere para A o valor do byte superior. A = R1
ADD A,#01 ; Adiciona 1 ao byte superior
DA A ; Faz o ajuste decimal do byte superior
MOV R1,A ; Devolve para R1 o valor ajustado
V2: NOP
RETI

SAIDA: MOV A,R0 ; Subrotina que decrementa o número de pessoas na Boate.


ADD A,#99H ; A = A + 99 --> Significa A = A - 1
DA A ; Faz o ajuste decimal do resultado da adição
MOV R0,A ; Devolve para R0 o valor ajustado
JC V3 ; Se CY = 1, então sai da subrotina que decrementa
; Se CY = 0, então o byte superior da contagem é decrementado
MOV A,R1 ; A recebe o byte superior da contagem
ADD A,#99H ; Faz A = A + 99H. O resultado é A = A - 1
DA A ; Faz o ajuste decimal da adição.
MOV R1,A ; Devolve para R1 o valor ajustado do byte superior
V3: NOP
RETI
END

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 5 de junho de 2014. Prof. José Wilson Lima Nerys

MICROPROCESSADORES E MICROCONTROLADORES
PROVA 2 - Uma Solução Possível

1. Suponha um sistema com um conjunto de 8 LEDs conectados à porta P1 e duas chaves do tipo push-
button conectadas aos pinos P3.2 e P3.3. Analise o programa da Tabela 1, escrito em linguagem
assembly do 8051 e responda às questões. Valor: 3,0
Tabela 1: Programa em assembly do 8051
RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO
ORG 00H V1: MOV R0,#10
LJMP INICIO MOV A,#03H
V3: MOV P1,A

Parte 2
ORG 03H LCALL ATRASO
LJMP V1 RL A
DJNZ R0,V3
ORG 13H RETI
LJMP V2
Parte 1 V2: MOV P1,#0FH
INICIO: MOV SP,#2FH LCALL ATRASO

Parte 3
MOV IE,#85H MOV P1,#0F0H
MOV TCON,#01H LCALL ATRASO
MOV IP,#01H RETI
SJMP $
ATRASO: MOV R7,#200
V4: MOV R6,#200
DJNZ R6,$
DJNZ R7,V4
RET
END
Questões (Valor de cada questão: 1,0):

a) Explique a finalidade da Parte 1. Qual configuração final das interrupções externas após execução da
Parte 1?
Solução:
A Parte 1 tem duas partes: a primeira parte contém os endereços das interrupções externas zero e 1,
com o endereço de desvio para as rotinas a serem executadas quando as duas forem solicitadas. Na
segunda parte as interrupções externas zero e 1 são habilitadas; a interrupção externa zero é por
transição e a 1 por nível. A interrupção externa zero tem prioridade alta. Ao final das configurações o
programa entra em um laço infinito, aguardando a chamada das interrupções.

b) Como funciona a Parte 2? Em que condições a Parte 2 é executada?


Solução:
Na Parte 2 há uma rotação (à esquerda) simultânea de 2 bits, começando por 00000011b. Essa
subrotina é executada dez vezes (R0 = 10), a cada vez que a chave de P3.2 é pressionada.

c) Como funciona a Parte 3? O que ocorre se a chave do pino P3.2 for pressionado durante a execução
da Parte 3?
Solução:
Na Parte 3 os nibbles inferior (0000 1111) e superior (1111 0000) são alternados, enquanto a chave
P3.3 permanecer em nível lógico baixo (interrupção por nível). Se a chave P3.2 for pressionada
durante a execução da Parte 3, o processamento desvia para a Parte 2, que é executada normalmente
(10 vezes) e, depois, o processamento volta para a Parte 3.

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 5 de junho de 2014. Prof. José Wilson Lima Nerys

2. A Figura 1 mostra um sistema de acionamento de um motor de corrente contínua. Faça um programa em


assembly do 8051 com as seguintes características: Valor: 3,0
a) A chave CH0 é usada para habilitar o acionamento do motor. Enquanto estiver aberta (desligada) o
acionamento do motor fica desabilitado e o motor desligado. Ao habilitar o acionamento do motor,
o LED verde é ligado. Quando CH0 é aberta (desligada), o motor para e os LEDs apagam.
b) Com a chave CH0 ligada o programa passa a verificar as chaves CH1 e CH2. Enquanto elas não
forem pressionadas pela primeira vez o motor permanece desligado. Depois que uma delas é
pressionada e liberada, o motor passa a funcionar em um dos sentidos.
c) Pressionando-se a chave CH1 (e liberando a seguir) o motor CC gira no sentido direto (IN1=0;
IN2=1) e o LED amarelo é ligado e o vermelho desligado.
d) Pressionando-se a chave CH2 (e liberando a seguir) o motor CC gira no sentido reverso (IN1=1;
IN2=0) e o LED vermelho é ligado e o amarelo desligado.

Figura 1: Sistema de acionamento de motor CC

Uma solução possível:


Rótulo Mnemônicos Comentários
CH0 EQU P3.0 ; Atribui-se o nome CH0 ao pino P3.0
CH1 EQU P3.2 ; Atribui-se o nome CH1 ao pino P3.2
CH2 EQU P3.3 ; Atribui-se o nome CH2 ao pino P3.3

IN1 EQU P0.1 ; Atribui-se o nome IN1 ao pino P0.1 de acionamento do motor
IN2 EQU P0.0 ; Atribui-se o nome IN2 ao pino P0.0 de acionamento do motor

Verde EQU P1.7 ; Atribui-se o nome Verde ao LED do pino P1.7


Amarelo EQU P1.1 ; Atribui-se o nome Amarelo ao LED do pino P1.1
Vermelho EQU P1.0 ; Atribui-se o nome Vermelho ao LED do pino P1.0

ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH

V1: CLR IN1


; Desliga motor
CLR IN2
CLR Verde ; Desliga LED Verde
CLR Vermelho ; Desliga LED Vermelho
CLR Amarelo ; Desliga LED Amarelo

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 5 de junho de 2014. Prof. José Wilson Lima Nerys

V3: JB CH0, V1 ; Enquanto CH0 estiver aberta (CH0 = 1), o motor fica desligado
SETB Verde ; Liga LED Verde quando CH0 = 0. Motor habilitado para acionamento

JB CH1,V2 ; Se CH1 = 1, verificar a chave CH2. Se CH1 = 0, liga motor


CLR IN1
; Motor no sentido direto (de acordo com a Tabela 2)
SETB IN2
SETB Amarelo ; Liga LED Amarelo
CLR Vermelho ; Desliga LED Vermelho
SJMP V3 ; Volta para verificar chave CH0

V2: JB CH2,V3 ; Se CH2=1, verificar CH0 (ainda está habilitado?). Se CH2=0, liga motor
SETB IN1
; Motor no sentido reverso (de acordo com a Tabela 2)
CLR IN2
CLR Amarelo ; Desliga LED Amarelo
SETB Vermelho ; Liga LED Vermelho
SJMP V3 ; Volta para verificar chave CH0
END

3. A Figura 2 mostra um sistema onde um êmbolo é usado para deslocar um determinado volume de água
de uma seringa. O êmbolo é deslocado para a direita e para a esquerda usando um motor de passo
conectado ao nibble inferior da porta P0. A cada 10 passos do motor de passo, o êmbolo desloca 1 ml de
água. Faça um programa em assembly do 8051 onde a interrupção externa zero, por transição, faz o
êmbolo deslocar 10 ml de água (para a direita). Ao ser acionada, a interrupção externa 1, por transição,
o êmbolo desloca 20 ml de água (para a direita). Ao final de cada 20 ml o êmbolo retorna à posição
original, com a rotação do motor de passo no sentido reverso. Valor: 4,0

Figura 2: Sistema de injeção controlada

Uma solução possível:


Rótulo Mnemônicos Comentários
ORG 00H
LJMP INICIO

ORG 03H ; Endereço da Interrupção externa zero


LJMP VOL10 ; Desvia para a rotina VOL10

ORG 13H ; Endereço da Interrupção externa 1


LJMP VOL20 ; Desvia para a rotina VOL20

ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#85H ; Habilita as interrupções externas INT0 e INT1
MOV TCON,#05H ; INT0 e INT1 por transição
MOV A,#01H ; Conteúdo de A a ser usado para rotacionar o motor de passo
MOV R1,#0 ; Contador de deslocamentos. Incrementa 1 a cada 10 ml deslocados
SJMP $ ; Aguarda uma das interrupções em um laço infinito
Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 5 de junho de 2014. Prof. José Wilson Lima Nerys

VOL10: CLR F0 ; F0 = 0 --> quando o volume solicitado é 10 ml


SJMP V3
VOL20: SETB F0 ; F0 = 1 --> quando o volume solicitado é 20 ml

V3: MOV R0,#100 ; R0 = 100 --> 1 ml = 10 passos => 10 ml = 100 passos


V2: MOV P1,#A ; Transfere conteúdo de A para o motor de passo (na porta P1)
LCALL ATRASO ; Chama subrotina de atraso de tempo
RR A ; Rotaciona conteúdo de A para a direita
CJNE A,#80H,V1 ; Verifica de o conteúdo de A está fora do nibble inferior
MOV A,#08H ; A = 08H, se A estiver fora do nibble inferior
V1: DJNZ R0,V2 ; Verifica se já foram executados 100 passos.
INC R1 ; Incrementa o contador de deslocamentos a cada 10 ml
CJNE R1,#02H,V4 ; Verifica se R1 = 2 (deslocamento de 20 ml)
MOV R1,#0 ; Zera contador
LJMP RETORNA ; Se R1 = 2, então já deslocou 20 ml e deve deslocar para a esquerda
V4: JB F0,V3 ; Se F0 = 1, e R1 =/= 2, então deve voltar e deslocar mais 10 ml
RETI

RETORNA: MOV R0,#200 ; R0 = 200, para girar 200 passos para a direita
V2R: MOV P1,A ; Transfere conteúdo de A para o motor de passo (na porta P1)
LCALL ATRASO
RL A ; Rotaciona conteúdo de A para a esquerda
CJNE A,#10H,V1R ; Verifica de o conteúdo de A está fora do nibble inferior
MOV A,#01H ; A = 01H, se A estiver fora do nibble inferior
V1R: DJNZ R0,V2R ; Verifica se já foram executados 200 passos.
RETI

ATRASO: MOV R7,#150


V5: MOV R6,#250
DJNZ R6,$
DJNZ R7,V5
RET
END

Questões Optativas
Temporizadores:

4. Suponha um sistema com 8 LEDs conectados à porta P1 e uma chave tipo push-button conectando o
pino P3.2 ao Terra. Faça um programa em assembly do 8051 com as seguintes características:
Valor: 3,0
a) Enquanto o pino permanecer em nível lógico alto o programa aguarda em um laço infinito;
b) Quando o nível lógico de P3.2 muda para nível baixo o temporizador zero, no modo 1, inicia uma
contagem de 50.000 pulsos, com cristal de 12 MHz, com interrupção.
c) A cada final de contagem do temporizador o conteúdo do acumulador, inicialmente em zero, é
incrementado em 1;
d) Os LEDs da porta P1 são ligados de acordo com conteúdo do acumulador, conforme a tabela a seguir.

A (H) 00 01 a 1F 20 a 3F 40 a 5F 60 a 7F 80 a 9F A0 a BF C0 a DF E0 a FF
LEDs nenhum 0 0e1 0a2 0a3 0a4 0a5 0a6 todos

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 5 de junho de 2014. Prof. José Wilson Lima Nerys

Solução:
Rótulo Mnemônicos Comentários
ORG 00H
LJMP INICIO

ORG 0BH ; Endereço da Interrupção do temporizador zero


MOV TH0,#3CH
; Recarga do temporizador zero
MOV TL0,#0AFH
INC R0 ; Incrementa contador R0 (usado para definir os LEDs a serem ligados)
RETI

ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#82H ; Habilita interrupção do temporizador zero
MOV TMOD,#01H ; Temporizador zero no modo 1
MOV TH0,#3CH ; Valor inicial da contagem do temporizador zero para contar 50.000
MOV TL0,#0AFH pulsos. Com um cristal de 12 MHz resulta em 50 ms

V0: JB P3.2,$ ; Aguarda em laço infinito, enquanto P3.2 = 1


SETB TR0 ; Dispara o temporizador zero

V1: MOV A,R0 ; A recebe o valor atual da contagem em R0


CJNE A,#00H,V2 ; Verifica se A = 00h. Se A =/=00H, desvia para V2
MOV P1,#00H ; Se A = 00H, todos os LEDs permanecem apagados
SJMP V1 ; Volta para V1 para atualizar o valor de A

V2: MOV A,R0 ; A recebe o valor atual da contagem em R0


CLR CY ; Limpa a Flag de carry antes da subtração
SUBB A,#20H ; Subtrair 20H do conteúdo de A. A = A - 20H
JNC V3 ; Se CY = 0 (A > 20H ou A = 20H), então desvia para V3
MOV P1,#01H ; Se CY = 1 (A < 20H), então liga o LED0
SJMP V1 ; Volta para V1

V3: MOV A,R0 ; A recebe o valor atual da contagem em R0


CLR CY ; Limpa a Flag de carry antes da subtração
SUBB A,#40H ; Subtrair 40H do conteúdo de A. A = A - 40H
JNC V4 ; Se CY = 0 (A > 40H ou A = 40H), então desvia para V4
MOV P1,#03H ; Se CY = 1 (A < 40H), então liga os LEDs 0 e 1
SJMP V1 ; Volta para V1

V4: MOV A,R0 ; A recebe o valor atual da contagem em R0


CLR CY ; Limpa a Flag de carry antes da subtração
SUBB A,#60H ; Subtrair 60H do conteúdo de A. A = A - 60H
JNC V5 ; Se CY = 0 (A > 60H ou A = 60H), então desvia para V5
MOV P1,#07H ; Se CY = 1 (A < 60H), então liga os LEDs 0, 1 e 2
SJMP V1 ; Volta para V1

V5: MOV A,R0 ; A recebe o valor atual da contagem em R0


CLR CY ; Limpa a Flag de carry antes da subtração
SUBB A,#80H ; Subtrair 80H do conteúdo de A. A = A - 80H
JNC V6 ; Se CY = 0 (A > 80H ou A = 80H), então desvia para V6
MOV P1,#0FH ; Se CY = 1 (A < 80H), então liga os LED 0 a 3
SJMP V1 ; Volta para V1

V6: MOV A,R0 ; A recebe o valor atual da contagem em R0


CLR CY ; Limpa a Flag de carry antes da subtração
SUBB A,#0A0H ; Subtrair A0H do conteúdo de A. A = A - A0H
JNC V7 ; Se CY = 0 (A > A0H ou A = A0H), então desvia para V7

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 5 de junho de 2014. Prof. José Wilson Lima Nerys

MOV P1,#1FH ; Se CY = 1 (A < A0H), então liga o LEDs 0 a 4


SJMP V1 ; Volta para V1

V7: MOV A,R0 ; A recebe o valor atual da contagem em R0


CLR CY ; Limpa a Flag de carry antes da subtração
SUBB A,#0C0H ; Subtrair C0H do conteúdo de A. A = A - C0H
JNC V8 ; Se CY = 0 (A > C0H ou A = C0H), então desvia para V8
MOV P1,#3FH ; Se CY = 1 (A < C0H), então liga os LEDs 0 a 5
SJMP V1 ; Volta para V1

V8: MOV A,R0 ; A recebe o valor atual da contagem em R0


CLR CY ; Limpa a Flag de carry antes da subtração
SUBB A,#0E0H ; Subtrair E0H do conteúdo de A. A = A - E0H
JNC V9 ; Se CY = 0 (A > E0H ou A = E0H), então desvia para V9
MOV P1,#7FH ; Se CY = 1 (A < E0H), então liga os LEDs 0 a 6
SJMP V1 ; Volta para V1

V9: MOV A,R0 ; A recebe o valor atual da contagem em R0


MOV P1,#0FFH ; Liga todos os LEDs
CJNE A,#0FFH,V1 ; Verifica se A = FFH. Se não for, volta para V1
CLR TR0 ; Se A = FFH, então para o temporizador zero.
LJMP V0 ; Volta para V0, para aguardar novo início controlado por P3.2
END

Descobrindo a Lógica na Vida:

Dizem que as famílias Bellini e Cellini, fabricantes de porta-joias da Itália renascentista, tinham uma característica
peculiar: os membros da família Bellini sempre escreviam frases verdadeiras nos porta-joias que eles fabricavam; e os
membros da família Cellini sempre escreviam frases falsas nos porta-joias que fabricavam. Um dia um comprador se
deparou com um conjunto com dois porta-joias com as seguintes inscrições:

Quem fabricou cada um dos porta-joias (Bellini pai, Bellini filho, Cellini pai ou Cellini filho)? (0,0)
Descreva o raciocínio lógico usado para chegar à resposta apresentada. (0,5)

Tabela 2: Lógica de operação do motor CC Tabela 3: Recarga do temporizador-modo 1


IN1 IN2 Operação do motor Início da Contagem TH0 TL0
0 0 Motor parado 5.535 15H 9FH
0 1 Rotação sentido direto 15.535 3CH AFH
1 0 Rotação sentido reverso 25.535 63H BFH
1 1 Motor parado 35.535 8AH CFH
45.535 B1H DFH
55.535 D8H EFH

Tabela 4: Alguns Registradores Especiais Tabela 5: Endereços das interrupções


Interrupção Endereço de
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Solicitada desvio
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 Reset 0000h
IE EA X X ES ET1 EX1 ET0 EX0 INT0\ 0003h
IP X X X PS PT1 PX1 PT0 PX0 Timer/counter 0 000Bh
PSW CY AC F0 RS1 RS0 OV X P INT1\ 0013h
TMOD G1 C/T\ M1.1 M0.1 G0 C/T\ M1.0 M0.0 Timer/counter 1 001Bh
Canal Serial 0023h

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 27 de novembro de 2014. Prof. José Wilson Lima Nerys

MICROPROCESSADORES E MICROCONTROLADORES
PROVA 2 - RESPOSTA ESPERADA

1. A Fig. 1 mostra um conjunto de 16 Leds, sendo 8 conectados à porta P1 e 8 à porta P2. Eles foram
montados na forma de um círculo. Valor: 2,5

Fig. 1: Leds conectados às portas P1 e P2

Fazer um programa em assembly do 8051 para rotacionar os Leds usando interrupções, da seguinte
forma:
 A interrupção externa zero, ao ser acionada por nível, e com prioridade alta, faz os Leds girarem no
sentido anti-horário, começando do Led conectado ao pino P1.0.
 A interrupção externa externa 1, ao ser acionada por transição, faz os Leds girarem no sentido horário,
começando do Led conectado à porta P1.7. A cada pedido de interrupção os Leds completam 5 voltas
antes de retornarem da interrupção.
Solução:
Rótulo Mnemônico Rótulo Mnemônico
ORG 00H ITEMA: MOV P1,A
LJMP INICIO LCALL ATRASO
RL A
ORG 03H CJNE A,#01H,ITEMA
LJMP ITEMA MOV P1,#00H
V1: MOV P2,A
13H LCALL ATRASO
LJMP ITEMB RL A
CJNE A,#01H,V1
ORG 30H MOV P2,#00H
INICIO: MOV SP,#2FH RETI
MOV IE,#85H
MOV TCON,#04H ITEMB: MOV R0,#5
MOV IP,#01H V4: MOV A,#01H
MOV A,#01H V2: RR A
MOV P1,#00H MOV P1,A
MOV P2,#00H LCALL ATRASO
SJMP $ CJNE A,#01H,V2
MOV P1,#00H
V3: RR A
MOV P2,A
ATRASO: MOV R7,#200 LCALL ATRASO
V5: MOV R6,#200 CJNE A,#01H,V3
DJNZ R6,$ MOV P2,#00H
DJNZ R7,V5 DJNZ R0,V4
RETI RETI
END
Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 27 de novembro de 2014. Prof. José Wilson Lima Nerys

2. A Figura 1 mostra um sistema de acionamento de dois motor de corrente contínua, M1 e M2; a Tabela 1
mostra o sentido de rotação dos motores M1e M2, de acordo com o nível lógico dos pinos M11, M12,
M21 e M22 e a Tabela 2 mostra o nível lógico das chaves CH1 e CH2 para quatro situações diferentes
de acionamento desses motores. Valor: 2,5

Tabela 1: Sentido de rotação dos motores


M1 M2
Sentido Rotação
M11 M12 M21 M22
0 0 0 0 Motor Parado
0 1 0 1 Sentido Horário
1 0 1 0 Anti-horário
1 1 1 1 Motor Parado
Tabela 2: Condições de acionamento dos motores
CH1 CH2 Efeito sobre os motores
1 1 Motores parados
Motor M1 no sentido horário.
0 1
Motor M2 parado
Motor M2 no sentido horário.
1 0
Motor M1 parado
Motores M1 e M2 no sentido anti-
0 0
horário
Figura 1: Sistema de acionamento de motor CC e tabelas de controle
Faça um programa em assembly do 8051 para atender às condições mostradas nas Tabelas 1 e 2 e na
Figura 1.
Solução:
Rótulo Mnemônico Rótulo Mnemônico
M11 EQU P1.7 PARADO: CLR M11
M12 EQU P1.6 CLR M12
M21 EQU P1.5 CLR M21
M22 EQU P1.4 CLR M22
SJMP V2
CH1 EQU P3.0
CH2 EQU P3.7 M1HORARIO: CLR M11
SETB M12
ORG 00H CLR M21
LJMP INICIO CLR M22
SJMP V2
ORG 30H
INICIO: MOV SP,#2FH M1M2ANTI: SETB M11
CLR M12
V2: JB CH1,V1 SETB M21
JB CH2,M1HORARIO CLR M22
LJMP M1M2ANTI SJMP V2

V1: JB CH2, PARADO M2HORARIO: CLR M11


JB CH1,M2HORARIO CLR M12
LJMP M1M2ANTI CLR M21
SETB M22
SJMP V2
END

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 27 de novembro de 2014. Prof. José Wilson Lima Nerys

3. Faça um programa em assembly do 8051 para gerar uma onda quadrada no pino P1.0 com período de 20
ms. O tempo de atraso para a geração do período deve ser feito com o temporizador 0 no modo 1. O
cristal oscilador é de 12 MHz. A Tabela 3 mostra os valores de TH0 e TL0 para alguns valores de início
de contagem do temporizador. Valor: 2,5
Tabela 3: Recarga do temporizador-modo 1
Início da Contagem TH0 TL0
5.535 15H 9FH
15.535 3CH AFH
25.535 63H BFH
35.535 8AH CFH
45.535 B1H DFH
55.535 D8H EFH

Solução:
Se o tempo de um período é 20 ms, então o tempo de meio período é 10 ms e a contagem deve ser de
10.000 pulsos, ou seja, de 55.535 até 65.535. Assim, da Tabela 3, TH0 = D8H e TL0 = EFH.
Rótulo Mnemônico Rótulo Mnemônico
ORG 00H ORG 30H
LJMP INICIO INICIO: MOV SP,#2FH
MOV IE,#82H
ORG 0BH MOV TMOD,#01H
CPL P1.0 MOV TH0,#0D8H
MOV TH0,#0D8H MOV TL0,#0EFH
MOV TL0,#0EFH SETB TR0
RETI SJMP $
END

4. A Fig. 2 mostra parte de um circuito com mapeamento de memória do microcontrolador 8051. O


decodificador 74138 é usado para a seleção de alguns componentes, indicados através das saída Y0 a
Y7. Dos componentes citados, apenas o motor de passo é mostrado na figura. Valor: 2,5

Fig. 2: Alguns componentes do mapeamento de memória

O programa da Tabela 4 foi desenvolvimento tendo em vista o mapeamento referente à Fig. 2.

Tabela 4: Programa em linguagem assembly do 8051


RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO
ORG 00H V1: JB P1.6,V4
Parte

LJMP INICIO MOV R0,#10


2

V6: MOV A,#01H


Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 27 de novembro de 2014. Prof. José Wilson Lima Nerys

INICIO: MOV SP,#2FH MOV DPTR,#8000H


MOV A,#01H V5: MOVX @DPTR,A
LCALL ATRASO
V4: JB P1.7,V1 RL A
MOV DPTR,#6000H CJNE A,#10H,V5
V2: MOVX @DPTR,A DJNZ R0,V6
LCALL ATRASO SJMP V4
RL A

Parte 1
CJNE A,#01H,V2 ATRASO: MOV R7,#200
V3: RR A V7: MOV R6,#200
MOVX @DPTR,A DJNZ R6,$
LCALL ATRASO DJNZ R7,V7
CJNE A,#01H,V3 RET
SJMP V4 END
A partir do programa da Tabela 4 e da Fig. 2, responder às questões:
(a) O que ocorre na parte 1? Qual a condição para execução da parte 1?
Solução:
A parte 1 é executada quando o pino P1.7 encontra-se em nível lógico baixo. Como DPTR = 6000H,
então o componente ativado é o conjunto de Leds. Assim, os Leds são rotacionados para a esquerda e,
em seguida para direita, antes de retornar para verificar novamente o estado do pino P1.7. Se o pino
P1.7 estiver em nível lógico alto, então desvia para verificar o estado do pino P1.6.

(b) O que ocorre na parte 2? Qual a condição para execução da parte 2?


Solução:
A parte 2 é executada quando o pino P1.6 encontra-se em nível lógico baixo. Como DPTR = 8000H,
então o componente ativado é o motor de passo. O motor de passo realiza 10 passagens pela rotina que
faz o motor dar 4 passos (01h, 02h, 04h, 08h); quando quando chega em 10h, recomeça de 01h, se R0
ainda não for zero. Assim, o motor de passo executa 4 x 10 = 40 passos antes de retornar para verificar
novamente o estado do pino P1.7.

5. Faça um programa onde o microcontrolador recebe comandos de um computador via serial (no modo 1),
com interrupção, a uma taxa de 9600 bps, com cristal oscilador de 11,0592 MHz. A Tabela 5 a seguir
mostra os caracteres digitados no hyperterminal e o efeito no microcontrolador. Valor: 2,5

Tabela 5: Caracteres recebidos via serial e seu efeito no microcontrolador


Caractere Código
Efeito
(ASCII) Hexadecimal
M 4DH Liga/desliga uma lâmpada conectada ao pino P2.4
I 49H Rotaciona para a direita os Leds da porta P1
C 43H Liga um motor de corrente contínua conectado aos pinos P2.6 e P2.7
R 52H Para motor de corrente contínua
Rotaciona em 180o um motor de passo conectado ao nibble inferior da porta P2.
O 4FH
Cada passo correponde a 15o

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 27 de novembro de 2014. Prof. José Wilson Lima Nerys

Solução:
Rótulo Mnemônico Rótulo Mnemônico
LAMPADA EQU P2.4 V2: CJNE R0,#43H,V3 ; LETRA C
M11 EQU P2.6 CLR M11 ; Liga motor CC
M12 EQU P2.7 SETB M12
MOV R0,#00H ; Faz R0 = 0 (entra 1 vez)
ORG 00H SJMP VARRE
LJMP INICIO
V3: CJNE R0,#52H,V4 ; LETRA R
ORG 23H CLR M11 ; Desliga motor CC
MOV R0,SBUF CLR M12
CLR RI MOV R0,#00H
RETI SJMP VARRE

ORG 30H V4: CJNE R0,#4FH,VARRE ; LETRA O


INICIO: MOV SP,#2FH MOV R1,#3 ; Passos = 3 x 4 = 12
MOV IE,#90H V6: MOV A,#01H
MOV SCON,#40H V5: MOV P2,A
MOV TMOD,#20H RL A
MOV TH1,#0FDH ; 9600 bps LCALL ATRASO
MOV TL0,#0FDH CJNE A,#10H,V5 ; Repete 4 passos
SETB TR1 ; Dispara Timer 1 DJNZ R1,V6 ; Sai após 3 x 4 passos
SETB REN ; Habilita recepção MOV R0,#00H
MOV R0,#00H SJMP VARRE
MOV A,#80H
ATRASO: MOV R7,#200
VARRE: CJNE R0,#4DH,V1 ; LETRA M V7: MOV R6,#200
CPL LAMPADA ; Liga/Desliga DJNZ R6,$
MOV R0,#00H ; Só passa aqui 1 vez DJNZ R7,V7
SJMP VARRE ; Volta para ver R0 RET

V1: CJNE R0,#49H,V2 ; LETRA I END


MOV P1,A
LCALL ATRASO
RR A
SJMP VARRE

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

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
Por transição. Todos os Leds rotacionam no sentido anti-horário e, em seguida, no sentido horário,
INT0
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
INT1
anti-horário. Todos os Leds são desligados a cada ciclo completo.

Resposta Esperada

Rótulo Mnemônico Comentário


ORG 00H
LJMP INICIO 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
INICIO: MOV SP,#2FH ; Pilha na posição inicial 2F
MOV IE,#85H ; IE = 1000 0101 – Interrupções 0 e 1 habilitadas
MOV TCON,#01H ; Interrupção 0 por transição. Int. 1 por nível
MOV R0,#00H ; Valor inicial de R0 para o efeito 2
MOV R1,#00H ; Valor inicial de R1 para o efeito 2
SJMP $ ; Loop infinito aguardando interrupção

; Rotação no sentido anti-horário


EFEITO1: MOV A,#01H ; Valor inicial de A para a rotação de Leds
MOV P2,#00H ; P2 recebe o valor 00h
V5: MOV P1,A ; P1 recebe o valor atual de A
RL A ; Rotaciona conteúdo A para a esquerda
LCALL ATRASO ; 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. Prof. José Wilson Lima Nerys

CJNE A,#01H,V5 ; Enquanto A ≠ 01h, desvia para V5.


MOV P1,#00H ; P1 recebe o valor 00h
V4: MOV P2,A ; P2 recebe o valor atual de A
RL A ; Rotaciona conteúdo de A para a esquerda
LCALL ATRASO ; Chama subrotina de atraso de tempo
CJNE A,#01H,V4 ; Enquanto A ≠ 01h, desvia para V4.

; Rotação no sentido horário


V5B: RR A ; Rotaciona conteúdo de A para a direita
MOV P2,A ; P2 recebe o valor atual de A
LCALL ATRASO ; Chama subrotina de atraso de tempo
CJNE A,#01H,V5B ; Enquanto A ≠ 01h, desvia para V5B.
MOV P2,#00H ; P2 recebe o valor 00h
V4B: RR A ; Rotaciona conteúdo de A para a direita
MOV P1,A ; P1 recebe o valor atual de A
LCALL ATRASO ; Chama subrotina de atraso de tempo
CJNE A,#01H,V4B ; Enquanto A ≠ 01h, desvia para V4B.
RETI ; Retorna da subrotina de interrupção

EFEITO2: CJNE R0,#0FFH,V1 ; Enquanto R0 ≠ FFh, desvia para V1.


MOV P1,R0 ; P1 recebe o conteúdo atual de R0
MOV P2,R1 ; P2 recebe o conteúdo atual de R1
LCALL ATRASO ; Chama subrotina de atraso de tempo
MOV A,R1 ; A recebe o conteúdo atual de R1
RL A ; Rotaciona o conteúdo de A para a esquerda
ORL A,#01H ; Faz a operação A OU 01h (acrescenta 1 ao bit 0).
MOV R1,A ; Atualiza o conteúdo de R1
CJNE R1,#0FFH,V2 ; Enquanto R1 ≠ FFh, desvia para V4.
MOV P2,R1 ; P2 recebe o conteúdo atual de R1
LCALL ATRASO ; Chama subrotina de atraso de tempo
MOV R0,#00H ; R0 recebe o valor 00h
MOV R1,#00H ; R1 recebe o valor 00h
V2: NOP ; Nenhuma operação
RETI ; Retorna da subrotina de interrupção

V1: MOV P1,R0 ; P1 recebe o conteúdo atual de R0


MOV P2,R1 ; P2 recebe o conteúdo atual de R1
LCALL ATRASO ; Chama subrotina de atraso de tempo
MOV A,R0 ; A recebe o conteúdo atual de R0
RL A ; Rotaciona o conteúdo de A para a esquerda
ORL A,#01H ; Faz a operação A OU 01h (acrescenta 1 ao bit 0).
MOV R0,A ; Atualiza o conteúdo de R0
RETI ; Retorna da subrotina de interrupção

ATRASO: MOV R7,#200


V3: 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.

Tabela 2: Programa em linguagem assembly do 8051 Tabela 3: Valores Temporizador


Rótulo Mnemônico Rótulo Mnemônico Recarga TH TL
ORG 00H V2: JNB F0,$ 5.535 15H 9FH
LJMP INICIO CPL P1.0 25.535 63H BFH

Parte 2
CLR F0 45.535 B1H DFH
ORG 0BH SJMP V2
LJMP V1
V1: MOV TH0,#63H
INICIO: MOV SP,#2FH MOV TL0,#0BFH
MOV IE,#82H DJNZ R0,V3

Parte 3
MOV TMOD,#01H Parte 1 SETB F0
MOV TH0,#63H MOV R0,#10
MOV TL0,#0BFH V3: NOP
SETB TR0 RETI
MOV R0,#10 END

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 Mnemônico Comentário


LAMP EQU P1.0 ; É atribuído o nome LAMP ao pino P1.0

ORG 00H
LJMP INICIO Desvia para INICIO, no endereço 30h

ORG 30H
INICIO: MOV SP,#2FH ; Pilha na posição inicial 2F
MOV SCON,#40H ; SCON = 0100 0000 – Serial no modo 1
MOV TMOD,#20H ; Temporizador 1 no modo 2 (recarga automática)
MOV TH1,#0E8H ; Recarga para gerar Baud rate de 1200 bps
MOV TL1,#0E8H ; Valor inicial de contagem do temporizador
CLR LAMP ; Lâmpada começa apagada
SETB TR1 ; Dispara temporizador 1, para começar geração de baud rate
SETB REN ; Habilita recepção serial

V1: JNB RI,$ ; Aguarda em um loop, a recepção de um caractere via serial


CLR RI ; Limpa flag que indica que recebeu caractere via serial
MOV A,SBUF ; Acumulador recebe conteúdo de SBUF (recebido via serial)

CJNE A,#4CH,V2 ; Se A ≠ 4Ch (L), desvia para V2.


SETB LAMP ; Se A = 4Ch, então a lâmpada em P1.0 é ligada
SJMP V1 ; Volta para loop de espera de dados via serial

V2: CJNE A,#44H,V1 ; Se A ≠ 44h (D), desvia para V1 (loop de espera de caractere).
CLR LAMP ; Se A = 44h, então a lâmpada em P1.0 é desligada
SJMP V1 ; 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 LEDS
A14
A13

RD\ PASSO
WR\

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 A14 A13 Endereço inicial Endereço final


0 0 0 0000H 1FFFH
0 0 1 2000H 3FFFH
0 1 0 4000H 5FFFH
0 1 1 6000H 7FFFH
1 0 0 8000H 9FFFH
1 0 1 A000H BFFFH
1 1 0 C000H DFFFH
1 1 1 E000H 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 Comentários


ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV R0,#01H ; Valor inicial para os Leds
MOV R1,#11H ; Valor inicial para o motor de passo

V1: 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

PASSO: 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 Tabela 5: Endereços das interrupções
IN1 IN2 Operação do motor Interrupção Endereço de
0 0 Motor parado Solicitada desvio
0 1 Rotação sentido direto Reset 0000h
INT0\ 0003h
1 0 Rotação sentido reverso
Timer/counter 0 000Bh
1 1 Motor parado INT1\ 0013h
Timer/counter 1 001Bh
Canal Serial 0023h

Tabela 6: Alguns Registradores Especiais


Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
IE EA X X ES ET1 EX1 ET0 EX0
IP X X X PS PT1 PX1 PT0 PX0
PSW CY AC F0 RS1 RS0 OV X P
TMOD G1 C/T\ M1.1 M0.1 G0 C/T\ M1.0 M0.0
SCON SM0 SM1 SM2 REN TB8 RB8 TI RI

Tabela 7: Taxas de transmissão mais comuns


Timer 1
Baud Rate (bits/seg) Freq. Osc. (MHz) SMOD C/Tbarra Modo Valor Recar.
Modo 0 Máx: 1MHz 12 X X X X
Modo 2 Máx: 375K 12 1 X X X
Modo 1, 3: 62,5K 12 1 0 2 FFh
19,2K 11,059 1 0 2 FDh
9,6K 11,059 0 0 2 FDh
4,8K 11,059 0 0 2 FAh
2,4K 11,059 0 0 2 F4h
1.2K 11,059 0 0 2 E8h
137,5 11,059 0 0 2 1Dh
110 6 0 0 2 72h
110 12 0 0 1 FEEBh

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 28 de janeiro de 2016. Prof. José Wilson Lima Nerys

MICROPROCESSADORES E MICROCONTROLADORES
PROVA 2 (Tema: Microcontrolador 8051) – Resposta Esperada

1. Tema: programação geral do microcontrolador 8051. Valor: 2,5

A Tabela 1 mostra um programa, em linguagem assembly do 8051, onde duas chaves tipo liga/desliga
(conectando os pinos P3.4 e P3.5 ao Terra) são usadas para acionar um conjunto de 8 Leds, conectados
à Porta P1. Analise o programa mostrado e responda às questões que seguem.
Tabela 1: Programa em linguagem assembly do 8051
Rótulo Mnemônico Rótulo Mnemônico Rótulo Mnemônico
CHAVE1 EQU P3.4 V1: JB CHAVE1,V2 V3: MOV LEDS,A
CHAVE2 EQU P3.5 JB CHAVE2,V3 LCALL ATRASO
LEDS EQU P1 MOV LEDS,#00H RL A
SJMP V1 SJMP V1
ORG 00H
LJMP INICIO V2: JB CHAVE2,V4 V4: MOV LEDS,#0FFH
MOV LEDS,A SJMP V1
ORG 30H LCALL ATRASO
INICIO: MOV SP,#2FH RR A ATRASO: .....
MOV A,#01H SJMP V1 RET
END

(a) Qual o efeito sobre os Leds quando as duas chaves estão desligadas (nível lógico alto)?
Resposta:
Em V1, se CHAVE1 = 1, desvia para V2. Em V2, se CHAVE2 = 1, desvia para V4. Em V4, os
Leds recebem o valor FFH, ou seja, permanecem acesos.

(b) Qual o efeito sobre os Leds quando as duas chaves estão ligadas (nível lógico baixo)?
Resposta:
Em V1, se CHAVE1 = 0, segue para a próxima linha, onde a CHAVE2 é verificada; se CHAVE2 =
0, segue para a próxima linha, onde os Leds recebem o valor 00H, ou seja, permanecem apagados.

(c) Qual o efeito sobre os Leds quando somente a chave em P3.4 estiver ligada?
Resposta:
Em V1, se CHAVE1 = 0 (ligada), segue para a próxima linha, onde a CHAVE2 é verificada; se
CHAVE2 = 1 (desligada), desvia para V3. Em V3, os Leds recebem o conteúdo A, que em seguida
é rotacionado para a esquerda (RL A). Mantendo essa condição, os Leds permanecem
rotacionando para a esquerda.

(d) Qual o efeito sobre os Leds quando somente a chave em P3.5 estiver ligada?
Resposta:
Em V1, se CHAVE1 = 1 (desligada), desvia para V2. Em V2, se a CHAVE2 = 0 (ligada), segue
para a próxima linha, onde os Leds recebem o conteúdo de A, que em seguida é rotacionado para a
direita (RR A). Mantendo essa condição, os Leds permanecem rotacionando para a direita.

2. Tema: Interrupções do microcontrolador 8051. Valor: 2,5

Faça um programa, em linguagem assembly do 8051, onde a interrupção externa 0, por transição, é
usada para ligar/desligar um motor CC no sentido direto e a interrupção externa 1, por transição, é usada
para ligar/desligar o mesmo motor no sentido reverso. Os pinos e a lógica de acionamento do motor são
mostrados na Tabela 2.
Tabela 2: Pinos e lógica de acionamento do motor CC
Pino P0.0 Pino P0.1 Efeito
0 0 Motor parado
0 1 Motor no sentido direto
1 0 Motor no sentido reverso
1 1 Motor parado
Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 28 de janeiro de 2016. Prof. José Wilson Lima Nerys

Resposta Esperada:

M0 EQU P0.0
M1 EQU P0.1

ORG 00H
LJMP INICIO

ORG 03H ; Endereço da interrupção 0


CLR M0 ; Mantém M0 = 0
CPL M1 ; Complementa M1 (assim, o motor liga/desliga no sentido direto)
RETI

ORG 13H ; Endereço da interrupção 1


CPL M0 ; Complementa M0 (assim, o motor liga/desliga no sentido reverso)
CLR M1 ; Mantém M1 = 0
RETI

ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#85H ; Habilita INT0 e INT1
MOV TCON,#05H ; Ambas por transição
SJMP $ ; Laço infinito aguardando uma das interrupções
END

3. Tema: Temporizadores do microcontrolador 8051. Valor: 2,5

Faça um programa, em assembly do 8051, onde o temporizador zero, no modo 1, é usado para gerar
uma onda quadrada no pino P2.0, com período de 20 ms. O cristal oscilador é de 12 MHz. Se desejar,
pode usar a interrupção do temporizador zero. Indique o valor decimal para os registradores de
contagem do temporizador (não há necessidade de fazer a conversão para hexadecimal).

Resposta Esperada:

ORG 00H
LJMP INICIO

ORG 0BH
CPL P2.0
MOV TH0,#0D8H ; decimal = 55.536 (65.536 - 10.000)
MOV TL0,#0F0H
RETI

ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#82H ; Habilita interrupção do Timer 0
MOV TMOD,#01H ; Timer 0 no modo 1
MOV TH0,#0D8H ; decimal = 55.536 (65.536 - 10.000)
MOV TL0,#0F0H
SETB TR0 ; Dispara Timer 0
SJMP $ ; Laço infinito esperando interrupção do Timer 0
END

4. Tema: Serial do microcontrolador 8051. (Escolher apenas uma das duas questões) Valor: 2,5

Questão 1 (transmissão serial):


Faça um programa, em assembly do 8051, onde um sensor ligado ao pino P3.4 (do pino ao Terra) é
usado para indicar se a porta de um carro está aberta (P3.4 = 1) ou fechada (P3.4 = 0). Quando a porta
estiver aberta, essa informação deve ser enviada ao computador de bordo, via serial, no modo 1, com
taxa de comunicação de 9600 bps e cristal oscilador de 11,0592 MHz.
Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 28 de janeiro de 2016. Prof. José Wilson Lima Nerys

Resposta Esperada:

SENSOR EQU P3.4

ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV SCON,#40H ; Assincrona de 8 bits
MOV TMOD,#20H ; Timer 1 no modo 2 (recarga automática)
MOV TH1,#0FDH ; Baud rate = 9600 bps (fclock = 11.0592 MHz)
MOV TL1,#0FDH
SETB TR1 ; Dispara o timer 1
MOV DPTR,#MSG ; Endereço inicial do TEXTO

V0: JB SENSOR,V1
SJMP V0

V1: MOV R7,#00H ; OFFSET para leitura da MSG


V2: MOV A,R7 ; A recebe o valor atual do contador (offset)
MOVC A,@A+DPTR ; O valor do endereço A + DPTR é transferido para A
CJNE A,#0FFH,SERIAL ; Verifica se já chegou ao final do TEXTO
SJMP V0 ; Volta para V1, quando A = FFh (fim do TEXTO)

SERIAL: MOV SBUF,A ; Envia conteúdo de A via serial


JNB TI,$ ; Aguarda fim da transmissão do caractere (aguarda até TI = 1)
CLR TI ; Limpa flag que indica final da transmissão
INC R7 ; Incrementa registrador de OFFSET
SJMP V2

MSG: DB 'Porta Aberta ', 0DH, 0FFH


END

Questão 2 (recepção serial):


Faça um programa, em assembly do 8051, onde caracteres recebidos via serial do microcontrolador (no
modo 1) são usados para acionar um motor de passo. Se o caractere for “F”, um motor de passo,
conectado ao nibble inferior da porta P2 gira, indefinidamente, para a direita; se o caractere for “b”, o
motor gira indefinidamente para a esquerda. Qualquer outro caractere faz o motor permanecer parado. A
taxa de comunicação é de 2400 bps e o cristal oscilador é de 11,0592 MHz. Use interrupção da recepção
serial.

Resposta Esperada:

ORG 00H
LJMP INICIO

ORG 23H
MOV R0,SBUF
CLR RI
RETI

ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#90H ; Habilita interrupção da serial
MOV SCON,#40H ; Assincrona de 8 bits
MOV TMOD,#20H ; Timer 1 no modo 2 (recarga automática)
MOV TH1,#0F4H ; Baud rate = 9600 bps (fclock = 11.0592 MHz)
MOV TL1,#0F4H
SETB TR1 ; Dispara o timer 1
SETB REN ; Habilita recepção serial
MOV A,#11H ; Valor inicial de A (para motor de passo)

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 28 de janeiro de 2016. Prof. José Wilson Lima Nerys

V1: CJNE R0,#46H,V2 ; Letra F


MOV P2,A ; Motor de passo recebe valor de A
RR A ; Rotaciona conteúdo de A par a direita
LCALL ATRASO
SJMP V1

V2: CJNE R0,#62H,V1 ; Letra b


MOV P2,A ; Motor de passo recebe valor de A
RL A ; Rotaciona conteúdo de A para a esquerda
LCALL ATRASO
SJMP V1

ATRASO: MOV R1,#100


V4: MOV R2,#250
DJNZ R2,$
DJNZ R1,V4
RET
END
5. Questão opcional: Qual o valor final, na sequência a seguir? Valor: 0,5
Obs.: Justifique sua resposta

Tabela 6: Alguns Registradores Especiais Tabela 5: End. interrupções


Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Interrupção Endereço
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 Solicitada de desvio
IE EA X X ES ET1 EX1 ET0 EX0 Reset 0000h
IP X X X PS PT1 PX1 PT0 PX0 INT0\ 0003h
PSW CY AC F0 RS1 RS0 OV X P Timer/counter 0 000Bh
TMOD G1 C/T\ M1.1 M0.1 G0 C/T\ M1.0 M0.0 INT1\ 0013h
SCON SM0 SM1 SM2 REN TB8 RB8 TI RI Timer/counter 1 001Bh
Canal Serial 0023h
Tabela 6: Alguns Registradores Especiais
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
IE EA X X ES ET1 EX1 ET0 EX0
IP X X X PS PT1 PX1 PT0 PX0
PSW CY AC F0 RS1 RS0 OV X P
TMOD G1 C/T\ M1.1 M0.1 G0 C/T\ M1.0 M0.0
SCON SM0 SM1 SM2 REN TB8 RB8 TI RI
Tabela 7: Taxas de transmissão mais comuns
Timer 1
Baud Rate (bits/seg) Freq. Osc. (MHz) SMOD C/Tbarra Modo Valor Recar.
Modo 0 Máx: 1MHz 12 X X X X
Modo 2 Máx: 375K 12 1 X X X
Modo 1, 3: 62,5K 12 1 0 2 FFh
19,2K 11,059 1 0 2 FDh
9,6K 11,059 0 0 2 FDh
4,8K 11,059 0 0 2 FAh
2,4K 11,059 0 0 2 F4h
1.2K 11,059 0 0 2 E8h
137,5 11,059 0 0 2 1Dh
110 6 0 0 2 72h
110 12 0 0 1 FEEBh

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 28 de janeiro de 2016. Prof. José Wilson Lima Nerys

Tabela ASCII – parcial


Código Código Código Código Código Código
Caractere Caractere Caractere
Hexadecimal decimal Hexadecimal decimal Hexadecimal decimal
0 30 48 A 41 65 a 61 97
1 31 49 B 42 66 b 62 98
2 32 50 C 43 67 c 63 99
3 33 51 D 44 68 d 64 100
4 34 52 E 45 69 e 65 101
5 35 53 F 46 70 f 66 102
6 36 54 G 47 71 g 67 103
7 37 55 H 48 72 h 68 104

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 30 de junho de 2016. Prof. José Wilson Lima Nerys

MICROPROCESSADORES E MICROCONTROLADORES
PROVA 2 (Tema: Microcontrolador 8051)

1. Tema: programação geral do microcontrolador 8051. Valor: 2,5

A Figura a seguir mostra um carro com quatro sensores de obstáculos (nível baixo na presença de
obstáculo) e dois motores de corrente contínua. Faça um programa (livremente), em assembly do 8051,
para acionar os motores de forma que o carro se desloque desviando dos obstáculos. Quando não há
obstáculo, o carro deve se deslocar para a frente (sensor S0 localizado na parte da frente). Explique a
lógica desenvolvida. Todos os sensores devem ser considerados.

S0
Tabela 1: Pinos do Microcontrolador
S0 S1 S2 S3
Sensores
(P1.0) (P1.1) (P1.2) (P1.3)
Motor M1 Motor M2 Situação do motor
Sistema de controle P3.4 P3.5 P3.0 P3.1
(M11) (M12) (M21) (M22)
S3
S1

M2 M1

0 0 0 0 Motor parado
Bateria
0 1 0 1 Rotação horária
1 0 1 0 Rotação anti-horária
1 1 1 1 Motor parado
S2

Uma das Respostas esperadas:

INÍCIO

Configurações
básicas

S
N Para direita
S0 = 1? M1 (anti-horário) S0 = 0?
M2 (anti-horário)
N
S
S
N Para direita
S1 = 1? M1 (anti-horário) S1 = 0?
M2 (anti-horário)

S N

N Para Frente
S2 = 1? M1 (horário)
M2 (anti-horário)

S
S
N Para esquerda
S3 = 1? M1 (horário) S3 = 0?
M2 (horário)
S N
Para Frente
M1 (horário)
M2 (anti-horário)

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 30 de junho de 2016. Prof. José Wilson Lima Nerys

Rótulo Instruções Rótulo Instruções


S0 EQU P1.0 VS1: JB S1,VS2
S1 EQU P1.1 SETB M11 ; M1 anti-horário
S2 EQU P1.2 CLR M12
S3 EQU P1.3 SETB M21 ; M2 anti-horário
M11 EQU P3.4 CLR M22
M12 EQU P3.5 JNB S1,$ ; aguarda não detectar S1
M21 EQU P3.0 VS2: JB S2,VS3
M22 EQU P3.1 CLR M11 ; M1 horário
SETB M12
ORG 00H SETB M21 ; M2 anti-horário
LJMP INICIO CLR M22
VS3: JB S3, FRENTE
ORG 30H CLR M11 ; M1 horário
INICIO: MOV SP,#2FH SETB M12
CLR M21 ; M2 horário
V1: JB S0,VS1 SETB M22
SETB M11 ; M1 anti-horário JNB S3,$ ; aguarda não detectar S3
CLR M12 FRENTE: CLR M11 ; M1 horário
SETB M21 ; M2 anti-horário SETB M12
CLR M22 SETB M21 ; M2 anti-horário
JNB S0,$ ;aguarda não detectar S0 CLR M22
SJMP V1
END

2. Tema: Interrupções do microcontrolador 8051. Valor: 2,5

Faça um programa, em linguagem assembly do 8051, onde as interrupções externas 0 e 1 são utilizadas,
por transição, para acionar um motor de passo. Quando a interrupção externa 0 é solicitada, o motor de
passo gira 180º no sentido horário (direita); quando a interrupção externa 1 é solicitada o motor gira
duas voltas completas no sentido anti-horário (esquerda). Cada passo do motor corresponde a 5º. O
motor está conectado ao nibble inferior da porta P2.

Resposta esperada:

Rótulo Instruções Rótulo Instruções


ORG 00H INT0: MOV R0,#36
LJMP INICIO V1: MOV P2,A
LCALL ATRASO
ORG 03H RR A
SJMP INT0 DJNZ R0,V1
Valor: 0,5 RETI
ORG 13H
SJMP INT1 INT1: MOV R1,#144
V2: MOV P2,A
ORG 30H LCALL ATRASO
INICIO: MOV SP,#2FH RL A
MOV IE,#85H DJNZ R1,V2
MOV TCON,#05H RETI
MOV A,#11H
SJMP $ ATRASO: .......
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, 30 de junho de 2016. Prof. José Wilson Lima Nerys

3. Tema: Temporizadores do microcontrolador 8051. Valor: 2,5

A Tabela 2 mostra um programa, em assembly do 8051. O cristal oscilador é de 12 MHz. Há um


conjunto de 8 Leds conectados à porta P1.
Tabela 2: programa em linguagem Assembly do 8051
Rótulo Instruções Rótulo Instruções
ORG 00H V1: MOV TH0,#0D8H
LJMP INICIO MOV TL0,#0EFH
DJNZ R0,V2
ORG 0BH MOV R0,#100
SJMP V1 ORL A,#01H
MOV P1,A
(III)
ORG 30H RL A
INICIO: MOV SP,#2FH CJNE A,#0FFH,V2
MOV TMOD,#01H MOV A,#00H
(I)
MOV IE,#82H
MOV TH0,#0D8H V2: NOP
(II)
MOV TL0,#0EFH RETI
MOV A,#00H
MOV R0,#100 END
SETB TR0
SJMP $
Analise o programa da Tabela 2 e responda às questões de (a) a (d).

(a) Qual a configuração resultante das instruções indicadas em (I)? (0,5)

Resposta esperada:

O temporizador 0 está configurado para operar no modo 1 (16 bits) e o temporizador 2, no modo 0
(13 bits). A interrupção do temporizador 0 está habilitada.

(b) Qual o tempo resultante de cada contagem do temporizador, com a recarga indicada em (II)? (0,6)

Resposta esperada:

A recarga de TH0/TL0 é D8EFH, que corresponde ao valor decimal 55.535, de acordo com a
Tabela 7. Portanto, a contagem do temporizador 1 será de 55.535 a 65.535, que corresponde a
10.000 pulsos. Sendo cada pulso de 1 µs (clock de 12 MHz  frequência do temporizador = 1
MHz), então cada contagem do temporizador corresponde a 10.000 µs = 10 ms.

(c) Qual o efeito, sobre os Leds, da execução das instruções indicadas em (III)? (0,7)

Resposta esperada:

O valor inicial de A é A = 0000 0000b. Assim, na primeira passagem por (III), o valor de A torna-
se 0000 0001b. Então ocorre uma rotação à esquerda de A, que passa para A = 0000 0010b. Assim,
na segunda operação OU (ORL A,#01H), o valor de A torna-se A = 0000 0011b. Novamente há
uma rotação à esquerda de A e outra operação OU, fazendo A = 0000 0111. Ao final de 8
operações OU/rotação, tem-se A = 1111 1111b. Portanto, os Leds acendem, um a um, até ficarem
todos acesos. Depois de todos acesos, a operação CJNE A,#0FFH,V2 faz o processamento ir para a
linha seguinte. Então começa tudo de novo.

(d) De quanto em quanto tempo as instruções indicadas em (III) são executadas? (0,7)

Resposta esperada:

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 30 de junho de 2016. Prof. José Wilson Lima Nerys

A cada 10 ms (final da contagem do temporizador 1) o processamento é desviado para V1, onde o


registrador R0 (com valor inicial de 100 decimal) é decrementado. Enquanto R0 não for zero, as
instruções em (III) não são executadas. Ou seja, (III) só será executada após a centésima passagem pela
rotina iniciada em V1. Assim, (III) será executada a cada 100 x 10 ms = 1 s.

4. Tema: Serial do microcontrolador 8051. Valor: 2,5

Faça um programa, em assembly do 8051, onde caracteres recebidos via serial do microcontrolador (no
modo 1) são usados para acionar uma lâmpada (pino P1.7). Escolha, na Tabela 8, um caractere qualquer
para ligar a lâmpada e outro para apagar. A taxa de comunicação deve ser de 4800 bps e o cristal
oscilador, 11,0592 MHz. Use interrupção da recepção serial.

Rótulo Instruções Rótulo Instruções


ORG 00H SETB TR1
LJMP INICIO SETB REN
CLR RI
ORG 23H
MOV A,SBUF V1: CJNE A,#CHAR1,V2
CLR RI SETB P1.7 ; liga lâmpada
RETI
V2: CJNE A,#CHA2,V1
ORG 30H CLR P1.7 ; apaga lâmpada
INICIO: MOV SP,#2FH SJMP V1
MOV TMOD,#20H
MOV SCON,#40H END
MOV IE,#90H
MOV TH1,#0FAH
MOV TL1,#0FAH

Questão opcional (Justifique sua resposta) Valor: 1,0

Uma mulher chamada Portia (personagem de Shakespeare), resolveu que se casaria com o primeiro
homem que passasse por dois testes. O segundo teste é dado a seguir: havia três caixas em uma sala e
em uma delas estava o retrato de Portia. O candidato a esposo deveria acertar em qual das caixas estava
o retrato, seguindo as frases que estavam escritas em cada uma delas. Portia explicou que em uma das
caixas as duas frases eram verdadeiras; em outra as duas frases eram falsas e na terceira uma frase era
falsa e outra verdadeira.
Caixa A Caixa B Caixa C

1. O retrato não está 1. O retrato não está 1. O retrato não está


nesta caixa na caixa A nesta caixa
2. Ele está na caixa B 2. Ele está na caixa C 2. Ele está na caixa A

Em qual caixa está o retrato de Portia?

Resposta esperada:

Uma das maneiras de resolver é supondo que esteja em A, depois em B, depois em C e, para cada suposição,
verificar as frases de cada caixa.

Suposição 1: Está na Caixa A

Frases da Caixa A: F e F
Frases da Caixa B: F e F
Frases da Caixa C: V e V
Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 30 de junho de 2016. Prof. José Wilson Lima Nerys

Se o retrato estivesse na caixa A, então todas as frases das caixas A e B seriam falsas, o que contraria a
afirmação de Portia. Conclusão: não está na Caixa A.

Suposição 2: Está na Caixa B

Frases da Caixa A: V e V
Frases da Caixa B: V e F
Frases da Caixa C: V e F

Se o retrato estivesse na caixa B, então as frases das caixas B e C seriam, respectivamente, V e F, o que
contraria a afirmação de Portia. Conclusão: não está na Caixa B.

Suposição 3: Está na Caixa C

Frases da Caixa A: V e F
Frases da Caixa B: V e V
Frases da Caixa C: F e F

Há uma caixa com ambas as frases verdadeiras (B); uma com ambas falsas (C) e uma com uma verdadeira e
outra falsa (A), conforme a afirmação de Portia. Conclusão: o retrato está na Caixa C.

Informações Complementares
Tabela 4: End. interrupções
Tabela 3: Alguns Registradores Especiais
Interrupção Endereço
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Solicitada de desvio
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Reset 0000h
IE EA X X ES ET1 EX1 ET0 EX0 INT0\ 0003h
IP X X X PS PT1 PX1 PT0 PX0 Timer/counter 0 000Bh
PSW CY AC F0 RS1 RS0 OV X P INT1\ 0013h
TMOD G1 C/T\ M1.1 M0.1 G0 C/T\ M1.0 M0.0 Timer/counter 1 001Bh
SCON SM0 SM1 SM2 REN TB8 RB8 TI RI Canal Serial 0023h

Tabela 5: Taxas de transmissão mais comuns


Timer 1
Baud Rate (bits/seg) Freq. Osc. (MHz) SMOD C/Tbarra Modo Valor Recar.
Modo 0 Máx: 1MHz 12 X X X X
Modo 2 Máx: 375K 12 1 X X X
Modo 1, 3: 62,5K 12 1 0 2 FFh
19,2K 11,059 1 0 2 FDh
9,6K 11,059 0 0 2 FDh
4,8K 11,059 0 0 2 FAh
2,4K 11,059 0 0 2 F4h
1.2K 11,059 0 0 2 E8h
137,5 11,059 0 0 2 1Dh
110 6 0 0 2 72h
110 12 0 0 1 FEEBh

Tabela 6: Tabela ASCII – parcial


Código Código Código Código Código Código
Caractere Caractere Caractere
Hexadecimal decimal Hexadecimal decimal Hexadecimal decimal
0 30 48 A 41 65 a 61 97
1 31 49 B 42 66 b 62 98
2 32 50 C 43 67 c 63 99
3 33 51 D 44 68 d 64 100
4 34 52 E 45 69 e 65 101
5 35 53 F 46 70 f 66 102
6 36 54 G 47 71 g 67 103

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 30 de junho de 2016. Prof. José Wilson Lima Nerys

Tabela 7: Valores Decimais e Hexadecimais


Valor Hexadecimal Valor Decimal
3CAF 15535
63BF 25535
8ACF 35535
B1DF 45535
D8EF 55535
FFFF 65535

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 08 de junho de 2017. Prof. José Wilson Lima Nerys

MICROPROCESSADORES E MICROCONTROLADORES
PROVA 2 (Tema: Microcontrolador 8051)

1. Tema: programação geral do microcontrolador 8051. Valor: 2,0

A Figura a seguir mostra um sistema no qual um motor de passo é usado para o transporte vertical de
objetos a serem colocados nas posições 1, 2 ou 3, separadas por alturas de 20 cm. Cada passo do motor
corresponde a 6º e cada volta completa corresponde a 10 cm de deslocamento vertical. O motor
encontra-se, originalmente, na posição 1. Faça um programa, em assembly do 8051, para acionar o
motor de passo com a seguinte lógica:
(a) O programa fica inicialmente em um loop monitorando os pinos P2.1, P2.2 e P2.3 (originalmente
em estado alto).
(b) A cada pino acionado (pressionado e liberado), o programa verifica a posição em que a base se
encontra e compara com a posição desejada; e desloca-se, para cima ou para baixo a distância
correspondente. Exemplo: Se a base está na posição 1 e o pino P2.2 for acionado, o objeto é
deslocado 20 cm para cima; e o programa retorna para o loop; se o pino pressionado for P2.3, o
objeto é deslocado 40 cm, da posição 1 até a posição 3.
(c) R0 guarda o número da posição em que a base se encontra.
(d) O motor está conectado ao nibble inferior da porta P1.

Resposta Esperada:

Considerações iniciais: Cada passo do motor corresponde a 6º; assim, são necessários 60 passos (360/6)
para completar uma volta. Cada volta corresponde a um deslocamento vertical de 10 cm; assim, são
necessários 120 (2 x 60) passos para percorrer 20 cm e 240 (4 x 60) passos para deslocar 40 cm.

Se a base estiver na posição 1, ela subirá 20 cm para alcançar a posição 2 e 40 cm para a posição 3.

Se a base estiver na posição 2, ela subirá 20 cm para alcançar a posição 3 e descerá 20 cm para alcançar a
posição 1.

Se a base estiver na posição 3, ela descerá 20 cm para alcançar a posição 2 e 40 cm para a posição 1.

O fluxograma a seguir ilustra melhor todo o processo. Após cada escolha, a primeira é ação é verificar se
a base já se encontra na posição desejada. Se estiver, o processamento volta para o laço principal.

Para manter coerência com a Figura inicial, o motor gira no sentido anti-horário (RL A) para subir a base
e no sentido horário (RR A) para descer.

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 08 de junho de 2017. Prof. José Wilson Lima Nerys

Rótulo Instruções Rótulo Instruções Rótulo Instruções


ORG 00H DESTINO1: CJNE R0,#02H,V3 SOBE_20CM: MOV A,#11H
LJMP INICIO MOV R0,#01H MOV R7,#120
SJMP DESCE_20CM V6: MOV P1,A
ORG 30H RL A
INICIO: MOV SP,#2FH V3: CJNE R0,#03H,V0 LCALL DELAY
MOV R0,#01H MOV R0,#01H DJNZ R7,V6
SJMP DESCE_40CM LJMP V0
V0: JB P2.1,V1 SOBE_40CM: MOV A,#11H
CJNE R0,#01H,DESTINO1 DESTINO2: CJNE R0,#01H,V4 MOV R7,#240
SJMP V0 MOV R0,#02H V7: MOV P1,A
SJMP SOBE_20CM RL A
V1: JB P2.2,V2 LCALL DELAY
CJNE R0,#02H,DESTINO2 V4: CJNE R0,#03H,V0 DJNZ R7,V7
SJMP V0 MOV R0,#02H LJMP V0
SJMP DESCE_20CM DESCE_20CM: MOV A,#11H
V2: JB P2.3,V0 MOV R7,#120
CJNE R0,#03H,DESTINO3 DESTINO3: CJNE R0,#01H,V5 V8: MOV P1,A
SJMP V0 MOV R0,#03H RR A
SJMP SOBE_40CM LCALL DELAY
DJNZ R7,V8
V5: CJNE R0,#02H,V0 LJMP V0
MOV R0,#03H DESCE_40CM: MOV A,#11H
SJMP SOBE _20CM MOV R7,#240
DELAY: MOV R6,#100 V9: MOV P1,A
V10: MOV R5,#250 RR A
DJNZ R5,$ LCALL DELAY
DJNZ R6,V10 DJNZ R7,V9
RET LJMP V0
END

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 08 de junho de 2017. Prof. José Wilson Lima Nerys

2. Tema: Interrupções do microcontrolador 8051. Valor: 2,5

Faça um programa, em linguagem assembly do 8051, onde as interrupções externas 0 e 1 são utilizadas
para acionar Leds na porta P1. A interrupção externa zero é por nível e, quando solicitada, os Leds da
porta P1 devem piscar, todos juntos, enquanto houver solicitação. A interrupção externa 1 é por
transição, com prioridade alta e, quando solicitada, os Leds devem rotacionar para a esquerda, 3 voltas
completas (3 voltas de 8 rotações). Na subrotina de atraso de tempo para os dois casos deve-se usar R0
= 100 e R1 = 200.

Resposta Esperada:

Linha Rótulo Instruções Linha Rótulo Instruções


1 ORG 00H 21 PISCA: MOV P1,#00
2 LJMP INICIO 22 LCALL ATRASO
3 23 MOV P1,#0FFH
4 ORG 03H 24 LCALL ATRASO
5 LJMP PISCA 25 RETI
6 26
7 ORG 13H 27 GIRA: MOV R7,#24
8 LJMP GIRA 28 V2: MOV P1,A
9 29 LCALL ATRASO
10 ORG 30H 30 RL A
11 INICIO: MOV SP,#2FH 31 DJNZ R7,V2
12 MOV IE,#85H 32 RETI
13 MOV TCON,#04H 33
14 MOV IP,#04H 34 ATRASO: MOV R0,#100
15 MOV A,#01H 35 MOV R1,#200
16 SJMP $ 36 DJNZ R1,$
17 37 DJNZ R0,V1
18 38 RET
19 39 END
20 40

3. Tema: Serial do microcontrolador 8051. Valor: 2,5

O programa mostrado na Tabela 2 foi escrito em assembly do 8051. É um programa usado para acionar
alguns dispositivos via canal serial do 8051. Analise o programa e responda às questões pedidas. O
cristal oscilador é de 11,0592 MHz.

Observações:
(i) Há um Led verde acionado através do pino P2.7 (liga com nível alto); e um Led vermelho acionado
através do pino P2.6 (liga com nível alto).
(ii) Há um motor CC acionado através dos pinos P2.0 e P2.1, seguindo a seguinte lógica:
(iii)
Tabela 1: lógica de acionamento do motor cc
P2.0 P2.1 Comportamento do Motor
0 0 Motor parado
0 1 Motor gira no sentido horário
1 0 Motor gira no sentido anti-horário
1 1 Motor parado

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 08 de junho de 2017. Prof. José Wilson Lima Nerys

Tabela 2: programa em linguagem Assembly do 8051


Linha Rótulo Instruções Linha Rótulo Instruções
1 ORG 00H 21 V1: CJNE A,#31H,V2
2 LJMP INICIO 22 SETB P2.0
3 23 CLR P2.1
4 ORG 23H 24 CLR P2.6
5 CLR RI 25 SETB P2.7
6 MOV A,SBUF 26 RETI
7 SJMP V1 27 V2: CJNE A,#32H,V3
8 28 CLR P2.0
9 ORG 30H 29 SETB P2.1
10 INICIO: MOV SP,#2FH 30 SETB P2.6
11 MOV SCON,#40H 31 CLR P2.7
12 MOV TMOD,#20H 32 RETI
13 MOV IE,#90H 33 V3: CJNE A,#33H,V4
14 MOV TH1,#0E8H 34 CLR P2.0
15 MOV TL1,#0E8H 35 CLR P2.1
16 SETB TR1 36 CLR P2.6
17 SETB REN 37 CLR P2.7
18 CLR RI 38 V4: NOP
19 SJMP $ 39 RETI
20 40 END

Analise o programa da Tabela 2 e responda às questões de (a) a (d).

(a) Qual a configuração resultante das instruções da linha 11 à linha 18? (0,5)
Resposta Esperada:
O canal serial foi configurado para operar no modo 1 (assíncrono de 8 bits) com baud rate de 1200
bps (ver tabela 5) e com interrupção (IE = 90h = 1001 0000b).

(b) O que acontece com a execução das instruções da linha 21 à linha 26? (0,5)
Resposta Esperada:
O conteúdo de A (recebido via serial) é comparado com 31H (código ASCII do número 1, de
acordo com a Tabela 7). Se A ≠ 31H, desvia para V2; se A = 31H, aciona o motor cc no sentido
anti-horário (SETB P2.0 e CLR P2.1) e liga o Led verde (SETB P2.7). A seguir, através da
instrução RETI, retorna para o laço infinito SJMP $ (linha 19).

(c) O que acontece com a execução das instruções da linha 27 à linha 32? (0,5)
Resposta Esperada:
O conteúdo de A (recebido via serial) é comparado com 32H (código ASCII do número 2, de
acordo com a Tabela 7). Se A ≠ 32H, desvia para V3; se A = 32H, aciona o motor cc no sentido
horário (CLR P2.0 e SETB P2.1) e liga o Led vermelho (SETB P2.6). A seguir, através da
instrução RETI, retorna para o laço infinito SJMP $ (linha 19).

(d) Explique o funcionamento do programa. (1,0)


Resposta Esperada:
Após as configurações iniciais, o programa fica aguardando uma interrupção da serial em um laço
infinito, na linha 19 (SJMP $). Ao receber um dado via serial (sinalizada através de RI = 1), o
programa desvia para o endereço 23H, onde o dado recebido é transferido para o registrador A. Em
seguida, o processamento é desvia para o endereço V1 (linha 21). A partir desse endereço, o
conteúdo de A é comparado com 31H (número 1), 32H (número 2) e 33H (número 3). Se A = 31H
o motor CC é acionado no sentido anti-horário; se A = 32H, no sentido horário e se A = 33H, o
motor para. Após cada uma dessas ações, o processamento retorna para o laço infinito. Se A for
diferente desses três valores, o processamento simplesmente retorna para o laço infinito, mantendo
o estado atual.

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 08 de junho de 2017. Prof. José Wilson Lima Nerys

4. Tema: Temporizadores do microcontrolador 8051. Valor: 2,5

Faça um programa, em assembly do 8051, usando o temporizador zero no modo 1, com interrupção,
para gerar uma onda quadrada no pino P1.0, com meio período correspondente a 4 segundos. Use uma
base de tempo de 40 ms, para um cristal oscilador de 12 MHz.
Resposta Esperada:
Considerações iniciais: para utilizar uma base de 40 ms, com cristal de 12 MHz, é necessário gerar
40.000 pulsos de 1 µs no modo 1 do temporizador zero. Assim, a contagem deve começar de 25535
(65535-40000), que corresponde a 63BFH, de acordo com a Tabela 6. Para gera 4 segundos com base
de 40 ms, são necessárias 100 contagens do temporizador, antes de cada complemento do pino P1.0.

Linha Rótulo Instruções Linha Rótulo Instruções


1 ORG 00H 16 ONDA: MOV TH0,#HIGH(25535)
2 LJMP INICIO 17 MOV TL0,#LOW(25535)
3 18 DJNZ R0,V1
4 ORG 0BH 19 CPL P1.0
5 LJMP ONDA 20 MOV R0,#100
6 21 NOP
7 ORG 30H 22 V1: RETI
8 INICIO: MOV SP,#2FH 23
9 MOV IE,#82H 24 END
10 MOV TMOD,#01H 25
11 MOV TH0,#HIGH(25535) 26
12 MOV TL0,#LOW(25535)
13 MOV R0,#100
14 SETB TR0
15 SJMP $

============================
Questão opcional (Explique sua conclusão) Valor: 0,5

Há muito tempo, num misterioso e longínquo país do Oriente, havia um oráculo bastante visitado por
pessoas de todas as partes da nação e até mesmo de países vizinhos. Nesse oráculo apareciam três
deuses, sentados lado a lado: o deus da Verdade, o deus da Falsidade e o deus da Diplomacia, que
atendiam os fiéis respondendo às suas súplicas. Naturalmente, as respostas do deus da Verdade eram
sempre verdadeiras, as do deus da Falsidade eram sempre falsas e as do deus da Diplomacia tanto
poderiam ser verdadeiras quanto falsas. Mas havia algo que afligia muito os pobres peregrinos: eles não
sabiam se as respostas que ouviam eram verdadeiras ou não pois, como os três deuses eram idênticos,
ficava impossível reconhecer qual dos deuses estava falando. Certo dia, um fiel mais ousado decidiu
colocar a situação em pratos limpos.

Perguntou ao primeiro deus: ̶ Quem está sentado a seu lado?


Resposta: ̶ O deus da Verdade.

Raciocínio lógico:
Como o primeiro deus afirma que o deus ao lado é o da Verdade, ele não pode ser o da Verdade, pois só
existe um deus da Verdade. Portanto, ele é o deus da Falsidade ou da Diplomacia.

Perguntou ao segundo deus: ̶ Quem é você?


Resposta: ̶ O deus da Diplomacia.

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 08 de junho de 2017. Prof. José Wilson Lima Nerys

Raciocínio lógico:
Como o segundo deus afirmou ser o da Diplomacia, ele não pode ser o deus da Verdade. Senão ele diria
ser o da Verdade, e não o da Diplomacia. Portanto, ele é o deus da Falsidade ou da Diplomacia.

Perguntou ao terceiro deus: ̶ Quem está sentado a seu lado?


Resposta: ̶ O deus da Falsidade.

Raciocínio lógico:
A partir das respostas dos dois primeiros deuses, já se conclui que nenhum deles é o deus da Verdade e,
portanto, o da Verdade é o terceiro. Daí, conclui-se que:

Primeiro deus: Diplomacia


Segundo deus: Falsidade
Terceiro deus: Verdade

Informações Complementares

Tabela 3: Alguns Registradores Especiais Tabela 4: End. interrupções


Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Interrupção Endereço
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 Solicitada de desvio
IE EA X X ES ET1 EX1 ET0 EX0 Reset 0000h
IP X X X PS PT1 PX1 PT0 PX0 INT0\ 0003h
Timer/counter 0 000Bh
PSW CY AC F0 RS1 RS0 OV X P
INT1\ 0013h
TMOD G1 C/T\ M1.1 M0.1 G0 C/T\ M1.0 M0.0
Timer/counter 1 001Bh
SCON SM0 SM1 SM2 REN TB8 RB8 TI RI
Canal Serial 0023h

Tabela 5: Taxas de transmissão mais comuns Tabela 6: Valores Decimais e


Timer 1 Hexadecimais
Baud Rate (bits/seg) Freq. Osc. SMOD C/Tbarra Modo Valor
(MHz) Recar. Valor Valor
Modo 0 Máx: 1MHz 12 X X X X Hexadecimal Decimal
Modo 2 Máx: 375K 12 1 X X X 3CAF 15535
Modo 1, 3: 62,5K 12 1 0 2 FFh
63BF 25535
19,2K 11,059 1 0 2 FDh
8ACF 35535
9,6K 11,059 0 0 2 FDh
4,8K 11,059 0 0 2 FAh B1DF 45535
2,4K 11,059 0 0 2 F4h D8EF 55535
1.2K 11,059 0 0 2 E8h FFFF 65535
137,5 11,059 0 0 2 1Dh
110 6 0 0 2 72h
110 12 0 0 1 FEEBh

Tabela 7: Tabela ASCII – parcial


Código Código Código Código Código Código
Caractere Caractere Caractere
Hexadecimal decimal Hexadecimal decimal Hexadecimal decimal
0 30 48 A 41 65 a 61 97
1 31 49 B 42 66 b 62 98
2 32 50 C 43 67 c 63 99
3 33 51 D 44 68 d 64 100
4 34 52 E 45 69 e 65 101
5 35 53 F 46 70 f 66 102
6 36 54 G 47 71 g 67 103

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 31 de outubro de 2017. Prof. José Wilson Lima Nerys

MICROPROCESSADORES E MICROCONTROLADORES

Prova 1 Resposta Esperada

1. Tema: Conceitos Gerais Valor: 1,0

Os microcontroladores da família 8051 possuem arquitetura CISC, e os microcontroladores da família


PIC, arquitetura RISC. Faça uma comparação entre os processos de busca e execução de instruções dos
microcontroladores dessas duas famílias.

Resposta Esperada:
No microcontrolador da família 8051 (arquitetura CISC) códigos e dados compartilham o mesmo
barramento; assim, no processo de execução de uma instrução, o código é buscado na memória ROM,
decodificado e, depois, executado. Como o barramento é único, a busca de uma nova instrução ocorre
somente após a execução da atual.

No microcontrolador da família PIC (arquitetura RISC) o barramento de código é separado do


barramento de dados. Assim, pode-se buscar uma nova instrução durante a execução da atual.

2. Tema: Interrupções do microcontrolador 8051. Valor: 1,5

Faça um programa, em linguagem assembly do 8051, onde as interrupções externas 0 e 1 são utilizadas
para acionar uma lâmpada no pino P1.7 e um motor de passo no nibble inferior da porta P2. A
interrupção externa zero, por transição, e com prioridade alta, aciona (liga/desliga) a lâmpada. A
interrupção externa 1, por transição, resulta na rotação do motor de passo no sentido anti-horário, três
voltas completas. Cada passo do motor corresponde a 5o.

Resposta Esperada:

Linha Rótulo Instruções Comentário


1 LAMP BIT P1.7 O pino P1.7 foi denominado LAMP
2
3 ORG 00H
4 LJMP INICIO
5
6 ORG 03H ; Endereço da interrupção externa 0
7 CPL LAMP ; Liga ou desliga a lâmpada, dependendo do estado anterior
8 RETI ; retorna da interrupção zero
9
10 ORG 13H
11 LJMP PASSO ; Desvia para a linha 21
12
13 ORG 30H
14 INICIO: MOV SP,#2FH ; Define o início da pilha para o endereço 2FH da RAM
15 MOV IE,#85H ; Habilita as interrupções externas 0 e 1. IE = 1000 0101b
16 MOV TCON,#05 ; As interrupções externas são por transição. IT0=1; IT1=1
17 MOV IP,#01H ; A interrupção externa 0 tem prioridade alta
18 MOV A,#11H ; Acumulador recebe valor a ser enviado ao motor de passo
19 SJMP $ ; Laço infinito, esperando uma das duas interrupções
20
21 PASSO: MOV R0,#216 ; Número de passo para 3 voltas completas
22 V1: MOV P2,A ; A porta P2 recebe o conteúdo do acumulador
23 LCALL ATRASO ; Chama subrotina de atraso de tempo
24 RL A ; Rotaciona o conteúdo de A para a esquerda (anti-horário)
25 DJNZ R0,V1 ; Enquanto R0 ≠ 0, repete a rotina a partir de V1
26 RETI ; Retorna da interrupção 1, após 3 voltas no sentido anti-horário
Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 31 de outubro de 2017. Prof. José Wilson Lima Nerys

27
28 ATRASO: MOV R1,#100 ; Subrotina de atraso de tempo
29 V2: MOV R2,#250
30 DJNZ R2,$
31 DJNZ R1,V2
32 RET
33
34 END

Uma vez que 1 passo do motor corresponde a 5º, são necessários 72 passos para completar 1 volta e
216 passos para 3 voltas completas. Assim, R0 = 216, na rotina da interrupção externa 1.

3. Tema: Temporizadores do microcontrolador 8051. Valor: 1,5

A Figura a seguir mostra um esquema de acionamento de 3 Leds através de 3 chaves. Faça um


programa, em assembly do 8051, usando o temporizador zero no modo 1, com interrupção, para gerar
ondas quadradas nos 3 Leds. Quando a chave CH1 é acionada (nível lógico zero), uma onda quadrada
de 1 Hz é gerada no LED1. A chave CH2 gera uma onda quadrada de 10 Hz no LED2 e a chave CH3
gera uma onda quadrada de 50 Hz no LED3. Use a mesma base de tempo, e a mesma subrotina, para
gerar todas as ondas. As ondas quadradas devem ser geradas uma por vez.
5V

1 (RST) (VCC) 20
330 Ω
2(RxD/P3.0) (P1.7)19
12 MHz
3(TxD/P3.1) (P1.6)18 LED3
330 Ω
4 (XTAL2) (P1.5)17
330 Ω
5 (XTAL1) 16 LED2
LED1
33 pF 33 pF 6(INT0/P3.2) 15
7(INT1/P3.3) (P1.2)14
8(T0/P3.4) (P1.1) 13
CH1 9(T1/P3.4) (P1.0) 12
CH2
10(GND) (P3.7) 11
CH3

Resposta Esperada:

Linha Rótulo Instruções Comentário


1 CH1 BIT P3.4 O pino P3.4 foi denominado CH1
2 CH2 BIT P3.5 O pino P3.5 foi denominado CH2
3 CH3 BIT P3.7 O pino P3.7 foi denominado CH3

4 LED1 BIT P1.5 O pino P1.5 foi denominado LED1


5 LED2 BIT P1.6 O pino P1.6 foi denominado LED 2
6 LED3 BIT P1.7 O pino P1.7 foi denominado LED 3
7
8 ORG 00H
9 LJMP INICIO
10
11 ORG 0BH
12 LJMP ONDAS ; Desvia para o endereço ONDAS
13
14 ORG 30H
15 INICIO: MOV SP,#2FH ; Define o início da pilha para o endereço 2FH da RAM
16 MOV IE,#82H ; Habilita a interrupção do temporizador zero
17 MOV TMOD,#01H ; Habilita o modo 1 do temporizador zero
18 MOV TH0,#HIGH(55535) ; Início da contagem em 55.535 - conta 10000 pulsos (10 ms)
19 MOV TL0,#LOW(55535) ; Cristal de 12 MHz
Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 31 de outubro de 2017. Prof. José Wilson Lima Nerys

20
21 V0: CLR F0 ; Limpa F0  F0 =1 indica final da contagem desejada
22 JB CH1,F10HZ ; Se CH1 = 1, desvia para F10HZ. Se CH1 = 0, próxima linha
23 MOV R0,#50 ; Faz R0 = 50 para gerar meio período de 50 * 10 ms = 0,5 s
24 SETB TR0 ; Dispara temporizador zero
25 JNB F0,$ ; Aguarda F0 = 1 (que ocorre a cada 0,5 s)
26 CPL LED1 ; Complementa Led1
27 CLR TR0 ; Para temporizador zero
28 SJMP V0 ; Volta para início da verificação das chaves
29
30 F10HZ: JB CH2,F50HZ ; Se CH2 = 1, desvia para F50HZ. Se CH2 = 0, próxima linha
31 MOV R0,#5 ; Faz R0 = 5 para gerar meio período de 5 * 10 ms = 50 ms
32 SETB TR0 ; Dispara temporizador zero
33 JNB F0,$ ; Aguarda F0 = 1 (que ocorre a cada 50 ms)
34 CPL LED2 ; Complementa Led2
35 CLR TR0 ; Para temporizador zero
36 SJMP V0 ; Volta para início da verificação das chaves
37
38 F50HZ: JB CH3,V0 ; Se CH3 = 1, volta para V0. Se CH2 = 0, próxima linha
39 MOV R0,#1 ; Faz R0 = 1 para gerar meio período de 1 * 10 ms = 10 ms
40 SETB TR0 ; Dispara temporizador zero
41 JNB F0,$ ; Aguarda F0 = 1 (que ocorre a cada 10 ms)
42 CPL LED3 ; Complementa Led3
43 CLR TR0 ; Para temporizador zero
44 SJMP V0 ; Volta para início da verificação das chaves
45
46 ONDAS: MOV TH0,#HIGH(55535) ; Recarrega TH0 com valor para gerar 10 ms
47 MOV TL0,#LOW(55535) ; Recarrega TL0 com valor para gerar 10 ms
48 DJNZ R0,SAI ; Decrementa R0 (50, 5 ou 1). Se R0 ≠ 0, retorna da subrotina
49 SETB F0 ; Seta F0 ao final da contagem desejada (500ms, 50ms ou 10ms)
50 SAI: NOP
51 RETI
52 END

Obs.:
(a) Para gerar as ondas quadradas é necessário gerar um tempo que corresponde a meio período
de cada onda, porque a cada meio período o estado do pino de saída da onda deve mudar
(nível baixo nível alto). Assim,
(b) Para a onda de 1 Hz, o período é de 1 s e, portanto, o meio-período corresponde a 500 ms.
(c) O período da onda de 10 Hz é 100 ms e, portanto, deve-se gerar um meio período de 50 ms.
(d) O período da onda de 50 Hz é 20 ms e, portanto, deve-se gerar um meio período de 10 ms.

4. Tema: Serial do microcontrolador 8051. Valor: 1,0

O programa mostrado na Tabela 1 foi escrito em assembly do 8051. É um programa para acionar uma
lâmpada via canal serial do 8051. Analise o programa e responda às questões pedidas. O cristal
oscilador é de 11,0592 MHz. A interface serial usada para enviar os comandos envia sempre dois
caracteres em sequência.

Tabela 1: programa em linguagem Assembly do 8051


Linha Rótulo Instruções Linha Rótulo Instruções
1 LAMP BIT P1.7 24 V0: JB F0,DIGITO2
2 25 CJNE A,#'A',V0
3 ORG 00H 26 SETB F0
4 LJMP INICIO 27 SJMP V0
5 28
6 ORG 23H 29 DIGITO2: CLR F0

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 31 de outubro de 2017. Prof. José Wilson Lima Nerys

7 MOV A,SBUF 30 CJNE A,#'1',V1


8 CLR RI 31 SETB LAMP
9 RETI 32 SJMP V0
10 33
11 ORG 30H 34 V1: CJNE A,#'2',V2
12 INICIO: MOV SP,#2FH 35 CLR LAMP
13 MOV IE,#90H 36 SJMP V0
14 MOV SCON,#40H 37
15 MOV TMOD,#20H 38 V2: CJNE A,#'3',V0
16 MOV TH1,#0FDH 39 SETB LAMP
17 MOV TL1,#0FDH 40 LCALL ATRASO
18 CLR LAMP 41 CLR LAMP
19 CLR F0 42 SJMP V0
20 SETB REN 43
21 SETB TR1 44 ATRASO: Atraso de 30 segundos
22 45 RET
23 46 END

(a) Qual a configuração resultante das instruções da linha 11 à linha 21?

Interrupção da serial habilitada


Serial configurada para o modo 1 – assíncrona de 8 bits
Temporizador 1 configurado para o modo 2 (recarga automática), para gerar a baud rate
TH1 carregado com FDh, para gerar taxa de 9.600 bps (cristal de 11,0592 MHz)
A lâmpada é apagada (CLR LAMP), a flag F0 é zerada, a recepção serial é habilitada (SETB REN)
E o temporizador é disparado (SETB TR1)

(b) O que acontece quando o primeiro caractere recebido é ‘A’?

O primeiro caractere é recebido com F0 = 0. Se esse caractere for a letra ‘A’, F0 é setado,
preparando para receber o segundo caractere.

(c) O que acontece quando o segundo caractere recebido é ‘1’?

Se F0 = 1, desvia para DIGITO2 e zera a flag F0 (preparando para a próxima mensagem).


Se o segundo caractere for ‘1’, liga a lâmpada (SETB LAMP).

(d) O que acontece quando o segundo caractere recebido é ‘3’?

Se o segundo caractere for ‘3’, liga lâmpada (SETB LAMP), chama uma subrotina de atraso de
tempo de 30 s e, depois, desliga a lâmpada (CLR LAMP).

(e) Explique o funcionamento do programa.

A comunicação serial do 8051 é habilitada para receber dados a uma taxa de 9600 bps, usando
interrupção. São verificados sempre 2 caracteres; se o primeiro for a letra ‘A’, são verificadas 3
possibilidades para o segundo caractere: 1, 2 ou 3. Se o segundo caractere for ‘1’, liga a lâmpada;
se for for ‘2’, desliga; se for ‘3’, liga a lâmpada com temporização, desligando a mesma após 30
segundos.

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 31 de outubro de 2017. Prof. José Wilson Lima Nerys

Questão opcional Valor: 0,5

Ana, Beatriz e Carolina são professoras de Teatro, Dança e Ginástica, mas não necessariamente nessa
ordem. A professora de Ginástica é a menor de todas e é a melhor amiga de Beatriz. A professora de
Dança é menor que a professora Carolina. Preencha a tabela com a profissão a seguir de cada uma
delas.

Nome da Professora Modalidade Altura relativa


Ana Ginástica Menor de todas
Beatriz Dança Menor que Carolina
Carolina Teatro Mais alta

Obs.: A resposta correta sem o raciocínio necessário terá valor zero.

Raciocínio:

1. Sendo a professora de Ginástica a menor de todas e amiga de Beatriz, então a modalidade de


Beatriz será Dança ou Teatro

2. Sendo a professora de Dança menor que Carolina, então Carolina não é a menor de todas e sua
modalidade não é Dança e nem Ginástica (menor de todas). Assim, Carolina é professora de
Teatro.
3. A partir de 1 e 2, conclui-se que a professora de Ginástica é Ana (a menor de todas) e a
professora de Dança é Beatriz.

Informações Complementares

Tabela 2: Alguns Registradores Especiais Tabela 3: End. interrupções


Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Interrupção Endereço
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 Solicitada de desvio
IE EA X X ES ET1 EX1 ET0 EX0 Reset 0000h
IP X X X PS PT1 PX1 PT0 PX0 INT0\ 0003h
Timer/counter 0 000Bh
PSW CY AC F0 RS1 RS0 OV X P
INT1\ 0013h
TMOD G1 C/T\ M1.1 M0.1 G0 C/T\ M1.0 M0.0
Timer/counter 1 001Bh
SCON SM0 SM1 SM2 REN TB8 RB8 TI RI
Canal Serial 0023h

Tabela 4: Taxas de transmissão mais comuns Tabela 5: Valores Decimais e


Timer 1 Hexadecimais
Baud Rate (bits/seg) Freq. Osc. SMOD C/Tbarra Modo Valor
(MHz) Recar. Valor Valor
Modo 0 Máx: 1MHz 12 X X X X Hexadecimal Decimal
Modo 2 Máx: 375K 12 1 X X X 3CAF 15535
Modo 1, 3: 62,5K 12 1 0 2 FFh
63BF 25535
19,2K 11,059 1 0 2 FDh
8ACF 35535
9,6K 11,059 0 0 2 FDh
4,8K 11,059 0 0 2 FAh B1DF 45535
2,4K 11,059 0 0 2 F4h D8EF 55535
1.2K 11,059 0 0 2 E8h FFFF 65535
137,5 11,059 0 0 2 1Dh
110 6 0 0 2 72h
110 12 0 0 1 FEEBh

Tabela 6: Tabela ASCII – parcial


Código Código Código Código Código Código
Caractere Caractere Caractere
Hexadecimal decimal Hexadecimal decimal Hexadecimal decimal
0 30 48 A 41 65 a 61 97
1 31 49 B 42 66 b 62 98
2 32 50 C 43 67 c 63 99
3 33 51 D 44 68 d 64 100
4 34 52 E 45 69 e 65 101
5 35 53 F 46 70 f 66 102
Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)
Goiânia, 31 de outubro de 2017. Prof. José Wilson Lima Nerys

6 36 54 G 47 71 g 67 103

Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação (EMC) – Universidade Federal de Goiás (UFG)