Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Apostila de 8051, Notas de estudo de Automação

Apostila básica sobre o microcontrolador 8051

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 19/05/2010

diego-dos-santos-mutta-10
diego-dos-santos-mutta-10 🇧🇷

4.7

(3)

3 documentos

1 / 118

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
ESCOLA TÉCNICA ESTADUAL GETÚLIO VARGAS
PROFESSOR: MILTON BARREIRO JUNIOR
Microcontrolador 8051 – Teoria e Prática
São Paulo
2006
ESCOLA TÉCNICA ESTADUAL GETÚLIO VARGAS
PROFESSOR: MILTON BARREIRO JUNIOR
Microcontrolador 8051 – Teoria e Prática
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Pré-visualização parcial do texto

Baixe Apostila de 8051 e outras Notas de estudo em PDF para Automação, somente na Docsity!

ESCOLA TÉCNICA ESTADUAL GETÚLIO VARGAS

PROFESSOR: MILTON BARREIRO JUNIOR

Microcontrolador 8051 – Teoria e Prática

São Paulo

ESCOLA TÉCNICA ESTADUAL GETÚLIO VARGAS

PROFESSOR: MILTON BARREIRO JUNIOR

Microcontrolador 8051 – Teoria e Prática

São Paulo

SUMÁRIO

1 – INTRODUÇÃO...........................................................................................

2 – ARQUITETURA BÁSICA DE UM MICROCONTROLADOR GENÉRICO.. 2

3 – A FAMÍLIA 8051......................................................................................... 3

3.1 Organização de Memória................................................................ 4 3.2 Memória de Programa..................................................................... 6 3.3 Memória de Dados.......................................................................... 8 3.4 Conjunto de Instruções da Família 8051....................................... 10 3.5 Registrador da palavra de controle (Program Status Word)......... 10 3.6 Modos de Endereçamento............................................................ 11 3.7 Instruções Aritméticas................................................................... 12 3.8 Instruções Lógicas........................................................................ 14 3.9 Transferência de Dados Interna e Externa................................... 15 3.10 Instruções Booleanas.................................................................. 17 3.11 Instruções de Salto..................................................................... 18 3.12 Oscilador Interno......................................................................... 20

4.20 Circuitos de Controle.................................................................... 47 4.21 Reset............................................................................................ 47 4.22 Clock............................................................................................ 48 4.23 Operação passo a passo............................................................. 49 4.24 Descrição da pinagem................................................................. 50 5 – PROGRAMAÇÃO E SIMULAÇÃO............................................................ 52

5.1 “Compilação” E “Linkagem”............................................................ 52

5.2 Diretivas (Ou Pseudo-Instruções).................................................. 53 5.3 Uso Do Compilador E Do Linker (Passo A Passo)........................ 54 5.4 Simulador dos Microcontroladores da família 8051....................... 55 5.5 Operação básica do simulador...................................................... 56 6 – TABELA DE INSTRUÇÕES COMPLETA................................................. 58 7 – ESQUEMA DA CPU MÍNIMA PARA TESTE E CARREGAMENTO DE PROGRAMA.............................................................................................................. 70

8 – PROGRAMA TESTE DO SISTEMA MÍNIMO........................................... 71 9 – REFERÊNCIAS BIBLIOGRÁFICAS......................................................... 72

APÊNDICE A............................................................................................................. 73

APÊNDICE B............................................................................................................. 80

ANEXO 1................................................................................................................... 84

1 – Introdução

Podemos considerar os microcontroladores, como sendo uma CPU dedicada e incorporada em um só chip, ou seja, todos os periféricos que nos microprocessadores se encontravam em chips independentes, assim como memórias, temporizadores, portas de comunicação serial, dispositivos de entrada/ saída, estão presentes em um único componente. Isso torna o projeto mais compacto, mais dinâmico e com o custo final reduzido, devido aos dispositivos integrados em um só chip. O chip a ser apresentado nessa apostila será o microcontrolador da família 8051, o qual será estudado com mais detalhes nos capítulos a seguir.

2 – Arquitetura básica de um microcontrolador genérico

Um microcontrolador genérico é composto pelos seguintes blocos:

  • Unidade Central de Processamento (CPU);
  • Memória de Programa (ROM ou EPROM);

3A Família 8051

Quando temos vários microcontroladores utilizando uma mesma célula, chamamos esse conjunto de componentes de família. Desta forma temos várias famílias como, por exemplo, a família do 8048, do 8051, do 8096, entre outras. Vamos tratar aqui da família do 8051, que será utilizado em nossas aplicações. A tabela abaixo descreve os principais componentes dessa família:

No me do Chi p

Versã o sem ROM

V

ersão E PROM

By tes de RO M

By tes de RA M

