• Nenhum resultado encontrado

Aula de Exercícios 2a Prova Parte 2 Microcontrolador 8051

N/A
N/A
Protected

Academic year: 2021

Share "Aula de Exercícios 2a Prova Parte 2 Microcontrolador 8051"

Copied!
60
0
0

Texto

(1)

1

SEL-0415 Introdução à Organização de Computadores

Profa. Luiza Maria Romeiro Codá

Departamento de Engenharia Elétrica e de Computação - EESC-USP

Aula de Exercícios 2a Prova –Parte 2

Microcontrolador 8051

(2)

Microcontrolador 8051

(3)

Microcontrolador 8051

descrição dos pinos

(4)

Microcontrolador 8051

descrição dos pinos

(5)

Microcontrolador 8051

Função especial da porta P3

5

(6)

Microcontrolador 8051(cont)

6

Registradores de 8 bits

Registradores de 16 bits

Registradores de uso do programador

(7)

Reset da CPU

7

O reset da CPU é feito através do pino RST mantendo-se um nível alto por, no

mínimo, 24 períodos de oscilador. A CPU responde executando um reset interno

O reset da CPU coloca os seguintes valores nos registradores:

(8)

Microcontrolador 8051(cont)

8

RAM Interna

RAM

interna

8052

RAM

interna

8051

Fonte: file:///C:/Users/CASA/Downloads/gk_mc1_a2_sw8051%20(2).pdf

Banco de registradores é alterado alternado os bit 3 e 4 do

registrado PSW (PSW.3 e PSW.4)

(9)

Microcontrolador 8051: RAM interna

Banco de Registradores: selecionado pelos bits RSO e RS1 do PSW

Nº do

banco

RS0 RS1

endereço

0

0

0

00h a 07H

1

0

1

08H a 0Fh

2

1

0

10H a 17H

3

1

1

18 a 1FH

9

(10)

Microcontrolador 8051: RAM interna

10

(11)

Organização das memórias do Microcontrolador 8051

(12)

Organização das memórias do Microcontrolador 8051

(13)

FLUXOGRAMA

13

Nome do programa

Processamento

Fim do programa

Definição das condições iniciais

Definição da saída do resultado

Representação típica de um fluxograma de uma rotina de um

programa simples.

(14)

Progama de adição

Soma de 2 números armazenados na RAM interna utilizando

a instrução ADD A,Rn

14 SOMA

(A)  (45h)

(R0)  (5Ah)

(A)  (A) + (R0)

(6Dh)  (A)

FIM

Programa Fonte

ORG 0

MOV A,45h

MOV R0,5Ah

ADD A,R0

MOV 6Dh,A

SJMP $

END

O programa soma o conteúdo da posição 45h com o conteúdo da posição 5Ah RAM interna e

armazena o resultado na posiçãp 6Dh da RAM interna

Endereço da EEPROM

Conteúdo da EEPROM

0000h 74h opcode

0001h 45h Endereço Ram int

0002h A8h opcode

0003h 5Ah Endereço Ram int

0004h 28h opcode

0005h F5h opcode

0006h 6Dh Endereço Ram int

0007h 80h Opcode

0008h FEh Endereço salto

(15)

Programa de adição de 2 números armazenados na RAM interna

utilizando a instrução ADD A,Rn e ADD A, @R0

15

SOMA

(A)  (45h)

(R0)  #5Ah

(A)  (A) + ((R0))

(6Dh)  (A)

FIM

Programa Fonte

MOV A,45h

MOV R0,#5Ah

ADD A,@R0

MOV 6Dh,A

SJMP $

SOMA

(A)  (45h)

(R0)  (5Ah)

(A)  (A) + (5Ah)

(6Dh)  (A)

FIM

Programa Fonte

MOV A,45h

MOV R0,5Ah

ADD A,R0

MOV 6Dh,A

SJMP $

Fonte: Microcontolador 8051- Prentice Hall

Endereço da EEPROM

Conteúdo da EEPROM

0000h 74h opcode

0001h 45h Endereço Ram int

0002h 78h opcode

0003h 5Ah Endereço Ram int

0004h 28h opcode

0005h F5h opcode

0006h 6Dh Endereço Ram int

0007h 80h Opcode

0008h FEh Endereço salto

Endereço da EEPROM

Conteúdo da EEPROM

0000h 74h opcode

0001h 45h Endereço Ram int

0002h 78h opcode

0003h 5Ah Endereço Ram int

0004h 26h opcode

0005h F5h opcode

0006h 6Dh Endereço Ram int

0007h 80h Opcode

(16)

FLUXOGRAMA

16

Representação típica de um fluxograma de uma rotina de um programa com loop

.

Nome do programa

Processamento

Fim do programa

Definição das condições iniciais

Definição da saída do resultado

Bloco de tomada de decisão (?). Teste de

uma variável.

Se o teste for falso: processamento de certas informações (toma-se decisão)

não: a condição não foi satisfeita

sim: a condição foi satisfeira

(17)

Programa que calcula a quantidade de números menores que 38h de um buffer de

memória que se encontra na posição 60H.

17

Num < 38h

