apostila de 8051

179
ESCOLA TÉCNICA ESTADUAL GETÚLIO VARGAS PROFESSOR: MILTON BARREIRO JUNIOR Microcontrolador 8051 – Teoria e Prática São Paulo

Upload: renan-roberto-valeo

Post on 10-Aug-2015

121 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Apostila de 8051

ESCOLA TÉCNICA ESTADUAL GETÚLIO VARGAS

PROFESSOR: MILTON BARREIRO JUNIOR

Microcontrolador 8051 – Teoria e Prática

São Paulo2006

Page 2: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

ESCOLA TÉCNICA ESTADUAL GETÚLIO VARGAS

PROFESSOR: MILTON BARREIRO JUNIOR

Microcontrolador 8051 – Teoria e Prática

São Paulo 2006

Milton Barreiro Junior – “ETE Getúlio Vargas”

ii

Apostila sobre Microcontroladores família 8051,

apresentada aos cursos de Eletrônica, Telecomunicações e

Automação Industrial da Escola Técnica Estadual Getúlio Vargas,

com o propósito de auxiliar nas aulas teóricas e práticas.

Page 3: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

SUMÁRIO

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

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

3.13 Estrutura de Interrupções............................................................ 21

4 – DESCRIÇÃO DO HARDWARE................................................................ 24

4.1 Registradores de função especial (SFR)...................................... 24

4.2 Acumulador (ACC)......................................................................... 25

4.3 Registrador B (B)............................................................................ 25

Milton Barreiro Junior – “ETE Getúlio Vargas”

iii

Page 4: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

4.4 Registrador da palavra de controle (PSW).................................... 25

4.5 Stack Pointer (SP) e Data Pointer (DPTR).....................................

26

4.6 Buffer Serial (SBUF)....................................................................... 26

4.7 Port’s de I/O (P0, P1, P2, P3)........................................................ 28

4.8 Registradores de Timer e de Controle........................................... 29

4.9 Estrutura e operação dos ports de I/O........................................... 32

4.10 Acesso à memória externa.......................................................... 35

4.11 Temporizadores e Contadores..................................................... 35

4.12 Modos de operação..................................................................... 36

4.13 Interface Serial............................................................................. 38

4.14 Modos de Operação..................................................................... 38

4. 15 Registrador de Controle.............................................................. 43

4.16 Baud Rates................................................................................... 43

4.17 Interrupções................................................................................. 44

4.18 Estrutura de prioridades............................................................... 46

4.19 Interrupções externas.................................................................. 46

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

Milton Barreiro Junior – “ETE Getúlio Vargas”

iv

Page 5: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

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

Milton Barreiro Junior – “ETE Getúlio Vargas”

v

Page 6: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

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.

Milton Barreiro Junior – “ETE Getúlio Vargas”

1

Page 7: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

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);

Memória de dados (RAM);

Linhas de I/O (PORT’s);

Controle de interrupções;

Gerador de clock;

Temporizadores (Timer’s) e Contadores (counter’s).

É representada na figura abaixo constituição clássica de um microcontrolador

contendo os blocos citados e suas respectivas interligações.

As diferenças básicas entre os diversos tipos de microcontroladores

disponíveis no mercado são relacionadas à capacidade e tipos de memórias, na

quantidade de port’s disponíveis, velocidade de operação, e alguns recursos

específicos como por exemplo, portas seriais, maior número de contadores, opção

de baixo consumo, entre outros.

Existem também, os componentes chamados derivativos que, como o próprio

nome diz, são microcontroladores derivados dos tipos mais comuns (8048 e 8051),

ou seja, a célula básica é o microcontrolador e este é acrescido de outros

componentes de acordo com as necessidades.

Milton Barreiro Junior – “ETE Getúlio Vargas”

4 I/O Port’s BUS Control

OSC

CPU

Interrupt Control

External Interrupt

4K ROM 128 Bytes RAM

Timer 1

Timer 0

Counter Inputs

Serial Port

TXD RXD

P0 P1 P2 P3

Address / Data

BUS

2

Page 8: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

3 – A 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:

Nome doChip

Versão semROM

VersãoEPROM

Bytes deROM

Bytes deRAM

Timers16 Bits

Tipo deCircuito

8051 8031 8751 4K 128 2 NMOS

80C51 80C31 87C51 4K 128 2 HMOS

80CL51 4K 128 2 SACMOS

8052 8032 8K 256 3 NMOS

80C52 80C32 87C52 8K 256 3 CMOS

83C528 80C528 87C528 32K 512 3+1 CMOS

83C652 80C652 87C652 8K 256 2 CMOS

83C751 87C751 2K 64 1 CMOS

83C452 80C452 87C452 8K 256 2 CMOS

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;

Milton Barreiro Junior – “ETE Getúlio Vargas”

3

Page 9: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

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:

Milton Barreiro Junior – “ETE Getúlio Vargas”

4

Page 10: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

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.

Milton Barreiro Junior – “ETE Getúlio Vargas”

5

Page 11: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

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.

Milton Barreiro Junior – “ETE Getúlio Vargas”

(0033H)

002BH

0023H

001BH

0013H

000BH

0003H 0000H RESET

Interrupt Locations 8 Bytes

6

Page 12: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

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 configuração de hardware necessária para acesso à memória externa é

ilustrada a seguir. Note que 16 linhas de I/O (port 0 e port 2) são dedicadas à

transição de sinais durante buscas à memória externa. O port 0 opera como um

barramento de dados endereço multiplexado, emitindo o byte low do program

counter como endereço e aguarda o recebimento do byte de código da memória de

programa. Durante o tempo em que o byte low está válido no port 0, o sinal ALE

coloca este byte no latch de endereços, enquanto o port 2 emite o byte alto de

endereços. O sinal PSEN pulsa, e o código de byte é lido pelo microcontrolador.

O endereço de memória de programa sempre é de 16 bits, mesmo quando a

quantidade de memória externa é inferior à 64Kbytes. Desta forma, sempre que

utilizarmos memória externa, dois port’s (port 0 e port 2) serão sacrificados em

função do endereçamento das mesmas.

É possível utilizarmos também os portos que foram sacrificados, porém, não é uma operação tão confortável.

Milton Barreiro Junior – “ETE Getúlio Vargas”

P1

P3 P2

ALE

__ EA

P0

_____ PSEN

Instr.

Address

___ OE

MCS-51 EPROM

Latch

7

Page 13: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

3.3 – Memória de dados

A figura abaixo mostra o hardware necessário para o acesso à memória RAM

externa.

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.

Milton Barreiro Junior – “ETE Getúlio Vargas”

P1

ALE

__ EA

P0 Data

Address

MCS-51 With Intenal

ROM RAM

Latch VCC

___ WR

___ RD

P3

P2

I/O PAGE BITS ___

WE ___ OE

8

Page 14: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Entretanto, os modos de endereçamento permitem o uso de até 384 bytes uti-

lizando um truque simples. Através de endereçamento direto, acessamos um es-

paç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 últi-

mos 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:

Milton Barreiro Junior – “ETE Getúlio Vargas”

Accessible By indirect Addressing

Only

Accessible By direct

And indirect Addressing

Accessible By direct

Addressing Only

Upper 128

Lower 128

0

7FH

80H

FFH FFH

80H

Special Function Registers

Ports, Status and Control bits Timer, Registers Stack Pointer Accumulator, etc...

07H 0

08H 0FH

10H 17H 18H 1FH 20H

2FH 30H

7FH

11

10

01

00

Bank select bits em PSW

Bit-Addressable Space (Bit Addresses 0 – 7F)

4 Banks of 8 registers R0 – R7

Reset value of stack pointer

9

Page 15: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

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)

O registrador da palavra de controle (PSW) contém vários bits de status que

indicam o estado atual da CPU. A tabela a seguir indica a posição dos bits dentro

do registrador.

Milton Barreiro Junior – “ETE Getúlio Vargas”

10

Page 16: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

CY AC F0 RS1 RS0 OV - PCY – (PSW7): Carry flag, indica “vai um” nas operações aritméticas.AC – (PSW6): Auxiliary carry flag, auxilia nas operações de adição.F0 – (PSW5): Flag de uso geral.RS1 – (PSW4): Seleção do banco de registradores.RS0 – (PSW3): Seleção do banco de registradores.OV – (PSW2): Overflow em operações aritméticas.- – (PSW1): Flag definível pelo usuário.P – (PSW0): Flag de paridade

O bit de carry, entre outras funções serve como “vai um” em operações

aritméticas, e também como acumulador para um número de operação booleana.

Os bits RS0 e RS1 são utilizados para selecionar um entre quatro bancos de

registradores, disponíveis nos primeiros 128 bytes de RAM. O bit de paridade indica

a quantidade de bits em um no acumulador: se P=1, o acumulador contém um

número ímpar de uns; se P=0, o número de uns no acumulador é par. Dois bits do

PSW estão disponíveis e podem ser utilizados como flags de uso geral. O PSW

encontra-se localizado na área denominada SFR, no endereço D0H.

3.6 – Modos de endereçamento

Podemos ter seis modos distintos de endereçamento no 8051. Estes modos

são adequados às operações de controle.

Endereçamento direto : Neste modo, o operando é especificado por 8 bits de

endereço na instrução. Somente a RAM interna e os SFR’s podem ser

acessados diretamente.

Endereçamento indireto : No modo indireto, a instrução especifica um

registrador que contém o endereço do operando. Ambas as memórias,

interna e externa podem ser acessadas desta forma. O registrador de

endereço, para operações de 8 bits, pode ser R0 ou R1, ou ainda o Stack

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

Milton Barreiro Junior – “ETE Getúlio Vargas”

11

Page 17: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

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, <byte>; 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)

Milton Barreiro Junior – “ETE Getúlio Vargas”

12

Page 18: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Mnemônico Operação Modo deEndereçamento

Tempo deExecução

ADD A, <byte> A = A + <byte> Dir / Ind / Reg / Imm

1

ADDC A, <byte> A = A + <byte> + C Dir / Ind / Reg / Imm

1

SUBB A, <byte> A = A - <byte> - C Dir / Ind / Reg / Imm

1

INC A A = A + 1 Acumulador 1

INC <byte> <byte> = <byte> + 1 Dir / Ind / Reg 1

INC DPTR DPTR = DPTR + 1 Data Pointer 2

DEC A A = A - 1 Acumulador 1

DEC <byte> <byte> = <byte> - 1 Dir / Ind / Reg 1

MUL AB B e A = B x A Acumulador e B

4

DIV AB A = INT [A/B]B = MOD [A/B]

Acumulador e B

4

DA A Ajuste decimal Acumulador 1

Os tempos de execução indicados consideram um clock de 12MHz. Todas as

instruções aritméticas são executadas num tempo de 1s com exceção da instrução

INC DPTR que consome 2s, e as instruções de multiplicação e divisão que são

efetuadas em 4s.

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.

Devido às suas características, a operação de divisão é mais utilizada em

conversões de radicais e operações de deslocamento programáveis, do que na

divisão aritmética propriamente dita.

Milton Barreiro Junior – “ETE Getúlio Vargas”

13

Page 19: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

A instrução de ajuste decimal DA A é utilizada na aritmética BCD, quando

utilizamos esta aritmética, as operações ADD e ADDC devem, obrigatoriamente, ser

seguidas por uma operação de ajuste decimal, para que os resultados continuem em

BCD. Note que o ajuste decimal não converte o número binário em BCD, mas

corrige os erros de aproximação ocorridos nos registradores.

3.8 – Instruções lógicas

A tabela a seguir mostra uma lista de instruções lógicas do 8051.

Mnemônico OperaçãoModos deOperação

Tempo de

Execução

ANL A, <byte> A = A and <byte> Dir / Ind / Reg / Imm

1

ANL <byte>, A <byte> = <byte> and A Direto 1ANL <byte>,

#DATA<byte> = <byte> and

#DATADireto 2

ORL A, <byte> A = A or <byte> Dir / Ind / Reg / Imm

1

ORL <byte>, A <byte> = <byte> or A Direto 1ORL <byte>,

#DATA<byte> = <byte> or #DATA Direto 2

XRL A, <byte> A = A xor <byte> Dir / Ind / Reg / Imm

1

XRL <byte>, A <byte> = <byte> xor A Direto 1XRL <byte>,

#DATA<byte> = <byte> xor

#DATADireto 2

CLR A A = 00H Acumulador 1CPL A A = not A Acumulador 1RL A Roda Acum. à esquerda 1

bit Acumulador 1

RLC A Roda Acum. à esquerda c/ carry

Acumulador 1

RR A Roda Acum. à direita 1 bit Acumulador 1RRC A Roda Acum. à direita c/

carryAcumulador 1

SWAP A Swap nibbles in A Acumulador 1

Todos os modos de endereçamento podem ser utilizados e as instruções são

executadas em tempo de 1 a 2 s. Estas instruções podem ser executadas em

Milton Barreiro Junior – “ETE Getúlio Vargas”

14

Page 20: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

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ônico Operação Modo deEndereçamento

Tempo deExecução

MOV A, <fonte> A = <fonte> Dir / Ind / Reg / Imm

1

MOV <dest>, A <dest> = A Dir / Ind / Reg 1

MOV <dest>, <fonte>

<dest> = <fonte> Dir / Ind / Reg / Imm

2

MOV DPTR, #DATA

DPTR = 16 bit Const Constante imediata

2

PUSH <fonte> INC SP: MOV @SP, <fonte>

Direto 2

POP <dest> MOV <dest>, @SP: DEC SP

Direto 2

XCH A, <byte> Acc e <byte> trocam os dados

Dir / Ind / Reg 1

XCHD A, @RI Acc e <byte> trocam os nibbles baixos

Indireto 1

A instrução MOV <dest>, <fonte> 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

Milton Barreiro Junior – “ETE Getúlio Vargas”

15

Page 21: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

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, <byte> 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 2s, com um clock de 12MHz.

Largura do Endereço Mnemônico 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)

Em todos os acessos à RAM externa, utilizamos sempre o acumulador como

registrador intermediário. Os pulsos de READ ou WRITE são ativos somente

durante a execução da instrução MOVX. Normalmente estes sinais estão inativos e

se não forem utilizados, podem ser configurados como linhas de I/O extra.

Existem ainda duas instruções que estão disponíveis para leitura de tabelas

na memória de programa. Estas instruções permitem apenas a leitura de dados na

Milton Barreiro Junior – “ETE Getúlio Vargas”

16

Page 22: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

memória de programa (ROM), não permitindo a atualização dos mesmos. O

mnemônico é MOVC (mov constant), e pode se apresentar de duas formas:

MOVC A, @A + DPTR

MOVC A, @A + PC

A diferença está no registrador auxiliar utilizado durante a leitura, que pode

ser o DPTR ou o PC. A primeira instrução permite o acesso a tabelas de até 256

itens, sendo que o DPTR indica o início da tabela, e o acumulador indica o off-set do

endereço desejado. Com a variação (incremento) do acumulador, podemos ler a

tabela inteira mantendo o DPTR fixo. A outra instrução, utiliza o acumulador como

base de endereçamento e o PC como off-set, de forma que a leitura de tabelas deve

ser feita por sub-rotinas como a que se segue:

MOV A, valor inicial

CALL tabela

A rotina “tabela” seria:

tabela: MOVC A, @A + PCRET

Este tipo de tabela pode conter até 255 itens, lembrando que neste caso, não

podemos utilizar o valor “0” da tabela, que variará entre 1 e 255. Um valor colocado

no off-set 0 não será lido.

3.10 – Instruções Booleanas

A família 8051 contém um processador booleano completo. Um processador

booleano consiste num elemento que permite a manipulação direta de um único bit

dentro da palavra que pode ser de 8 ou mais bits (byte). A RAM interna contém 128

bits endereçáveis e o espaço SFR contém mais 128. Todos os port’s são bits

endereçáveis, e cada um pode ser tratado como um port separado. As instruções

Milton Barreiro Junior – “ETE Getúlio Vargas”

17

Page 23: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

que acessam esses bits não são apenas seqüências de desvios condicionais, mas

um completo conjunto de instruções como indicado na tabela abaixo:

Mnemônico Operação Tempo deExecução

ANL C, bit C = C and bit 2

ANL C, /bit C = C and not bit 2

ORL C, bit C = C or bit 2

ORL C, /bit C = C or not bit 2

MOV C, bit C = bit 1

MOV bit, C bit = C 2

CLR C C = 0 1

CLR bit bit = 0 1

SETB C C = 1 1

SETB bit bit =1 1

CPL C C = not C 1

CPL bit bit = not bit 1

JC REL Jump If C = 1 2

JNC REL Jump If C = 0 2

JB bit, REL Jump If bit = 1 2

JNB bit, REL Jump If bit = 0 2

JBC bit, REL Jump If bit = 1 : CLR bit 2

Este tipo de operação de bit não é facilmente obtido em arquiteturas de

microprocessador. Todos os bits são acessados diretamente nos endereços 00H

até 7FH na área dos 128 bytes inferiores e de 80H até FFH no espaço SFR. Desta

forma podemos com as instruções de programa, implementar circuitos lógicos dentro

do microcontrolador, evitando o uso de circuitos discretos ou PAL’s.

3.11 – Instruções de Salto

Podemos utilizar 3 tipos de instruções de desvio, quando endereçamos um

programa no microcontrolador. Estas instruções diferem entre si no formato do

endereço de destino. A instrução SJMP (Short Jump) é composta por dois bytes,

Milton Barreiro Junior – “ETE Getúlio Vargas”

18

Page 24: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

constituindo um byte de opcode e um byte de off-set. Este fato limita o espaço de

endereçamento em valores de -127 até +127 bytes em torno da instrução seguinte

ao SJMP.

Quando utilizamos a instrução LJMP (Long Jump) temos um comprimento de

3 bytes, que consiste de dois bytes de endereço e um byte de opcode, permitindo o

endereçamento de 64Kbytes de memória de programa.

A instrução AJMP (Absolute Jump) é codificada em 2 bytes sendo que o

endereço é formado por 11 bits e os 5 bits restantes utilizados no opcode.

A tabela abaixo indica as instruções de salto disponíveis.

Mnemônico Operação Tempo deExecução

JMP end Salto para end 2

JMP @A + DPTR Salto para A + DPTR 2

CALL end Chama subrotina no endereço end 2

RET Retorno de subrotina 2

RETI Retorno de interrupção 2

NOP Sem operação 1

Em todos os casos, o programador especifica o endereço de destino para o

assembler da mesma forma, por um “label” ou uma constante de 16 bits. O

assembler colocará o endereço de destino no formato correto para cada instrução, e

se o formato não comportar o valor, aparecerá a mensagem “Destination out of

range”.

Temos ainda as instruções LCALL, que permite a chamada de subrotinas em

qualquer posição dos 64Kbytes de memória, e ACALL, que se utiliza do mesmo

formato de endereçamento de 11 bits utilizado no AJMP. As subrotinas devem ser

finalizadas com o comando RET, e deve-se lembrar que cada chamada necessita de

um RET, sem o qual o programa se perde.

A instrução RETI é utilizada como retorno da rotina de interrupção. A única

diferença entre a instrução RET e a RETI, é que a RETI informa ao sistema de

controle de interrupção que a interrupção em progresso foi atendida.

Os saltos acima listados são chamados de saltos incondicionais, pois não

dependem de nenhuma verificação de condições anteriores. Os chamados saltos

Milton Barreiro Junior – “ETE Getúlio Vargas”

19

Page 25: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

condicionais, dependentes da verificação de certos bits de controle, e estão listados

a seguir:

Mnemônico Operação Modo deEndereçamento

Tempo de

Execução

JZ rel Salto se A=0 Acumulador 2

JNZ rel Salto se A não 0 Acumulador 2

DJNZ <byte>, rel Decrementa e salta se não 0

Direto Registrador

2

CJNE A, <byte>, rel Salta se A diferente de <byte>

Direto Imediato 2

CJNE <byte>, #DATA, rel

Salta se <byte> diferente de #DATA

Indireto Registrador

2

Não existe bit de zero no registrador PSW, portanto as instruções JZ e JNZ

devem testar o dado do acumulador para estas condições. A instrução DJNZ é

adequada para controle de loops, pois sua configuração de dupla função

(decrementa e testa) torna fácil a execução de loops.

A instrução CJNE pode ser utilizada para controle de loops ou para teste

condicional de bytes, na forma de “maior que” ou “menor que”, pois existe a

indicação de maior ou menor pelo bit de CARRY, localizado no PSW.

3.12 – Oscilador Interno

