You are on page 1of 6

2 Organização de memória

O MCS-51 tem três espaços de memória: • 64K bytes de código (interno ou externo); • 256 bytes de dados internos • 64K bytes de dados externos. A figura abaixo apresenta o mapa de memória do MCS-51.
FFFFH FFFFH

64 K bytes External Data 256 bytes internal Data FFH

64 K bytes Code

00

0000

0000

2.1

Memória de código

A memória de código contém, as instruções e as constantes que constituem o programa. Entre as constantes contam-se as mensagens de texto, tabelas de conversão, etc. O espaço de memória de código tem dimensão 64K bytes, apenas acessível para leitura, sendo a referência a instruções ou a constantes feita a 16 bits através dos registos PC (Program Conter) ou DPTR (Data Pointer). O MCS-51 pode apresentar duas versões: uma em que a memória de código é interna, normalmente recorrendo a tecnologia PROM ou FLASH, e outra em que a memória de código é externa ao microcontrolador. O CPU após reset inicia a execução do programa a partir do endereço 0000H da memória de código. Como a memória de código pode ser interna ou externa ao microcontrolador, o CPU testa o pino de entrada EA (External Access) e em função do valor lógico nele presente, lê as instruções da memória de código interna ou externa.

Ver 2.0 Página 2-1

2. Como se pode verificar na figura acima. 2. para conter estruturas de dados tipo array. a memória de dados interna é dividida em três espaços de 128 bytes cada: DATA memória principal de uso genérico para variáveis e registos temporários. tem carácter secundário.1 Memória interna de dados Como se vê na figura acima. com a dimensão de 256 bytes e outro externo. Está indicada por esta razão. sendo a distinção de acesso feita pelo modo de endereçamento. A memória externa de dados. constitui um espaço especial para registos do CPU e de interface com os periféricos internos do microcontrolador. tal como o nome sugere. existe sobreposição de endereços da IDATA com o SFR.0 Página 2-2 . SFR Special Function Register.2. podendo ser acedida de forma directa ou indirecta. com 64K bytes. organizados conforme a figura abaixo. devido ao reduzido número de instruções disponíveis para a sua manipulação. Memória Externa de dados FFFFH FFH Memória interna de dados Indirect Data Special Function Registers 7FH 128 bytes Data 00 80H 64K bytes External Data 0000 O MCS-51 elege a memória interna de dados como principal.2 Memória de dados O espaço de dados é dividido em dois sub-espaços distintos: um interno. Ver 2. embora de maior dimensão. IDATA memória só acessível em modo indirecto. estando o conjunto das instruções vocacionado para manipulação de dados neste espaço.

Estes registos são de uso genérico e Ver 2. situados entre 0 e 1FH. diminuindo assim a dimensão das instruções. permite que a referência aos dados nela contidos. seja feita a 8 bits. está alocada entre o endereço 0 e 7FH. 8 registos de 8 bits cada. alojam quatro bancos de registos. dimensão e versatilidade para manipular variáveis nesta memória. O facto da dimensão da memória interna ser de 256 bytes.0 Página 2-3 . O conjunto das instruções do processador está optimizado em tempo. Dos 128 bytes que constituem este espaço alguns apresentam dupla funcionalidade como mostra a figura abaixo. e é acessível de modo directo e indirecto.2 Memória DATA A memória DATA constitui o espaço principal de variáveis.2. 7FH Scratch Pad Area 30H 2FH 2EH 2DH 2CH 2BH 2AH 29H 28H 27H 26H 25H 24H 23H 22H 21H 20H 7FH 77H 6FH 67H 5FH 57H 4FH 47H 3FH 37H 2FH 27H 1FH 17H 0FH 07H 7EH 76H 6EH 66H 5EH 56H 4EH 46H 3EH 36H 2EH 26H 1EH 16H 0EH 06H 7DH 75H 6DH 65H 5DH 55H 4DH 45H 3DH 35H 2DH 25H 1DH 15H 0DH 05H 7CH 74H 6CH 64H 5CH 54H 4CH 44H 3CH 34H 2CH 24H 1CH 14H 0CH 04H 7BH 73H 6BH 63H 5BH 53H 4BH 43H 3BH 33H 2BH 23H 1BH 13H 0BH 03H 7AH 72H 6AH 62H 5AH 52H 4AH 42H 3AH 32H 2AH 22H 1AH 12H 0AH 02H 79H 71H 69H 61H 59H 51H 49H 41H 39H 31H 29H 21H 19H 11H 09H 01H 78H 70H 68H 60H 58H 50H 48H 40H 38H 30H 28H 20H 18H 10H 08H 00H 1FH Register Bank 3 18H R e g i s t e r A r e a 17H Register Bank 2 10H 0FH Register Bank 1 08 07 06 05 04 03 02 01 00 Register Bank 0 Register Bank 0 Register Bank 0 Register Bank 0 Register Bank 0 Register Bank 0 Register Bank 0 Register Bank 0 (R7) (R6) (R5) (R4) (R3) (R2) (R1) (R0) B i t A r e a Os primeiros 32 endereços de memória. contendo cada um deles.2. bem como o tempo de execução.