Tim ers 16 Bits

Tipo de Circ uito 805 1

4K 12

2 NM

OS

C

80C

7C

4K 12

2 HM

OS

CL

4K 12

2 SAC

MOS

8032 8K 25

3 NM

OS

C

80C

7C

8K 25

3 CM

OS

C

80C

7C

K

3+1 CM

OS

C

80C

7C

8K 25

2 CM

OS

C

7C

2K 64 1 CM

OS

C

80C

7C

8K 25

2 CM

OS

O elemento básico desta família é o chip 8051, cujo diagrama interno serviu como ilustração quando falamos sobre um microcontrolador genérico. Os outros componentes desta família estão descritos nos manuais dos fabricantes. Atualmente, a tendência mundial no uso de componentes de baixo consumo, torna sensível o desenvolvimento de projetos baseados na tecnologia CMOS, facilitando assim a interligação de seus blocos. Todos os componentes que apresentarem um “C” em seu código (80C31, 87C452, etc) pertencem a esta família, a qual representa o que existe de mais avançado em microcontroladores de 8 bits, permitindo a continuidade de sua linha de produção por um longo período. As características desta família são:

  • CPU de 8 bits com conjunto de instruções otimizado para aplicações de controle de processos;
  • Capacidade de processamento Booleano (manipulação de bit individualmente);
  • 32 linhas de I/O bidirecionais e individualmente endereçáveis;
  • 128 bytes de RAM “on-chip” (mínimo);
  • Dois contadores / temporizadores programáveis de 16 bits;
  • Interface serial full-duplex;
  • Estrutura de interrupções com até 5 entradas permitindo 2 níveis de prioridade;
  • Gerador de clock;
  • Mínimo de 4Kbytes de memória de programa (ROM ou EPROM);
  • Capacidade de endereçamento externo de até 64Kbytes.

3.1 – Organização de Memória

O 8051 possui intervalos de endereços separados para a memória de programa e para a memória de dados. Esta separação lógica permite que os dados acessados pelos endereços de 8 bits sejam armazenados e manipulados mais rapidamente. É possível também endereçar 16 bits, utilizando para isso, o registrador DPTR, que será estudado posteriormente. A figura abaixo ilustra a estrutura de memória utilizada num microcontrolador 8051:

Nota: a RAM externa não é endereçada diretamente pela CPU. O endereço de acesso deve estar em um registrador usado pela CPU como índice.

A memória de programa é do tipo ROM e não podemos escrever dados nela.

Podemos ter até 64Kbytes de memória, e normalmente encontramos pelo menos 4K de memória interna no chip em forma de ROM, EPROM ou OTP (One Time Program). Os tipos OTP representam uma opção economicamente atraente, pois são mais baratos comparados aos do modelo EPROM, e podem ser programados pelo usuário. Nas versões ROMLESS, esta memória encontra-se externa ao microcontrolador. O pulso de leitura para a memória externa é o sinal PSEN (Program Store Enable). A memória de dados ocupa um espaço de endereçamento separado da memória de programa. Até 64Kbytes de memória externa podem ser endereçados, e a CPU gera sinais de read e write, necessários durante o acesso à memória externa.

3.2 Memória de Programa

A figura abaixo mostra o mapa da parte inferior da memória de programa. Após o reset, a CPU começa a executar as instruções a partir do endereço 0000H.

Como pode ser visto na figura, cada interrupção é alocada num endereço fixo da memória de programa. A interrupção direciona o contador de programa da CPU para o seu respectivo endereço, onde se encontra a rotina de interrupção, conforme controle proporcionado pelo vetor de interrupções. Os primeiros 4Kbytes de memória podem estar localizados no chip, ou num chip (ROM ou EPROM) externo. O controle de acesso interno/externo é feito pelo sinal EA (External Access). O sinal de “strobe” para acesso à memória externa é o sinal PSEN , ativo apenas quando da ocorrência de acessos externos (EA ligado a terra), não sendo, portanto utilizado quando se utiliza apenas a área de memória interna.

A CPU, neste caso está executando um programa a partir da ROM interna. O port 0 serve como um barramento multiplexado de dados/endereço para a RAM, e 3 linhas do port 2 são utilizadas para as páginas da RAM. Os sinais de RD e WR são gerados pela CPU para comandar as operações. Podemos endereçar até 64Kbytes de memória RAM, em endereços de 1 ou 2 bytes. Os endereços de 1 byte são geralmente utilizados em conjunto com 1 ou mais linhas de I/O, para definir a página que está sendo utilizada na RAM. Endereços de 2 bytes, quando utilizados demandam que o port 2 gere o byte alto de endereços. A memória de dados interna está mapeada como indica a figura a seguir. O espaço de memória está dividido em 3 blocos, normalmente denominados, Lower 128, Upper 128 e SFR (Special Function Register). A memória de dados interna tem sempre 1 byte de endereçamento apenas, o que significa que temos um máximo de 256 bytes de memória interna.