Todos os membros da família 8051 possuem um oscilador interno que pode

ser utilizado como fonte de clock para a CPU, bastando para isso que se implemente

a configuração abaixo:

Milton Barreiro Junior – “ETE Getúlio Vargas”

Quartz Cristal or ceramic ressonator

C1

C2

XTAL2

XTAL1

VSS

MCS-51 HMOS or CHMOS

20

Page 26: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Se ao invés de utilizarmos o oscilador interno, utilizamos outro gerador qual-

quer (para sincronizar com outros circuitos, por exemplo) devemos ter o cuidado de

interligar a entrada no pino certo. Este fato é importante, pois este pino muda con-

forme o tipo de chip utilizado, por exemplo, com chips HMOS (8051) devemos ligar a

entrada de clock ao pino XTAL2, enquanto que em circuitos CMOS (80C51), o clock

deve ser colocado no pino XTAL1. A figura abaixo indica a correta montagem

destas entradas nos diversos componentes.

3.13 – Estrutura de Interrupções

A família 8051 atende a cinco entradas de interrupções distintas, duas

externas, duas relativas aos dois timers, e uma relativa ao canal serial interno. Cada

interrupção pode ser habilitada ou desabilitada individualmente, setando ou

resetando um bit no registrador denominado IE (Interrupt Enable) dentro do SFR.

Este registrador contém ainda um bit que habilita todas as interrupções, e sua

estrutura completa é mostrada abaixo. O bit em 0 desabilita a interrupção e o bit em

1 habilita a interrupção.

EA - - ES ET1 EX1 ET0 EX0

EA – (IE.7) Habilita todas as interrupções globais quando em 1;

ES – (IE.4) Interrupção do port serial;

Milton Barreiro Junior – “ETE Getúlio Vargas”

XTAL2

XTAL1

VSS

MCS-51 HMOS or CHMOS

External Clock Signal

XTAL2

XTAL1

VSS

MCS-51 HMOS Only

External Clock Signal

XTAL2

XTAL1

VSS

MCS-51 CHMOS

Only

External Clock Signal

(IC)

21

Page 27: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

ET1 – (IE.3) Interrupção do timer 1;

EX1 – (IE.2) Interrupção externa 1;

ET0 – (IE.1) Interrupção do timer 0;

EX0 – (IE.0) Interrupção externa 0.

Cada fonte de interrupção pode ser programada quanto à sua prioridade de

atendimento, por um outro registrador localizado na área de SFR e denominado IP

(Interrupt Priority).

A rotina de prioridade de interrupção determina que se uma interrupção de

baixo nível estiver sendo executada, esta pode ser interrompida por uma interrupção

de alto nível, sendo continuada após o término da mesma. O contrário não é

verdadeiro, ou seja, uma interrupção de alto nível não é interrompida por uma

interrupção de nível inferior, nem igual ao dela. Se duas interrupções de mesmo

nível são recebidas simultaneamente, uma sequência de pool interna determina qual

será atendida em primeiro lugar. A figura abaixo ilustra o conteúdo do registrador IP.

O Bit em 0 desabilita a interrupção e o bit em 1 habilita a interrupção.

- - - PS PT1 PX1 PT0 PX0

PS – (IP.4) Prioridade de interrupção do canal serial;

PT1 – (IP.3) Prioridade de interrupção timer 1;

PX1 – (IP.2) Prioridade de interrupção externa 1;

PT0 – (IP.1) Prioridade de interrupção do timer 0;

PX0 – (IP.0) Prioridade de interrupção externa 0.

Quando em operação, todos os flags de interrupção estão retidos no sistema

de controle de interrupção durante o estado de cada ciclo de máquina. As amostras

são “pooladas” durante o ciclo seguinte, e se uma delas se encontrar setada, o

sistema de interrupção gera um LCALL para o endereço apropriado na memória de

programa, a menos que outra condição bloqueie a interrupção.

Esta LCALL gerada por hardware resulta na transferência do conteúdo do

registrador PC para o Stack e recarrega o PC com o primeiro endereço da rotina de

interrupção. Cada rotina de uma dada interrupção começa num endereço fixo.

Somente o PC é transferido automaticamente para o stack, então devemos nos

lembrar de salvar os registradores importantes em cada rotina de interrupção.

Milton Barreiro Junior – “ETE Getúlio Vargas”

22

Page 28: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Salvando apenas o PC, torna-se mais simples a aplicação destas rotinas nas

funções mais comuns de controle, onde não necessitamos grandes recursos de

software, pois precisamos apenas setar um pino, ou recarregar um timer, ou ler um

canal serial, por exemplo.

A figura a seguir indica como atuam os registradores no controle do hardware

de interrupção:

Milton Barreiro Junior – “ETE Getúlio Vargas”

0

1 IT0 IE0

____ INT0

0

1 IT1 IE1

____ INT1

TF0

TF1

RI TI

IE Register IP Register High Priority

Interrupt

Interrupt Pooling

Sequence

Low Priority Interrupt

Global Disables

Individual Enables

23

Page 29: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

4 – Descrição do Hardware

A descrição a seguir mostra as características construtivas do

microcontrolador 8051.

4.1 – Registradores de função especial (Special Function Register – SFR)

A figura abaixo indica a disposição do registrador de funções especiais (SFR).

Na área de SFR, nem todos os endereços estão ocupados, de forma que

estes endereços não estão implantados no chip. Estes espaços destinam-se a

acessórios que encontramos em outros componentes da família.

Vamos descrever os nomes e funções de cada registrador.

Endereço F8H F9H FAH FBH FCH FDH FEH FFH

Função

Endereço F0H F1H F2H F3H F4H F5H F6H F7H

Função B

Endereço E8H E9H EAH EBH ECH EDH EEH EFH

Função

Endereço E0H E1H E2H E3H E4H E5H E6H E7H

Função ACC

Endereço D8H D9H DAH DBH DCH DDH DEH DFH

Função

Endereço D0H D1H D2H D3H D4H D5H D6H D7H

Função PSW

Endereço C8H C9H CAH CBH CCH CDH CEH CFH

Função T2CON RCP2L RCP2H TL2 TH2

Endereço C0H C1H C2H C3H C4H C5H C6H C7H

Função

Milton Barreiro Junior – “ETE Getúlio Vargas”

24

Page 30: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Endereço B8H B9H BAH BBH BCH BDH BEH BFH

Função IP

Endereço B0H B1H B2H B3H B4H B5H B6H B7H

Função P3

Endereço A8H A9H AAH ABH ACH ADH AEH AFH

Função IE

Endereço A0H A1H A2H A3H A4H A5H A6H A7H

Função P2

Endereço 98H 99H 9AH 9BH 9CH 9DH 9EH 9FH

Função SCON SBUF

Endereço 90H 91H 92H 93H 94H 95H 96H 97H

Função P1

Endereço 88H 89H 8AH 8BH 8CH 8DH 8EH 8FH

Função TCON TMOD TL0 TL1 TH0 TH1

Endereço 80H 81H 82H 83H 84H 85H 86H 87H

Função P0 SP DPL DPH PCON

4.2 – Acumulador (ACC) (Registrador A)

O acumulador é o registrador onde se processam a maioria das operações de

um processador, comumente encontradas num microprocessador de 8 bits.

4.3 – Registrador B (B)

É um registrador utilizado durante as operações de multiplicação e divisão,

podendo ser utilizado como registrador de uso geral em outras operações.

4.4 – Registrador da palavra de controle (PSW)

É chamado de Program Status Word e contém basicamente, os flags de

controle de fluxo do programa. Por isso é utilizado em desvios e saltos condicionais,

Milton Barreiro Junior – “ETE Getúlio Vargas”

25

Page 31: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

sendo também alterado na maioria das instruções. Seu conteúdo é indicado na

figura abaixo.

CY AC F0 RS1 RS0 OV - P

CY – (PSW7): Carry flag, indica “vai um” nas operações aritméticas.

AC – (PSW6): Auxiliary carry flag, auxilia nas operações de adição.

F0 – (PSW5): Flag de uso geral.

RS1 – (PSW4): Seleção do banco de registradores em uso.

RS0 – (PSW3): Seleção do banco de registradores em uso.

OV – (PSW2): Overflow em operações aritméticas.

- – (PSW1): Flag definível pelo usuário.

P – (PSW0): Flag de paridade, indica o número de bits em “1” no

acumulador.

RS0 RS1 Banco Selecionado Endereço

0 0 Banco 0 00H até 07H0 1 Banco 1 08H até 0FH1 0 Banco 2 10H até 17H1 1 Banco 3 18H até 1FH

4.5 – Stack Pointer (SP) e Data Pointer (DPTR)

O Stack Pointer (ponteiro de pilha) é incrementado antes do armazenamento

dos dados em uma instrução PUSH ou CALL. Observe que o Stack pode ser

alocado em qualquer região da memória RAM, o ponteiro é sempre inicializado no

endereço 07H, e o Stack começa no endereço 08H.

O Data Pointer consiste em dois registradores de 8 bits (DPH byte alto, e DPL

byte baixo), que podem ser manipulados tanto como dois registradores separados

de 8 bits como um único de 16 bits.

4.6 – Buffer Serial (SBUF)

Milton Barreiro Junior – “ETE Getúlio Vargas”

26

Page 32: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

O Buffer de dados serial (Serial data BUFfer) consiste de dois registradores

separados, o buffer de transmissão e o buffer de recepção. Quando um dado é

colocado no buffer serial, ele vai diretamente para o buffer de transmissão serial, e

quando ele chega ao buffer de recepção, ele é colocado diretamente no SBUF.

Existe um registrador que controla todas as operações da interface serial

chamado SCON (Serial CONtrol). Seu conteúdo é descrito a seguir.

SM0 SM1 SM2 REN TB8 RB8 TI RI

SM0 – (SCON.7): Modo de operação da interface serial.

SM1 – (SCON.6): Modo de operação da interface serial.

SM2 – (SCON.5): Modo de operação da interface serial.

REN – (SCON.4): Habilitação de recepção.

TB8 – (SCON.3): É o nono bit transmitido (stop bit).

RB8 – (SCON.2): É o nono bit recebido.

TI – (SCON.1): Flag indicando fim de transmissão.

RI – (SCON.0): Flag indicando buffer de recepção cheio.

SM0 SM1 Modo Descrição Frequência

0 0 0 Shift Register Freq. Oscilador /120 1 1 8 bit UART Variável1 0 2 9 bit UART Freq. Oscilador /64 ou 321 1 3 9 bit UART Variável

Milton Barreiro Junior – “ETE Getúlio Vargas”

27

Page 33: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

4.7 – Portos de E/S (P0, P1, P2, P3)

Os portos P0, P1, P2 e P3 são latches dos seus respectivos portos físicos.

Escrevendo um bit “1” no SFR, o pino de saída do porto respectivo irá para “1”

imediatamente. Quando este port for acessado para leitura, o estado do pino externo é

armazenado no registrador correspondente. A estrutura dos port’s é ilustrada abaixo.

Todos os 4 port’s são bidirecionais e consistem num latch (que é o próprio SFR),

num driver de saída e num driver de entrada. Os drivers de saída dos port’s P0 e P2 e

o driver de entrada do port P0, são utilizados durante o acesso à memória externa.

Milton Barreiro Junior – “ETE Getúlio Vargas”

P0.X PIN

D

CL _ Q

Q P0.X Latch

MUX

Read Latc

h

Write To

Latch Read PIN

Addr/Data Control VCC

Int. BUS D

CL _ Q

Q P1.X Latch

Read Latc

h

Write To

Latch Read PIN

Int. BUS

P1.X PIN

VCC

Internal Pull-up

P2.X PIN

D

CL _ Q

Q P2.X Latch

MUX

Read Latc

h

Write To

Latch Read PIN

Address Control VCC

Int. BUS

Internal Pull-up

D

CL _ Q

Q P3.X Latch

Read Latc

h

Write To

Latch

Read PIN

Int. BUS

P3.X PIN

VCC

Internal Pull-up

Alternate Output

Function

Alternate Input

Function

Port 0 Bit

Port 1 Bit

Port 2 Bit

Port 3 Bit

28

Page 34: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

4.8 – Registradores de Timer e de Controle

Os pares de registradores (TH0, TL0, e TH1, TL1) são registradores de

contagem de 16 bits, nos quais programamos os valores de contagem/temporização

dos respectivos contadores.

Existem outros registradores de funções específicas de controle de alguns

módulos do microcontrolador. Vamos descrever cada um desses registradores.

O registrador IP (Interrupt Priority), define um dos dois níveis possíveis para

cada interrupção, de acordo com a descrição abaixo.

- - PT2 PS PT1 PX1 PT0 PX0

PT2 – (IP5): Define nível de prioridade do timer 2 (somente no 8052).

PS – (IP4): Define o nível de prioridade do port serial.

PT1 – (IP3): Define o nível de prioridade do timer 1.

PX1 – (IP2): Define o nível de prioridade da interrupção externa 1.

PT0 – (IP1): Define o nível de prioridade do timer 0.

PX0 – (IP0): Define o nível de prioridade da interrupção externa 0.

Já o registrador IE (Interrupt Enable), permite a habilitação ou desabilitação

individual de cada uma das fontes de interrupção. Através de um bit neste mesmo

registrador podemos atuar sobre todas as interrupções de maneira global.

EA - ET2 ES ET1 EX1 ET0 EX0

EA – (IE7): Desabilita todas as interrupções quando em 0.

ET2 – (IE5): Habilita ou desabilita a interrupção do timer 2 (somente 8052).

ES – (IE4): Habilita ou desabilita a interrupção do port serial.

ET1 – (IE3): Habilita ou desabilita a interrupção do timer 1.

EX1 – (IE2): Habilita ou desabilita a interrupção externa 1.

ET0 – (IE1): Habilita ou desabilita a interrupção do timer 0.

EX0 – (IE0): Habilita ou desabilita a interrupção externa 0.

O registrador TMOD (Timer MODe), permite o controle do modo de operação dos timers existentes no

microcontrolador, bem como a definição quanto à operação como timer ou como contador.

Gate (1) C/T (1) M1 (1) M0 (1) Gate (0) C/T (0) M1 (0) M0 (0)Milton Barreiro Junior – “ETE Getúlio Vargas”

29

Page 35: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Gate: Permite o disparo do timer por hardware (gate=1), ou por

software (gate=0), via registrador TCON.

C/T: Em 0 opera como timer, em 1 opera como contador.

M1: Modo de operação.

M0: Modo de operação.

M1 M0 Modo de Operação

0 0 0 – Timer de 13 bits compatível com o 8048.0 1 1 – Timer/counter de 16 bits.1 0 2 – Timer/counter de 8 bits auto reload.1 1 3 – No timer 0, TL0 define um contador de 8 bits e TH0 é

controlado pelos bits de controle do timer 1. O timer 1 está parado.

A operação dos timers/counters dependem também de um registrador

denominado TCON (Timer CONtrol), utilizado para configurá-lo e monitorar suas

condições de funcionamento. Neste mesmo registrador encontramos os flags de

interrupções externas, os quais estão ativos quando da ocorrência da interrupção.

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TF1 – (TCON.7): Flag de overflow do timer 1. Seta quando overflow.

TR1 – (TCON.6): Bit de disparo do timer 1.

TF0 – (TCON.5): Flag de overflow do timer 0. Seta quando overflow.

TR0 – (TCON.4): Bit de disparo do timer 0.

IE1 – (TCON.3): Flag da interrupção externa 1.

IT1 – (TCON.2): Seleciona o tipo de interrupção 1 (borda ou nível).

IE0 – (TCON.1): Flag da interrupção externa 0.

IT0 – (TCON.0): Seleciona o tipo de interrupção 0 (borda ou nível).

O registrador de controle da interface serial SCON (Serial CONtrol), permite a

programação das características funcionais da interface serial do microcontrolador.

Normalmente devemos utilizar este registrador para definir que tipo de UART vamos

utilizar, e verificar o status da transmissão pelos bits de controle, presentes neste

mesmo registrador.

SM0 SM1 SM2 REN TB8 RB8 TI RI

SM0 – (SCON.7): Modo de operação do port serial.Milton Barreiro Junior – “ETE Getúlio Vargas”

30

Page 36: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

SM1 – (SCON.6): Modo de operação do port serial.

SM2 – (SCON.5): Usado nos modos 2 e 3 para multiprocessamento.

REN – (SCON.4): Habilita ou desabilita a recepção definido por soft.

TB8 – (SCON.3): É o nono bit transmitido (stop bit) definido por soft.

RB8 – (SCON.2): É o stop bit recebido do hardware para sinalização.

TI – (SCON.1): Setado pelo hardware no fim da transmissão.

RI – (SCON.0): Setado pelo hardware no fim da recepção.

SM0 SM1 Modo Descrição Frequência

0 0 0 Shift Register Freq. Oscilador /120 1 1 8 bit UART Variável1 0 2 9 bit UART Freq. Oscilador /64 ou

321 1 3 9 bit UART Variável

Existe ainda um registrador para controle genérico das funções de alimentação

do microcontrolador. O registrador PCON (Power CONtrol) é bastante utilizado quando

optamos pela utilização da tecnologia CHMOS (80C51 por exemplo), para garantir

baixo consumo em circuitos alimentados por bateria, ou ainda que permaneçam um

grande período em “stand-by”.

SMOD - - - GF1 GF0 PD IDL

SMOD: Dobra o baud rate quando utilizamos o timer 1.

GF1: Flag de uso geral.

GF0: Flag de uso geral.

PD: Ativa o modo de operação Power Down (só nos CHMOS).

IDL: Ativa o modo de operação IDLE (só nos CHMOS).

4.9 – Estrutura e operação dos ports de I/O

Os quatro ports presentes no 8051 são bidirecionais, consistindo cada um de um

latch (que é o próprio registrador Px no SFR), em um driver de saída e em um buffer de

entrada. Para acessar a memória externa, utilizamos os ports P0 e P2, sendo que o Milton Barreiro Junior – “ETE Getúlio Vargas”

31

Page 37: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

port P0 leva os dados e endereços multiplexados, enquanto que o port P2 leva à

memória o restante dos endereços. Fica claro que quando utilizamos os

microcontroladores sem memória interna (80C31 por exemplo) o port P2 tem seu uso

restrito para endereçamento. O port P3 é um port multifuncional, ou seja, seus pinos

não são apenas pinos de entrada e saída, mas tem diversas funções específicas, que

estão listadas abaixo:

P3.0 – RXD – entrada do port serial

P3.1 – TXD – saída do port serial

P3.2 – INT0 – entrada da interrupção externa 0

P3.3 – INT1 – entrada da interrupção externa 1

P3.4 – T0 – entrada do Timer/counter 0

P3.5 – T1 – entrada do Timer/counter 1

P3.6 – WR – sinal de escrita para memória externa

P3.7 – RD – sinal de leitura para memória externa

Os portos 1, 2 e 3 são providos de resistores pull-up internos, enquanto que o

port 0 apresenta saídas em open drain. Qualquer uma das linhas pode ser usada

independentemente como entrada ou saída, uma vez que os ports são endereçáveis

por bit (bit addressable). Para utilizarmos os ports como entradas, devemos colocar

nível lógico “1” no latch de entrada, para que o pino fique em nível alto pelo resistor de

pull-up, mas possa ser colocado em nível baixo pela ação de um sinal externo.

No port 0, não existe o resistor de pull-up interno, de forma que torna-se

obrigatório o uso de pull-up’s externos. Quando ocorre o endereçamento, a estrutura

do port permite que sejam colocados “1’s” ou “0’s” conforme a necessidade. A

estrutura dos ports está representada a seguir, ilustrando o funcionamento dos

mesmos.

Para escrever um dado em um dispositivo através de um dos ports, devemos

simplesmente mover o dado para o registrador respectivo no SFR. Devemos lembrar

sempre que os valores de corrente fornecidos pelos port’s são da ordem de

miliampères, de forma que precisamos de drivers de corrente na maioria dos casos.

Os resistores pull-up internos fornecem baixos valores de corrente e na maioria dos

projetos determinamos a ativação dos dispositivos de saída em níveis baixos, pois

neste caso a corrente pode ser significativamente maior.

Milton Barreiro Junior – “ETE Getúlio Vargas”

32

Page 38: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Os buffers de saída dos ports 1, 2 e 3 fornecem corrente suficiente para 4

cargas TTL cada um, enquanto que o port 0 pode fornecer corrente para até 8 cargas

TTL.

Algumas instruções de leitura no port, realizam uma leitura no latch (registrador),

