Você está na página 1de 15

Introdução ao Microcontrolador 8051

• SFR: Stack pointer register


• Registo de 8 bits cujo endereço é 81H
• Contém o endereço do item colocado no topo da
pilha (stack)
• O conjunto de instruções permite manipular a stack
através das operações de push e pop
• A operação de push coloca um dado na stack, enquanto a
operação de pop retira o dado

Microprocessadores Prof. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Introdução ao Microcontrolador 8051
• SFR: Stack pointer register

• A stack cresce no sentido ascendente da memória


• Após o estado de reset este registo aponta para a
posição 7H

Pergunta:
Ao fazer o primeiro push, onde
o valor será colocado?

Microprocessadores Prof. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Introdução ao Microcontrolador 8051
• SFR: Stack pointer register

CUIDADO:
• Como a stack após o reset está localizada na
posição 7H, que corresponde a zona dos bancos
de registos, é conveniente mudar a sua
localização caso queiramos usar os bancos.

Por ex.: mov SP, #70H

Microprocessadores Prof. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Introdução ao Microcontrolador 8051
FFH
• SFR: Stack pointer register
unction
ial F ea
CUIDADO: Exemplo Spec ister Ar
Reg

Perigo #2:
80H
Se fizermos push’s sucessivos, 7FH
ao 16º push estaremos a escrever
no porto P0!!!!!
o geral
Us
Ou seja passamos a escrever 30H
indirectamente na SFR area 2FH

able
Exemplo:
ess
Perigo #1: ddr Inicializamos a SP
Ao ser colocado valores na pilha o Bit a
20H para
segundo banco será afectado 1FH
18H co mov SP, #70H
Ban 17H
10H de
tos
Posição apontada por SP egis 0FH
08H R
– R7]
após reset – 07H [R0 07H
00H

Microprocessadores Prof. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Introdução ao Microcontrolador 8051
• Stack: Caso práctico

• Como detectar um stack overflow com o


simulador?

Colocar um breakpoint na posição a seguir


a última posição válida da stack

Microprocessadores Prof. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Introdução ao Microcontrolador 8051
• Stack
• O conjunto de instruções do 8051 fornece duas
operações para manipulação da stack:
ü push:
push insere um valor na stack
ü pop:
pop retira o último valor inserido na stack

Microprocessadores Prof. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Introdução ao Microcontrolador 8051
• Stack: PUSH 2 bytes
2 cycles
1100 0000 direct

• Na operação de PUSH,
• O valor do stack pointer é incrementado em
uma unidade.
• O conteúdo da posição da RAM indicada como
argumento da operação é copiado para a
posição apontada pelo stack pointer.
• Nenhuma flag é afectada. (SP) (SP) + 1
((SP)) (direct)
Microprocessadores Prof. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)
Introdução ao Microcontrolador 8051
• Stack: PUSH - exemplo
Um fragmento de programa tem o registo DPTR
inicializado à 0123H e a stack pointer aponta para
a posição 09H. Explique qual é o estado da stack após
o push do registo DPTR.
Programa: SP 0BH

push DPL
push DPH 01H
23H
09H

Microprocessadores Prof. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Introdução ao Microcontrolador 8051
• Stack: POP 2 bytes
2 cycles
1101 0000 direct

• Na operação de POP,
• O conteúdo da posição da RAM interna
apontada pelo stack pointer é lido e o valor do
stack pointer é decrementado.
• O valor lido é carregado na posição da RAM
indicada como argumento da operação.
• Nenhuma flag é afectada. (direct) ((SP))
(SP) (SP) - 1
Microprocessadores Prof. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)
Introdução ao Microcontrolador 8051
• Stack: POP - exemplo
Analise o seguinte fragmento de
programa e explique que valores
SP 32H assumirão os registos DPH, DPL
e SP após a sua execusão.
Programa:
01H
23H pop DPH
30H 20H pop DPL
pop SP

Microprocessadores Prof. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Introdução ao Microcontrolador 8051
• Directiva ‘USING’
• As instruções de push e pop recebem como argumento
o endereço da posição da memória interna cujo
conteúdo será guardado na stack.

• Isto significa que teremos que calcular o endereço dos


registos Rn, n ∈ [0-7], quando estivermos a trabalhar
com diferentes bancos.

• O assembler do 8051 fornece a directiva ‘using’ para


facilitar a programação.

Microprocessadores Prof. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Introdução ao Microcontrolador 8051
• Directiva ‘USING’

coluna 1 coluna 2 coluna 3


using [0-3]

banco
indica ao assembler qual é o banco
em cada momento
• No código uso as labels ARn, n ∈ [0 – 7], para
os registos Rn, n ∈ [0 – 7], ou ACC para
representar o acumulador, A.
Microprocessadores Prof. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)
Introdução ao Microcontrolador 8051
• Directiva ‘USING’: Exemplo

using 3 • O primeiro push colocará


push AR0 o conteúdo da posição
1FH na stack (endereço de
using 1 R0 no banco 3).
push AR7
• O segundo push colocará
Nota: o conteúdo da posição
• Antes de usar a directiva ‘using’ 0FH na stack (endereço de
devo comutar de banco através
da programação do registo PSW. R7 no banco 1).

Microprocessadores Prof. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Introdução ao Microcontrolador 8051
• Directiva ‘USING’: Exemplo completo
mov PSW, #00011000B ; Comuta para o banco 3
using 3
push AR0

mov PSW, #00001000B ; Comuta para o banco 1


using 1
push AR7

Nota:
• Antes de usar a directiva ‘using’ devo comutar de
banco através da programação do registo PSW.
Microprocessadores Prof. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)
Introdução ao Microcontrolador 8051
• Ciclo de instrução

Microprocessadores Prof. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)

Você também pode gostar