(R0)#60h (R1)#1Bh (7BH)#00h (C)#0b (A)((R0)) (A)(A)-(C)-#38h (C)=0 ? [(A)#38h ?] (7Bh)(7Bh)+1 (R1)(R1)-1 (R1)0 ?

N

S

S

FIM

N

(R0)(R0)+1

• R0 contém endereço (60H) inicial da tabela;

• R1 é o contador de números verificados;

• 7BH é a posição que vai conter a quantidade de numero <38H; • Carry é zerado;

• O número a ser verificado é copiado para A;

• Verifica se número em A -38H gera carry

• Se carry = 1 número testado ≤ 38H • Então o conteúdo da posição 7BH é

incrementado;

• busca-se outro número para testar • Verifica se todos os números foram

estados caso através do valor de R1 • Se R1 = 0 finaliza programa

• Se R1 ≠ 0, busca-se outro número •

• Se Carry = 0 número testado ≥ 38H • busca-se outro número para testar • Verifica se todos os números foram

estados caso através do valor de R1 • Se R1 = 0 finaliza programa

(18)

Programa que calcula a quantidade de números

menores que 38h de um buffer de memória.

(19)

Programa Fonte

19

; Inicio do programa que calcula a qte de elementos < #38h ORG 0

AJMP INICIO ;salta para o endereço inicial do programa ORG 100h

INICIO: MOV R0,#60h ;Endereço inicial do buffer de memória

MOV R1,#1Bh ;Quantidades de elementos do buffer de memória MOV 7Bh,#00 ;Zera o contador que armazena a qte de num < #38h ADR2: CLR C ;Limpa o conteúdo do carry-bit

MOV A,@R0 ;Armazena no (A) um elemento do buffer

SUBB A,#38h ;Subtrai o (A) da constante #38h e define o flag (C)

JNC ADR1 ;Se (C)=0 (A>=#38h) => (PC)=ADR1 [não soma um no (7Ah)] INC 7Bh ;Se (C)=1 (A<#38h), soma um no (7Bh)

ADR1: INC R0 ;Aponta para a próxima posição de memória a ser analisada

DJNZ R1,ADR2 ;Se a qte de elementos a serem analisadas é

0, então salta para ADR2 SJMP $ ; Termina o programa se (R1)=0. Fica em Loop nesta posição

END ; Fim físico do programa

Programa que calcula a quantidade de números menores que 38h

de um buffer de memória.

(20)

20

ORG 0

AJMP INICIO

ORG 0100h

INICIO: MOV

R0,#60h

MOV

R1,#1Bh

MOV

7Bh,#00

ADR2:

CLR

C

MOV

A,@R0

SUBB

A,#38h

JNC

ADR1

INC

7Bh

ADR1:

INC

R0

DJNZ

R1,ADR2

SJMP $

END

Informações sobra as instruções

Instrução

OPCODE

Nºbytes

AJMP pag + 01XX

21H

2

MOV R0, #data

78h

2

MOV R1, #data

79h

2

MOV data addr,data

75h

3

CLR C

C3h

1

MOC A,@R0

E6h

1

SUBB A, #data

94h

2

JNC addr rel

50h

2

INC data addr

05h

2

INC R0

08h

1

DJNZ R1,end rel

D9h

2

Programa que calcula a quantidade de números

menores que 38h de um buffer de memória.

(21)

21

Conteúdo da memória de programa

Endereço da EEPROM Conteúdo da EEPROM 0000H 21H 0001H 00H 0100h 78h 0101h 60h 0102h 79h 0103h 1Bh 0104h 75h 0105h 7Bh 0106h 00h 0107h C3h 0108h E6h 0109h 94h 010Ah 38h 010Bh 50h 010Ch 03h 010Dh 05h 010Eh 7Bh 010Fh 08h 0110h D9h 0111h F5h

ORG 0

AJMP INICIO

ORG 0100h

INICIO: MOV R0,#60h

MOV R1,#1Bh

MOV 7Bh,#00

ADR2: CLR C

MOV A,@R0

SUBB A,#38h

JNC ADR1

INC 7Bh

ADR1: INC R0

DJNZ R1,ADR2

SJMP $

END

(22)

22

ORG 0

AJMP INICIO

ORG 0100h

INICIO: MOV

R0,#60h

MOV

R1,#1Bh

MOV

7Bh,#00

ADR2:

CLR

C

MOV

A,@R0

SUBB

A,#38h

JNC

ADR1

INC

7Bh

ADR1:

INC

R0

DJNZ

R1,ADR2

END

Cálculo do Endereço Relativo para Salto

Endereço da EEPROM Conteúdo da EEPROM End rel para salto P frente End rel para salto P trás 0000H 21H 0001H 00H 0100h 78h 0101h 60h 0102h 79h 0103h 1Bh 0104h 75h 0105h 7Bh 0106h 00h 0107h C3h F5h 0108h E6h F6h 0109h 94h F7h 010Ah 38h F8h 010Bh 50h F9h 010Ch 03h 00h FAh 010Dh 05h 01h FBh 010Eh 7Bh 02h FCh 010Fh 08h 03h FDh 0110h D9h FEh 0111h F5h FFh

(23)

23

Conteúdo da memória RAM interna

MOV R0,#60h : RAM interna posição 00h(pois bloco 0 de registradores

que está ativo) é armazenado 60h