enquanto outras realizam a leitura diretamente no pino do CI. As instruções que

realizam a leitura no latch, lêem este valor, processam, e depois se for necessário

rescrevem-no no latch. São chamadas de “read-modify-write”, e estão listadas a

seguir:

ANL – “E” lógico

ORL – “Ou” lógico

XRL – “Ou Exclusivo” lógico

JBC – Jump se bit =1 e limpa o bit

CPL – Complementa o bit

INC – Incremento

DEC – Decremento

DJNZ – Decrementa e salta se não zero

MOV, Px,y, C – Move carry bit para o bit y do port x

CLR Px,y – Limpa bit y do port x

SETB Px,y – Seta bit y do port x

A razão pela qual as instruções acima são direcionadas preferencialmente ao

latch é evitar uma má interpretação do nível lógico no pino. Um exemplo disso é

quando utilizamos transistores na saída dos microcontroladores, e escrevemos nível “1”

na base do mesmo. A tensão neste pino pode ser confundida com nível “0” facilmente,

enquanto que se a mesma for lida no latch, representará o valor real do sinal no pino.

Milton Barreiro Junior – “ETE Getúlio Vargas”

33

Page 39: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

4.10 – Acesso à memória externa

Milton Barreiro Junior – “ETE Getúlio Vargas”

P0.X PIN

D

CL _ Q

Q P0.X Latch

MUX

Read Latch

Write To Latch

Read PIN

Addr/Data Control VCC

Int. BUS D

CL _ Q

Q P1.X Latch

Read Latch

Write To Latch

Read PIN

Int. BUS

P1.X PIN

VCC

Internal Pull-up

P2.X PIN

D

CL _ Q

Q P2.X Latch

MUX

Read Latch

Write To Latch

Read PIN

Address Control VCC

Int. BUS

Internal Pull-up

D

CL _ Q

Q P3.X Latch

Read Latch

Write To Latch

Read PIN

Int. BUS

P3.X PIN

VCC

Internal Pull-up

Alternate Output Function

Alternate Input Function

Port 0 Bit

Port 1 Bit

Port 2 Bit

Port 3 Bit

34

Page 40: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Podemos ter dois tipos de acesso à memória externa, acesso à memória de

programa externa (ROM, EPROM) e acesso à memória de dados externa (RAM).

Acessos à ROM externa utilizam o sinal PSEN como strobe de leitura, enquanto que

utilizamos o sinal RD ou WR como strobe quando acessamos a memória RAM.

Buscas à memória externa de programa utilizam sempre endereços de 16 bits, e

os acessos à memória de dados podem utilizar 8 ou 16 bits de endereço.

Quando utilizamos acessos de 16 bits, o byte alto de endereço é exibido pelo

porto 2, que fica indisponível como port de I/O genérico. Quando utilizamos acessos

em 8 bits, o valor do port 2 existente no latch do seu respectivo SFR é mantido de

forma que podemos implementar um sistema de gerenciamento com facilidade.

Em qualquer dos casos, o port 0 contém o byte baixo de endereços multiplexado

com os dados, e nesta função utilizamos um dos FETs internos com pull-up de forma

que não se orna necessária a adição de pull-up externo (se forem realizadas apenas

operações de busca na memória, o que não é muito comum). O sinal de ALE deve ser

utilizado para capturar o endereço válido no latch externo.

Durante qualquer acesso à memória externa, é escrito o byte 0FFH no latch do

port 0 (SFR), destruindo a informação presente neste port, portanto, devemos salvar

qualquer informação útil existente no port 0 antes de acessar a memória externa.

A memória de programa externa é acessada sempre em duas condições:

quando o sinal EA estiver ativo (nível baixo), ou o contador de programa PC apresentar

um número maior do que 0FFFH.

4.11 – Temporizadores e Contadores

O microcontrolador 8051 tem 2 temporizadores/contadores de 16 bits, timer 0 e

timer 1. Os dois podem ser programados para operar como temporizadores ou

contadores independentemente.

Na função de timer, o registrador é incrementado a cada ciclo de máquina, de

forma que podemos imaginar o timer como um “contador de ciclos de máquina”. Como

um ciclo de máquina consiste de 12 períodos do oscilador, podemos calcular facilmente

a frequência do nosso timer.

Na função de contador, o registrador é incrementado a cada transição de 1 para

0 no correspondente pino de entrada. Desta forma, cada leitura toma o tempo de dois

Milton Barreiro Junior – “ETE Getúlio Vargas”

35

Page 41: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

ciclos de máquina, limitando a frequência máxima de amostragem a 1/24 da frequência

de clock.

4.12 – Modos de operação

Podemos ter quatro modos distintos de operação dos timer’s selecionados pelo

registrador TMOD.

Modo 0:

No modo 0, o timer é um contador de 8 bits com um divisor por 32, executando

na realidade, um timer de 13 bits, compatível com o timer do 8048, como indicado na

figura abaixo:

Neste modo, quando o contador passa de todos os bits em 0, o flag respectivo

TFx é setado no registrador TCON. O disparo do timer é feito por outro bit no reg-

istrador TCON, o bit TRx (Timer Run). O bit Gate, presente no registrador TMOD per-

mite o uso de uma interrupção conjuntamente com o timer. Devemos lembrar sempre

de programar TMOD antes de programar TCON para disparo do timer.

O registrador de 13 bits consiste nos 8 bits de THx e nos 5 bits mais baixos de

TLx, sendo os 3 bits restantes do registrador TLx ignorados.

Modo 1:

No modo 1, os timer se comportam da mesma forma que no modo 0, exceto

pelo fato de que os registradores agora utilizam a totalidade dos 16 bits disponíveis

para cada um dos contadores.

Modo 2:

Milton Barreiro Junior – “ETE Getúlio Vargas”

12 Osc

TL1 (5 bits)

TH1 (8 bits)

TF1 Interrupt

Control

C/T = 1

C/T = 0

T1 Pin

TR1

Gate ___ Int1 Pin

36

Page 42: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

O modo 2 configura o registrador do timer como um contador de 8 bits (TLx) com

recarga automática, como mostrado na figura abaixo:

Quando ocorre o overflow de TLx, o flag TLx é setado e o conteúdo de TLx é

recarregado com o valor de THx, que deve ser anteriormente carregado por software.

O valor de THx permanece inalterado.

Modo 3:

O modo 3 deve ser utilizado quando necessitamos de um outro contador no

8051. Quando ativamos o modo 3, estabelecemos dois contadores separados, um

para o THx e outro para o TLx. O timer procedente de TLx utiliza para seu controle, os

bits C/T, Gate, TR0, INTx e TFx, relativos ao timer 0, enquanto que o timer relativo ao

registrador THx, utiliza os bits de controle relativos ao timer 1. A figura abaixo ilustra a

lógica de atuação deste modo.

4.13 – Interface Serial

Milton Barreiro Junior – “ETE Getúlio Vargas”

12 Osc

TL1 (8 bits)

TF1 Interrupt

Control

C/T = 1

C/T = 0

T1 Pin

TR1

Gate ___ Int0 Pin

TH1 (8 bits)

Reload

12 Osc

TL0 (8 bits)

TF0 Interrupt

Control

C/T = 1

C/T = 0

T0 Pin

TR0

Gate ___ Int0 Pin

TH0 (8 bits)

TF1 Interrupt

Control

1/12 Freq. Osc

1/12 Freq. Osc

1/12 Freq. Osc

TR1

37

Page 43: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

A interface serial presente no microcontrolador é do tipo full-duplex, pode

transmitir e receber dados simultaneamente, com buffer de recepção, ou seja, pode

começar a receber um segundo byte antes de ler o primeiro byte do buffer. Os buffers

de transmissão e recepção são comandados pelo registrador SBUF no SFR. Escrita

no SBUF carrega o buffer de transmissão, enquanto que leituras no SBUF acessam um

registrador de recepção separado fisicamente.

A interface serial pode operar em 4 modos distintos, e em qualquer dos modos a

transmissão é iniciada por qualquer instrução que utilize o SBUF como registrador de

destino. A recepção se dá quando chega um dado no SBUF.

4.14 – Modos de Operação

Podemos operar com a interface serial interna do microcontrolador, de quatro

modos diferentes:

Modo 0:

Neste modo, os dados manipulados entram pelo pino RXD, enquanto que o pino

TXD é utilizado como saída. Temos então a transmissão de 8 bits, sendo que o

primeiro bit é o LSB, e a frequência de baud rate é fixa em 1/12 da frequência do

oscilador.

A transmissão é iniciada por qualquer instrução que utilize o SBUF como

registrador de destino. Imediatamente após esta instrução, é colocado um bit “1” na

nona posição do shift register e o bloco de controle de transmissão começa a

transmissão. Os bits de dados são deslocados para a direita e são colocados zeros

nas posições desocupadas, até que se chegue no MSB. Esta condição avisa para o

bloco de controle que deve ser efetuado um deslocamento, e em seguida é setada a

flag TI. Todo este processo ocorre no tempo de 10 ciclos de máquina.

A recepção começa quando a condição REN é igual a “1” e o flag RI é igual a

“0”. Os dados recebidos são deslocados e após a chegada do último bit, o flag de

recepção RI é setado, indicando que existem dados no buffer de recepção. A figura

abaixo ilustra o processo.

Milton Barreiro Junior – “ETE Getúlio Vargas”

38

Page 44: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Milton Barreiro Junior – “ETE Getúlio Vargas”

Shift Clock

8051 Internal BUS

Write to SBUF

RXD P3.0 ALT

Output Function

TXD P3.1 ALT

Output Function

RXD P3.0 ALT

Input Function

Serial Port Interrupt

Zero Detector

Load SBUF

Read SBUF

SBUF

Input Shift Register

Shift

0 1 1 1 1 1 1 1 Shift

Receive RI RX Clock

Start RX Control

Shift

Send TX Clock

Start

TI

TX Control S6

REN __ RI

SBUF

Shift

D CL

Q S

8051 Internal BUS

TB8

39

Page 45: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Modo 1:

Dez bits são recebidos pelo pino RXD, ou transmitidos pelo pino TXD; um start

bit (0), 8 bits de dados (LSB primeiro), e um stop bit. Na recepção, o stop bit vai para a

posição RB8 no registrador SCON, e o baud rate é determinado pelo timer 1, na

maioria dos casos (podem ser utilizados também o timer 2 ou ambos no 8052).

A transmissão ocorre da mesma forma que no modo anterior, exceto ao fato de

que não existe uma linha de clock sincronizando os dois circuitos. Este sincronismo é

função de bits de start e stop, presentes em cada transmissão. Após a transmissão do

último bit (stop bit) o flag TI é setado no registrador SCON.

A recepção é iniciada com a detecção da transição de 1 para 0 na linha RXD,

indicando a presença do start bit na linha. Para esta função, a linha RXD é amostrada

a uma taxa de 16 vezes a frequência determinada para o baud rate. Após esta

detecção, o sinal começa a ser deslocado a partir da frequência gerada pelo timer 1.

Quando for recebido o último bit (stop bit), este é colocado em RB8, e o flag TI é

setado. A figura a seguir ilustra o diagrama de sinais da recepção do modo 1.

Milton Barreiro Junior – “ETE Getúlio Vargas”

ALE

Write to SBUF

Send S6P2

Shift

RXD (Data In)

D0 D1 D2 D3 D4 D5 D6 D7

TXD (Shift Clock)

S3P1 S6P1

TI

Write to SCON (Clear RI)

RI

Receive

Shift

TXD (Shift Clock)

D0 D1 D2 D3 D4 D5 D6 D7

S5P2

Receive

Transmit

10 Ciclos de Máquina

40

Page 46: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Milton Barreiro Junior – “ETE Getúlio Vargas”

Input Shift Register (9 bits)

1 to 0 Transition Detector

8051 Internal BUS

Write to SBUF

Zero Detector

Load SBUF

Read SBUF

SBUF

Shift

Shift

Load SBUF RX Clock

Start RX Control

Shift

____ Send TX Clock

Start

Serial Port Interrupt

RI

TI

TX Control

SBUF

Shift

D CL

Q S

8051 Internal BUS

Data

Timer 2 Overflow

Timer 1 Overflow

Bit Detector

TB8

2

SMOD

0 1

0 1

0 1

TCLK

RCLK 16

16

TXD

1FFH

Sample

RXD

____ Send

Write to SBUF

S1P1

TI

Shift

D0 D1 D2 D3 D4 D5 D6 D7

D0 D1 D2 D3 D4 D5 D6 D7

Transm

it R

eceive

TX Clock

Data

TXD Start bit

Stop bit

RX Clock +16 Reset

RXD Start bit Stop bit

Bit detector sample times

Shift

RI

41

Page 47: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Modos 2 e 3:

Nestes dois modos são transmitidos 11 bits pelo pino TXD, ou recebemos 11

bits através do pino RXD: um start bit “0”, 8 bits de dados (LSB primeiro), um nono bit

programável e um stop bit “1”. A diferença entre os modos 2 e 3 é que no modo 3 a

frequência de baud rate é variável, enquanto que no modo 2 a frequência é fixa em

1/32 ou 1/64 da frequência do oscilador. Os processos de transmissão e recepção dos

dados são semelhantes aos outros modos anteriormente mostrados. A figura abaixo

ilustra o processo.

Milton Barreiro Junior – “ETE Getúlio Vargas”

Input Shift Register (9 bits)

1 to 0 Transition Detector

8051 Internal BUS

Write to SBUF

Zero Detector

Load SBUF

Read SBUF

SBUF

Shift

Shift

Load SBUF RX Clock

Start RX Control

Shift

____ Send TX Clock

Start

Serial Port Interrupt

RI

TI

TX Control

SBUF

Shift

D CL

Q S

8051 Internal BUS

Data

Bit Detector

TB8

16

16

TXD

1FFH

Sample

RXD

Stop bit gen

2

Smod = 0

Smod = 1

(Smod is PCON.7)

Mode 2

Phase 2 Clock (1/2 freq. osc.)

42

Page 48: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

4. 15 – Registrador de Controle

O controle da interface serial é feito pelo já descrito registrador SCON, com a

atuação do registrador PCON, (utilizando o bit SMOD). Por este registrador podemos

monitorar o funcionamento da interface serial pelos bits TI, RI, TB8 e RB8, que indicam

o estado da interface serial nas operações de transmissão ou recepção.

4.16 – Baud Rates

A taxa de transmissão (baud rate), tem seus valores definidos de acordo com o

modo de operação estabelecido para o interface serial. No modo 0, o baud rate é fixo e

tem seu valor estabelecido como sendo 1/12 da frequência do oscilador.

No modo 2, a frequência pode ter dois valores distintos, dependendo do valor do

bit SMOD no registrador PCON. Se SMOD for igual a 0, o baud rate é igual a 1/64 da

frequência do oscilador, se o SMOD for igual a 1, o baud rate passa a ser 1/32 da

frequência do oscilador.

Quando utilizamos o timer 1 como gerador de baud rate, o baud rate nos modos

1 e 3 tem seu valor determinado pela taxa de overflow do próprio timer 1, obedecendo

a fórmula:

Baud rate = [(2Smod)/32] x (timer 1 overflow rate)Milton Barreiro Junior – “ETE Getúlio Vargas”

____ Send

Write to SBUF

S1P1

TI

Shift

D0 D1 D2 D3 D4 D5 D6 D7

Transm

it TX Clock

Data

TXD Start bit

Stop bit

D0 D1 D2 D3 D4 D5 D6 D7

Receive

RX Clock +16 Reset

RXD Start bit Stop bit Bit detector

sample times

Shift

RI

Stop bit gen

TB8

RB87

43

Page 49: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

A interrupção do timer 1 deve ser desabilitada neste caso para evitar sinalização

indevida. O timer pode ser configurado para operação como timer ou como contador

em qualquer um dos três modos. O modo mais comumente utilizado é o modo de

operação como timer de auto-recarga. A fórmula para se obter diretamente a

frequência do baud rate é a seguinte:

Baud Rate = {[(2Smod)/32] x [Fosc./[12 x (256 - TH1)]]}

A tabela abaixo indica os valores mais utilizados a partir de uma dada frequência

de cristal, e os valores de recarga dos timers para facilitar a programação.

Baud Rate Freq. Osc. SMOD Modo Valor de Recarga

19,2K 11,059 MHz

1 2 FDH

9,6K 11,059 MHz

0 2 FDH

4,8K 11,059 MHz

0 2 FAH

2,4K 11,059 MHz

0 2 F4H

1,2K 11,059 MHz

0 2 E8H

137,5 11,968 MHz

0 2 1DH

110 6 MHz 0 2 72H

110 12 MHz 0 1 FEEBH

Devemos observar os valores de máxima frequência para cada um dos modos,

e respeitá-los, pois o uso de frequências acima destes valores acarretariam perdas de

informação na comunicação serial. A tabela abaixo indica estas frequências:

Modo Frequência Máxima

0 1 MHz

1 e 3 62,5 KHz

2 375 KHz

4.17 – Interrupções

Os microcontroladores da família 8051 são providos de 5 fontes de interrupção,

como mostradas na figura a seguir. As interrupções externa INT0 e INT1 podem ser

ativadas por nível lógico ou por transição (borda), dependendo para isto, dos bits IT0 e

Milton Barreiro Junior – “ETE Getúlio Vargas”

44

Page 50: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

IT1 no registrador TCON. Os flags que indicam a presença da interrupção nos pinos

externos são IE0 e IE1 no mesmo registrador TCON. Quando uma interrupção externa

é recebida, o respectivo flag é limpo quando a rotina de serviço é vetorada para o

endereço da interrupção, somente se a interrupção for do tipo ativa por transição. Se a

interrupção for ativa por nível , o dispositivo externo que solicitou a interrupção se

encarrega do seu controle.

As interrupções dos timers são geradas quando houver overflow dos mesmos, e

são reestabelecidas ao seu estado inativo por hardware quando a interrupção já se en-

contrar devidamente vetorada.

A interrupção da interface serial é gerada por um OU lógico entre os flags de RI

e TI, e estes flags não são limpos após o vetoramento da interrupção, devendo ser feito

este procedimento por software, após o recebimento ou transmissão do dado.

Todos os bits que geram interrupção podem ser habilitados ou não pelo reg-

istrador de habilitação de interrupção IE.

Os vetores de endereço das interrupções, ou seja, os endereços para qual o PC

é direcionado quando ocorre uma interrupção são fixos e seus valores são indicados a

seguir:

Milton Barreiro Junior – “ETE Getúlio Vargas”

0

1 IT0 IE0

____ INT0

0

1 IT1 IE1

____ INT1

TF0

TF1

RI TI

TF2 EXF2 8052 only

Interrupt Sources

45

Page 51: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Fonte Endereço

IE0 0003H

TF0 000BH

IE1 0013H

TF1 001BH

Serial 0023H

4.18 – Estrutura de prioridades

Cada uma das fontes de interrupção pode ser individualmente programada para

atender a um dos dois possíveis níveis de interrupção, mediante um bit específico no

registrador IP. Colocando um valor 0 no bit correspondente, definimos esta interrupção

como de menor prioridade, e vice-versa.

Quando temos duas interrupções de mesma prioridade, no mesmo instante, elas

serão atendidas pelo pool select que é realizado na seguinte ordem:

IE0 – TF0 – IE1 – TF1 – Serial

4.19 – Interrupções externas

As fontes externas de interrupção podem ser programadas para serem ativadas

por nível ou por borda, desde que os pinos de interrupção externa sejam amostrados

uma vez a cada ciclo de máquina, a entrada de interrupção deve manter-se estável por

pelo menos 12 períodos do oscilador para que a interrupção seja reconhecida. No

caso da interrupção ser ativa por transição, deve-se manter em um nível por um ciclo

de máquina e mudar para outro nível, mantendo-se nele por outro ciclo de máquina.

Após o reconhecimento, o flag IEx é setado no registrador TCON sendo

automaticamente resetado pela CPU quando a rotina de serviço da interrupção é

chamada.

Se a interrupção é ativa por nível, este nível deve ser mantido pelo tempo

necessário para que seja reconhecida a interrupção, e depois deve ser desativada

antes que a rotina de tratamento da interrupção se complete, para evitar que outro

pedido de interrupção seja gerado.

Milton Barreiro Junior – “ETE Getúlio Vargas”

46

Page 52: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

4.20 – Circuitos de Controle

Existem outros circuitos que devem ser considerados quando da elaboração do

hardware de um microcontrolador. Além dos já citados circuitos de decodificação de

