Página 1 de 1
Stack do 8051

Enviado:
09 Dez 2006 23:59
por mastk
Ola pessoal, estudei o 8051 nesse semestre na escola, mas uma coisa q ficou em duvida é o stack dele, como funciona? tipo vc só tem um nivel? se ele aloca na RAM o PC, deve ocupar 2 bytes certo? como posso fazer pra apagar um nivel da pilhar? ou gerar um stack overflow proposital e não sobre ecrita em registradores q estão sendo utilizados?

Enviado:
10 Dez 2006 11:23
por Ricardo_Franco
O SP (Stack Pointer), é apenas um apontador de endereços, utilizado para quando houver um desvio do programa, seja no código do programa (instrução LCALL), seja por interrupção, (interna ou externa). o PC (Program Counter) saber exatamente onde ele estava antes do evento. o SP é um registrador de apenas um Byte, mas reserva dois endereços da RAM (2 Bytes), pois o PC é um registrador de 16 bits (2 Bytes). A pilha do SP é a propria memoria RAM Se por acaso for manipulado um endereço em que o SP guardou informações o mesmo não sabera voltar corretamente ao ponto da chamada de desvio de programa. O comando ORG (origem) pode definir a partir de que ponto o SP começa a acumular os endereços, assim desvinado dos registradores mais usados (R0, R1 ... R7 do BANK 0)
Se não me engano é mais ou menos dessa forma que ele funciona.
espero ter ajudado
Ricardo Franco

Enviado:
10 Dez 2006 14:22
por brasilma
Olá Mast,
Como o colega já esplicou o Stack é apenas um indice que aponta para a memória RAM onde são guardados os endereços de retorno das subrotinas (CALL / RET) e outros valores que não se deseja que sejam modificados (PUSH / POP).
Quem define sua posição é o programador, no caso do assembler, ou o próprio compilador, no caso do C, Basic, Pascal.
Ele pode ter quantos níveis a memória permitir.
Quando ele armazena um endereço de retorno, 2 bytes são utilizados, pois o PC é um registrador de 16bits.
Não é necessário apagar um nível da pilha, basta retroceder o endereço do Stack em 2 bytes.
Overflow ocorre qdo o endereço da pilha excede o limite que determinou para ele, sobrescrevendo dados ou atingindo o fim da RAM.
Abraços,
MArcos.

Enviado:
12 Dez 2006 00:06
por gabriel_paz
Oi Mastk.
Para iniciar a pilha de outro endereço, pois no processo de RESET é carregado no registrador SP 07H, basta fazer o seguinte:
MOV SP,#XXH, lembrando que esse registrador aponta apenas a RAM interna do 8051, e que não existe nenhum recurso pronto de harware para sinalização do estouro da pilha.
Um abraço.
Gabriel

Enviado:
12 Dez 2006 10:30
por mastk
Valeu, galera. Interresante q esse meodo parece bem melhor q ter o stack a parte.

Enviado:
28 Dez 2006 15:12
por fabiorike
Boa Tarde pessoal,
Eu estou tentando usar a memoria Ram do AT89S8253.
Eu estou gravando um texto nele, mas nao hora de ler o começo sair um uns caracteres nada a ver e depois começa o texto, o meu texto tem os exatos 256bytes, eu posso usar os 256bytes ou devo deixar alguns bytes para o PC, e como eu posso fazer isso?
Obrigado

Enviado:
28 Dez 2006 15:57
por zachary
Olá Fabio!
Se no seu programa você usa instruções de desvio tipo CALL, manipulação de stack tipo PUSH/POP, rotinas de interrupção ou usa os registradores R0...R7, voce precisa reservar as devidas areas da memória RAM interna ou os valores lá gravados serão alterados quando você usar algum dos recursos que citei anteriormente.
Não conheco os recursos do AT89S8253, mas alguns controladores possuem memória RAM EXTERNA no próprio chip (Ex: AT89C51ED2). Caso o micro que você está usando tenha esse recurso, sugiro que você use essa memória.
Espero ter ajudado.
ZAC

Enviado:
28 Dez 2006 16:20
por fabiorike
Olá Zachary, Boa Tarde!
Obrigado pela dica, é isso mesmo pois eu estou usando alguns call e praticamente todos os registradores, eu vou dar uma olhada nete controlador que vc falou.
Obrigado
Ate mais