MOV R1,#1Bh : RAM interna posição 01h(pois bloco 0 de registradores

que está ativo) é armazenado 1Bh

MOV 7Bh,#00 : RAM interna posição 7Bh é armazenado 00h quantidade de dados

memores que 38h

ADR2:

CLR

C

: O carry C do PSW é zerado

MOV

A,@R0: o conteúdo da posição 60h da RAM interna é

copiado para o registrador acumulador (primeiro dado a ser verificado)

SUBB A,#38h : é extraído do valor do acumulador o valor 38h

JNC

ADR1: o programa é desviado para o endereço que contém a instrução

INC R0 no endereço 010Fh (PC = 010Fh) se o bit Carry do PSW for diferente de zero,

caso em que A é maior que 38h

INC

7Bh

:incrementa o conteúdo do endereço7Bh (se 00h será 01h)

ADR1:

INC

R0

: R0 é incrementado (de 60 p 61h) para apontar p o prox dado

DJNZ R1,ADR2: decrementa o valor de R1(que inicialmente é 1Bh passando para

1Ah e salta para a posição ADR2 no endereço 0107h (PC=0107h) se R1 não for zero

END

(24)

24

Modo de endereçamento das instruções do 8051

Endereçamento Direto:

O endereço do operando é especificado por um campo na instrução.

Somente Os Bytes menos significativos da RAM de dados interna e região de SFR podem ser

diretamente acessdas; (Ex; MOV 30h,A)

Endereçamento Indireto:

a instrução especifica um registrador que contém o endereço do

operando. RAM externa e RAM interna podem ser indiretamente endereçáveis.

Se o endereço for de 8 bits, seu valor é armazenado em R0 ou R1;

Se o endereço for de 16 bits, seu valor é armazenado no registrador DPTR;

(Exs: MOVX A,@DPTR e MOV @R0,A)

Endereçamento por Registrador:

Instruções que acessam registradores de R0 a R7 do banco de

registradores ou algumas instruções específicas a certos registradores.

Tais instruções são eficientes por eliminarem um byte de endereço. O próprio OPCODE já

indica qual a tarefa a ser realizada. (Ex: MOV R0,A)

Endereçamento Imediato:

quando uma constante é apresentada na instrução após o símbolo #;

(Ex : ADD R0,#30h)

Endereçamento Indexado:

Sómente a memória de Programas, cuja única operação é leitura,

pode ser acessada por esse modo. É usado para fazer leituras em tabelas na Memória de

Programa. Um registrador de 16 bits(DPTR) aponta para o início da tabela enquanto o

Acumulador é ajustado para a e-nesima posição da mesma. O endereço de um valor da tabela é

formado pelo soma do valor do acumulador com o valor do DPTR. (Ex: MOVC A,@A+DPTR)

(25)

Lista nº 11

25

15. Dado o segmento de programa da Figura 1 escrito em assembly para o microcontrolador Intel

8051. Responda:

15.1 Determine os valores de End1, End2,End3 e dado1 para que: o endereço da instrução MOV A,

#dado1 seja

100CH

,

que o endereço acessado na memória RAM seja 2009H, que o endereço acessado

na memória EPROM seja 2010H e que a rotina chamada inicie no endereço 1100H.

End da EEPROM Conteúdo da EEPROM significado Número de bytes

End1 75H Opcode de MOV DPTR, #End2 3

100Ch 74H Opcode de MOV A,#dado1 2

dado1 de 8 bits

93H Opcode MOVC A,@A+DPTR 1

F8H Opcode de MOV R0,A 1

F0H MOVX A,@DPTR 1

12H Opcode LCALL ROT 3

80H Opcode da SJMP $ 2

(26)

26 End da EEPROM Conteúdo da EEPROM significado Número de bytes

End1 75H Opcode de MOV DPTR, #End2 3 MSB End2

LSB End2

100CH 74H Opcode de MOV A,#dado1 2

Dado1 dado1 de 8 bits

93H Opcode MOVC A,@A+DPTR 1

F8H Opcode de MOV R0,A 1

F0H MOVX A,@DPTR 1

12H Opcode LCALL ROT 3

MSB ROT LSB ROT

80H Opcode da SJMP $ 2

Figura 1

Lista nº 11

Resolução: Alocando o conteúdo da EEPROM: o endereço da instrução MOV A,

#dado1 é 100CH, o endereço acessado na memória RAM é 2009H, o

endereço acessado na memória EPROM é 2010H e a rotina chamada inicia no

endereço 1100H então ROT = 1000H

(27)

Lista nº 11

27

15.1 MOV A, #dado1 esta no 100CH, endereço acessado na memória RAM = 2009H;

o endereço acessado na memória EPROM =2010H e ROT=1100H

Resposta: End3 = ROT = 1100H

End da EEPROM Conteúdo da EEPROM significado Numero De Bytes

ROT= 1100H 98H Opcode de SUBB A,R0 1

1101H E5H Opcode de MOV 20H,A 2

1202H 20H 20H= endereço acessado

da RAM interna cujo conteúdo é copiada em A

1103H 22H Opcode de RET 1

(28)

28

Lista11

.

15.1 Resposta: MOV A, #dado1 esta no 100CH,colocando os endereços

anteriores a 100CH verifica-se que End1 é 1009H. End2 é o valor armazenado

em DPTR e como o enunciado diz que o endereço acessado na memória RAM =

2009H, a instrução que acessa é MOVX A, DPTR, portanto DPTR=End2 =2009H

End da EEPROM Conteúdo da EEPROM significado Número de bytes

End1 =1009H 75H Opcode de MOV DPTR, #End2 3

100AH MSB End2

100BH LSB End2

100CH 74H Opcode de MOV A,#dado1 3

100DH dado1 dado1 de 8 bits que é movido para o Ac.

100EH 93H Opcode MOVC A,@A+DPTR 1

100FH F8H Opcode de MOV R0,A 1

1010H F0H Opcode de MOVX A,@DPTR 1

1011H 12H Opcode de LCALL ROT 3

1012H MSB ROT MSB do Endereço da

subrotina

1013H LSB ROT LSB do Endereço da subrotina

1014H 80H Opcode da SJMP $ 2

(29)

29

Lista11

.

15.1 Resposta: O enunciado diz que o endereço acessado na memória

EPROM seja 2010H, e a EEPROM é acessada pela instrução MOVC A,@A+DPTR,

então A+DPTR = 2010H, e o valor de A é = dado1. Como já se sabe que DPTR =

2009H, ou seja, dado1+ DPTR= 2010H, então dado1 = 2010H – 2009H = 07H

End da EEPROM

Conteúdo da EEPROM

significado Número de bytes

1009H 75H Opcode de MOV DPTR, #End2 3

100AH MSB End2

100BH LSB End2

100CH 74H Opcode de MOV A,#dado1 3

100DH dado1 dado1 de 8 bits que é movido para o Ac.

100EH 93H Opcode MOVC A,@A+DPTR 1

100FH F8H Opcode de MOV R0,A 1

1010H F0H Opcode de MOVX A,@DPTR 1

1011H 12H Opcode de LCALL ROT 3

1012H MSB ROT MSB do Endereço da

subrotina ( endereço 1100H) 1013H LSB ROT LSB do Endereço da subrotina

( endereço 1100H)

1014H 80H Opcode da SJMP $ 2

1015H FEH Endereço relativo do opcode

SJMP

(30)

30

Lista11

.

15.1 Resposta: Colocando os valores obtidos no programa em assembly

e completando o conteúdo da memória de programa fica:

End da

EEPROM

Conteúdo

da EEPROM

1009H

75H

100AH

20H

100BH

09H

100CH

74H

100DH

07H

100EH

93H

100FH

F8H

1010H

F0H

1011H

12H

1012H

11H

1013H

00H

1014H

80H

1015H

FEH

ORG 1009H

MOV DPTR, #2009H

MOV A,# 07H

MOVC A, @A+DPTR

MOV R0,A

MOVX A,@DPTR

LCALL ROT; o endereço ROT = 1100H

SJMP $

ORG 1100H

ROT: SUBB A,R0

MOV 20H,A

RET

END

Figura 1

(31)

31

15.2 Dado um “reset” no microcontrolador 80C51, em função das características

do registrador SP (stack pointer ou ponteiro de pilha) responda qual o valor do

SP, da pilha e do PC (Program Counter), após a instrução (LCALL) de chamada de

subrotina ter sido executada, e quais esses valores após a instrução RET da

subrotina ter sido executada?

End da

EEPROM

Conteúdo

da EEPROM

1009H

75H

100AH

20H

100BH

09H

100CH

74H

100DH

07H

100EH

93H

100FH

F8H

1010H

F0H

1011H

12H

1012H

11H

1013H

00H

1014H

80H

1015H

FEH

ORG 1009H

MOV DPTR, #2009H

MOV A,# 07H

MOVC A, @A+DPTR

MOV R0,A

MOVX A,@DPTR

LCALL ROT;

o endereço ROT = 1100H

SJMP $

ORG 1100H

ROT: SUBB A,R0

MOV 20H,A

RET

END

Figura 1

Opcode LCALL

Endereço

da subrotina

1100H

(32)

Lista nº 11

32

15.2 Resposta: Dado um “reset” no microcontrolador 80C51, o registrador SP é inicializado com o valor 07H.

Enquanto a instrução LCALL ROT é executada o PC contém o endereço da instrução seguinte à ela, que neste caso do programa é a instrução SJMP $ que está na posição 1014H por que a instrução LCALL ocupa 3 bytes ( os endereços 1011H, 1012H e 1013H). Porém, ao finalizar a execução da instrução LCALL o microcontrolador irá executar a subrotina que inicia na posição 1100H, portanto, após a execução da instrução LCALL o PC terá o endereço da subrotina.. Após execução da instrução LCALL ROT Após execução da instrução RET Valor de SP Valor da Pilha (conteúdo de SP) Valor do PC

(Endereço da próxima instrução a ser executada) 1100|H

End da

EEPROM

Conteúdo

da EEPROM

1009H

75H

100AH

20H

100BH

09H

100CH

74H

100DH

07H

100EH

93H

100FH

F8H

1010H

F0H

1011H

12H

1012H

11H

1013H

00H

1014H

80H

Opcode LCALL

Endereço

da subrotina

1100H

(33)

Lista nº 11

33

15.2 Resposta ( continuação): Porém, como o PC passará a ter o endereço da subrotina, o endereço da próxima

instrução a LCALL, que é no caso a SJMP< seria perdido. Portanto, quando a instrução LCALL é executada, o

microcontrolador salva o endereço da próxima instrução(SJMP) na pilha. O SP do 8051 é incrementável, a instrução LCALL ROT O microcontrolador incrementa o SP (SP <- SP + 1 = 07 +1) que passa a ter o valor 08H e salva nessa posição da RAM interna os bytes MENOS significativos do endereço da próxima instrução a LCALL que é a instrução SJUMP que está no endereço 1014He cujos bytes menos significativos são 14H. O SP é mais uma vez incrementado

e passa a apontar para a posição 08H da RAM interna e nessa posição o

microcontrolador armazena o 8 bytes MAIS significativos do endereço de SJMP que é 10H. Portanto ,o valor da Pilha após a execução da instrução LCALL é 10H

End da

EEPROM

Conteúdo

da EEPROM

1009H

75H

100AH

20H

100BH

09H

100CH

74H

100DH

07H

100EH

93H

100FH

F8H

1010H

F0H

1011H

12H

1012H

11H

1013H

00H

1014H

80H

1015H

FEH

Opcode LCALL Endereço da subrotina 1100H

7FH

07H

08H

00H

09H

10H

14H

Valor desconhecido

Endereço

ram interna 128 bytes inferiores

SP

Valor Antes da

execução de

LCALL

SP

Valor após

a execução

de LCALL

(34)

34 Após execução da instrução LCALL ROT Após execução da instrução RET Valor de SP 09H Valor da Pilha (conteúdo de SP) 10H Valor do PC (Endereço da próxima instrução a ser executada) 1100H

End da

EEPROM

Conteúdo

da EEPROM

1009H

75H

100AH

20H

100BH

09H

100CH

74H

100DH

07H

100EH

93H

100FH

F8H

1010H

F0H

1011H

12H

1012H

11H

1013H

00H

1014H

80H

1015H

FEH

Opcode LCALL

Endereço

da subrotina

1100H

(35)

35

15.2 Resposta ( continuação): Quando o microcontrolador finaliza a execução da subrotina encontra a instrução RET.

Essa instrução faz com que o conteúdo da pilha = 10H (que é o conteúdo da posição 09H apontada por SP) seja armazenada em PCH ( que é o registrador que guarda os bytes mais significativos do PC). Então o ponteiro SP é decrementado (SP<-SP-1 =08H) e o conteúdo dessa posição ( 14H) é armazenado em PCL (que é o registrador que guarda os bytes menos significativos do PC). O PC passa então a ter o endereço 1014H que é o endereço da instrução SJMP $, que é a instrução seguinte à instrução LCALL ROT no programa principal, recuperando assim o endereço., passando a executar o programa a partir dessa posição. O ponteiro SP é decrementado mais uma vez

(SP<-SP-2 =07H), voltando a apontar para a posição inicial, posição 07H da RAM interna cujo conteúdo não foi modificado nesse programa.

End da

EEPROM

Conteúdo

da EEPROM

1009H

75H

100AH

20H

100BH

09H

100CH

74H

100DH

07H

100EH

93H

100FH

F8H

1010H

F0H

1011H

12H

1012H

11H

1013H

00H

1014H

80H

1015H

FEH

Opcode LCALL Endereço da subrotina 1100H

7FH

07H

08H

00H

09H

10H

14H

Valor desconhecido

Endereço

ram interna 128 bytes inferiores

SP

Valor Após a

execução da

instrução RET

SP

Valor após

a execução

de LCALL

(36)

36 Após execução da instrução LCALL ROT Após execução da instrução RET Valor de SP 09H 07H Valor da Pilha (conteúdo de SP) 10H Desconhecido pois não foi usado nesse

programa Valor do PC (Endereço da próxima instrução a ser executada) 1100H 1014H

15.2 Resposta

(37)

Exemplo de exercício sobre Pilha:

37

Supondo que um microcontrolador estava executando um programa onde o banco 1 de

registradores tenha sido ativado e o ponteiro SP tenha sido carregado com o valor 0FH. Em

uma linha do programa, no endereço 0104H tinha uma instrução de chamada de subrotina

LCALL 2010H., responda:

a) Qual o valor do SP, valor da Pilha e valor do PC após a instrução LCALL ser executada

b) Qual o valor do SP, valor da Pilha e valor do PC após a instrução RET ser executada