dados/endereços, utilizado para acesso a memória externa, pull-ups e buffers nas

linhas de dados e endereços, alguns merecem especial cuidado e atenção na

construção.

4.21 – Circuito de Reset

A entrada do reset se dá pelo pino RST, quando este é mantido em nível alto por

pelo menos dois ciclos de máquina, após o circuito do oscilador começar a funcionar.

Logo após o reset, os valores colocados nos registradores são os indicados abaixo:

Fonte Endereço

PC 0000H

Acc 00H

B 00H

PSW 00H

SP 07H

DPTR 0000H

P0-P3 FFH

IP XXX00000b

IE 0XX00000b

TMOD 00H

TCON 00H

TH0 00H

TL0 00H

TH1 00H

TL1 00H

SCON 00H

SBUF Indeterminado

PCON (HMOS) 0XXXXXXXb

PCON (CHMOS)

0XXX0000b

Normalmente utilizamos um circuito conhecido como Power On Reset, para que

o microcontrolador seja inicializado ao ligarmos o equipamento. O circuito abaixo

ilustra um exemplo típico de circuito para uma tensão de 5Vcc, e frequência de 10MHz.

Devemos notar que para os circuitos CHMOS, devido à características construtivas do

Milton Barreiro Junior – “ETE Getúlio Vargas”

47

Page 53: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

dispositivo, não se faz necessário o uso do resistor externo, simplificando ainda mais o

circuito.

4.22 – Circuito de Clock

Podemos utilizar o oscilador interno ao microcontrolador como indicado

anteriormente neste mesmo manual. Devemos utilizar um cristal com as seguintes

características:

Co (Shunt Capacitance) – máx. 7pF

Cl (Load Capacitance) – 30 pF (10%)

Potência – 1mW

A resistência equivalente em série depende da frequência do cristal, tendo seus

valores práticos demarcados no gráfico a seguir:

Milton Barreiro Junior – “ETE Getúlio Vargas”

8K2

10F

Vcc

8K2 Rst

Vss

8051

48

Page 54: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

4.23 – Operação passo a passo

Este modo de operação é muito útil durante a construção de programas, e

desenvolvimento do hardware, para solucionar eventuais problemas surgidos no

decorrer destes processos.

Podemos entender esta operação, lembrando o funcionamento da já conhecida

estrutura das interrupções do microcontrolador. Quando uma interrupção está em

progresso, outra interrupção de mesmo nível não pode ser ativada simultaneamente.

O fato é que a próxima interrupção só ocorre após a execução de pelo menos uma

instrução do programa interrompido, de forma que, colocando a interrupção INT0 (por

exemplo) em nível baixo e acrescentando algumas linhas de programa nas rotinas de

tratamento da interrupção. As linhas são as seguintes:

JNB P3.2,$ ; aguarda até que a interrupção vá para alto

JB P3.2,$ ; aguarda até que a interrupção vá para baixo

RETI ; volta e executa uma instrução

Desta forma, quando a INT0 é ativada em nível baixo, a CPU vai para a rotina

de tratamento da interrupção e fica até que o sinal INT0 pulse (de baixo para alto e

novamente para baixo). Desta forma ela executa o comando de retorno da interrupção,

executa uma instrução e imediatamente retorna a rotina de interrupção, permanecendo

nesta até que o sinal INT0 pulse novamente.

Esta é uma forma simples de acompanhar a execução das rotinas de um

programa passo a passo, mas normalmente vamos executar estas rotinas através de

um software de simulação apropriado, onde serão detectadas as principais falhas na

programação.

Milton Barreiro Junior – “ETE Getúlio Vargas”

49

Page 55: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

4.24 – Descrição da pinagem

A figura abaixo ilustra a pinagem do controlador 8051 nas duas formas de

encapsulamento mais comuns:

Milton Barreiro Junior – “ETE Getúlio Vargas”

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

40

39

38

37

36

35

34

33

32

31

30

29

28

27

26

25

24

23

22

21

** T2 P1.0

** T2EX P1.1 P1.2

P1.3

P1.4

P1.5

P1.6

P1.7

Rst

RXD P3.0

TXD P3.1

T0 P3.4

T1 P3.5

XTAL2

XTAL1

Vss

Vcc

P0.0 AD0

P0.1 AD1

P0.2 AD2

P0.3 AD3

P0.4 AD4

P0.5 AD5

P0.6 AD6

P0.7 AD7

P2.7 A15

P2.6 A14

P2.5 A13

P2.4 A12

P2.3 A11

P2.2 A10

P2.1 A9

P2.0 A8

EA / Vpp*

ALE / Prog* PSE

N INT0 P3.2

INT1 P3.3

WR P3.6

RD P3.7

9

10

11

P1.7

Rst

RXD P3.0

13

14

15

16

17

TXD P3.1

T0 P3.4

T1 P3.5

INT0 P3.2

INT1 P3.3

7

8

P1.5

P1.6

12 NC P

1.4

6 5 4 3 2 1 44

43

42

41

40

P1.

3

P1.

2

P1.

1 T

2EX

**

P

1.0

T2

**

NC

Vcc

P0.

0 A

D0

P0.

1 A

D1

P0.

2 A

D2

P0.

3 A

D3

39

38

37

36

35

P0.4 AD4

P0.5 AD5

P0.6 AD6

P0.7 AD7

EA / Vpp*

33

32

31

30

29

P2.7 A15

P2.6 A14

P2.5 A13

ALE / Prog* PSE

N

34 NC 18

19

20

21

22

23

24

25

26

27

28

XT

AL2

XT

AL1

Vss

NC

P2.

0 A

8

P2.

1 A

9

P2.

2 A

10

P2.

3 A

11

P2.

4 A

12

RD

P3.

7

WR

P3.

6

Index Corner

Pin (DIP)

Pad (LCC, PLCC)

* EPROM Only ** 8052/8032 Only

50

Page 56: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

A descrição da pinagem deste componente, no invólucro DIP é dada abaixo:

Pino Descrição

1 Port 1, Dado 0

2 Port 1, Dado 1

3 Port 1, Dado 2

4 Port 1, Dado 3

5 Port 1, Dado 4

6 Port 1, Dado 5

7 Port 1, Dado 6

8 Port 1, Dado 7

9 Entrada de Reset

10 Port 3, Dado 0 (RXD da interface serial interna)

11 Port 3, Dado 1 (TXD da interface serial interna)

12 Port 3, Dado 2 (Interrupção externa INT0)

13 Port 3, Dado 3 (Interrupção externa INT1)

14 Port 3, Dado 4 (Entrada do Timer 0)

15 Port 3, Dado 5 (Entrada do Timer 1)

16 Port 3, Dado 6 (Sinal de escrita para memória exemploterna)

17 Port 3, Dado 7 (Sinal de leitura para memória externa)

18 Entrada do cristal do oscilador

19 Entrada do cristal do oscilador

20 Alimentação Terra

21 Port 2, Bit0 (Endereço A8)

22 Port 2, Bit1 (Endereço A9)

23 Port 2, Bit2 (Endereço A10)

24 Port 2, Bit3 (Endereço A11)

25 Port 2, Bit4 (Endereço A12)

26 Port 2, Bit5 (Endereço A13)

27 Port 2, Bit6 (Endereço A14)

28 Port 2, Bit7 (Endereço A15)

29 Sinal PSEN (Program Search Enable)

30 Sinal ALE (Address Latch Enable) *Prog no 8751

31 Sinal EA (External Access) *Tensão de Prog no 8751

32 Port 0, Bit 7 (Dado 7)

33 Port 0, Bit 6 (Dado 6)

34 Port 0, Bit 5 (Dado 5)

35 Port 0, Bit 4 (Dado 4)

36 Port 0, Bit 3 (Dado 3)

37 Port 0, Bit 2 (Dado 2)

38 Port 0, Bit 1 (Dado 1)

39 Port 0, Bit 0 (Dado 0)

40 Alimentação de +5V

Milton Barreiro Junior – “ETE Getúlio Vargas”

51

Page 57: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

5 – PROGRAMAÇÃO E SIMULAÇÃO

5.1 – “COMPILAÇÃO” E “LINKAGEM”

Um programa escrito em linguagem assembly (PROGRAMA FONTE), não pode

ser diretamente processado pelo microcontrolador do sistema, devendo primeiramente

ser traduzido para a sua linguagem de máquina, com o uso de tabelas ou por meio de

um programa destinado para tal tarefa chamado de COMPILADOR, que fornece então

como saída o PROGRAMA OBJETO.

Define-se COMPILADOR como um programa aplicativo que transforma um

arquivo constituído por códigos ASCII (PROGRAMA FONTE: obrigatoriamente com

extensão “.ASM”), gerado normalmente por um editor de textos, em um arquivo binário

que contém os bytes correspondentes às instruções (códigos de máquina) do

microcontrolador.

Como resultado da compilação são criados dois arquivos:

- Arquivo de mesmo nome, porém com a extensão “.OBJ” (PROGRAMA

OBJETO).

- Arquivo de mesmo nome, porém com a extensão “.LIST”, que corresponde a

um arquivo texto que mostra o resultado da compilação, contendo para cada linha de

programa, o código de máquina correspondente à instrução, sendo muito útil na

depuração de erros de compilação.

A “linkagem” tem a finalidade de reunir, em um único arquivo, todos as rotinas

escrita em um ou vários arquivos diferentes.

Após a “linkagem” são gerados dois arquivos:

- Arquivo de mesmo nome, sem extensão, usado pelo programa simulador.

- Arquivo de mesmo nome, porém com a extensão “.HEX”, usado por

gravadores de memórias e microcontroladores e também pelo programa simulador.

PROGRAMA COMPILADOR PROGRAMA LINKER PROGRAMA

FONTE OBJETO EXECUTÁVEL

.ASM .OBJ .HEX

Milton Barreiro Junior – “ETE Getúlio Vargas”

52

Page 58: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

O compilador, o “Linker” e o Simulador usados no laboratório são produzidos

pela AVOCET.

5.2 – DIRETIVAS (ou PSEUDO-INSTRUÇÕES) de Compilação

Além das instruções pertencentes ao microcontrolador em questão, a linguagem

assembly possui ainda algumas instruções especiais, pseudo-instruções ou diretivas,

que são usadas apenas para a estruturação do programa.

Estas instruções especiais, que não são traduzidas para o código de máquina

por não pertencerem ao conjunto de instruções do microcontrolador escolhido,

possuem apenas funções especiais no programa como: definir símbolos, estabelecer o

endereço inicial do programa, reservar área de memória etc, não sendo, portanto,

processadas.

PSEUDO-INSTRUÇÕES MAIS USADAS

ORG (ORIGIN)

Formato: Pseudo-instrução operando

ORG endereço

Função:

Usado para o endereço inicial de memória, no qual o programa ou um trecho de

programa será armazenado.

Exemplo: ORG 0100H

Assim o programa objeto será carregado na memória a partir do endereço

0100H

DB (DEFINE BYTE)

Formato: Pseudo-instrução operando

DB byte

Função:

Milton Barreiro Junior – “ETE Getúlio Vargas”

53

Page 59: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

O byte do operando é carregado diretamente na posição de memória escolhida

pelo ORG.

Exemplo:

ORG 0050H

DB 3FH

DB 1AH

Assim os bytes 3FH e 1AH foram armazenados nas posições de memória 0050H

e 0051H respectivamente.

END

Formato: Pseudo-instrução

END

Função:

Indica o final do programa.

5.3 – USO DO COMPILADOR E DO LINKER (PASSO A PASSO)

OBS: Comandos digitados na linha de ”prompt do DOS”.

1. Com o “NE” ou “EDIT” escrever um programa em assembly nomeado

obrigatoriamente com a extensão “.ASM” (criando assim programa fonte).

OBS: No editor de textos deve-se obrigatoriamente reservar as colunas de “1” a

“6” para os “labels” ou “tags” que representam os endereços do programa, de entrada

de “loops”, chamada de sub-rotinas etc.

2. Com o “X8051” (compilador) obter os arquivos com extensão “.OBJ”

(programa objeto) e “.LST” (listagem) da seguinte forma:

X8051 [ENTER]Listing Destination (..........): D [ENTER]Generate cross reference [ENTER]Input file name:.........nome do arquivo.ASM [ENTER]Milton Barreiro Junior – “ETE Getúlio Vargas”

54

Page 60: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Output file name: ...... nome do arquivo [ENTER]

3. Com o “LINK” ligar o arquivo “.OBJ”, gerando um arquivo “.HEX” da seguinteforma:

LINK [ENTER]Input file name: ........ .OBJ [ENTER]Enter offset for ....... [ENTER]Input file name: [ENTER]Output file name: [ENTER]Options (..........): H [ENTER]

4. No simulador:

LoadAvocet.... .HEXSimulationF1 (total)F10 (passo a passo)

5.4 – Simulador dos Microcontroladores da família 8051

****** TELA DE ENTRADA DO SIMULADOR: ******

Deve-se selecionar uma opção em função da cpu escolhida para o projeto.

Milton Barreiro Junior – “ETE Getúlio Vargas”

55

Page 61: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

****** TELA DE SIMULAÇÃO: ******

5.5 – Operação básica do simulador

Para uma rápida ambientação com o programa simulador, é apresentada uma

seqüência de testes para as principais teclas e/ou comandos:

· Visualização geral da tela, visando reconhecer os seus principais campos

(coloridos) e funções correspondentes.

· Teclas: ESC

CTRL C

· Comandos: Help Commands

Display

Simulation

Avocet

Registration

Load Avocet

Quit Exit

setUp Cursor Yes

No

View Memory-map

Milton Barreiro Junior – “ETE Getúlio Vargas”

56

Page 62: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Symbols Alpha

Registers

Data

Bit

SFR

eXecute

· Seqüência para carregar um arquivo no simulador e informações sobre a

simulação:

Load Avocet ... .OBJ Help Simulation

· Teclas para a simulação

F1: executa o programa inteiro.

F10: executa um programa instrução por instrução.

F9: volta para a condição anterior, após a execução de uma instrução.

Milton Barreiro Junior – “ETE Getúlio Vargas”

57

Page 63: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

6 – Tabela de Instruções completa

Temos na tabela a seguir o set de instruções do 8051, indicando o seu opcode,

conforme já explicado, o número de bytes da instrução, os períodos de clock

necessários e os flags afetados.

Temos a seguinte codificação na tabela:

@ – significa “endereçado pelo valor de ...”;

#Dado – indica valor constante de 8 bits;

#Dado 16 – indica valor constante de 16 bits;

Direto – indica um endereçamento de memória de 8 bits (primeiras 256

posições interna ou externas)

rel – indica que o endereçamento é relativo;

? – indica “depende do resultado ou da operação”;

“-“ – indica “não afetado”;

1 – indica setado;

0 – indica zerado.

Opcode Mnemônico Função Bytes PulsosFlags afetados

CY AC 0V

00 NOP Nenhuma operação 1 12 - - -

01 AJMP End11

Desvia para outro endereço numa fai-xa de 2Kbytes da atual posição (3 primeiros bits MSB do OpCode são os bits MSB do endereço)

2 24 - - -

02 LJMP End16Desvia para qualquer posição da memória de programa.

3 24 - - -

03

RR A

Desloca acumulador à direita

1 12 - - -

04 INC A Soma 1 ao acumulador 1 12 - - -

05 INC Direto Soma 1 à posição de memória 2 12 - - -

06 INC @R0Soma 1 à RAM endereçada por R0

1 12 - - -

07 INC @R1Soma 1 à RAM endereçada por R1

1 12 - - -

08 INC R0 Soma 1 ao conteúdo de R0 1 12 - - -

09 INC R1 Soma 1 ao conteúdo de R1 1 12 - - -

0A INC R2 Soma 1 ao conteúdo de R2 1 12 - - -

0B INC R3 Soma 1 ao conteúdo de R3 1 12 - - -

Milton Barreiro Junior – “ETE Getúlio Vargas”

b7 b0

58

Page 64: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Opcode Mnemônico Função Bytes PulsosFlags afetados

CY AC 0V

0C INC R4 Soma 1 ao conteúdo de R4 1 12 - - -

0D INC R5 Soma 1 ao conteúdo de R5 1 12 - - -

0E INC R6 Soma 1 ao conteúdo de R6 1 12 - - -

0F INC R7 Soma 1 ao conteúdo de R7 1 12 - - -

10 JBC bit, relDesvia se o bit endereçado estiver setado e depois zera o bit

3 24 - - -

11 ACALL End11

Chama sub-rotina numa faixa de 2Kbytes da atual posição (3 primeiros bits MSB do OpCode são os bits MSB do endereço)

2 24 - - -

12 LCALL End16Chama sub-rotina em qualquer posição da memória de programa

3 24 - - -

13

RRC A

Desloca o acumulador à direita através do carry

1 12 ? - -

14 DEC A Subtrai 1 do acumulador 1 12 - - -

15 DEC DiretoSubtrai 1 da posição de memória

2 12 - - -

16 DEC @R0Subtrai 1 da RAM endereçada por R0

1 12 - - -

17 DEC @R1Subtrai 1 da RAM endereçada por R1

1 12 - - -

18 DEC R0 Subtrai 1 do conteúdo de R0 1 12 - - -

19 DEC R1 Subtrai 1 do conteúdo de R1 1 12 - - -

1A DEC R2 Subtrai 1 do conteúdo de R2 1 12 - - -

1B DEC R3 Subtrai 1 do conteúdo de R3 1 12 - - -

1C DEC R4 Subtrai 1 do conteúdo de R4 1 12 - - -

1D DEC R5 Subtrai 1 do conteúdo de R5 1 12 - - -

1E DEC R6 Subtrai 1 do conteúdo de R6 1 12 - - -

1F DEC R7 Subtrai 1 do conteúdo de R7 1 12 - - -

20 JB bit, relDesvio se o bit endereçado estiver setado

3 24 - - -

21 AJMP End11

Desvia para outro endereço numa fai-xa de 2Kbytes da atual posição (3 primeiros bits MSB do OpCode são os bits MSB do endereço)

2 24 - - -

22 RET Retorne da sub-rotina 1 24 - - -

23

RL A

Desloca o acumulador à esquerda

1 12 - - -

24 ADD A, #Dado Soma o dado ao acumulador 2 12 ? ? ?

25 ADD A, DiretoSoma o conteúdo da posição de memória ao acumulador

2 12 ? ? ?

Milton Barreiro Junior – “ETE Getúlio Vargas”

b7 b0

b7 b0 Cy

59

Page 65: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Opcode Mnemônico Função Bytes PulsosFlags afetados

CY AC 0V

26 ADD A, @R0Soma o conteúdo da RAM endereçada por R0 ao acumulador

1 12 ? ? ?

27 ADD A, @R1Soma o conteúdo da RAM endereçada por R1 ao acumulador

1 12 ? ? ?

28 ADD A, R0Soma o conteúdo de R0 ao acumulador

1 12 ? ? ?

29 ADD A, R1Soma o conteúdo de R1 ao acumulador

1 12 ? ? ?

2A ADD A, R2Soma o conteúdo de R2 ao acumulador

1 12 ? ? ?

2B ADD A, R3Soma o conteúdo de R3 ao acumulador

1 12 ? ? ?

2C ADD A, R4Soma o conteúdo de R4 ao acumulador

1 12 ? ? ?

2D ADD A, R5Soma o conteúdo de R5 ao acumulador

1 12 ? ? ?

2E ADD A, R6Soma o conteúdo de R6 ao acumulador

1 12 ? ? ?

2F ADD A, R7Soma o conteúdo de R7 ao acumulador

1 12 ? ? ?

30 JNB bit, relDesvia se o bit endereçado estiver zerado

3 24 - - -

31 ACALL End11

Chama sub-rotina numa faixa de 2Kbytes da atual posição (3 primeiros bits MSB do OpCode são os bits MSB do endereço)

2 24 - - -

32 RETI Retorne da interrupção 1 24 - - -

33

RLC A

Desloca o acumulador à esquerda através do carry

1 12 ? - -

34 ADDC A, #DadoSoma o dado e o carry ao acumulador

2 12 ? ? ?

35 ADDC A, DiretoSoma o conteúdo da posição de memória e o carry ao acumulador

2 12 ? ? ?

36 ADDC A, @R0Soma o conteúdo da RAM endereçada por R0 e o carry ao acumulador

1 12 ? ? ?

37 ADDC A, @R1Soma o conteúdo da RAM endereçada por R1 e o carry ao acumulador

1 12 ? ? ?

38 ADDC A, R0Soma o conteúdo de R0 e o carry ao acumulador

