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
; IE = 1000 1011 B  INTERRUPÇÕES TEMP 0, TEMP 1 E INT. 0
; EXTERNA ZERO POR TRANSIÇÃO
; TEMP ZERO NO MODO 1; TEMP 1 NO MODO 2
; RECARGA DO TEMP 1
; CONTAGEM DE 40.000 PULSOS
; DE 25.535 (63BFH) ATÉ 65.535 (FFFFH)
; DISPARA TEMPORIZADOR 0
; DISPARA TEMPORIZADOR 1
MOV IE,#8BH
MOV TCON,#01H
MOV TMOD,#21H
MOV TH1,#3FH
MOV TH0,#63H
MOV TL0,#0BFH
SETB TR0
SETB TR1
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:
Inicio
Fim
A15
A14
A13
A12
A11
A10
A9
A8
A7
A6
A5
A4
A3
A2
A1
A0
HEXA
0
0
0
0
0
0
0
0
0
0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0000
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
0
1
2
3
A15
A14
A13
A12
A11
A10
A9
A8
A7
A6
A5
A4
A3
A2
A1
A0
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
Inicio
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0800
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
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
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
HEXA
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
0
A11
0
Região selecionada
Endereço Inicial
Endereço Final
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?
Rótulo
Mnemônico
CHAVE EQU P1.7
Valor: 2,0
Comentários
; O pino P1.7 recebe o nome de CHAVE
ORG 00H
LJMP INICIO
ORG 30H
MOV SP,#2FH
MOV DPTR,#1000H
; O endereço inicial da pilha é 2Fh
; DPTR recebe o valor inicial da região dos LEDs
V4:
V2:
MOV A,#00H
JNB CHAVE,V1
MOVX @DPTR,A
LCALL ATRASO
CPL A
SJMP V2
; Se a variável CHAVE for 1 (CH aberta), faz A=00
; Se a variável CHAVE for zero (CH fechada), desvia para V1
; Se CHAVE=1 (CH aberta), envia o conteúdo de A para os LEDs
; Chama subrotina de atraso
; Complementa conteúdo de A. Alterna entre 00h e FFH
; Volta para V2
V1:
V3:
MOV A,#01H
MOVX @DPTR,A
LCALL ATRASO
RL A
CJNE A,#01H,V3
SJMP V4
; Se a variável CHAVE for zero (CH fechada), faz A = 01h
; Envia o conteúdo de A para os LEDs
; Chama subrotina de atraso de tempo
; Rotaciona o conteúdo de A para a esquerda
; Verifica se A = 01h. Enquanto A for diferente de 01h, desvia para V3.
; Quando A = 01h (rotação completa dos LEDs), volta para V2.
MOV R0,#250
DJNZ R0,$
RET
END
; Subrotina de atraso de tempo
INICIO:
ATRASO:
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
COLUNA2
LINHA1
EQU
EQU
EQU
P1.0
P1.1
P1.2
LINHA2
EQU
P1.3
ORG 00H
LJMP INICIO
INICIO:
LOOP:
ORG 30H
MOV SP,#2FH
MOV DPTR,#1000H
MOV R0,#00H
MOV A,#01H
LCALL TECLADO
CJNE R0,#01H,V1
MOVX @DPTR,A
RL A
LCALL ATRASO
SJMP LOOP
V1:
CJNE R0,#02H,LOOP
MOVX @DPTR,A
RR A
LCALL ATRASO
SJMP LOOP
TECLADO:
; ENDEREÇO INICIAL DA PILHA = 2FH
; DPTR RECEBE O ENDERECO DOS LEDS
; VALOR INICIAL DE R0=0 (R0 GUARDA VALOR LIDO)
; ACUMULADOR RECEBE VALOR 01 P/ ROTACIONAR LEDS
; CHAMA SUBROTINA DE LEITURA DO TECLADO
; SE R0 DIFERENTE DE 01H, DESVIA PARA V1
; SE R0=01H, ENVIA CONTEUDO DE A PARA OS LEDS
; ROTACIONA ACUMULADOR PARA A ESQUERDA
; CHAMA ATRASO
; VOLTA PARA A LOOP (NOVA LEITURA DO TECLADO)
; SE R0 DIFERENTE DE 02, VOLTA PARA LOOP
; SE R0 = 02H, ENVIA CONTEUDO DE A PARA LEDS
; ROTACIONA ACUMULADOR PARA A DIREITA
; CHAMA ATRASO
; VOLTA PARA LOOP
; SUBROTINA DE LEITURA DO 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
JB COLUNA1,TECLA2
MOV R0,#01H
RET
; LIMPA LINHA 1 DO TECLADO
; SE COLUNA1 = 1, VER COLUNA2
; SE COLUNA1 = 0 TECLA 1 FOI PRESSIONADA
TECLA2:
JB COLUNA2,TECLA3
MOV R0,#02H
RET
; SE COLUNA2 = 1, VER TECLA3 NA LINHA2
; SE COLUNA2 = 0  TECLA 2 FOI PRESSIONADA
TECLA3:
CLR LINHA2
JB COLUNA1,TECLA4
MOV R0,#03H
; LIMPA LINHA2 DO TECLADO
; SE COLUNA1 = 1, VER COLUNA2
; 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:
NADA:
ATRASO:
V2:
JB COLUNA2,NADA
MOV R0,#04H
NOP
RET
; SE COLUNA2 = 1, NENHUMA TECLA FOI PRESSIONADA
; SE COLUNA2 = 0 TECLA 4 FOI PRESSIONADA
MOV R7,#250
MOV R6,#250
DJNZ R6,$
DJNZ R7,V2
RET
END
; ATRASO PARA ROTAÇÃO DOS LEDS
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.
Rótulo
INICIO:
V1:
Mnemônico
$mod51
ORG 00H
LJMP INICIO
ORG 30H
MOV SP,#2FH
MOV SCON,#40H
MOV TMOD,#20H
MOV TH1,#0FAH
MOV TL1,#0FAH
SETB TR1
ENVIA1:
PROXIMO:
V3:
ENVIA2:
Comentários
; ENDEREÇO INICIAL DA PILHA = 2FH
; SERIAL NO MODO 1
; TEMP 1 NO MODO 2
; BAUD RATE: 4800 bps
; DISPARA O TEMPORIZADOR 1  GERA BAUD RATE
; RECEBE CARACTERES DO COMPUTADOR
MOV DPTR,#0800H
; DPTR = ENDEREÇO DA EEPROM
; CONTADOR PARA LEITURA DOS TEXTOS
MOV R7,#00H
; PREPARA PARA RECEBER DADOS
CLR RI
; HABILITA RECEPÇÃO SERIAL
SETB REN
JNB RI,$
MOV A,SBUF
V2:
Prof. José Wilson Lima Nerys
; AGUARDA FIM DA RECEPÇÃO
; 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
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
POP DPL
POP DPH
MOVX @DPTR,A
INC DPTR
INC R7
SJMP V2
; RECUPERA DPTR DA EEPROM
; ENVIA CONTEUDO DO ACUMULADOR PARA EEPROM
; INCREMENTA DPTR DA EEPROM
; INCREMENTA CONTADOR DO TEXTO
; CONTINUA LEITURA DO TEXTO E ENVIO PARA EEPROM
; VERIFICA SE O CARACTERE RECEBIDO É A LETRA “C”
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
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
CLR TI
MOV SBUF,A
JNB TI,$
; PREPARA PARA TRANSMISSÃO SERIAL
; ENVIA CONTEUDO DE A VIA SERIAL
; 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
SJMP V3
MSGMEM:
MSGMICRO:
; INCREMENTA CONTADOR DO TEXTO
; CONTINUA LEITURA DO TEXTO E ENVIO VIA SERIAL
DB ' DADOS ARMAZENADOS NA EEPROM: ',0FFH
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
Download

MICROPROCESSADORES E MICROCOMPUTADORES