As restantes posições de memória desde 30H a 7FH são de uso genérico para variáveis. que não estão explícitas no conjunto das instruções (Ex. disponibiliza um vasto conjunto de instruções para: leitura. os registos com esta característica estão alojados em endereços cujos três bits de menor peso têm o valor zero. com endereços respectivamente entre 0 e 7FH. o MCS-51. levou a que não tenham sido criadas instruções específicas para entrada e saída de dados. Para que o endereço do registo coincida com o endereço do bit de menor peso desse registo. O facto dos registos de acesso a periféricos estarem alocados no espaço de endereçamento do CPU. deste tipo de variáveis (ver tabela de instruções de variáveis booleanas). assinalando com * os registos endereçáveis ao bit. só é acessível de modo directo e não constitui um espaço de memória para variáveis.podem ser evocados nas instruções como registos de R0 a R7 (Rn).: ADD A. no que diz respeito à utilização de variáveis do tipo Booleano. 2. Este facto. leva a que possam ser construídas instruções.ACC).0 Página 2-4 . A tabela abaixo apresenta os vários registos contidos no SFR do MCS-51. sendo R0 e R1 (Ri) utilizados como referência no acesso à memória indirecta. pelo nome (codificado no código da instrução) ou pelo seu endereço. Ver 2. o espaço de memória DATA entre os endereços 20H e 2FH pode ser visto como um banco de 128 bits.3 SFR (Special Function Register) O SFR está situado entre o endereço 80H e FFH. escrita e teste. Neste espaço estão alocados registos do CPU e de acesso aos periféricos que constituem o microcontrolador. Alguns dos registos do SFR permitem o acesso individual a cada um dos seus bits. estes podem ser evocados como parâmetro de uma instrução.2. Neste sentido. Como alguns dos registos do CPU estão alocados neste espaço. recebendo nestes casos a denominação de registos endereçáveis ao bit. Com vista à optimização do código.

activo quando existe arrasto do oitavo para o nono bit nas operações aritméticas de adição e subtracção.0 Página 2-5 . Ver 2. registo de 16 bits para acesso indirecto a memória externa.Tabela de registos do SFR endereço F0H E0H D0H B8H B0H A8H A0H 99H 98H 90H 8DH 8CH 8BH 8AH 89H 88H 87H 83H 82H 81H 80H Registo Valor após RESET *B 0000 0000 * ACC 0000 0000 * PSW 0000 0000 * IP XXX0 0000 * P3 1111 1111 * IE 0XX0 0000 * P2 1111 1111 SBUF XXXX XXXX * SCON 0000 0000 * P1 1111 1111 TH1 0000 0000 TH0 0000 0000 TL1 0000 0000 TL0 0000 0000 TMOD 0000 0000 * TCON 0000 0000 PCON 0XXX 0000 DPH 0000 0000 DPL 0000 0000 SP 0000 0111 * P0 1111 1111 De entre os registos apresentados na tabela destacam-se os do CPU: • *ACC Acumulador.RS0 Register Select. O registo PSW tem a seguinte estrutura: PSW D7H CY D6H AC D5H F0 D4H RS1 D3H RS0 D2H OV D1H - D0H P D0H • CY Carry. • SP Stack Pointer. registo apontador. • *PSW Program Status Word. Bit para uso genérico do programador. É utilizado como entrada nas operações de soma e subtracção com arrasto. • DPTR Data Pointer. registo que contem informação sobre o estado de execução do programa. referido no assembly como registo A. utilizado pelo CPU para implementação na memória interna de uma estrutura de dados tipo pilha (stack). • F0 Flag 0. • RS1. dois bits que determinam qual dos quatro bancos de registos se encontra seleccionado. • B Registo B utilizado como operando e resultado nas operações de multiplicação e divisão. Este bit é utilizado pela instrução de ajuste para BCD do resultado da adição de dois operandos BCD. • AC Auxiliary carry. repartido por dois registos de 8 bits. activo quando existe arrasto do quarto para o quinto bit na operação de adição ou subtracção. um contendo a parte alta DPH e outro a parte baixa DPL.

denominada por XDATA. 2. representados em código dos complementos.4 Memória IDATA A memória IDATA tem a dimensão de 128 bytes. Embora no MCS-51. com as mais diversas funcionalidades. Este espaço de memória destina-se essencialmente a conter estruturas de dados tipo array.• OV Overflow. 2. Também activo quando o resultado da multiplicação ultrapassa o valor 255. activo quando no registo A. sendo endereçável de 0000H a FFFFH. Ver 2. Dado que no conjunto de instruções do MCS-51 só está disponível uma única instrução para transferência de dados e com forma de acesso indirecto.0 Página 2-6 . a XDATA é por esta razão uma memória de uso secundário e está essencialmente indicada para armazenar grandes estruturas de dados organizadas em array. permitindo que fabricantes de microcontroladores compatíveis com o MCS-51 insiram novos periféricos.2. entendidos os operandos como valores inteiros com sinal. não se propiciando à utilização genérica. centenas de microcontroladores compatíveis com o MCS-51. como por exemplo a estrutura de dados tipo pilha de bytes (stack). tem dimensão de 64K bytes.2. o número de bits com valor lógico 1 se encontra em quantidade ímpar. o acesso a estas. os registos de acesso.5 Memória externa de dados A memória externa de dados. é feita utilizando o mesmo barramento (BUS) de dados e de endereços. o espaço de endereçamento da memórias externa de dados e o da memória de código sejam independentes. alocando neste espaço. Como se pode constatar. • P Parity. reside de 80H a FFH e só pode ser acedida indirectamente através dos registos Ri ou SP. Existem hoje por esta razão. activo quando o resultado da adição ou da subtracção excede o domínio. o espaço SFR não se encontra totalmente preenchido pelo MCS-51. ainda que os sinais de leitura e escrita sejam independentes.