1 12 ? ? ?

39 ADDC A, R1Soma o conteúdo de R1 e o carry ao acumulador

1 12 ? ? ?

3A ADDC A, R2Soma o conteúdo de R2 e o carry ao acumulador

1 12 ? ? ?

Milton Barreiro Junior – “ETE Getúlio Vargas”

b7 b0Cy

60

Page 66: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Opcode Mnemônico Função Bytes PulsosFlags afetados

CY AC 0V

3B ADDC A, R3Soma o conteúdo de R3 e o carry ao acumulador

1 12 ? ? ?

3C ADDC A, R4Soma o conteúdo de R4 e o carry ao acumulador

1 12 ? ? ?

3D ADDC A, R5Soma o conteúdo de R5 e o carry ao acumulador

1 12 ? ? ?

3E ADDC A, R6Soma o conteúdo de R6 e o carry ao acumulador

1 12 ? ? ?

3F ADDC A, R7Soma o conteúdo de R7 e o carry ao acumulador

1 12 ? ? ?

40 JC relDesvia se o carry estiver setado

2 24 - - -

41 AJMP End11

Desvia para outro endereço numa fai-xa de 2Kbytes da atual posição (3 primeiros bits MSB do OpCode são os bits MSB do endereço)

2 24 - - -

42 ORL Direto, A“Ou” entre acumulador e memória; resultado na memória

2 12 - - -

43ORL Direto,

#Dado“Ou” entre dado e memória 3 24 - - -

44 ORL A, #Dado “Ou” entre dado e acumulador 2 12 - - -

45 ORL A, Direto“Ou” entre memória e acumulador

2 12 - - -

46 ORL A, @R0“Ou” entre a RAM endereçada por R0 e o acumulador

1 12 - - -

47 ORL A, @R1“Ou” entre a RAM endereçada por R1 e o acumulador

1 12 - - -

48 ORL A, R0“Ou” entre o conteúdo de R0 e o acumulador

1 12 - - -

49 ORL A, R1“Ou” entre o conteúdo de R1 e o acumulador

1 12 - - -

4A ORL A, R2“Ou” entre o conteúdo de R2 e o acumulador

1 12 - - -

4B ORL A, R3“Ou” entre o conteúdo de R3 e o acumulador

1 12 - - -

4C ORL A, R4“Ou” entre o conteúdo de R4 e o acumulador

1 12 - - -

4D ORL A, R5“Ou” entre o conteúdo de R5 e o acumulador

1 12 - - -

4E ORL A, R6“Ou” entre o conteúdo de R6 e o acumulador

1 12 - - -

4F ORL A, R7“Ou” entre o conteúdo de R7 e o acumulador

1 12 - - -

50 JNC relDesvia se o carry estiver zerado

2 24 - - -

51 ACALL End11

Chama sub-rotina numa faixa de 2Kbytes da atual posição (3 primeiros bits MSB do OpCode são os bits MSB do endereço)

2 24 - - -

Milton Barreiro Junior – “ETE Getúlio Vargas”

61

Page 67: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Opcode Mnemônico Função Bytes PulsosFlags afetados

CY AC 0V

52 ANL Direto, A“E” entre acumulador e memória; resultado na memória

2 12 - - -

53 ANL Direto, #dado “E” entre dado e memória 3 24 - - -

54 ANL A, #Dado “E” entre dado e acumulador 2 12 - - -

55 ANL A, Direto“E” entre memória e acumulador

2 12 - - -

56 ANL A, @R0“E” entre RAM endereçada por R0 e acumulador

1 12 - - -

57 ANL A, @R1“E” entre RAM endereçada por R1 e acumulador

1 12 - - -

58 ANL A, R0“E” entre o conteúdo de R0 e o acumulador

1 12 - - -

59 ANL A, R1“E” entre o conteúdo de R1 e o acumulador

1 12 - - -

5A ANL A, R2“E” entre o conteúdo de R2 e o acumulador

1 12 - - -

5B ANL A, R3“E” entre o conteúdo de R3 e o acumulador

1 12 - - -

5C ANL A, R4“E” entre o conteúdo de R4 e o acumulador

1 12 - - -

5D ANL A, R5“E” entre o conteúdo de R5 e o acumulador

1 12 - - -

5E ANL A, R6“E” entre o conteúdo de R6 e o acumulador

1 12 - - -

5F ANL A, R7“E” entre o conteúdo de R7 e o acumulador

1 12 - - -

60 JZ relDesvia se o acumulador for zero

2 24 - - -

61 AJMP End11

Desvia para outro endereço numa fai-xa de 2Kbytes da atual posição (3 primeiros bits MSB do OpCode são os bits MSB do endereço)

2 24 - - -

62 XRL Direto, A“Ou exclusivo” entre acumulador e memória; resultado na memória

2 12 - - -

63XRL Direto,

#Dado“Ou exclusivo” entre dado e memória

3 24 - - -

64 XRL A, #Dado“Ou exclusivo” entre dado e acumulador

2 12 - - -

65 XRL A, Direto“Ou exclusivo” entre memória e acumulador

2 12 - - -

66 XRL A, @R0“Ou exclusivo” entre RAM endereçada por R0 e acumulador

1 12 - - -

67 XRL A, @R1“Ou exclusivo” entre RAM endereçada por R1 e acumulador

1 12 - - -

68 XRL A, R0“Ou exclusivo” entre conteúdo de R0 e acumulador

1 12 - - -

69 XRL A, R1“Ou exclusivo” entre conteúdo de R1 e acumulador

1 12 - - -

Milton Barreiro Junior – “ETE Getúlio Vargas”

62

Page 68: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Opcode Mnemônico Função Bytes PulsosFlags afetados

CY AC 0V

6A XRL A, R2“Ou exclusivo” entre conteúdo de R2 e acumulador

1 12 - - -

6B XRL A, R3“Ou exclusivo” entre conteúdo de R3 e acumulador

1 12 - - -

6C XRL A, R4“Ou exclusivo” entre conteúdo de R4 e acumulador

1 12 - - -

6D XRL A, R5“Ou exclusivo” entre conteúdo de R5 e acumulador

1 12 - - -

6E XRL A, R6“Ou exclusivo” entre conteúdo de R6 e acumulador

1 12 - - -

6F XRL A, R7“Ou exclusivo” entre conteúdo de R7 e acumulador

1 12 - - -

70 JNZ relDesvia se o acumulador não for zero

2 24 - - -

71 ACALL End11

Chama sub-rotina numa faixa de 2Kbytes da atual posição (3 primeiros bits MSB do OpCode são os bits MSB do endereço)

2 24 - - -

72 ORL C, bit“Ou” entre o bit endereçado e o carry

2 24 ? - -

73 JMP @A+DPTRDesvia para o endereço obtido da soma do acumulador e do DPTR

1 24 - - -

74 MOV A, #DadoMova o dado para o acumulador

2 12 - - -

75MOV Direto,

#DadoMova o dado para a memória 3 24 - - -

76MOV @R0,

#Dado

Mova dado para RAM endereçada indiretamente por R0

2 12 - - -

77MOV @R1,

#Dado

Mova dado para RAM endereçada indiretamente por R1

2 12 - - -

78 MOV R0, #DadoMova o dado para o registro R0

2 24 - - -

79 MOV R1, #DadoMova o dado para o registro R1

2 24 - - -

7A MOV R2, #DadoMova o dado para o registro R2

2 24 - - -

7B MOV R3, #DadoMova o dado para o registro R3

2 24 - - -

7C MOV R4, #DadoMova o dado para o registro R4

2 24 - - -

7D MOV R5, #DadoMova o dado para o registro R5

2 24 - - -

7E MOV R6, #DadoMova o dado para o registro R6

2 24 - - -

7F MOV R7, #DadoMova o dado para o registro R7

2 24 - - -

80 SJMP rel Desvio curto relativo 2 24 - - -

Milton Barreiro Junior – “ETE Getúlio Vargas”

63

Page 69: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Opcode Mnemônico Função Bytes PulsosFlags afetados

CY AC 0V

81 AJMP End11

Desvia para outro endereço numa fai-xa de 2Kbytes da atual posição (3 primeiros bits MSB do OpCode são os bits MSB do endereço)

2 24 - - -

82 ANL C, bit“E” entre o bit endereçado e o carry

2 24 ? - -

83 MOVC A, @A+PC

Soma A + PC obtendo um endereço de 16 bits na memória de programa; carrega o acumulador com esta memória

1 24 - - -

84 DIV ABDivide A e B; resultado: A inteiro e B resto

1 48 0 ? 0

85MOV Direto1,

Direto2Mova o conteúdo da memória direta2 para a memória direta1

3 24 - - -

86 MOV Direto, @R0Mova RAM endereçada por R0 para memória

2 24 - - -

87 MOV Direto, @R1Mova RAM endereçada por R1 para memória

2 24 - - -

88 MOV Direto, R0Mova registro R0 para memória

2 24 - - -

89 MOV Direto, R1Mova registro R1 para memória

2 24 - - -

8A MOV Direto, R2Mova registro R2 para memória

2 24 - - -

8B MOV Direto, R3Mova registro R3 para memória

2 24 - - -

8C MOV Direto, R4Mova registro R4 para memória

2 24 - - -

8D MOV Direto, R5Mova registro R5 para memória

2 24 - - -

8E MOV Direto, R6Mova registro R6 para memória

2 24 - - -

8F MOV Direto, R7Mova registro R7 para memória

2 24 - - -

90MOV DPTR,

#Dado 16Mova dado de 16 bits para o DPTR

3 24 - - -

91 ACALL End11

Chama sub-rotina numa faixa de 2Kbytes da atual posição (3 primeiros bits MSB do OpCode são os bits MSB do endereço)

2 24 - - -

92 MOV bit, CMova o carry para o bit endereçado

2 24 - - -

93MOVC A, @A +

DPTR

Soma A + DPTR obtendo um endereço de 16 bits na memória de programa; carrega o acumulador com esta memória

1 24 - - -

94 SUBB A, #DadoSubtrai o dado e o borrow do acumulador

2 12 ? ? ?

95 SUBB A, DiretoSubtrai o conteúdo da posição de memória e o borrow do acumulador

2 12 ? ? ?

Milton Barreiro Junior – “ETE Getúlio Vargas”

64

Page 70: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Opcode Mnemônico Função Bytes PulsosFlags afetados

CY AC 0V

96 SUBB A, @R0Subtrai o conteúdo da RAM endereçada por R0 e o borrow do acumulador

1 12 ? ? ?

97 SUBB A, @R1Subtrai o conteúdo da RAM endereçada por R1 e o borrow do acumulador

1 12 ? ? ?

98 SUBB A, R0Subtrai o conteúdo de R0 e o borrow do acumulador

1 12 ? ? ?

99 SUBB A, R1Subtrai o conteúdo de R1 e o borrow do acumulador

1 12 ? ? ?

9A SUBB A, R2Subtrai o conteúdo de R2 e o borrow do acumulador

1 12 ? ? ?

9B SUBB A, R3Subtrai o conteúdo de R3 e o borrow do acumulador

1 12 ? ? ?

9C SUBB A, R4Subtrai o conteúdo de R4 e o borrow do acumulador

1 12 ? ? ?

9D SUBB A, R5Subtrai o conteúdo de R5 e o borrow do acumulador

1 12 ? ? ?

9E SUBB A, R6Subtrai o conteúdo de R6 e o borrow do acumulador

1 12 ? ? ?

9F SUBB A, R7Subtrai o conteúdo de R7 e o borrow do acumulador

1 12 ? ? ?

A0 ORL C, /bit“Ou” entre o complemento do bit endereçado e o carry

2 24 ? - -

A1 AJMP End11

Desvia para outro endereço numa fai-xa de 2Kbytes da atual posição (3 primeiros bits MSB do OpCode são os bits MSB do endereço)

2 24 - - -

A2 MOV C, bitMova o bit endereçado para o carry

2 12 ? - -

A3 INC DPTR Soma 1 ao registro DPTR 1 24 - - -

A4 MUL AB Multiplica A e B; resultado: BA 1 48 0 - ?

A5

A6 MOV @R0, DiretoMova a memória para a RAM endereçada por R0

2 24 - - -

A7 MOV @R1, DiretoMova a memória para a RAM endereçada por R1

2 24 - - -

A8 MOV R0, DiretoMova memória para o registro R0

2 24 - - -

A9 MOV R1, DiretoMova memória para o registro R1

2 24 - - -

AA MOV R2, DiretoMova memória para o registro R2

2 24 - - -

AB MOV R3, DiretoMova memória para o registro R3

2 24 - - -

AC MOV R4, DiretoMova memória para o registro R4

2 24 - - -

AD MOV R5, DiretoMova memória para o registro R5

2 24 - - -

AE MOV R6, DiretoMova memória para o registro R6

2 24 - - -

Milton Barreiro Junior – “ETE Getúlio Vargas”

65

Page 71: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Opcode Mnemônico Função Bytes PulsosFlags afetados

CY AC 0V

AF MOV R7, DiretoMova memória para o registro R7

2 24 - - -

B0 ANL C, /bit“E” entre o complemento do bit endereçado e o carry

2 24 ? - -

B1 ACALL End11

Chama sub-rotina numa faixa de 2Kbytes da atual posição (3 primeiros bits MSB do OpCode são os bits MSB do endereço)

2 24 - - -

B2 CPL bitInverte o estado do bit endereçado

2 12 - - -

B3 CPL C Inverte o estado do carry 1 12 ? - -

B4CJNE A, #Dado

rel

Compara e desvia se o acumulador for diferente do dado

3 24 ? - -

B5CJNE A, Direto

rel

Compara e desvia se o acumulador for diferente da memória endereçada

3 24 ? - -

B6CJNE @R0, #Dado rel

Compara e desvia se a RAM endereçada por R0 for diferente do dado

3 24 ? - -

B7CJNE @R1, #Dado rel

Compara e desvia se a RAM endereçada por R1 for diferente do dado

3 24 ? - -

B8CJNE R0, #Dado

rel

Compara e desvia se o registro R0 for diferente do dado

3 24 ? - -

B9CJNE R1, #Dado

rel

Compara e desvia se o registro R1 for diferente do dado

3 24 ? - -

BACJNE R2, #Dado

rel

Compara e desvia se o registro R2 for diferente do dado

3 24 ? - -

BBCJNE R3, #Dado

rel

Compara e desvia se o registro R3 for diferente do dado

3 24 ? - -

BCCJNE R4, #Dado

rel

Compara e desvia se o registro R4 for diferente do dado

3 24 ? - -

BDCJNE R5, #Dado

rel

Compara e desvia se o registro R5 for diferente do dado

3 24 ? - -

BECJNE R6, #Dado

rel

Compara e desvia se o registro R6 for diferente do dado

3 24 ? - -

BFCJNE R7, #Dado

rel

Compara e desvia se o registro R7 for diferente do dado

3 24 ? - -

C0 PUSH DiretoIncrementa o SP e então coloca a memória no Stack

2 24 - - -

C1 AJMP End11

Desvia para outro endereço numa fai-xa de 2Kbytes da atual posição (3 primeiros bits MSB do OpCode são os bits MSB do endereço)

2 24 - - -

Milton Barreiro Junior – “ETE Getúlio Vargas”

66

Page 72: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Opcode Mnemônico Função Bytes PulsosFlags afetados

CY AC 0V

C2 CLR bit Zera o bit endereçado 2 12 - - -

C3 CLR C Zera o carry 1 12 0 - -

C4 SWAP A

Troca os nibbles do acumulador. Equivale a 4 RR A ou 4 RL A

1 12 - - -

C5 XCH A, DiretoTroca memória com o acumulador

2 12 - - -

C6 XCH A, @R0Troca a RAM indiretamente endereçada por R0 com o acumulador

1 12 - - -

C7 XCH A, @R1Troca a RAM indiretamente endereçada por R1 com o acumulador

1 12 - - -

C8 XCH A, R0Troca entre si o conteúdo do acumulador e o registro R0

1 12 - - -

C9 XCH A, R1Troca entre si o conteúdo do acumulador e o registro R1

1 12 - - -

CA XCH A, R2Troca entre si o conteúdo do acumulador e o registro R2

1 12 - - -

CB XCH A, R3Troca entre si o conteúdo do acumulador e o registro R3

1 12 - - -

CC XCH A, R4Troca entre si o conteúdo do acumulador e o registro R4

1 12 - - -

CD XCH A, R5Troca entre si o conteúdo do acumulador e o registro R5

1 12 - - -

CE XCH A, R6Troca entre si o conteúdo do acumulador e o registro R6

1 12 - - -

CF XCH A, R7Troca entre si o conteúdo do acumulador e o registro R7

1 12 - - -

D0 POP DiretoRetira dado do stack e coloca na memória, depois decrementa SP

2 24 - - -

D1 ACALL End11

Chama sub-rotina numa faixa de 2Kbytes da atual posição (3 primeiros bits MSB do OpCode são os bits MSB do endereço)

2 24 - - -

D2 SETB bit Seta o bit endereçado 2 12 - - -

D3 SETB C Seta o carry 1 12 1 - -

D4 DA A Ajuste decimal do acumulador 1 12 ? ? -

D5 DJNZ Direto, relDecrementa a memória e desvia se for diferente de zero

3 24 - - -

D6 XCHD A, @R0

Troca nibble menos significativo do acumulador com a RAM endereçada indiretamente por R0 entre si

1 12 - - -

Milton Barreiro Junior – “ETE Getúlio Vargas”

b7 b6 b5 b4 b3 b2 b1 b0

b3 b2 b1 b0 b7 b6 b5 b4

67

Page 73: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Opcode Mnemônico Função Bytes PulsosFlags afetados

CY AC 0V

D7 XCHD A, @R1

Troca nibble menos significativo do acumulador com a RAM endereçada indiretamente por R1 entre si

1 12 - - -

D8 DJNZ R0, relDecrementa o registro R0 e desvia se for diferente de zero

2 24 - - -

D9 DJNZ R1, relDecrementa o registro R1 e desvia se for diferente de zero

2 24 - - -

DA DJNZ R2, relDecrementa o registro R2 e desvia se for diferente de zero

2 24 - - -

DB DJNZ R3, relDecrementa o registro R3 e desvia se for diferente de zero

2 24 - - -

DC DJNZ R4, relDecrementa o registro R4 e desvia se for diferente de zero

2 24 - - -

DD DJNZ R5, relDecrementa o registro R5 e desvia se for diferente de zero

2 24 - - -

DE DJNZ R6, relDecrementa o registro R6 e desvia se for diferente de zero

2 24 - - -

DF DJNZ R7, relDecrementa o registro R7 e desvia se for diferente de zero

2 24 - - -

E0 MOVX A, @DPTR

Mova RAM externa indiretamente endereçada pelo DPTR (16 bits) para o acumulador

1 24 - - -

E1 AJMP End11

Desvia para outro endereço numa fai-xa de 2Kbytes da atual posição (3 primeiros bits MSB do OpCode são os bits MSB do endereço)

2 24 - - -

E2 MOVX A, @R0Mova RAM endereçada indiretamente por R0 (8 bits) para o acumulador

1 24 - - -

E3 MOVX A, @R1Mova RAM endereçada indiretamente por R1 (8 bits) para o acumulador

1 24 - - -

E4 CLR A Faz o acumulador = zero 1 12 - - -

E5 MOV A, DiretoMova memória para o acumulador

2 12 - - -

E6 MOV A, @R0Mova RAM endereçada indiretamente por R0 para o acumulador

1 12 - - -

E7 MOV A, @R1Mova RAM endereçada indiretamente por R1 para o acumulador

1 12 - - -

E8 MOV A, R0Mova registro R0 para o acumulador

1 12 - - -

E9 MOV A, R1Mova registro R1 para o acumulador

1 12 - - -

EA MOV A, R2Mova registro R2 para o acumulador

1 12 - - -

EB MOV A, R3Mova registro R3 para o acumulador

1 12 - - -

Milton Barreiro Junior – “ETE Getúlio Vargas”

68

Page 74: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Opcode Mnemônico Função Bytes PulsosFlags afetados

CY AC 0V

EC MOV A, R4Mova registro R4 para o acumulador

1 12 - - -

ED MOV A, R5Mova registro R5 para o acumulador

1 12 - - -

EE MOV A, R6Mova registro R6 para o acumulador

1 12 - - -

EF MOV A, R7Mova registro R7 para o acumulador

1 12 - - -

F0 MOVX @DPTR, A

Mova o acumulador para a RAM externa indiretamente endereçada pelo DPTR (16 bits)