Após execução da instrução LCALL

Após execução da instrução RET

Valor de SP 11H

SP <- SP+2 o ponteiro SP é incrementado duas vezes da posição inicial(0Fh):

Em (SP+1) é armazenado o LSB do endereço de retorno ao programa principal

Em (SP+2) é armazenado o MSB do endereço de retorno ao programa principal)

0FH (recuperado endereço inicial de SP) Valor da Pilha (conteúdo de SP) 01H

( MSB do endereço de retorno ao programa principal (Instrução SJMP $ endereço 1014Hl)

Valor da posição 0FH (não conhecido neste exercicio) Valor do PC (Endereço da próxima instrução a ser executada) 2010H (endereço da subrotina) 0107H (endereço da instrução seguinte a instrução LCALL que ocupa3 bytes (0104H, 0105H 0106H

(38)

Lista nº 11

38

15.3 Considerando o valor do ponteiro de pilha do ítem 15.2, quais os bancos

de registradores que estão liberados?

Resposta: Se SP = 07H, então o banco 0 é que está liberado para utilização do

programador, pois o banco 0 tem endereço de R0 a R7 de 00H a 07H,

respecticamente

(39)

39

15.4 Qual (ou quais) instrução(s) da Figura 1 apresenta(m)

modo de endereçamento imediato. Explique porque?

Resposta:

(40)

40

16. Baseado na estrutura do processador 8051, onde o fluxograma e o assembly do programa

que será executado, é mostrado na Figura 2, o qual executa a soma do valor 1Ah com o valor 5Ah

e o resultado é armazenado na RAM externa. Responda as questões abaixo, lembrando que:

• AC: acumulador de 8 bits;

• DPTR de 16 bits;

• Ocorre um reset na CPU após a energização do microcontrolador;

16.1 Mostre quais os passos necessários para executar uma instrução localizada no endereço

0105h.

Lista nº 11

(41)

41

Lista 11.

16.1 Mostre quais os passos necessários para executar uma instrução

localizada no endereço 0105h.

End da EEPROM Conteúdo da EEPROM significado bytes 0000H Opcode AJMP Salta para outro endereço numa

faixa de 2Kbytes referentes à atual posição da memória de programa.( salta p endereço INICIO)

2

2ª byte AJMP Define o endereço de salto 0100H

0100H Opcode de

MOV A, 45H

Copia o conteúdo da posição 45H da RAM interna no acumulador

2

0101H 45H

0102H Opcode de MOV R0, #5AH

Copia o valor do 2º byte da instrução(5AH) em R0

2

0103H 5AH Valor

0104H Opcode de ADD A,RO Soma o conteúdo de R0 ao conteúdo do acumulador e salva resultado no acumulador

1

0105H Opcode do MOV DPTR, #1000H Opcode LCALL ROT 3

0106H 10H MSB do valor da instrução

0107H 00H LSB do valor da instrução

Opcode de MOVX @DPTR,A Copia no endereço da RAM externa contido em DPTR o valor do

acumulador(soma de r0 com A)

1

Opcode do SJMP $ Salta p o endereço relativo ao endereço da instrução -128 a 128

2 Endereço relativo do opcode de

SJUMP a esta posição

Figura 2

(42)

42 Lista 11. 16.1 Mostre quais os passos necessários para executar uma instrução localizada no endereço 0105h. Resp:

O PC é carregado com endereço da instrução que será executada (0105H).

No chip do microprocessador o pino /PSEN é colocado em nível baixo, sinalizando que será acessada memória de Programa(EEPROM), e o pino ALE é colocado em nível alto, indicando a presença de endereço no duto multiplexado (P0) . O microprocessador coloca então os valores do 8 bits LSB (05H) do endereço na porta paralela P0 e dos MSBs na porta paralela P2.

Os 8 bits menos significativos do endereço são armazenado em um latch, para que esse endereço esteja presente na entrada de endereços da memória de programa (EEPROM) durante todo o tempo de acesso à memória e possibilite seu conteúdo ser acessado.

Então, o microprocessador coloca o pino ALE em nível baixo indicando que a porta multiplexada P0 foi transformada em duto de dados e está apta a receber os dados da memória.

O conteúdo da posição cujo endereço está presente nas entradas de endereço da memória é acessado e

apresentada nas saídas de dados da memória. O conteúdo dessa posição que corresponde ao OPCODE da instrução MOV DPTR,#1000H ( cujo valor é 90H), transita agora pelo duto multiplexado da porta P0, sendo esse valor

carregado no registrador de instrução(RI) na CPU. O valor desse OPCODE é armazenado no registrador RI e então é decodificado pelo processador e este processo define se a instrução tem apenas 1 ou mais bytes. No caso desta instrução, são 3 bytes, então o PC é incrementado de uma vez, a porta P0 passa a conter esse valor que é o

endereço do próximo byte onde está o valor 10H que será armazenado em DPH. O PC é novamente incrementado e para acessar o próximo byte que contém o valor 00H que será armazenado em DPL

Após finalizada a busca dos dois próximos bytes, a execução da instrução é finalizada armazenando o valor desses dois bytes em DPL e DPH, e portanto DPTR = 1000H

0105H 90H Opcode MOV DPTR, #1000H 3 bytes

0106H 00H LSB do valor da instrução

(43)

43

Para entender melhor os passos listador no slide 37

(44)

44

(45)

45 End da EEPROM Conteúdo da EEPROM significado bytes

0000H 21H Pula para a posição INICIO e o opcode depende do tamanho do saltoAJMP ( 01H, 21H, 41H, 61H, 81H, A1H, C1H ou E1H)

2

0001H 00H O valor depende do endereço INICIO em relação à instrução

0100H E5H Opcode de MOV A, 45H 2 0101H 45H 45H 0102H 78H Opcode de MOV R0, #5AH 2

0103H 5AH Valor do 2º byte da instruçao

0104H 28H Opcode de ADD A,RO 1

0105H 90H Opcode do MOV DPTR, #1000H 3

0106H 00H 00H

0107H 10H 10H

0108H F0H Opcode de MOVX @DPTR,A 1

0109H 80H Opcode do SJMP $ 2

010AH FEH Endereço relativo desta posição até opcode SJUMP

Lista 11.

16.2 Qual o conteúdo da memória principal após a execução programa (memória de

programa )?

(46)

46

Lista 11.

16.3 Qual o conteúdo da RAM interna

após execução

deste programa ?

16.4 Ao final da execução do programa qual o valor da posição 1000H da

RAM

externa?

16.3 Resp: A = 74H, DPL = 00H, DPH= 10H, R0 = 5AH

conteúdo da posição 45H = 1AH e SP= 07H

16.4 Resp: o conteúdo da posição 1000H da RAM externa é

74H

(47)

47

Como funciona a instrução SJUMP $ ou SJUMP end rel 8?

aqui: Sjump aqui = sjump $; salta para o endereço onde

; está o OPCODE da SJUMP

Como fica na memória de programa?

Endereço

Conteúdo

Significado (comentários)

0105H

90H

Opcode do MOV DPTR, #1000H

0106H

10H

MSB do endereço 1000H

0107H

00H

LSB do endereço 1000H

0108H

F0H

Opcode de MOVX @DPTR,A

0109H

80H

Opcode do SJMP $

010AH

FEH

Endereço relativo desta posição até opcode SJUMP

Analisando parte

do programa anterior:

.

.

.

MOV DPTR, #1000H

MOVX @DPTR,A

SJUMP $

END

(48)

48

Como funciona a instrução SJUMP end rel 8 ?

Como é calculado o valor FEH que fica na memória de programa?

Ender

eço

Conteú

do

Posição relativa ao

endereço 010AH

0105H

90H

FAH

0106H

10H

FBH

0107H

00H

FCH

0108H

F0H

FDH

0109H

80H

FEH

010AH

FEH

Posição considerada FFH

Analisando parte

do programa

anterior:

.

.

.

MOV DPTR, #1000H

MOVX @DPTR,A

SJUMP $

END

O valor FEH é o endereço para o qual o PC vai saltar, que é calculado pelo compilador.

Neste caso é o endereço do OPCODE da instrução SJUMP. O compilador considera que

essa posição onde está FEH é a posição referência na qual o salto será

calculado´.Portanto, esta posição é considerada posição FFH, como irá saltar para uma

anterior onde está o opcode do SJUMP o valor do endereço relativo seria FEH e se fosse

saltar para a instrução MOVX @DPTR,A, então seria FDH

Analisando parte

do programa anterior:

.

.

.

MOV DPTR, #1000H

MOVX @DPTR,A

aqui: SJUMP aqui

(49)

Saltos incondicionais do 8051

49

Existem quatro tipos no 8051:

• SJUMP rótulo : Desvio curto relativo. Usa um offset de oito bits, podendo ser

negativo ou positivo, ou seja o endereço de desvio pode ser de até 128 bytes a

menos ou 127 bytes a mais, respectivamente, em relação à posição atual da

memória.

• O formato da instrução é: opcode Offset relativo Exemplo: SJMP 00h; ;desvia

para a próxima instrução (offset = 0) NEXT: SJMP 0FEH; ;retorna para a instrução

anterior (offset = -1)

SJUMP

AJUMP

LJUMP

(50)

Saltos incondicionais do 8051

50

• SJUMP end rel:

Desvio curto relativo. Usa um offset de oito bits, podendo ser

negativo ou positivo, ou seja o endereço de desvio pode ser de até 128 bytes a

menos ou 127 bytes a mais, respectivamente, em relação à posição atual da

memória;

É uma instrução de 2 bytes, o primeiro byte é o OPCODE e o segundo byte é o

endereço da localidade de memória (00H a FFH). ;

Exemplos:

SJMP 00h ;desvia para a próxima instrução (offset = 0)

aqui:

SJMP FEH ;retorna para a instrução anterior (offset = -1)

Ou

(51)

Saltos incondicionais do 8051

51

• AJUMP end rel:

Desvio Absoluto

.

Esta instrução desvia o fluxo do programa para

outro endereço numa faixa de 2Kbytes referentes à atual posição da memória

de programa. Dependendo do salto que será dado o valor do OPCODE muda:

OPCODE Instrução

01H AJUMP Pagina +00XX Salto até 255 posições 21H AJUMP Pagina +01XX Salta de 256 a 511 posições 41H AJUMP Pagina +02XX Salta de 511 a 766 posições 61H AJUMP Pagina +03XX Salta de 767 a 1023 posições 81H AJUMP Pagina +04XX Salta de 1024 a 1278 posições A1H AJUMP Pagina +05XX Salta de 1279 a 1534 posições C1H AJUMP Pagina +06XX Salta de 1525 a 1790 posições E1H AJUMP Pagina +07XX Salta de 1791 até 2k posições

Exemplo:

AJMP pula ;desvia para a instrução que tem o rótulo pula MOV A, #01H;

(52)

Saltos incondicionais do 8051

52

• LJUMP end 16bits:

Esta é a instrução de desvio longo que usa endereços de 16 bits

como parte da instrução. Possibilita acessar qualquer localização no espaço de 64Kb de

memória de programa.

é uma instrução de 3 bytes, o primeiro é o OPCODE o segundo é o 8 bits mais

significativos do endereço de salto e o 3º byte contém os 8 bits menos significativos do

endereço de salto

Exemplo:

ORG 1000H

temp: LJMP rotulo

CLR A;

Rotulo: LJMP temp

Endereço EEPROM conteúdo comentários

1000H 02H Salta para o endereço que estão nos 2 bytes seguintes a esta instrução (rotulo)

1001H 04H Byte mais significativo do endereço do salto 1004H 1002H 10H Byte menos significativo do endereço do salto 1004H 1003H E4H CLR A ( instrução de 1 byte)

1004H 02H Salta para o endereço que estão nos 2 bytes seguintes a esta instrução (temp)

1005H 10H Byte mais significativo do endereço do salto 1000H 1006H 00H Byte menos significativo do endereço do salto 1000H

(53)

Saltos incondicionais do 8051

53

• JMP @A+DPTR

:

O conteúdo do PC é armazenado com o valor

da soma dos conteúdos dos registradores DPTR e

acumulador, prosseguindo portanto a execução do

programa a partir deste ponto

(54)

Saltos condicionais do 8051

Instruções

Ação

Nº de

bytes

JZ

Salta se A = 0

2

JNZ

Salta se A ≠0

2

DJNZ

Decrementa e Salta se A ≠0

3

CJNE A,byte

Salta se A ≠ byte

3

CJNE reg,#dado

Salta se byte ≠ #dado

3

JC

Salta se CY = 1

2

JNC

Salta se CY = 0

2

JB

Salta se bit = 1

3

JNB

Salta se bit = 0

3

JBC

Salta se bit = 1 e reseta o bit (clear bit)

3

(55)

Saltos condicionais do 8051

55

• Exemplo: Escrever um programa para determinar se R5 contém o valor 0. Se

for verdadeiro, armazene 55H, se for falso finalize o programa.

ORG 0000H

MOV A, R5 ; copia R5 para A

JNZ SALTO ; salta se A não é zero (A ≠0)

MOV R5, #55H

SALTO: SJMP SALTO

END

Endereço da EEPROM Conteúdo significado

0000H EDH Opcode de MOV A,R5 (1 byte) copia o valor de R5 para A

0001H 70H Opcode de JNZ salto (2 Bytes) 0002H

0003H 7DH Opcode de MOV R5, #55H (2 bytes)

0004H 55H Valor do segundo byte da instrução MOV R5, #55H 0005H 80H Opcode do SJMP salto (2 bytes)

(56)

Exercício Resolvido Aplicações de microcontroladores:

Prentice Hall Microcontroladores 8051 56

(57)

57

(58)

58

(59)

59

17. Baseado na estrutura do processador 8051, onde o fluxograma e o assembly do

programa que será executado, é mostrado na Figura 3, o qual executa a soma do valor

1Ah com o valor 7Fh e o resultado é armazenado na posição 6Dh da RAM interna.

Responda as questões abaixo, lembrando que:

• AC: acumulador de 8 bits;

• DPTR de 16 bits;

• Ocorre um reset na CPU após a energização do microcontrolador;

17.1 Qual o conteúdo da memória principal para esse programa (memória de

programa)?

17.2 Qual o conteúdo da RAM interna para esse programa ?

17.3 Qual o valor do PC (Counter Program) quando a instrução ADD A,@R0 está

sendo executada?

(60)

60

FIM

Referências

Documentos relacionados

E) CRIE NO SEU CADERNO UM TÍTULO PARA ESSA HISTÓRIA EM QUADRINHOS.. 3- QUE TAL JUNTAR AS SÍLABAS ABAIXO PARA FORMAR O NOME DE CINCO SUGESTÕES DE PRESENTE PARA O DIA

Com o intuito de registrar tais alterações, anúncios de revistas premiados pelo 20º Anuário do Clube de Criação de São Paulo são apresentados de forma categórica como

É eletivo a concurso qualquer produto alimentar, doce ou salgado, em qualquer conformação ou estado físico, desde que transformado (exclui *produtos primários alimentares

Deve-se acessar no CAPG, Coordenadorias &gt; Processo de Inscrição &gt; “Selecionar Área/Linha para Inscrição” e indicar as áreas de concentração e linhas de pesquisa nas

Aos 7, 14 e 21 dias após a emergência (DAE), foi determinado o índice SPAD no folíolo terminal da quarta folha completamente expandida devido ser esta folha recomendada para verificar

Desconsiderar e não saber lidar com a realidade do comportamento suicida infantojuvenil têm se revelado um importante entrave clínico e epi- demiológico para a assistência

Biológico, São Paulo, v. Efeito do sistema de preparação do solo e da diversificação de gramíneas sobre a população adulta de Atarsocoris brachiariae Becker, 1996. Efeito do

As Baterias HANNAIK - Chumbo-Ácidas Reguladas por Válvula (VRLA) - utilizam a tecnologia de combinação de oxigénio, são mais sensíveis que as ventiladas e necessitam de um