Entretanto, os modos de endereçamento permitem o uso de até 384 bytes utilizando um truque simples. Através de endereçamento direto, acessamos um espaço de memória e através de endereçamento indireto, acessamos um espaço de memória diferente. Desta forma, os registradores de função especial (SFR) e os últimos 128 bytes (Upper Space) são acessados nos mesmos endereços (de 80H até FFH) apesar de serem fisicamente separados. Nas células básicas 8051, a área de memória alta não existe no chip, desta forma, consideramos apenas a área de memória baixa (Lower Space) para as nossas experiências (melhores referencias a estas áreas altas podem ser encontradas nos manuais dos fabricantes). Os primeiros 128 bytes de memória interna estão mapeados como indica a figura abaixo:

Os primeiros 32 bytes estão agrupados em 4 bancos de 8 registradores, chamados R0 até R7. Dois bits no registrador da palavra de controle (PSW) selecionam qual o banco de registradores está em uso. Este recurso permite um uso mais eficiente do espaço de código. Os próximos 16 bytes acima do banco de registradores formam o bloco conhecido como memória endereçável por bit (bit addressable space). O conjunto de instruções do 8051 inclui vários tipos de instruções de um só bit, e os 128 bits presentes nessa área podem ser diretamente endereçados por estas instruções. Todos os bytes nos primeiros 128 bytes de memória podem ser endereçados direta ou indiretamente. Os próximos 128 bytes só podem ser acessados indiretamente nos dispositivos que os possuem. A área de memória acima de 128 bytes constitui o registrador de funções especiais (SFR) cuja descrição detalhada faremos posteriormente.

3.4 – Conjunto de Instruções da família 8051

Todos os membros da família 8051 executam o mesmo conjunto de instruções. Este conjunto é composto por instruções otimizadas para aplicações de controle, facilitando as operações de dados através de vários modos de endereçamento. Capacita ainda a operação de variáveis de um bit, permitindo operação em sistemas que demandam processamento booleano. Vamos descrever rapidamente o modo de operação de várias das instruções contidas neste conjunto. Maiores informações podem ser encontradas nos manuais dos fabricantes, os quais descrevem detalhadamente o conjunto de instruções.

3.5 – Registrador da palavra de controle (Program Status Word)

Pointer. Endereços de 16 bits podem ser acessados somente pelo Data Pointer.

  • Instruções de registrador : Os bancos de registradores contêm os registradores de R0 até R7, que podem ser acessados por certas instruções que levam a especificação do registrador junto com o opcode da instrução. As instruções que acessam os registradores dessa forma são eficientes, pois eliminam o byte de endereço. Quando a instrução é executada, um dos oito registradores do banco selecionado é acessado e a seleção do banco é feita por dois bits (RS0 e RS1) no PSW.
  • Instruções de registrador específico: Algumas instruções são especificadas para certos registradores, por exemplo, as instruções que operam com acumulador ou Data Pointer não necessitam um byte de endereço para apontá-las, pois o próprio opcode faz isso.
  • Constantes imediatas: Podemos carregar um registrador com uma constante, diretamente por um simples comando, como por exemplo, mov A, #100 , que coloca no acumulador o valor 100 (decimal).
  • Endereçamento indexado: Somente a memória de programa (ROM) pode ser acessada desta forma e somente pode ser lida. Este modo de endereçamento é destinado à leitura de tabelas. Um registrador de 16 bits (DPTR ou PC) indica o endereço de base da tabela e o acumulador é carregado com o valor da tabela.

3.7 – Instruções aritméticas

O conjunto de instruções aritméticas é listado na tabela a seguir. A tabela indica o modo de endereçamento que pode ser utilizado com cada instrução, para acessar o byte operando. Por exemplo, a instrução Add A, ; pode ser escrita como:

Add A, 7FH (endereçamento direto) Add A, @R0 (endereçamento indireto) Add A, R7 (endereçamento por registrador) Add A, #127 (constante imediata)

Mnemônic o

Operação Modo de Endereça mento

Temp o de Exec ução ADD A,

A = A + Dir / Ind / Reg / Imm

ADDC A,

A = A + + C

Dir / Ind / Reg / Imm

SUBB A,

A = A - - C Dir / Ind / Reg / Imm

INC A A = A + 1 Acumulad or

**_INC =

  • 1_**

Dir / Ind / Reg

INC DPTR DPTR = DPTR +

Data Pointer

DEC A A = A - 1 Acumulad or

DEC =

- 1