1 24 - - -

F1 ACALL End11

Chama sub-rotina numa faixa de 2Kbytes da atual posição (3 primeiros bits MSB do OpCode são os bits MSB do endereço)

2 24 - - -

F2 MOVX @R0, A

Mova acumulador para RAM externa indiretamente endereçada por R0 (endereço 8 bits)

1 24 - - -

F3 MOVX @R1, A

Mova acumulador para RAM externa indiretamente endereçada por R1 (endereço 8 bits)

1 24 - - -

F4 CPL AInverte o estado dos bits do acumulador

1 12 - - -

F5 MOV Direto, AMova acumulador para memória

2 12 - - -

F6 MOV @R0, AMova o acumulador para a RAM indiretamente endereçada por R0

1 12 - - -

F7 MOV @R1, AMova o acumulador para a RAM indiretamente endereçada por R1

1 12 - - -

F8 MOV R0, AMova o acumulador para o registro R0

1 12 - - -

F9 MOV R1, AMova o acumulador para o registro R1

1 12 - - -

FA MOV R2, AMova o acumulador para o registro R2

1 12 - - -

FB MOV R3, AMova o acumulador para o registro R3

1 12 - - -

FC MOV R4, AMova o acumulador para o registro R4

1 12 - - -

FD MOV R5, AMova o acumulador para o registro R5

1 12 - - -

FE MOV R6, AMova o acumulador para o registro R6

1 12 - - -

FF MOV R7, AMova o acumulador para o registro R7

1 12 - - -

Milton Barreiro Junior – “ETE Getúlio Vargas”

69

Page 75: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

7 – Esquema da CPU mínima para teste e carregamento de programa

Milton Barreiro Junior – “ETE Getúlio Vargas”

70

Page 76: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

8 – Programa teste do sistema mínimo

;**************************************************************; PROGRAMA TESTE ;**************************************************************

ORG 0000H ;Define endereço de inícioLJMP INICIO

ORG 0050H ;Define endereço de início de execução

INICIO: MOV TMOD,#11H ;Configura T0 e T1 no modo 1MOV TCON,#00H ;Configura TCONMOV A,#11111110B ;Carrega ACC com 11111110 (binário)

VOLTA: MOV P0, A ;Carrega ACC nos PORTSMOV P1, A ;P0, P1, P2 e P3MOV P2, AMOV P3, ARR A ;Rotaciona ACC para direita

ACALL DELAY ;Chama rotina de tempo de 1s (PARA CLOCK DE 12MHz)

LJMP VOLTA

;**************************************************************; Rotina de Tempo de 1s;**************************************************************

Milton Barreiro Junior – “ETE Getúlio Vargas”

71

Page 77: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

DELAY: MOV R0, #20 ;Carrega valor 20 (decimal) em R0REP: MOV TH1, #3CH ;Carrega Timer 1

MOV TL1, #0AFH ;Com 3CAF (hexa) para contagem de 50msSETB TR1 ;Início de contagemJNB TF1, $ ;Testa se houve overflow em Timer 1CLR TF1 ;Reseta flag de overflowDJNZ R0, REP ;Repete temporização se necessárioCLR TR1 ;Desliga contagemRET

END

9 – Referências Bibliográficas

- Aplicações Práticas do Microcontrolador 8051 (Teoria Geral Detalhada)Vidal Pereira da Silva JuniorEditora Érica

- Apostila de Microcontroladores Família MCS – 51 (Conceitos, Aplicações e Projetos)Professor Wilson RuizCentro Federal de Educação Tecnológica de São Paulo (CEFET – SP)

- Apostila CURSO de MICROCONTROLADORES 8051 KIT STATION51(Apostila Teórica)Professor Elmo Dutra da Silveira FilhoCentro Tecnológico de Mecatrônica – SENAI

- Apontamentos de aulas

- Laboratório de Microcontroladores Família 8051Denys E. C. NicolosiEditora Érica

- Manuais de Microcontoladores Família 8051 dos fabricantes:INTELATMEL

- The 8051 Microcontroller – Architecture, Programming and ApplicationsKenneth J. AyalaWestern Carolina University

Milton Barreiro Junior – “ETE Getúlio Vargas”

72

Page 78: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

APÊNDICE A

EXERCÍCIO / EXEMPLO 1

Projetar um sistema de controle de um elevador para 3 níveis, baseado no

microcontrolador 8051, com as seguintes características:

Entradas do sistema: P0 e INT0

Milton Barreiro Junior – “ETE Getúlio Vargas”

73

Page 79: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Saídas do Sistema: P1

Nota:

1 – S e desejável é possível associar-se o primeiro andar da tabela anterior ao

andar térreo de um edifício, deslocando-se também os outros níveis, sem alterações no

funcionamento da solução fornecida como exemplo a seguir.

2 – Assim que o sistema é iniciado o elevador desloca-se para o primeiro andar

com a porta fechada e lá chegando abre a porta.

3 – O elevador somente desloca-se com a porta fechada.

4 – Quando a cabine está parada, sua porta conecta-se mecanicamente com a

porta do respectivo andar e assim ambas terão o mesmo movimento.

5 – Os botões de comando do elevador estão no interior da cabine, não

existindo botões externos ao lado da porta de entrada, assim o usuário só pode entrar

no elevador se este estiver parado no andar, sendo o destino escolhido pelo mesmo

dentro da cabine (limitação inicialmente adotada para a simplificação do exemplo).

6 – O LED aceso indica a presença da cabine no respectivo andar.

7 – Normalmente não é recomendável uma freqüência de “clock” inferior a 3MHz

para aplicações reais, más nesse problema, onde um dos objetivos é a determinação

de um intervalo de tempo e a visualização do funcionamento de um dos

TEMPORIZADORES através do simulador, esta freqüência fica estabelecida em

120KHz. (valor escolhido em função da aplicação).

Milton Barreiro Junior – “ETE Getúlio Vargas”

74

Page 80: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

8 – O tempo gasto pela porta no movimento de abrir e fechar deve ser de 5

segundos e determinado pelo TIMER0 (vide descrição do cálculo no cabeçalho do

programa).

;************************************************************************************************

; Exercício / Exemplo 3: Controle Do Elevador 05/11/2002 02:45h

;Freqüência Do Timer = (Freqüência Do Clock) / 12 = 120k / 12 = 10k Hz E O Seu Período =

0,1x10-3 Segundos

; assim para um tempo de 5 segundos temos: 5 / 0,1x10-3 = valor da contagem = 50000

; 65535 – 50000 + 1 = 15536 = 3cb0h = Valor A Ser Carregado Inicialmente No Contador / Temporizador

;************************************************************************************************

ORG 0000H

LJMP INICIO

ORG 0003H

LJMP INT0

ORG 000BH

LJMP TIMER0

ORG 0050H

Milton Barreiro Junior – “ETE Getúlio Vargas”

75

Page 81: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

INICIO: MOV SP, #0030H ;estabelece o ponteiro da pilha

MOV IE, #10000011B ;habilita INT0 e TIMER0

MOV IP, #00000001B ;define prioridade alta p/ INT0 e baixa p/ TIMER0

MOV TCON, #00000000B ;INT0 ativa por nível “0” e TIMER0 desligado

MOV TMOD, #00000001B ;função de temporização com controle do TIMER0

feito pelo bit TR0 ;modo 1 de operação

CLR P1.1 ;para o elevador

CLR P1.0

MOV TH0, #3CH ;valor inicial para a contagem / temporização

MOV TL0, #0B0H

CLR 00 ;inicializa um bit endereçável para ser a FLAG DO TIMER0

;**************************************************************************************************

; O sistema (elevador) está sendo iniciado

;**************************************************************************************************

JB P0.4, L25 ;verifica se o elevador já estava no 1o andar.

ACALL DESCER ;leva o elevador inicialmente para o térreo.

L1: JNB P0.4, L1 ;espera chegar no 1o andar

ACALL PARAR

L25: SETB P1.4 ;acende led indicador de 1o andar

CLR P1.5 ;apaga led indidador de 2o andar

CLR P1.6 ;apaga led indicador de 3o andar

;**************************************************************************************************

; O elevador está no 1o andar

;**************************************************************************************************

ANDAR_1: JB P0.1, L2 ;testa chamada para o 2o andar

JB P0.2, L3 ;testa chamada para o 3o andarMilton Barreiro Junior – “ETE Getúlio Vargas”

76

Page 82: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

AJMP ANDAR_1 ;volta para esperar uma chamada

L2: ACALL SUBIR ;movimenta o elevador para o 2o andar

L4: JNB P0.5, L4 ;espera chegar no 2o andar

ACALL PARAR

SETB P1.5 ;acende o led indicador de 2o andar

LJMP ANDAR_2

L3: ACALL SUBIR ;movimenta o elevador para o 3o andar

L5: JNB P0.6, L5 ;espera chegar no 3o andar

ACALL PARAR

SETB P1.6 ;acende o led indicador de 3o andar

LJMP ANDAR_3

;************************************************************************************************

; O elevador está no 2o andar

;************************************************************************************************

ANDAR_2: JB P0.0, L6 ;testa chamada para o 1o andar

JB P0.2, L7 ;testa chamada para o 3o andar

AJMP ANDAR_2 ;volta para esperar uma chamada

L6: ACALL DESCER ;movimenta o elevador para o 1o andar

L8: JNB P0.4, L8 ;espera chegar no 1o andar

ACALL PARAR

SETB P1.4 ;acende o led indicador de 1o andar

LJMP ANDAR_1

L7: ACALL SUBIR ;movimenta o elevador para o 3o andar

L9: JNB P0.6, L9 ;espera chegar no 3o andar

ACALL PARAR

SETB P1.6 ;acende o led indicador de 3o andar

Milton Barreiro Junior – “ETE Getúlio Vargas”

77

Page 83: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

LJMP ANDAR_3

;************************************************************************************************

; O elevador está no 3o andar

;************************************************************************************************

ANDAR_3: JB P0.0, L10 ;testa chamada para o 1o andar

JB P0.1, L11 ;testa chamada para o 2o andar

AJMP ANDAR_3 ;volta para esperar uma chamada

L10: ACALL DESCER ;movimenta o elevador para o 1o andar

L12: JNB P0.4, L12 ;espera chegar no 1o andar

ACALL PARAR

SETB P1.4 ;acende o led indicador de 1o andar

LJMP ANDAR_1

L11: ACALL DESCER ;movimenta o elevador para o 2o andar

L13: JNB P0.5, L13 ;espera chegar no 2o andar

ACALL PARAR

SETB P1.5 ;acende o led indicador de 2o andar

LJMP ANDAR_2

;************************************************************************************************

; sub-rotina: SUBIR

;************************************************************************************************

SUBIR: CLR P1.4 ;apaga todos os led’s

CLR P1.5

CLR P1.6

CLR P1.2 ;fecha a porta

SETB TR0 ;liga o timer0

L20: JNB 00, L20 ;espera o término da temporização

Milton Barreiro Junior – “ETE Getúlio Vargas”

78

Page 84: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

CLR 00 ;reseta a FLAG DO TIMER0

SETB P1.1 ;sobe o elevador

CLR P1.0

RET

;************************************************************************************************

; sub-rotina: DESCER

;************************************************************************************************

DESCER: CLR P1.4 ;apaga todos os led’s

CLR P1.5

CLR P1.6

CLR P1.2 ;fecha a porta

SETB TR0 ;liga o timer0

L21: JNB 00, L21 ;espera o término da temporização

CLR 00 ;reseta a FLAG DO TIMER0

CLR P1.1 ;desce o elevador

SETB P1.0

RET

;************************************************************************************************

; sub-rotina: PARAR

;************************************************************************************************

PARAR: CLR P1.1 ;para o elevador

CLR P1.0

SETB P1.2 ;abre a porta

SETB TR0 ;liga o timer0

L22: JNB 00, L22 ;espera o término da temporização

CLR 00 ;reseta a FLAG DO TIMER0

Milton Barreiro Junior – “ETE Getúlio Vargas”

79

Page 85: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

RET

TIMER0: CLR TR0 ;desliga o timer0

MOV TH0, #3CH ;valor inicial para a contagem / temporização

MOV TL0, #0B0H

SETB 00 ;seta a FLAG DO TIMER0

RETI ;retorna para o programa

INT0: CLR P1.1 ;para o elevador

CLR P1.0

SETB P1.2 ;abre a porta

L23: JNB P3.2, L23 ;espera o término da situação de emergência

RETI

END

APÊNDICE B

PROCEDIMENTO PARA GRAVAÇÃO DO 8051

1 – C ONSIDERAÇÕES INICIAIS

Este gravador só funciona para os microcontroladores, baseados no

microcontrolador 8051, da série AT89SXX.

Os microcontroladores suportados pelo software de gravação são:

AT89S51: 4Kbytes de memória flash

AT89S52: 8Kbytes de memória flash

AT89S53: 12Kbytes de memória flash

AT89S8252

Milton Barreiro Junior – “ETE Getúlio Vargas”

80

Page 86: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

2 – MATERIAIS NECESSÁRIOS

Placa de circuito impresso, conforme figura da página 69.

3 – OBTENÇÃO DO SOFTWARE

O software utilizado se chama AEC_ISP v3.0 e pode ser obtido

gratuitamente (mediante cadastro) no site do fornecedor: www.aec-electronics.co.nz

4 – UTILIZAÇÃO DO SOFTWARE

Este programa é baseado no estilo dos programas DOS, mas roda

perfeitamente em ambiente Windows (até mesmo no XP).

Ao executar o programa AEC_ISP.EXE, a seguinte tela irá abrir:

Milton Barreiro Junior – “ETE Getúlio Vargas”

81

Page 87: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Sua função é gravar o arquivo .hex gerado por qualquer compilador para 8051

no microcontrolador, conforme os passos descritos a seguir:

a) Após ter o programa simulado e funcionando deve-se carregar o arquivo .hex o

qual foi compilado conforme descrição em capítulo anterior;

b) Após compilar o programa, copie o arquivo .hex criado para pasta onde

está localizado o programa AEC_ISP.EXE;

c) Execute o programa e selecionar a opção (J) Setup para configurá-lo.

Configure-o de acordo com a próxima tela. Lembre-se de modificar a opção (9)device

onde você deve selecionar o tipo de microcontrolador a ser programado. A etapa de

configuração só deve ser feita uma vez. Para as próximas gravações, pode-se pular

este passo, desde que o microcontrolador a ser programado seja o mesmo (possua o

mesmo código), e ao terminar de configurar, aperte (S) Save setup para salvar as

definições;

d) Coloque o microcontrolador no soquete, conecte o gravador na porta

paralela, e ligue a fonte de alimentação;

e) Na tela de opções selecione (A) Load hex file to flash buffer;

Milton Barreiro Junior – “ETE Getúlio Vargas”

82

Page 88: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

f) Digite o nome do arquivo que você copiou para a pasta do programa;

g) Finalmente selecione (E) – Program. O software irá iniciar a gravação e

verificação do programa, conforme a tela a seguir. Ao terminar saia do software e

desconecte todos os equipamentos;

h) Pronto, o circuito já pode ser testado.

Milton Barreiro Junior – “ETE Getúlio Vargas”

83

Page 89: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

ANEXO 1 – DISPLAY LCD

01 – INTRODUÇÃO

Os módulos LCD são interfaces de saída muito útil em sistemas

microprocessados. Estes módulos podem ser gráficos e a caracter. Os módulos LCD

gráficos são encontrados com resuluções de 122x32, 128x64, 240x64 e 240x128 dots

pixel, e geralmente estão disponíveis com 20 pinos para conexão. Os LCD comuns

(tipo caracter) são especificados em número de linhas por colunas e são encontrados

nas configurações previstas na Tabela 1.

Milton Barreiro Junior – “ETE Getúlio Vargas”

84

Page 90: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Tabela 1 - Módulos LCD disponíveis

Os módulos podem ser encontrados com LED backlight (com uma iluminação de

fundo) para facilitar as leituras durante a noite. Neste caso, a alimentação deste led faz-

se normalmente pelos pinos 15 e 16 para os módulos comuns e 19 e 20 para os

módulos gráficos, sendo os pinos 15 e 19 para ligação ao anodo e os pinos 16 e 20

para o catodo.

A corrente de alimentação deste led varia de 100 a 200mA, dependendo do

modelo.

Estes módulos utilizam um controlador próprio, permitindo sua interligação com

com outras placas através de seus pinos, onde deve ser alimentado o módulo e

interligado o barramento de dados e controle do módulo com a placa do usuário.

Naturalmente que além de alimentar e conectar os pinos do módulo com a placa

do usuário deverá haver um protocolo de comunicação entre as partes, que envolve o

envio de bytes de instruções e bytes de dados pelo sistema do usuário.

A Tabela 2 descreve cada pino do módulo ou do display para conexão deste a

outras placas:

Tabela 2 - Pinagem dos Módulos LCD

Milton Barreiro Junior – “ETE Getúlio Vargas”

85

Page 91: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Assim como em um rádio relógio todo módulo LCD permite um ajuste na

intensidade da luz emitida ou ajuste de contraste, isto é possível variando-se a tensão

no pino 3. A Figura 1 mostra um circuito típico e recomendado pela maioria dos

fabricantes para efetuar este ajuste. Alguns fabricantes recomenda o uso de um

resistor de 4K7 em série com o potenciômetro de 10K.

Figura 1 - Detalhe do controle de contraste do módulo LCD

2 – INTERFACE COM CPU

Os módulos LCD são projetados para conectar-se com a maioria das CPU’s

disponíveis no mercado, bastando para isso que esta CPU atenda as temporizações de

leitura e escrita de instruções e dados, fornecido pelo fabricante do módulo. A Figura 2

mostra um exemplo de diagrama de tempos típico requeridos para operação de escrita

no módulo LCD, estes tempos variam em função do clock da CPU do usuário.

Milton Barreiro Junior – “ETE Getúlio Vargas”

86

Page 92: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Figura 2 - (a) Escrita no LCD (b) Ciclo de Escrita da CPU 8051

A Tabela 3 a seguir mostra a relação entre a freqüência da CPU e a

temporização de leitura/escrita da maioria dos módulos LCD. Em geral, podemos

conectar o barramento de dados da CPU ao barramento do módulo, mapeando-o

convenientemente na placa de usuário, e efetuarmos uma operação normal de

leitura/escrita sem mais problemas.

Tabela 3 - Relação clock da CPU x Temporização do Módulo LCD

A Figura 3 mostra um exemplo de conexão de uma placa baseada nos

microcontroladores da linha Intel de 8 bits (8051), ao módulo LCD. Neste caso como os

sinais A0 e A1 estão conectados aos pinos 4 e 5, teremos então 04 (quatro) endereços

distintos para comunicação entre a CPU e o módulo LCD. A Tabela 4 mostra estes

endereços.

Milton Barreiro Junior – “ETE Getúlio Vargas”

Figura 3 - Sistema baseado na CPU 8051 com módulo LCD

87

Page 93: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Endereço R / W RS Descrição

4000 0 0 Instrução – Escrita no módulo

4001 0 1 Dados – Escrita no módulo

4002 1 0 Instrução – Leitura no módulo

4003 1 1 Dados – Leitura no módulo

Tabela 4 - Endereçamento do módulo LCD para Figura 3

O exemplo apresentado na Figura 3 refere-se à conexão do módulo LCD com

comunicação/transmissão de 8 bits, mas podemos conectar o módulo com transmissão

a cada 4 bits, conforme é mostrado na Figura 4. Neste caso não utilizamos os pinos 7,

8, 9 e 10. Isto é muito útil quando a CPU do usuário possui poucos pinos de I/O, caso

típico da linha de microprocessadores PIC, como por exemplo o Basic Stamp. Agora

surge a dúvida, um mesmo módulo pode conectar-se com 8 ou 4 bits? como isto é

possível?

Ocorre que o módulo LCD quando alimentado necessita de algumas instruções

de inicialização que identificará qual a forma de transmissão de dados que será

estabelecida entre a CPU e o módulo.

Milton Barreiro Junior – “ETE Getúlio Vargas”

88

Page 94: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Figura 4 - Modulo LCD comunicando-se com 4 bits

03 – PROGRAMAÇÃO / INSTRUÇÕES

Milton Barreiro Junior – “ETE Getúlio Vargas”

89

Page 95: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Tabela 5 - Conjunto de instruções do módulo LCD

A Tabela 5 apresenta o conjunto de instruções, levando-se em consideração que

a comunicação com o módulo seja com barramento de 8 bits (fixado durante a

inicialização)

. Para o caso desta comunicação ocorrer com apenas 4 bits (nible), os 8 dados

ou instruções serão enviados por nible. sendo enviado o nible mais significativo

primeiro. Por exemplo para limpar o display, escreve-se o nible 0000 e depois 0001.

A Tabela 6 traz um resumo das instruções mais usadas na comunicação com os

módulos LCD.

Milton Barreiro Junior – “ETE Getúlio Vargas”

90

Page 96: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Tabela 6 - Instruções mais comuns

3.1 – DESCRIÇÃO DETALHADA DAS INSTRUÇÕES

3.1.1 – Limpa Display

Esta instrução escreve o caracter ASCII 32 que corresponde ao branco ou barra

de espaço em todos os endereços da DDRAM apagando a mensagem que estiver

escrita. O cursor retorna ao endereço “zero”, ou seja, à posição mais a esquerda da

primeira linha.

3.1.2 – Cursor Home

Faz retornar o cursor para a posição mais a esquerda da primeira linha e faz

voltar à posição original mensagens previamente deslocadas. O conteúdo da DDRAM

permanece inalterado.

3.1.3 – Fixa o modo de operação

Esta instrução tem efeito somente durante a leitura ou escrita de dados,

portanto, deve ser ativada na inicialização.

Milton Barreiro Junior – “ETE Getúlio Vargas”

91

Page 97: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

-Estabelece o sentido de deslocamento do cursor (X=0 p/ esquerda, X=1 p/

direita)

-Estabelece se a mensagem deve ou não ser deslocada com a entrada de um

novo caracter S=1 SIM, S=0 NÃO. Exemplo: X=1 e S=1 => mensagem desloca p/

direita.

3.1.4 – Controle do Display

A mensagem fica aparente quando D=1 e desaparece quando D=0, porém o

conteúdo da DDRAM fica inalterado. O cursor fica aparente quando C=1 e desaparece

quando C=0, porém as propriedades de escritas vigentes permanecem inalteradas. O

cursor quando aparente liga a última linha que compõem o caracter, exceto quando

B=1, que apresenta em alternância com uma matriz com todos os pontos negros em

intervalos de 0,4 segundos. Quando B=1 e C=0, obteremos a ativação intermitente de

uma matriz completa (todos os pontos da matriz).

3.1.5 – Deslocamento do Cursor ou da Mensagem

Desloca o cursor ou a mensagem sem que para isso tenha que escrever ou ler

dados do display. Utilizado para posicionamento dos dados no display.

3.1.6 – Estabelece o modo de utilização do Módulo LCD

Milton Barreiro Junior – “ETE Getúlio Vargas”

92

Page 98: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Y estabelece o modo de comunicação. Se Y=1 estabelece 8 bits e quando Y=0

será 4 bits, enviados em duas operações, com os 4 bits (Nible) mais significativos

sendo enviados primeiro. N fixa o número de linhas: N=0 para uma linha e N=1 para

duas ou mais linhas. F fixa o tipo da matriz: F=0 para matriz 7x5 ou 8x5 e F=1 para

matriz 10x5 (somente possível quando apresentando em uma linha).

3.1.7 – Endereçamento da CGRAM

CGRAM é uma região da memória RAM destinada para criação de caracteres

especiais, como por exemplo: ç é, Ê, etc.

Estabelece o endereço da CGRAM no contador de endereços (AC) como um

número binário AAAAAA e após isto os dados serão escritos ou lidos pela CPU neste

endereço. Cada caracter especial ocupa 8 endereços na CGRAM.

3.1.8 – Endereçamento da DDRAM

Estabelece o endereço da DDRAM no contador de endereços (AC) como um

número binário AAAAAAA e após isto os dados serão escritos ou lidos pela CPU neste

endereço. Para os display de uma linha AAAAAAA varia de 80H a CFH. Já para todos

os display de duas linhas varia de 80H a A7H para a primeira linha e de C0H a E7H

para a segunda linha.

3.1.9 – Busy Flag (BF)

Milton Barreiro Junior – “ETE Getúlio Vargas”

93

Page 99: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Busy Flag ou o bit 7 indica ao sistema onde está conectado o módulo LCD, se o

controlador do módulo está ocupado com alguma operação interna (BF=1), e neste

caso, não aceita nenhuma instrução até que BF volte para 0.

Além disso, permite a leitura do conteúdo do contador de endereços (AC)

expressa por AAAAAAA. O contador de endereços pode conter tanto endereço da

CGRAM como da DDRAM, depende neste caso, da instrução anterior.

3.1.10 – Escrita de dados na DDRAM ou CGRAM

Escreve o byte AAAAAAAA tanto na CGRAM como na DDRAM, dependendo da

instrução anterior (que define o endereço). Após a escrita, o endereço é

automaticamente incrementado ou decrementado de uma unidade dependendo do

modo escolhido (ver item 3.1.3).

3.1.11 – Leitura de dados na DDRAM ou CGRAM

Faz uma leitura na CGRAM ou na DDRAM, dependendo da instrução anterior

(que define o endereço). É importante que precedendo a esta leitura seja executado a

instrução de estabelecimento do endereço da CGRAM ou DDRAM, pois caso contrário

o dado lido é inválido.

Milton Barreiro Junior – “ETE Getúlio Vargas”

94

Page 100: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

3.2 – TABELAS DE ENDEREÇOS DOS CARCTERES NA DDRAM

A seguir resumiremos os endereços da DDRAM (em hexadecimal) dos

caracteres da maioria dos módulos LCD disponíveis no mercado.

Milton Barreiro Junior – “ETE Getúlio Vargas”

95

Page 101: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

OBS:

· Para os módulos de 04 linhas estamos considerando que existe um outro pino

de habilitação (como o pino 6) para as duas últimas linhas, portando outros endereços

de hardware.

· Antes de enviar uma instrução para escrita de dados no display, enviar antes

uma de endereçamento na DDRAM, com o endereço onde deve ser escrito o caracter, tipo

um gotoxy().

3.3 – TABELAS DE ENDEREÇOS DOS CARCTERES NA CGRAM

Os caracteres especiais previamente programado, durante a inicialização,

podem ser utilizados a qualquer tempo como se fossem caracteres normais, lembrando

que os endereços bases em hexadecimal para gravação dos caracteres especiais, na

maioria dos módulos LCD, são respectivamente: 40, 48, 50, 58, 60, 68, 70 e 78. Cada

caracter especial ocupa 8 (oito) endreços.

Milton Barreiro Junior – “ETE Getúlio Vargas”

96

Page 102: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Tabela 7 - Caracter especial {ç} na CGRAM

Isto significa que para utilizarmos o caracter gravado no endereço base 50,

durante a inicialização ou reset do sistema, teremos que escrevermos 8 bytes entre os

endereços 50 e 57, para construirmos o caracter. Para ilustrar este procedimento,

supor que queiramos construir o caracter {ç} no endereço base 50. Neste caso,

devemos construir o mapa deste caracter especial como mostrado na Tabela 7

(supondo estar trabalhando com matriz 7x5 e com auto incremento de endereço a cada

escrita). Observe que o último endereço sempre será 00, pois esta posição é sempre

ocupada pelo cursor.

4 – INICIALIZAÇÃO DOS MÓDULOS LCD

Toda vez que alimentamos o módulo LCD deve ser executado o procedimento

de inicialização, que consiste no envio de uma seqüência de instruções para configurar

o modo de operação para execução de um dado programa de interfaceamento. Em

muitos display este procedimento ocorre automaticamente, dentro de condições

específicas que envolve temporizações mínimas referente a transição do nível lógico 0

para 1, ao ligarmos a fonte. Em caso de dúvidas, recomendamos o envio destas

instruções após o reset do sistema.

a) Inicialização para sistemas 8 bits de dados (5 instruções)

Entre as duas primeiras instruções recomendamos um delay de 15 mS. As

demais instruções podem ser escritas após checar o Busy Flag.

Milton Barreiro Junior – “ETE Getúlio Vargas”

97

Page 103: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

b) Inicialização para sistemas 4 bits de dados (5 instruções)

Entre as quatro primeiras instruções recomendamos um delay de 15 mS. As

demais instruções podem ser escritas após checar o Busy Flag. Estes bits (nible)

devem estar conectados aos pinos 11, 12.13 e 14.

5 – ROTEIRO PARA PROGRAMAÇÃO

A seguir passaremos a descrever um resumo dos procedimentos para utilização

de um módulo ou display LCD:

1_ Ao energizar o módulo ajuste o potenciômetro de controle do brilho ou

contraste até obter a visualização da matriciação na primeira linha para módulo de

duas linhas ou até a matriciação de meia linha para módulos de uma linha.

2_ Alguns módulos de uma linha só funcionam com a instrução 38 ao invés de

30, conforme instruções de inicialização.

3_ O sinal de Enable (pino 6) deverá ser gerado conforme a temporização

mostrada na Figura 2. Os códigos de dados ou de instruções só serão processados

pelo processador do módulo após a descida do sinal do Enable.

Milton Barreiro Junior – “ETE Getúlio Vargas”

98

Page 104: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

4_ Para ajustar a velocidade de comunicação entre a CPU do usuário e o

módulo LCD existem duas possibilidades:

· Intercalar uma rotina de atraso de aproximadamente 15 mS entre as

instruções.

· Fazer a leitura do Busy Flag antes do envio de cada instrução e só enviar

quando o mesmo for 0. Neste caso, a única exceção será durante a inicialização.

1_ Durante a inicialização enviar a seqüência correta das instruções de

inicialização conforme item 3.4

2_ Para programar caracteres na CGRAM, faça inicialmente o endereçamento

da mesma.

3_ Após a escrita de dados na CGRAM envie a instrução 01, para posicionar o

cursor.

4_ Para escrever os caracteres especiais previamente gravados na CGRAM,

utilize os códigos de 00 até 07 correspondente aos endereços bases de 40, 48 até 78

em hexa.

6 – COMANDOS ÚTEIS

Milton Barreiro Junior – “ETE Getúlio Vargas”

99

Page 105: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

Obs:

Após o endereçamento da CGRAM, o cursor se desloca para a primeira posição

da segunda linha (ou metade), portanto é recomendado enviar a instrução 01 ou “limpa

display e cursor home”.

Milton Barreiro Junior – “ETE Getúlio Vargas”

100

Page 106: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

7 – CUIDADOS ESPECIAIS COM MÓDULOS LCD

a ) MANUSEIO

· Somente retire o módulo de sua embalagem protetora imediatamente antes de

sua instalação · Não guarde os módulos em recintos de alta temperatura e alta

umidade. A temperatura de armazenamento deverá estar compreendida entre 5 e 30

oC.

· O LCD é coberto por uma lâmina plástica polarizada a qual não pode ser

riscada. Cuidado em seu manuseio. Para a limpeza da lâmina utilize cotonetes

embebido em benzina. Não utilize outros tipos de solventes.

· Observe cuidadosamente os procedimentos de controle anti-estático quando

manusear os módulos. Eles incorporam circuitos integrados CMOS LSI os quais são

Milton Barreiro Junior – “ETE Getúlio Vargas”

101

Page 107: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

sensíveis à descarga eletrostática. Não toque nos terminais do conector, trilhas do

circuito impresso e/ou terminais do CI.

b) INSTALAÇÃO

· Nunca desmonte o módulo

· Use uma estação de solda aterrada para soldagem de conectores ou terminais.

· montador deverá também ser convenientemente aterrado.

· Sempre que o projeto o permita, instale o módulo atrás de uma janela protetora

de plástico ou vidro.

· Somente retire a fita adesiva que protege a lâmina plástica frontal

imediatamente antes de seu uso.

8 – OPERAÇÃO

· Nunca instale ou desconecte o módulo com sua alimentação ligada.

· Sempre opere os módulos respeitando sua gama de temperatura de operação.

· Observe cuidadosamente os valores das tensões de alimentação e os níveis

dos sinais de controle.

· Ajuste a tensão no pino 3 (V0) para obter o contraste mais conveniente para

uma dada aplicação.

Milton Barreiro Junior – “ETE Getúlio Vargas”

102

Page 108: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

9 – Software de Teste do LCD

;****************** Programa de Escrita em LCD *******************

;* *

;* POR: MILTON BARREIRO JUNIOR *

;* DATA: JUNHO DE 2006 *

;************************************************************************

;******************** Declaração de Variáveis ***********************

;* DEFINIÇÃO DOS I/O'S DE CONEXÃO DO LCD *

;************************************************************************

Milton Barreiro Junior – “ETE Getúlio Vargas”

103

Page 109: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

DISPLAY EQU P2 ;Define port P2 como bits de dados do LCD

RS EQU P3.5 ;Define P3.5 como bit RS do LCD

RW QUE P3.6 ;Define P3.6 como bit RW do LCD

EN EQU P3.7 ;Define P3.7 como bit EN do LCD

ORG 0000H

LJMP START

ORG 0050H

START: MOV SP, #40H ;Ajusta Stack Pointer

;************************** Parâmetros do LCD **************************

;* DEFINE MODO DE OPERAÇÃOO DO LCD *

;****************************************************************************

CLR EN ;Bit EN=0

CLR RS ;Bit RS=0

CLR RW ;Bit RW=0

MOV A, #38H ;Define LCD como matriz 7x5 pixels e 8 bits de dados

LCALL CMD ;Escreve comando no LCD

MOV A, #0EH ;Liga LCD e ativa cursor

LCALL CMD ;Escreve comando no LCD

MOV A, #06H ;Cursor deslocando para a direita

LCALL CMD ;Escreve comando

MOV A, #01H ;Limpa LCD

LCALL CMD ;Escreve comando

;******************************** Escreve no LCD *******************************

;* ROTINA DE ESCRITA DE MENSAGENS NO LCD *

;***********************************************************************************

WRITE: MOV A, #80H ;Posiciona LCD no primeiro caractere na primeira linha

LCALL CMD ;Escreve comando

MOV DPTR, #MSG1 ;Movimenta inicio da tabela da primeira mensagem para o DPTR

LCALL MSG ;Escreve primeira mensagem

MOV A, #0C0H ;Posiciona LCD no primeiro caractere da segunda linha

LCALL CMD ;Escreve comandoMilton Barreiro Junior – “ETE Getúlio Vargas”

104

Page 110: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

MOV DPTR, #MSG2 ;Movimenta inicio da tabela da segunda mensagem para o DPTR

LCALL MSG ;Escreve segunda mensagem

LJMP WRITE

;************************* Escreve Comandos no LCD *************************

;* ENVIA COMANDOS DE ESCRITA NO LCD *

;***********************************************************************************

CMD: SETB EN ;Esse bloco de instruções é

CLR RS ;responsável pela escrita de

MOV DISPLAY,A ;comandos e dados no LCD

LCALL DELAY

CLR EN

LCALL DELAY

RET

MSG: MOV R1, #00H

WRCHAR: MOV A, R1

INC R1

MOVC A, @A+DPTR

CJNE A, #'$', NEXTCHAR

RET

NEXTCHAR: SETB EN

SETB RS

MOV DISPLAY,A

LCALL DELAY

CLR EN

LCALL DELAY

LJMP WRCHAR

;******************************** Rotina de Delay ********************************

;* ROTINA QUE CONTA TEMPO DE 10mS PARA ESCRITA NO LCD *

;***********************************************************************************

DELAY: MOV TMOD, #11H ;Essa rotina tem como objetivo

MOV TCON, #00H ;contar tempo de 10mS de atrazo

MOV TH0, #0D8H ;para que o LCD seja capaz deMilton Barreiro Junior – “ETE Getúlio Vargas”

105

Page 111: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

MOV TL0, #0F0H ;ler comandos e dados

CLR TF0

SETB TR0

JNB TF0, $

CLR TF0

CLR TR0

RET

;****************************** Tabela de Mensagens **************************

;* MENSAGENS A SEREM ESCRITAS NO LCD *

;* DEVEM SER ESCRITAS NO FINAL DO PROGRAMA *

;***********************************************************************************

MSG1: DB " TESTE DO $" ;Tabela da primeira mensagem

MSG2: DB " LCD OK $" ;Tabela da segunda mensagem

END ;Fim de programa

10 – Software de teste do teclado

; ROTINA DE LEITURA DE TECLADO MATRICIAL 4X3, KIT ETE JORGE STREET

; CONFIGURAÇÃO DO TECLADO

; P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0

; L4 L3 L2 L1 C3 C2 C1 -

TECLADO EQU P1 ;DEFINIR END PORT ONDE ESTÁ O TECLADO

MARCTEC EQU 23H ;MARCADOR DE MEMORIA

; OBS: ALTERA REGS A, ACC E R7

MOV SP,#40H

Milton Barreiro Junior – “ETE Getúlio Vargas”

106

Page 112: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

; ********************** EXEMPLO DE ROTINA DE LEITURA DE TECLADO ********************

VOLTA: LCALL VETEC

CJNE A, #0FH, ESC

LJMP VOLTA

ESC: MOV P3, A

LJMP VOLTA

;*********************************************************************************************************

;*********** SUBROTINAS DO TECLADO (COLOCAR NO FINAL DO PROGRAMA) **********

; RETORNO TECLA ACIONADA OU OFH SEM TECLA

VETEC: MOV TECLADO, #0FH

NOP

NOP

MOV A, TECLADO

CJNE A, #0FH, VETEC1

RET

VETEC1: LCALL DETEC

PUSH ACC

LCALL ESTEC

POP ACC

RET

DETEC: MOV MARCTEC, #7FH

DETEC1: MOV TECLADO, MARCTEC

NOP

NOP

MOV A, TECLADO

CJNE A, MARCTEC, VETEC0

MOV A, MARCTEC

RR A

MOV MARCTEC, A

CJNE A, #0F7H, DETEC1

RET

VETEC0: MOV MARCTEC, A

Milton Barreiro Junior – “ETE Getúlio Vargas”

107

Page 113: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

MOV DPTR, #TABTEC

MOV R7, #00H

VETECA: MOV A, R7

MOVC A, @A+DPTR

CJNE A, MARCTEC, VETECB

MOV A, R7

RET

VETECB: INC R7

SJMP VETECA

ESTEC: MOV R0, #02H

LCALL AT50R0

VESTEC: MOV TECLADO, #0FH

NOP

NOP

MOV A, TECLADO

CJNE A, #0FH, VESTEC

RET

;****************************** SUBROTINA DE ATRASO 50MS X R0 ******************************

AT50R0: MOV TH0, #3CH

MOV TL0, #0B0H

MOV TMOD, #11H

SETB TR0

CLR TF0

ATR1: JNB TF0, ATR1

DJNZ R0, AT50R0

CLR TF0

CLR TR0

RET

;*********************************************************************************************************

Milton Barreiro Junior – “ETE Getúlio Vargas”

108

Page 114: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

;**************** TABELA DE TECLAS (COLOCAR NO FINAL DO PROGRAMA) ***************

TABTEC: DB 7BH,0EDH,0EBH,0E7H,0DDH,0DBH,0D7H,0BDH,0BBH,0B7H,7DH,77H

;*********************************************************************************************************

END

11 – Rotina exemplo de transmissão serial

;******************************** Programa de Transmissão Serial **********************************

;* POR: MILTON BARREIRO JUNIOR *

;* DATA: OUTUBRO DE 2006 *

;*********************************************************************************************************

;************************************* Declaração de Variáveis ***************************************

;* CONFIGURAÇÃO DO CANAL SERIAL E TAXA DE TRANSMISSÃO *

;*********************************************************************************************************

ORG 0000H

LJMP START

ORG 0050H

START: MOV SP, #40H ;Ajusta Stack Pointer

MOV TCON, #00H ;Zera Flags dos Timers

MOV PCON, #00H ;Define PCON.7 como ZERO (SMOD = 0 para cálculo da Taxa)

MOV TMOD, #21H ;Configura Timer 1 no modo 2 e Timer 0 no modo 1

MOV TH1, #152 ;Carrega TH1 e TL1 com 152d

MOV TL1, #152 ;para 300bps de Taxa

MOV SCON, #40H ;Configura Canal Serial no modo 1

SETB TR1

;*************************************** Rotina de Transmissão **************************************

DENOVO: MOV DPTR, #MSG

PROXIMO: CLR A

MOVC A, @A+DPTR

CJNE A, #'$', ENVIA

LJMP DENOVO

Milton Barreiro Junior – “ETE Getúlio Vargas”

109

Page 115: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

ENVIA: MOV SBUF, A

JNB TI, $

CLR TI

INC DPTR

LJMP PROXIMO

;*********************************************************************************************************