Dir / Ind / Reg

MUL AB B e A = B x A Acumulad or e B

DIV AB A = INT [A/B]

B = MOD [A/B]

Acumulad or e B

DA A Ajuste decimal Acumulad or

Os tempos de execução indicados consideram um clock de 12MHz. Todas as instruções aritméticas são executadas num tempo de 1F 06 D s com exceção da instrução INC DPTR que consome 2F 06 D s, e as instruções de multiplicação e divisão que são efetuadas em 4F 06 D s. Perceba que qualquer byte no espaço de memória interno pode ser incrementado ou decrementado sem o uso do acumulador. Inclusive o registrador de 16 bits DPTR pode ser incrementado desta forma. A instrução MUL AB opera com os registradores A e B e põe o resultado (16 bits) nos registradores B (byte high) e A (byte low) concatenados. A instrução DIV AB divide A por B e coloca o quociente (resultado da divisão inteiro em 8 bits) no acumulador e o resto (8 bits) no registrador B.

RRC A Roda Acum. à direita c/ carry

Acumulado r

SWAP A Swap nibbles in A (^) Acumulado r

Todos os modos de endereçamento podem ser utilizados e as instruções são executadas em tempo de 1 a 2 F 06 D s. Estas instruções podem ser executadas em qualquer byte de memória interna ou na área de SFR. O conjunto de instruções permite que sejam realizadas todas as operações lógicas e ainda a instrução SWAP A , que inverte os nibbles alto e baixo do acumulador, operação útil quando operamos com o código BCD. 3.9 – Transferência de dados interna e externa

A tabela a seguir mostra as instruções disponíveis para movimentação de dados entre os espaços de memória interna.

Mnemônic o

Operação Modo de Endereçam ento

Temp o de Execu ção MOV A,

A = Dir / Ind / Reg / Imm

MOV

, A

= A Dir / Ind / Reg

MOV

,

= Dir / Ind / Reg / Imm

MOV

DPTR, #DATA

DPTR = 16 bit Const

Constante imediata

PUSH

INC SP: MOV

@SP,

Direto 2 POP MOV , @SP: DEC SP

Direto 2 XCH A,

Acc e trocam os dados

Dir / Ind / Reg

XCHD A,

@RI

Acc e trocam os nibbles baixos

Indireto 1

A instrução MOV , permite que os dados sejam transferidos entre quaisquer dos registradores da RAM interna ou dos SFR, sem o uso do acumulador, lembrando que os 128 bytes superiores podem ser acessados apenas por endereçamento indireto e os SFR apenas por endereçamento direto.

A área de stack reside na própria RAM interna e as instruções de PUSH primeiro incrementam o stack pointer, então copia o byte no stack. As instruções de PUSH e POP usam apenas o endereçamento direto para identificar o byte que está sendo manipulado, enquanto que o stack é acessado por endereçamento indireto através do registrador SP. Isto significa que o stack vai para os 128 bytes altos (se existirem) mas não para a área de SFR. Nos dispositivos onde não está implementado a área alta, os bytes “PUSHed” são perdidos e os bytes “POPed” são indeterminados. As transferências de dados incluem movimentações em 16 bits, que podem ser utilizadas para inicializar o Data Pointer (DPTR), para o uso de tabelas na memória de programa, ou para acesso à memória de dados externa. A instrução XCH A, resulta na troca dos dados entre o acumulador e o byte endereçado. A instrução XCHD A, @RI é similar, com a diferença que apenas os nibbles baixos estão envolvidos na operação. Esta instrução facilita a manipulação de dados, de forma a economizar instruções nos programas. A memória externa pode ser acessada por endereçamento indireto, utilizando 8 ou 16 bits de endereço. A escolha recai no uso de endereçamento de um byte, através de @Ri, onde Ri pode ser R0 ou R1 do banco de registradores selecionado, ou um endereço de 2 bytes (16 bits) colocado no Data Pointer (DPTR). A desvantagem do uso do endereçamento de 16 bits está no fato de que, se utilizarmos um pequeno espaço de memória, ainda assim o port 2 será inteiramente indisponibilizado para uso. No endereçamento de 8 bits, sacrificamos apenas algumas linhas do port 2. A tabela abaixo indica as instruções de movimentação de dados em memória externa. Todas as instruções são executadas em 2F 06 D s, com um clock de 12MHz.

Largura do Endereço

Mnemônic o

Operação 8 Bits MOVX A, @Ri

Lê RAM Externa (Ri) 8 Bits MOVX @Ri, A

Escreve RAM Externa (Ri) 16 Bits MOVX A, @DPTR

Lê RAM Externa (DPTR) 16 Bits MOVX @DPTR, A

Escreve RAM Externa (DPTR)