;*********************************** Tabela de String a Transmitir ***********************************

MSG: DB " Teste de Transmissão Serial $" ;Tabela da primeira mensagem

;********************************************************************************************************

END ;Fim de programa

12 – Programa exemplo conversão BCD para 7 Segmentos

;**************** PROGRAMA CONVERSÃO BCD PARA 7 SEGMENTOS ******************

;* POR: MILTON BARREIRO JUNIOR EM: JUNHO DE 2006 *

;*****************************************************************************************************

;*****************************************************************************************************

;* ROTINA DE CONVERSÃO DE BCD PARA 7 SEGMENTOS *

;*****************************************************************************************************

CONVERTE: ANL A, #00001111B ;ACC Recebe o valor BCD

MOV DPTR, #TABDISP ;a ser convertido de

MOVC A, @A+DPTR ;para 7 Segmentos

RET

;*****************************************************************************************************

Milton Barreiro Junior – “ETE Getúlio Vargas”

110

Page 116: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

;*****************************************************************************************************

;* TABELA DE CONVERSÃO DECIMAL E HEXADECIMAL PARA 7 SEGMENTOS *

;*****************************************************************************************************

TABDISP: DB 11000000B ;Tabela

DB 11111001B ;de

DB 10100100B ;valores

DB 10110000B ;para

DB 10011001B ;display

DB 10010010B ;7 segmentos

DB 10000010B ;anodo

DB 11111000B ;comum

DB 10000000B ;que

DB 10011000B ;vai

DB 11001000B ;de

DB 10000011B ;zero a nove em decimal,

DB 11000110B ;até

DB 10100001B ;F

DB 10000110B ;em

DB 11000000B ;Hexadecimal

END ;Indica fim de programa ao compilador

13 – Exemplo didático de um frequencímetro (0 – 999Hz)

;*********************** PROGRAMA FREQUENCÍMETRO *************************

;* ESSE FREQUENCÍMETRO MEDE E INDICA VALORES ATÉ 999Hz *

;* POR: MILTON BARREIRO JUNIOR EM: NOVEMBRO DE 2006 *

;******************************************************************************************

;UFREQ EQU R1 ;Incremento de unidade

;DFREQ EQU R2 ;Incremento de dezena

;CFREQ EQU R3 ;Incremento de centena

;******************************************************************************************

;* RESERVA ENDEREÇOS DOS VETORES DE INTERRUPÇÕES *

;******************************************************************************************

ORG 0000H

Milton Barreiro Junior – “ETE Getúlio Vargas”

111

Page 117: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

LJMP INICIO ;Busca linha de inicio

ORG 000BH

LJMP INTT0 ;Vetor de Int Timer 0

ORG 0013H

LJMP INTE1 ;Vetor de Int Ext 1

;*******************************************************************************************

;* CARREGA VALORES INICIAIS DAS VARIÁVEIS *

;*******************************************************************************************

ORG 0050H

INICIO: MOV IP, #00000010B ;Prioriza Int T0

SETB ET0 ;Habilita Int T0

SETB EX1 ;Habilita Int EX1

SETB EA ;Habilita Int Global

MOV SP, #40H ;Ajusta Stack Pointer

MOV TMOD, #11H ;Configura T0 e T1 no Modo 1

MOV TCON, #00000101B ;Modo de atuação das Interrupções

MOV TH0, #3CH ;Carrega inicio de contagem para

MOV TL0, #0B0H ;timer 0 contar 50mS

SETB TR0

;*****************************************************************************************

;* ROTINA DE RESET DO FREQUENCÍMETRO *

;*****************************************************************************************

MOV R0, #00H

MOV R1, #00H

MOV R2, #00H

MOV R3, #00H

MOV R4, #00H

MOV R5, #00H

MOV R6, #00H

;*****************************************************************************************

;* ROTINA DE MULTIPLEXAÇÃO DOS DISPLAYS *

;* MOSTRA VALORES DE FREQUENCIA MEDIDA *

Milton Barreiro Junior – “ETE Getúlio Vargas”

112

Page 118: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

;*****************************************************************************************

DISPLAY: MOV A, R4 ;Carrega no ACC valor de Unidade de Segundos

LCALL CONVERTE ;Converte Decimal para 7 Segmentos

SETB P2.2 ;Desliga Displays não utilizados

MOV P0, A ;Mostra Unidade de Segundos

CLR P2.0 ;Liga Digito Unidade de Segundos

ACALL TEMPO ;Tempo Display ativo

MOV A, R5 ;Carrega no ACC valor de Dezena de Segundos

LCALL CONVERTE ;Converte Decimal para 7 Segmentos

SETB P2.0 ;Desliga Displays não utilizados

MOV P0, A ;Mostra Dezena de Segundos

CLR P2.1 ;Liga Digito Dezena de Segundos

ACALL TEMPO ;Tempo Display ativo

MOV A, R6 ;Carrega no ACC valor dos Minutos

LCALL CONVERTE ;Converte Decimal para 7 Segmentos

SETB P2.1 ;Desliga Displays não utilizados

MOV P0, A ;Mostra Minutos

CLR P2.2 ;Liga Digito Minutos

ACALL TEMPO ;Tempo Display ativo

LJMP DISPLAY

;******************************************************************************************

;* TRATAMENTO DA INTERRUPÇÃO DO TIMER 0 E CRONÔMETRO *

;******************************************************************************************

INTT0: CLR TR0 ;Trata interrupção Int T0

MOV TH0, #3CH ;para base de tempo de 1s

MOV TL0, #0B0H

SETB TR0

INC R0

CJNE R0, #20, SAI

MOV A, R1

MOV R4, A

MOV A, R2

Milton Barreiro Junior – “ETE Getúlio Vargas”

113

Page 119: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

MOV R5, A

MOV A, R3

MOV R6, A

MOV R0, #00H

MOV R1, #00H

MOV R2, #00H

MOV R3, #00H

SAI: RETI

;******************************************************************************************

;* TRATAMENTO DA INTERRUPÇÃO EXTERNA INT_1 *

;******************************************************************************************

INTE1: INC R1

CJNE R1, #10, ESC

MOV R1, #00

INC R2

CJNE R2, #10, ESC

MOV R2, #00

INC R3

CJNE R3, #10, ESC

MOV R3, #00

ESC: RETI

;******************************************************************************************

;* ROTINA DE CONVERSÃO DE BCD PARA 7 SEGMENTOS *

;******************************************************************************************

CONVERTE: ANL A, #00001111B ;Rotina de

MOV DPTR, #TABDISP ;Conversão

MOVC A, @A+DPTR ;Decimal para 7 Segmentos

RET

;******************************************************************************************

;* TEMPO DE AMOSTRAGEM DOS DÍGITOS *

;******************************************************************************************

Milton Barreiro Junior – “ETE Getúlio Vargas”

114

Page 120: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

TEMPO: MOV TH1, #0D8H ;Carrega inicio de contagem para

MOV TL1, #0F0H ;timer 1 contar 10mS

CLR TF1

SETB TR1

JNB TF1, $

RET

;******************************************************************************************

;* TABELA DE CONVERSÃO DECIMAL E HEXADECIMAL PARA 7 SEGMENTOS *

;******************************************************************************************

TABDISP: DB 11000000B ;Tabela

DB 11111001B ;de

DB 10100100B ;valores

DB 10110000B ;para

DB 10011001B ;display

DB 10010010B ;7 segmentos

DB 10000010B ;anodo

DB 11111000B ;comum

DB 10000000B ;que

DB 10011000B ;vai

DB 11001000B ;de

DB 10000011B ;zero a nove em decimal,

DB 11000110B ;até

DB 10100001B ;F

DB 10000110B ;em

DB 11000000B ;Hexadecimal

END ;Indica fim de programa ao compilador

Milton Barreiro Junior – “ETE Getúlio Vargas”

115

Page 121: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

14 – Exemplo de rotina para teclado matricial 4x4

;************************ Programa de Teclado Matricial ************************

;* POR: MILTON BARREIRO JUNIOR *

;* DATA: OUTUBRO DE 2006 *

;* FONTE: www.8052.com

;************************************************************************************

;******************** CONFIGURAÇÃO DO TECLADO (MATRIZ 4X4) *********************

;

;P1.0 ---------------------------\

; |

;P1.1 -----------------------\

; | |

Milton Barreiro Junior – “ETE Getúlio Vargas”

116

Page 122: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

;P1.2 -------------------\

; | | |

;P1.3 ---------------\

; | | | |

;

;P1.7 -------------- 1 - 2 - 3 - A ---

;

;P1.6 -------------- 4 - 5 - 6 - B ---

;

;P1.5 -------------- 7 - 8 - 9 - C ---

;

;P1.4 -------------- * - 0 - # - D ---

; | | | |

;

;*************************************************************************************

;********************** Define o Port e Memoria das Teclas *********************

KBOARD EQU P1 ;Teclado Matricial em P1

MEMKEY EQU R1 ;Memória de tecla pressionada

;*************************************************************************************

MOV SP, #40H ;Ajusta STACK POINTER

;******************* Loop de Leitura do Teclado Matricial **********************

KEY_B: LCALL BUSCA

CJNE A, #0FH, SAIDA

LJMP START

SAIDA: MOV P3, A

LJMP KEY_B

;*************************************************************************************

;************************ SUBROTINAS DO TECLADO *************************

; devem ser inserida no final do programa

; RETORNA TECLA ACIONADA OU OFH SEM TECLA ACIONADA

;*************************************************************************************

Milton Barreiro Junior – “ETE Getúlio Vargas”

117

Page 123: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

BUSCA: MOV KBOARD, #0FH ;Carrega P1 com 0FH

NOP

NOP

NOP

NOP

MOV A, KBOARD ;Le teclado e salva no Acumulador

CJNE A, #0FH, SELECT ;Se valor lido igual 0Fh, retorna para loop de leitura

RET

SELECT: LCALL LOOP

PUSH A

LCALL DEBOU

POP A

RET

LOOP: MOV MEMKEY, #7FH

LOOP1: MOV KBOARD, MEMKEY

NOP

NOP

NOP

NOP

MOV A, KBOARD

CJNE A, MEMKEY, PROCURA

MOV A, MEMKEY

RR A

MOV MEMKEY, A

CJNE A, #0F7H, LOOP1

RET

PROCURA: MOV MEMKEY, A

MOV DPTR, #TABKEY

MOV R7, #00H

NOVO: MOV A, R7Milton Barreiro Junior – “ETE Getúlio Vargas”

118

Page 124: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

MOVC A, @A+DPTR

CJNE A, MEMKEY, PROXIMA

MOV A, R7

RET

PROXIMA: INC R7

LJMP NOVO

;*******************************************************************************

;************************** DEBOUNCE DE 50mS **************************

DEBOU: MOV TH0, #3CH

MOV TL0, #0B0H

MOV TMOD, #11H

SETB TR0

CLR TF0

JNB TF0, $

CLR TF0

CLR TR0

RET

;******************************************************************************

;************************** TABELA DE TECLAS ***************************

TABKEY: DB 0EBH ;Tecla 0

DB 77H ;Tecla 1

DB 7BH ;Tecla 2

DB 7DH ;Tecla 3

DB 0B7H ;Tecla 4

DB 0BBH ;Tecla 5

DB 0BDH ;Tecla 6

DB 0D7H ;Tecla 7

DB 0DBH ;Tecla 8

DB 0DDH ;Tecla 9

DB 0E7H ;Tecla *

DB 0EDH ;Tecla #

Milton Barreiro Junior – “ETE Getúlio Vargas”

119

Page 125: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

DB 7EH ;Tecla A

DB 0BEH ;Tecla B

DB 0DEH ;Tecla C

DB 0EEH ;Tecla D

;*****************************************************************************

END ;Final do Programa

15 – Programa exemplo de controle digital de temperatura

;****************************************************

; Controle digital de temperatura

; Software implementado por alunos do

; curso de Automação Industrial do CEFET (2006)

;

; Autores:

; Alessander Martins Leite

; Flávio Roberto dos Santos

; Maércio Litwin Camargo

;****************************************************

Milton Barreiro Junior – “ETE Getúlio Vargas”

120

Page 126: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

ORG 0000H ;Inicio do programa

MOV PSW, #10H

MOV R1, #3CH ;Temperatura=60 Graus Celsius

LJMP COMECO

ORG 0030H

COMECO: MOV SP, #40H

CLR P2.5

CLR P2.6

CLR P2.7

LCALL INIC_LCD

LCALL CLEAR_LCD

LCALL TEXTOS

LCALL LINHA2

LCALL TESTOC

LCALL POS0

LCALL SET_TEMP

LCALL VER_TEMP

LJMP $

;****************************************************

; Inicializa Display LCD

;****************************************************

INIC_LCD: SETB P2.5

CLR P2.7

MOV P0, #38H

LCALL TEMPO0

CLR P2.5

LCALL ESPERA_LCD

SETB P2.5

Milton Barreiro Junior – “ETE Getúlio Vargas”

121

Page 127: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

CLR P2.7

MOV P0, #0C0H

LCALL TEMPO0

CLR P2.5

LCALL ESPERA_LCD

SETB P2.5

CLR P2.7

MOV P0, #06H

LCALL TEMPO0

CLR P2.5

LCALL ESPERA_LCD

RET

;****************************************************

; Rotina para limpar o LCD

;****************************************************

CLEAR_LCD: SETB P2.5

CLR P2.7

MOV P0, #01H

LCALL TEMPO0

CLR P2.5

LCALL ESPERA_LCD

RET

;****************************************************

; Rotina para mudar para linha 2 do LCD

;****************************************************

LINHA2: SETB P2.5

CLR P2.7

MOV P0, #0C0H

Milton Barreiro Junior – “ETE Getúlio Vargas”

122

Page 128: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

LCALL TEMPO0

CLR P2.5

LCALL ESPERA_LCD

RET

;****************************************************

; Rotina para mudar de posição para

; ajustar a temperatura

;****************************************************

POS0: PUSH A

SETB P2.5

CLR P2.7

MOV P0, #8CH

LCALL TEMPO0

CLR P2.5

LCALL ESPERA_LCD

POP A

RET

;****************************************************

; Rotina para mudar de posição para

; controlar a temperatura

;****************************************************

POS1: PUSH A

SETB P2.5

CLR P2.7

MOV P0, #0CCH

LCALL TEMPO0

CLR P2.5

LCALL ESPERA_LCD

POP A

Milton Barreiro Junior – “ETE Getúlio Vargas”

123

Page 129: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

RET

;****************************************************

; Rotina TEMPO0 (1 segundo)

;****************************************************

TEMPO0: MOV PSW, #18H

MOV R0, #02H

MOV TMOD, #01H

NAO_AC0: MOV TH0, #0FFH

MOV TL0, #0FAH

SETB TR0

ESP0: JNB TF0, ESP0

CLR TF0

CLR TR0

DJNZ R0, NAO_AC0

MOV PSW, #10H

RET

;****************************************************

; Rotina TEMPO1

;****************************************************

TEMPO1: MOV PSW, #18H

MOV R0, #01H

MOV TMOD, #01H

NAO_AC1: MOV TH0, #0FFH

MOV TL0, #0FAH

SETB TR0

Milton Barreiro Junior – “ETE Getúlio Vargas”

124

Page 130: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

ESP1: JNB TF0, ESP1

CLR TF0

CLR TR0

DJNZ R0, NAO_AC1

MOV PSW, #10H

RET

;****************************************************

; Rotina de texto (ajuste)

;****************************************************

TEXTOS: MOV DPTR, #TEMPERATURAS

AS: MOV A, #00H

MOVC A, @A+DPTR

JZ FIMS

LCALL ESCRT

INC DPTR

JMP AS

FIMS: RET

;****************************************************

; Rotina de texto (controle)

;****************************************************

TEXTOC: MOV DPTR, #TEMPERATURAC

AC: MOV A, #00H

MOVC A, @A+DPTR

JZ FIMC

LCALL ESCRT

INC DPTR

Milton Barreiro Junior – “ETE Getúlio Vargas”

125

Page 131: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

JMP AC

FIMC: RET

;****************************************************

; Rotina de texto

;****************************************************

AU_TS: MOV DPTR, #ATEMPERATURA

AT: MOV A, #00H

MOVC A, @A+DPTR

JZ AFIM

LCALL ESCRT

INC DPTR

JMP AT

AFIM: RET

;****************************************************

; Rotina para setar a temperatura

;****************************************************

SET_TEMP: MOV PSW, #10H

MOV R0, #11H

MOV A, @R0

LCALL ASCI

LCALL ESCR

RET

ESCR: MOV PSW, #10H

MOV R0, #17H

ESCRV: SETB P2.5

Milton Barreiro Junior – “ETE Getúlio Vargas”

126

Page 132: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

SETB P2.7

MOV A, @R0

ADD A, #30H

MOV P0, A

LCALL TEMPO0

CLR P2.5

LCALL ESPERA_LCD

DEC R0

CJNE R0, #14H, ESCRV

LCALL TEMPO0

RET

;****************************************************

; Rotina de escrita

;****************************************************

ESCRT: SETB P2.5

SETB P2.7

MOV P0, A

LCALL TEMPO0

CLR P2.5

LCALL ESPERA_LCD

RET

;****************************************************

; Rotina de espera LCD

;****************************************************

ESPERA_LCD: SETB P2.5

SETB P2.6

CLR P2.7

Milton Barreiro Junior – “ETE Getúlio Vargas”

127

Page 133: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

MOV P0, #0FFH

ESP: LCALL TEMPO1

JB P0.7, ESP

CLR P2.5

CLR P2.7

CLR P2.6

RET

;****************************************************

; Rotina que le P3 e converte para ASCII

;****************************************************

VER_TEMP: MOV A, P3

MOV PSW, #10H

LCALL VER_C

LCALL ASCI

LCALL POS1

LCALL ESCR

LCALL M_T_S

JMP VER_TEMP

;****************************************************

; Rotina para alterar a temperatura

;****************************************************

M_T_S: JNB P2.0, AU_T

RET

AU_T: LCALL INIC_LCD

LCALL CLEAR_LCD

Milton Barreiro Junior – “ETE Getúlio Vargas”

128

Page 134: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

LCALL AU_TS

LCALL POS0

LCALL I_D

;****************************************************

; Incrementa ou decrementa temperatura

;****************************************************

I_D: MOV PSW, #10H

JNB P2.0, $

V_V: JB P2.1, D_TS

JNB P2.1, $

LCALL MAI_T

LCALL SET_TEMP

LJMP I_D

MAI_T: CJNE R1, #0FFH, MAI_TN

RET

MAI_TN: INC R1

RET

D_TS: JB P2.2, S_TS

JNB P2.2, $

LCALL MEI_T

LCALL SET_TEMP

LJMP I_D

S_TS: JB P2.0, V_V

JNB P2.0, $

LCALL COMECO

Milton Barreiro Junior – “ETE Getúlio Vargas”

129

Page 135: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

MEI_T: CJNE R1, #00H, MEI_TN

RET

MEI_TN: DEC R1

RET

;****************************************************

; Converte para código ASCII

;****************************************************

ASCI: MOV PSW, #10H

MOV R5, #00H

MOV R6, #00H

MOV R7, #00H

COMPA: CJNE A, #00H, UND

RET

UND: DEC A

INC R5

CJNE R5, #0AH, COMPA

INC R6

MOV R5, #00H

CJNE R6, #0AH, COMPA

INC R7

MOV R6, #00H

LJMP COMPA

;****************************************************

; Rotina para verificar a temperatura

;****************************************************

Milton Barreiro Junior – “ETE Getúlio Vargas”

130

Page 136: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

VER_C: MOV PSW, #10H

PUSH A

PUSH 11H

CJNE A, 11H, N

CLR P1.0

POP 11H

POP A

RET

N: JZ X

CJNE R1, #00H, DIF

CLR P1.0

POP 11H

POP A

RET

X: SETB P1.0

POP 11H

POP A

RET

DIF: DEC A

DEC R1

JZ X

CJNE R1, #00H, DIF

CLR P1.0

POP 11H

POP A

Milton Barreiro Junior – “ETE Getúlio Vargas”

131

Page 137: Apostila de 8051

Microcontrolador 8051 – Teoria e Prática

RET

;****************************************************

; Tabelas de mensagens

;****************************************************

TEMPERATURAS: DB "Temp_Setada:",00H

TEMPERATURAC: DB "Temp_Contr.:",00H

ATEMPERATURA: DB "Mudar_Temp.:",00H

END

Milton Barreiro Junior – “ETE Getúlio Vargas”

132