39
Sumário 1 – Introdução aos Microcontroladores .................................................................................. 1 1.1 – O Microcontrolador - História e Aplicação ............................................................. 1 1.2 – Motivação para o Estudo de um Microcontrolador ................................................ 1 1.2.1 – O 8051 ........................................................................................................ 2 1.3 – Sistemas Microprocessados ..................................................................................... 2 1.4 – Programação de um Microcontrolador .................................................................... 2 1.5 Sistemas de Desenvolvimento, Emuladores e Simuladores ....................................... 3 2 – Diagrama em Blocos de um Sistema Básico com Microprocessador ............................... 4 3 – Família 8051 – Hardware ................................................................................................. 5 4 – A Organização da memória do 8051 ................................................................................. 8 4.1 – RAM interna ............................................................................................................ 8 5 – Os Registros de Função Especial do 8051 ........................................................................ 10 5.1 – Palavra de Status de Programa (PSW) ..................................................................... 11 5.2 – Registro Apontador de Pilha (SP – Stack Pointer) .................................................. 12 5.3 – Registro Apontador de Dados (DPTR – Data PoinTeR) ......................................... 12 6 – Modos de Endereçamento do 8051 .................................................................................... 13 6.1 – Modo de endereçamento DIRETO .......................................................................... 13 6.2 – Modo de endereçamento de registro ou modo REGISTRADOR ............................ 13 6.3 – Modo de endereçamento INDIRETO ...................................................................... 13 6.4 – Modo de endereçamento de registros específicos ou ESPECÍFICO A REGISTRO ............................................................................................................. 14 6.5 – Modo de endereçamento IMEDIATO ou CONSTANTE IMEDIATA .................. 14 6.6 – Modo de endereçamento INDEXADO .................................................................... 14 7 – Reset no 8051 .................................................................................................................... 15 8 – Clock no 8051 ................................................................................................................... 16 9 – Interrupções no 8051 .......................................................................................................... 17 10 – Temporizadores e Contadores no 8051 ........................................................................... 19 10.1 – Modos de operação dos Contadores / Temporizadores ....................................... 20 10.1.1 – MODO 0 – Contador / Temporizador de 13 bits (8 bits com divisor de freqüência por 32) ............................................................................ 20 10.1.2 – MODO 1 – Contador / Temporizador de 16 bits .................................. 20 10.1.3 – MODO 2 – Contador / Temporizador de 8 bits com recarga automática .............................................................................................. 21 10.1.4 – MODO 3 – 1 Contador / Temporizador de 8 bits e 1 Temporizador de 8 bits ................................................................................................. 21 11 – O Canal Serial ................................................................................................................. 22 11.1 – Canal serial operando no Modo 0 ........................................................................ 22 11.1.1 – Funções dos demais bits do SCON no Modo 0 ..................................... 22 11.2 – Canal Serial operando no Modo 1 ....................................................................... 23 11.2.1 – Funções dos demais bits do SCON no Modo 1 ..................................... 23 11.2.2 – Geração de taxa de transmissão ............................................................. 23 11.3 – Canal serial operando no Modo 2 ........................................................................ 23 11.3.1 – Funções dos demais bits do SCON no Modo 2 ..................................... 24 11.4 – Canal serial operando no Modo 3 ........................................................................ 24 11.5 – Comunicação entre CIs 8051 ............................................................................... 24 12 – O assembly do 8051 ........................................................................................................ 25 12.1 – Instruções de transferência de dados ................................................................... 25 12.2 – Instruções para variáveis booleanas .................................................................... 26 12.3 – Instruções aritméticas .......................................................................................... 26 12.4 – Instruções de desvio ............................................................................................ 27 12.5 – Instruções lógicas ................................................................................................ 28 13 – Exercícios ........................................................................................................................ 29 14 – Tabela dos códigos das instruções do microcontrolador 8051 ....................................... 36 15 – Bibliografia ..................................................................................................................... 38

Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

  • Upload
    ledang

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

Sumário

1 – Introdução aos Microcontroladores .................................................................................. 1

1.1 – O Microcontrolador - História e Aplicação ............................................................. 1 1.2 – Motivação para o Estudo de um Microcontrolador ................................................ 1

1.2.1 – O 8051 ........................................................................................................ 2 1.3 – Sistemas Microprocessados ..................................................................................... 2 1.4 – Programação de um Microcontrolador .................................................................... 2 1.5 Sistemas de Desenvolvimento, Emuladores e Simuladores ....................................... 3

2 – Diagrama em Blocos de um Sistema Básico com Microprocessador ............................... 4 3 – Família 8051 – Hardware ................................................................................................. 5 4 – A Organização da memória do 8051 ................................................................................. 8

4.1 – RAM interna ............................................................................................................ 8 5 – Os Registros de Função Especial do 8051 ........................................................................ 10

5.1 – Palavra de Status de Programa (PSW) ..................................................................... 11 5.2 – Registro Apontador de Pilha (SP – Stack Pointer) .................................................. 12 5.3 – Registro Apontador de Dados (DPTR – Data PoinTeR) ......................................... 12

6 – Modos de Endereçamento do 8051 .................................................................................... 13 6.1 – Modo de endereçamento DIRETO .......................................................................... 13 6.2 – Modo de endereçamento de registro ou modo REGISTRADOR ............................ 13 6.3 – Modo de endereçamento INDIRETO ...................................................................... 13 6.4 – Modo de endereçamento de registros específicos ou ESPECÍFICO A

REGISTRO ............................................................................................................. 14 6.5 – Modo de endereçamento IMEDIATO ou CONSTANTE IMEDIATA .................. 14 6.6 – Modo de endereçamento INDEXADO .................................................................... 14

7 – Reset no 8051 .................................................................................................................... 15 8 – Clock no 8051 ................................................................................................................... 16 9 – Interrupções no 8051 .......................................................................................................... 17 10 – Temporizadores e Contadores no 8051 ........................................................................... 19

10.1 – Modos de operação dos Contadores / Temporizadores ....................................... 20 10.1.1 – MODO 0 – Contador / Temporizador de 13 bits (8 bits com divisor

de freqüência por 32) ............................................................................ 20 10.1.2 – MODO 1 – Contador / Temporizador de 16 bits .................................. 20 10.1.3 – MODO 2 – Contador / Temporizador de 8 bits com recarga

automática .............................................................................................. 21 10.1.4 – MODO 3 – 1 Contador / Temporizador de 8 bits e 1 Temporizador

de 8 bits ................................................................................................. 21 11 – O Canal Serial ................................................................................................................. 22

11.1 – Canal serial operando no Modo 0 ........................................................................ 22 11.1.1 – Funções dos demais bits do SCON no Modo 0 ..................................... 22

11.2 – Canal Serial operando no Modo 1 ....................................................................... 23 11.2.1 – Funções dos demais bits do SCON no Modo 1 ..................................... 23 11.2.2 – Geração de taxa de transmissão ............................................................. 23

11.3 – Canal serial operando no Modo 2 ........................................................................ 23 11.3.1 – Funções dos demais bits do SCON no Modo 2 ..................................... 24

11.4 – Canal serial operando no Modo 3 ........................................................................ 24 11.5 – Comunicação entre CIs 8051 ............................................................................... 24

12 – O assembly do 8051 ........................................................................................................ 25 12.1 – Instruções de transferência de dados ................................................................... 25 12.2 – Instruções para variáveis booleanas .................................................................... 26 12.3 – Instruções aritméticas .......................................................................................... 26 12.4 – Instruções de desvio ............................................................................................ 27 12.5 – Instruções lógicas ................................................................................................ 28

13 – Exercícios ........................................................................................................................ 29 14 – Tabela dos códigos das instruções do microcontrolador 8051 ....................................... 36 15 – Bibliografia ..................................................................................................................... 38

Page 2: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

1

MICROCONTROLADOR 8051

1. Introdução aos Microcontroladores

1.1 O Microcontrolador - História e Aplicação

Para se entender melhor o que é um microcontrolador, torna-se necessária uma abordagem histórica sobre os microcomputadores e os computadores pessoais em geral. Em janeiro de 1975, a revista Popular Electronics publicou um artigo descrevendo o Altair 8800, o primeiro computador que poderia ser construído e programado em casa. O Altair básico não tinha teclado, monitor ou drives. A programação era feita através de chaves no painel frontal. O processador utilizado era um 8080, da Intel, e a memória RAM padrão era de 256 bytes. Como curiosidade, o kit custava US$ 397 desmontado e US$ 498 montado. Uma guinada na utilidade do Altair ocorreu quando a então pequena companhia chamada Microsoft ofereceu uma versão da linguagem BASIC para o mesmo. O crescimento dessas máquinas pessoais tornou-se cada vez maior, até se chegar ao que temos hoje, onde os microcomputadores são utilizados para as mais diversas tarefas, como edição de texto, CAD (Computer Aided Design – Projeto Auxiliado por Computador), simuladores poderosos nas mais diversas áreas, planilhas de cálculo etc. Assim, um computador pessoal é uma máquina de propósito geral que requer uma série de dispositivos para ser utilizada (teclado, vídeo, impressora, drives etc). Os computadores pessoais, no entanto, tornam-se inadequados para algumas tarefas específicas, seja por seu custo ou por seu tamanho excessivo. Assim, para que se possa ter as vantagens do poder computacional sem ter-se necessidade da parafernália utilizada em um computador pessoal, utilizam-se dispositivos específicos: microcontroladores. A etmologia da palavra indica que um microcontrolador é um dispositivo pequeno (micro) e que sua função é controlar algo, podendo controlar objetos, processos ou eventos. Um microcontrolador também é conhecido como controlador embedded, porque o mesmo muitas vezes está embutido nos dispositivos que controla. É interessante fazer-se a distinção entre três conceitos: a) Microprocessador: chip responsável pelo processamento em um microcomputador. É um elemento complexo, contendo, entre outras coisas, uma unidade lógica e aritmética (ULA) e diversos registros (registradores) especiais. b) Microcomputador-de-um-só-chip: como o nome indica, reúne no mesmo chip os diversos elementos de um microcomputador: microprocessador, RAM, ROM, temporizadores, contadores, canal de comunicação serial e portas de I/O. c) Microcontrolador: microcomputador-de-um-só-chip que pode ainda conter elementos para uso industrial, tais como conversores A/D e D/A, PLL, PWM etc.

1.2 Motivação para o Estudo de um Microcontrolador

O microcontrolador, hoje em dia, é um elemento indispensável para o engenheiro eletricista ou de eletrônica, ou ainda para o técnico de nível médio da área, em função de sua versatilidade e da enorme aplicação. Entre algumas das aplicações de um microcontrolador podemos citar automação industrial, telefones celulares, auto-rádios, fornos de microondas, videocassetes, teclados, modems, impressoras e o controle de muitos dispositivos em automóveis. Além disso, a tendência da eletrônica digital é de se resumir a microcontroladores e a chips que concentram grandes circuitos lógicos, como os PLDs (Programmable Logic Devices). Para sistemas dedicados, o microcontrolador apresenta-se como a solução mais acessível, em função do baixo custo e facilidade de uso.

Page 3: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

2

1.2.1 O 8051

O 8051, lançado pela Intel na década de 80, é, sem dúvida, o microcontrolador mais popular da história. De acordo com o Philips Components em Notícias de Jan/Fev/Mar 95, a produção mundial do dispositivo naquele ano estava estimada em 100 milhões de unidades, representando aproximadamente 30% do mercado mundial de microcontroladores de 8 bits. O dispositivo em si é um microcontrolador de 8 bits relativamente simples, mas com ampla aplicação. Porém, o mais importante é que não existe somente o CI 8051, mas sim uma família de microcontroladores baseada no mesmo. Entende-se família como sendo um conjunto de dispositivos que compartilha os mesmos elementos básicos, tendo também um mesmo conjunto básico de instruções.

1.3 Sistemas Microprocessados

Sistemas microprocessados são aqueles que têm por elemento central um microprocessador. O microprocessador funciona como um sistema seqüencial síncrono, onde a cada pulso, ou grupos de pulsos de clock, uma instrução é executada. Entre os microprocessadores mais conhecidos podemos citar o Z-80, 8086, 8088, 68000, 80286, 80386, 80486, Pentium e Athlon. Embora hoje em dia já existam microprocessadores que trabalhem em unidades de GHz, como o Pentium IV, o 8051 utiliza tipicamente um clock de 12 MHz, dividido internamente por 12, o que gera uma taxa de 1µs para cada instrução básica (existem também instruções de 2µs e 4µs). Nos microcontroladores, diferentemente do que ocorre em um computador pessoal, o programa é tipicamente armazenado em memória semicondutora do tipo ROM (PROM, EPROM EEPROM, Flash EPROM) ou ainda NVRAM. A memória de programa pode estar no próprio chip do microcontrolador ou em um chip separado. As interfaces com o mundo exterior variam muito com a aplicação, e podem incluir um pequeno display, um teclado pequeno (keypad) ou chaves, sensores, relés, motores etc.

1.4 Programação de um Microcontrolador

Para programar um microcontrolador, pode-se utilizar código de máquina, linguagem assembly específica para o processador em questão ou uma linguagem de alto nível. O uso direto de código de máquina (machine code) é a forma mais básica e trabalhosa de programação, visto que o código de instrução tem que ser procurado em uma tabela. Uma linguagem assembly (montagem) utiliza o auxílio de mnemônicos para facilitar a lembrança. Por exemplo, é muito mais fácil utilizar o mnemônico SETB C, indicando que o bit C (carry) deve ser “setado” do que se lembrar do código de máquina para a operação, 11010011. No entanto, é necessário converter o programa escrito com os mnemônicos para código de máquina, o que manualmente só se torna viável para programas muito curtos. Torna-se necessário, então, o uso de um programa montador (assembler), o qual é um programa que roda em um computador pessoal e converte a linguagem assembly para código de máquina, geralmente ainda oferecendo facilidades de edição e geração de listas. Uma outra possibilidade é a utilização de uma linguagem de alto nível. As linguagens de alto nível utilizam uma sintaxe padrão que facilita a portabilidade de programas de um dispositivo para outro, enquanto que a linguagem assembly é muito mais específica. O grifo na palavra facilita é importante, pois modificações são quase sempre necessárias. Uma vantagem adicional de uma linguagem de alto nível é a de permitir que se faça em poucas linhas o que exigiria muitas (às vezes muitas mesmo!) em assembly. No entanto, linguagens de alto nível têm que ser compiladas ou interpretadas. Uma mesma linguagem de alto nível pode, portanto, fazer uso de um compilador ou de um interpretador. Um interpretador faz a tradução do programa em código de máquina cada vez que o programa é rodado, enquanto que um compilador faz este processo uma única vez, criando um arquivo executável que pode ser rodado diretamente. A vantagem de um interpretador sobre um compilador é a de permitir que o programa seja rodado imediatamente após ser escrito, sem a necessidade de um passo separado de compilação ou montagem. No entanto, a velocidade de execução é menor com interpretador, além do espaço

Page 4: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

3

de memória ocupado pelo interpretador propriamente dito. Os programas compilados são mais rápidos do que os interpretados. Porém, quando comparado com um programa equivalente escrito em assembly, um programa compilado é, geralmente, maior e mais lento. Assim, quando o espaço em memória disponível é muito pequeno e/ou precisa-se de o máximo de velocidade, programas em assembly são a melhor solução. Uma linguagem de alto nível pode ainda não oferecer todos os recursos que podem ser obtidos com a linguagem assembly, problema que pode ser contornado com a chamada de sub-rotinas em assembly, quando necessário.

1.5 Sistemas de Desenvolvimento, Emuladores e Simul adores

Em um projeto, após um programa ter sido escrito, é necessário testá-lo para verificar se está funcionando de acordo com o previsto. Se não estiver, deve-se fazer no mesmo as modificações necessárias e testá-lo novamente. Trata-se do processo de depuração do programa. A maneira mais rudimentar de se testar um programa é a gravação direta do mesmo em EPROM (processo trabalhoso). Após a gravação, instala-se a EPROM no sistema, testa-se o programa e verificam-se os resultados. Se algo sair errado, repete-se todo o procedimento. Pode-se notar que este método é muito trabalhoso. Uma solução mais prática é o uso de um sistema de desenvolvimento. Normalmente, um sistema de desenvolvimento tem um programa monitor, armazenado em memória permanente, e um link serial para um computador pessoal. O programa monitor permite a carga do programa a ser testado, via link serial, do computador pessoal para memória RAM do sistema microcontrolado, para ser rodado e testado. A maioria dos sistemas de desenvolvimento também possui recursos que facilitam a depuração, como a possibilidade de rodar o programa passo-a-passo ou a colocação de breakpoints no programa. Trata-se de um processo muito mais eficiente do que o anterior. Uma vez que o programa esteja funcionando corretamente, o mesmo poderá ser gravado em memória permanente, uma única vez. Uma alternativa a um sistema de desenvolvimento é o uso de um emulador. Um emulador de memória, por exemplo, é conectado ao soquete onde estaria a EPROM e também se comunica com um computador pessoal, possibilitando também um processo de depuração com recursos como os apresentados por um sistema de desenvolvimento. Para quem não possui um sistema de desenvolvimento ou um emulador, uma possibilidade é o uso de um simulador. Trata-se de um programa que roda em um computador pessoal e mostra o que aconteceria se um processador específico rodasse um determinado programa. Normalmente, um simulador permite que se visualize posições de memória interna e registros de função especial, permite a colocação de breakpoints ou mesmo rodar um programa passo-a-passo. No entanto, os simuladores têm duas desvantagens: a primeira está relacionada com o fato de não conseguirem simular todas as características do dispositivo em questão, principalmente características de temporização. E a segunda diz respeito à definição de um simulador, isto é, sendo um programa, o mesmo tem que ter sido perfeitamente programado para se comportar como o que simula, e disto o usuário não pode estar certo. Outra alternativa é a utilização do laboratório de experimentação remota. Como exemplo, tem-se o da UFSC, onde acontece a real execução do programa, e não a simulação. O mesmo pode ser acessado, via Internet, no endereço http://www.inf.ufsc.br/~jbosco/labvir.htm.

Page 5: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

4

2. Diagrama em Blocos de um Sistema Básico com Microprocessador

MEMÓRIADE

PROGRAMA

MEMÓRIADE

DADOS

PORTASDE

ENTRADASE SAÍDAS

DECODIFICADORDE ENDEREÇOS

GERADORDE

CLOCK

GERADORDE

RESET

INTERRUPÇÕES

MICROPROCESSADOR

BARRAMENTO DE DADOS

BARRAMENTO DE ENDEREÇOS

BARRAMENTO DE CONTROLE

ALIMENTAÇÃO

Figura 2.1 - Diagrama em Blocos de um Sistema Básico com Microprocessador

A Figura 2.1 apresenta o diagrama em blocos de um sistema básico com

microprocessador.

Além do microprocessador, um sistema básico como este tem os seguintes elementos:

Gerador de Clock: gera os pulsos necessários ao sincronismo do sistema. Gerador de Reset: responsável por inicializar o sistema ao ligar ou quando acionado. Memória de Programa: memória onde o microprocessador vai procurar as instruções a

executar. Em sistemas dedicados costuma-se utilizar memórias ROM, embora em alguns casos memórias RAM também sejam utilizadas.

Memória de Dados: memória onde o microprocessador lê e escreve dados durante a

operação normal. Geralmente é do tipo volátil, embora memórias não-voláteis possam ser utilizadas.

Portas de I/O: sua função é a comunicação com o mundo externo. Através delas,

dispositivos como teclados, impressoras, displays, entre outros, comunicam-se com o sistema.

Seleção de Endereços: lógica para escolher qual memória ou periférico o microprocessador

vai utilizar. Interrupções: são entradas de sinal externo que fazem com que o processamento seja

interrompido e seja iniciada uma sub-rotina específica. (Obs.: o 8051 tem interrupções com estrutura nesting, onde uma interrupção pode interromper outra que está sendo atendida, desde que tenha maior prioridade).

Page 6: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

5

3. Família 8051 - Hardware

A família 8051 é composta por diversos microcontroladores de 8 bits que possuem o mesmo conjunto básico de instruções (na verdade, existem alguns dispositivos de 16 bits, como o 80C51 XA, da Philips, lançado em 1994). A Tabela 3.1 lista os principais elementos desta família. Versão com ROM interna

ROM (bytes)

RAM (bytes)

Temporizadores de 16 bits

Tecnologia Versão sem ROM

Versão com EPROM

8051 4k 128 2 NMOS 8031 8751 80C51 4k 128 2 CMOS 80C31 87C51 8052 8k 256 3 NMOS 8032 8752

80C52 8k 256 3 CMOS 80C32 87C52 80C53 8k 192 2 CMOS - 87C54

83CL410 4k 128 2 CMOS/ Low Power

80CL410 -

83C451 4k 128 2 CMOS 80C451 87C451 83C528 32k 512 3 + watchdog CMOS 80C528 87C528 83C550 4k 128 2 + watchdog CMOS 80C550 87C550 83C552 8k 256 3 + watchdog CMOS 80C552 87C552 83C592 16k 512 3 + watchdog CMOS - 87C592 83C852 6k 256 2 CMOS - -

Tabela 3.1 - Família 8051

O 8051 será visto em detalhes a seguir. Os demais elementos são versões ampliadas, com os seguintes recursos adicionados: 8052/80C52: 256 bytes de RAM, 8 Kbytes de ROM, 3 temporizadores/contadores e 6 sinais de interrupção. 80C53: versão para aplicações em controle central de televisão. Possui controlador de tela, 3 saídas de vídeo digital, controle de multiplexador/mixador e intensidade de fundo de tela, RAM de display de 128x10, ROM gerador de caracteres de 60x18x14, 8 PWM de 6 bits, 1 PWM de 14 bits, polaridade de entrada e saída de vídeo programável, 12 saídas para +12V com dreno aberto e 4 saídas com dreno aberto para alta corrente. 83CL410: versão para baixas tensões de alimentação (1,5 a 6V). Opera em baixa freqüência (de 32KHz a 20MHz). 80C451: versão com entrada/saída estendida, tendo 7 portas de I/O com recursos de interface direta e interface de impressora paralela. 80C528: possui 32K bytes de ROM, 512 bytes de RAM, 3 temporizadores e watchdog. 83C550: versão com 8 canais de conversor A/D de 8 bits. 83C552: versão com 8 canais de conversor A/D de 10 bits, 4 temporizadores/contadores, saídas PWM e 6 portas de I/O e watchdog. 83C592: versão com barramento de interface para rede (CAN - Control Area Network) e transferência de DMA entre RAM no chip e interface CAN. 83C852: versão para aplicações de segurança. Contém memória EEPROM e características de segurança do sistema.

Page 7: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

6

A pinagem do 8051 é mostrada na Figura 3.1.

A14A13

A11

PSENA15

A8

AD1AD2

AD4AD5

RESET

AD0

AD7

ALE

Vcc

TxD P3.1INT0 P3.2INT1 P3.3T0 P3.4

WR P3.6

GND

RD P3.7

P1.1P1.2P1.3P1.4P1.5P1.6

EA

P1.0

P1.7

XTAL2XTAL1

27

26

28

22

21

25

30

29

31

36

35

37

33

32

34

39

38

40

24

23

14

15

13

19

20

16

11

12

10

5

6

4

8

9

7

2

3

1

17

18

P0.1P0.2

P0.4P0.5

P0.0

P0.7

P2.6P2.5

P2.3

P2.7

P2.0

8051

Figura 3.1 - Pinagem do 8051

Como já foi citado, o 8051 é um microcontrolador de ampla utilização. O mesmo tem dois modos básicos de funcionamento:

a) modo mínimo - onde somente recursos internos são utilizados pela CPU. Neste modo, estão disponíveis 4 Kbytes de ROM para memória de programa e 128 bytes de RAM para memória de dados. O modo mínimo possui a vantagem (além da economia de componentes e espaço físico) de poder utilizar as 4 portas de 8 bits cada para controle (I/O);

b) modo expandido - Neste modo, a memória de programa (ROM), a memória de dados

(RAM) ou ambas podem ser expandidas para 64 KB, através do uso de CIs externos. No entanto, apresenta a desvantagem de “perder” duas das 4 portas para comunicação com as memórias externas.

Na Figura 3.2, apresenta-se um exemplo de expansão da memória de dados e da memória de programa. No caso do microcontrolador 8031, a utilização de uma memória de programa externa ligada de maneira similar ao exemplo abaixo é obrigatória, visto que o mesmo não possui uma memória ROM internamente.

Page 8: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

7

XTAL1

XTAL2

AD0/P0.0AD1/P0.1AD2/P0.2AD3/P0.3AD4/P0.4AD5/P0.5AD6/P0.6AD7/P0.7

P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7

A8/P2.0A9/P2.1A10/P2.2A11/P2.3A12/P2.4A13/P2.5A14/P2.6A15/P2.7

P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/TOP3.5/T1P3.6/WRP3.7/RD PSEN

EA

ALE

+V

74373

D0D1D2D3D4D5D6D7

Q0Q1Q2Q3Q4Q5Q6Q7

G OC

8051

D0D1D2D3D4D5D6D7

A0A1A2A3A4A5A6A7

A8A9A10A11A12

OE CS

RST

2764

D0D1D2D3D4D5D6D7

A0A1A2A3A4A5A6A7

A8A9A10A11A12

R/W CS

6264

OE

Figura 3.2 - Expandindo RAM e ROM

Como pode ser visto na Figura 3.2, além das memórias faz-se necessário a utilização de um outro CI (no caso o 74373) para a multiplexação de dados e endereços. Esta multiplexação ocorre no primeiro ciclo de máquina. O 8051 coloca nos pinos AD0 a AD7 o byte menos significativo do endereço externo e leva o pino ALE (Address Latch Enable - Habilitador da Trava de Endereços) a nível alto, de modo que o 74373 (oito latches tipo D) coloque em suas saídas essa informação, e logo em seguida passa este pino para nível baixo, para que esse byte fique retido no 74373. Após isso, os pinos AD0 a AD7 estarão livres para o transporte dos dados. O 8051 pode, no modo expandido, utilizar toda a memória de programa externa (com

nível lógico 0 aplicado ao pino 31 - Address External ) ou ainda utilizar os primeiros 4 kB internos e o restante externo (com 1 em EA ). O CI 8031 é a versão sem ROM interna do 8051. O mesmo é muito utilizado em fase de desenvolvimento ou quando se quer produzir em pequenas quantidades. Como o 8031 tem a mesma pinagem que o 8051, o mesmo possui o pino EA , que deverá sempre ser utilizado em nível lógico baixo. Retornando a Figura 3.2, nela estamos utilizando ____ KB de RAM externa, além dos _____ bytes de RAM interna. Além disso, temos um total de ____ KB de memória ROM que, no caso do 8051, pode estar sendo utilizado apenas no CI externo ou com os _____ bytes menos significativos em memória interna e os _____ bytes mais significativos na memória externa.

Ainda em relação à Figura 3.2, para fazer uma leitura na ROM externa, o pino PSEN será levado a nível baixo, para fazer uma leitura na RAM externa, o pino RD será levado a

nível baixo e, para fazer uma escrita na RAM externa, o pino WR será levado a nível baixo. A Tabela 3.2 ilustra as situações possíveis para esses pinos de controle.

PSEN RD WR

0 1 1 Leitura da ROM (EPROM) 1 0 1 Leitura da RAM externa 1 1 0 Escrita na RAM externa

Tabela 3.2 – Barramento de controle ( PSEN, RD eWR )

Page 9: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

8

4. A Organização da Memória do 8051

As Figuras 4.1 e 4.2 ilustram, respectivamente, a organização da memória de programa e da memória de dados do 8051.

É importante salientar que, diferentemente de outros sistemas baseados em microprocessador, onde cada endereço de memória identifica univocamente uma única posição física, no 8051 o mesmo endereço hexadecimal pode identificar 3 posições físicas diferentes (e até 4, no caso do 8052, que tem 256 bytes de RAM interna). Por exemplo, temos o endereço 23H na RAM interna, o endereço 23H na RAM externa e o endereço 23H na ROM externa. Mesmo com esses endereços “iguais”, não há risco de confusão, pois as instruções e o modo de endereçamento são diferentes. Para deixar mais claro, vamos supondo que se deseja carregar no acumulador o conteúdo de cada uma das posições 23H. Veja os exemplos abaixo: a) da RAM interna b) da RAM externa c) da ROM MOV A,23H ;end.direto MOV R0,#23H ;end. imediato CLR A ;R0 como ponteiro MOV DPTR,#0023H MOVX A,@R0 ;indireto MOVC A,@A+DPTR

4.1 RAM interna A Figura 4.3 mostra em detalhes a divisão da RAM interna do 8051. Note a presença dos

4 bancos de registradores auxiliares, cada um contendo 8 registradores (R0, R1, R2, R3, R4, R5, R6, R7). R0 e R1 são utilizados para endereçamento indireto. Apesar de existirem 4 bancos de

Page 10: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

9

registradores, somente um está ativo por vez para uso como índice. A seleção do banco ativo é feita no registro de função especial PSW, que será visto em breve.

Como pode ser visto pela Figura 4.3, os bytes de 20H a 2FH da RAM interna têm bits endereçáveis individualmente. É possivel, com os mesmos, executar várias instruções de bits. Por exemplo, a instrução SETB 3CH coloca em nível alto o bit 3CH ou seja, o bit 4 da posição de memória 27H da RAM interna.

Page 11: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

10

5. Os Registros de Função Especial do 8051

Os Registros de Função Especial (SFRs - Special Function Registers) são responsáveis pela maior parte do controle do 8051. Os mesmos são mostrados na Figura 5.1. Alguns deles possuem bits endereçáveis (os com endereço de byte terminando em 0 ou 8). Note que alguns dos bits endereçáveis possuem inclusive um nome mnemônico, para maior facilidade de desenvolvimento de software em compiladores.

F7 F6 F5 F4 F3 F2 F1 F0

E7 E6 E5 E4 E3 E2 E1 E0

D7 D6 D5 D4 D3 D2 D1 D0

BF BE BD BC BB BA B9 B8

B7 B6 B5 B4 B3 B2 B1 B0

AF AE AD AC AB AA A9 A8

A7 A6 A5 A4 A3 A2 A1 A0

9F 9E 9D 9C 9B 9A 99 98

97 96 95 94 93 92 91 90

BF BE BD BC BB BA B9 B8

A7 A6 A5 A4 A3 A2 A1 A0

9F 9E 9D 9C 9B 9A 99 98

97 96 95 94 93 92 91 90

87 86 85 84 83 82 81 80

CY AC F0 RS1 RS0 OV - P

PS PT1 PX1 PT0 PX0

P3.6 P3.5 P3.4 P3.3 P3.1 P3.0P3.7

SM1 SM2 REN TB8 TI RISM0

P2.6 P2.5 P2.4 P2.3 P2.1 P2.0P2.7

P1.6 P1.5 P1.4 P1.3 P1.1 P1.0P1.7

ES ET1 ET0 EX0EA

8F 8E 8D 8C 8B 8A 89 88

P0.6 P0.5 P0.4 P0.3 P0.1 P0.0P0.7

TR1 TF0 TR0 IE1 IE0 IT0TF1

GF1 PD IDLSMOD

8DTH1

8CACC

8ATL0

8BPSW

89TMOD

88TCON

87PCON

83SBUF

82SCON

81

SP

DPH

DPL

TL1

TH0

80P0

F0B

E0

B8IP

D0

B0P3

A8IE

A0P2

99

98

90P1

ENDEREÇO DE BYTEENDEREÇO DE BITMNEUMÔNICO DE REGISTROMNEUMÔNICO DE BIT

Figura 5.1 - Registros de Função Especial A função básica de cada registro especial é descrita abaixo. Ao lado do registro está seu endereço na RAM. P0 (80H), P1 (90H), P2 (A0H) e P3 (B0H) Posições na RAM que contêm os dados das 4 portas de I/O do microcontrolador, caso as

mesmas sejam utilizadas com esse fim. Se for feita uma escrita em um desses registros, o conteúdo nos pinos correspondentes à porta será automaticamente alterado. Já uma leitura dos mesmos verifica o estado dos pinos.

SP (81H) Trata-se do apontador de pilha (Stack Pointer), que aponta para o alto da pilha. DPL (82H) e DPH (83H) Em conjunto formam o DPTR, utilizado para endereçamento indireto de 16 bits.

Page 12: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

11

PCON (87H) O registro PCON (Power Control) permite adaptar o microcontrolador para redução de

consumo com segurança. TCON (88H) e TMOD (89H) Registros dos Temporizadores/Contadores. Permitem a programação dos mesmos. TL0 (8AH), TH0 (8CH), TL1 (8BH) e TH1 (8DH) Registros dos dados dos dois Temporizadores/Contadores (T0 e T1). SCON (98H) e SBUF (99H) Registros para uso da porta de comunicação serial. IE (A8H) e IP (B8H) Registros para programação (habilitação/desabilitação, prioridade etc) das interrupções. PSW (D0H) O PSW (Program Status Word - palavra de status do programa) é o registro dos flags do

8051. ACC (E0H) Acumulador. B ( F0H) Registro auxiliar B. A seguir, são abordados com mais detalhes os registros PSW, SP e DPTR. Os demais registros serão vistos nas próximas seções.

5.1 Palavra de Status de Programa ( P S W )

A palavra de status de programa ( PSW ) contém vários bits de status que refletem o estado corrente da CPU.

O registro PSW é acessado pelo endereço D0H e também é bit endereçável.

A Figura 5.2 apresenta a estrutura do registro PSW, que reside no espaço de endereçamento de registros de função especial.

D7H D6H D5H D4H D3H D2H D1H D0H CY AC F0 RS1 RS0 OV - P

PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0

CY (PSW.7) - Flag de carry para bit 7 da ALU; AC (PSW.6) - Flag de carry auxiliar para bit 3 da ALU ( para operações BCD ); F0 (PSW.5) - Flag 0 - Flag de status de propósito geral ( definido pelo usuário ); RS1 (PSW.4) - Bit 1 de seleção de banco RS0 (PSW.3) - Bit 0 de seleção de banco OV (PSW.2) - Flag de overflow para operações aritméticas; - (PSW.1) - Reservado P (PSW.0) - Flag de paridade do acumulador ( 1=ímpar, 0=par ).

Figura 5.2 - Registro PSW

Page 13: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

12

Este registro contém o bit de carry, carry auxiliar para operações BCD, dois bits de seleção de banco de registros, flag de overflow, bit de paridade e dois flags de status definidos pelo usuário. O bit de carry é usado em operações aritméticas e, também, serve como “acumulador” para operações booleanas. Os bits RS0 e RS1 são usados para selecionar um dos quatro bancos de registros mostrados na Tabela 4.3. As instruções referem-se a estas localizações de RAM como registros de R0 a R7. A seleção de qual dos quatro bancos estará sendo utilizado é feita com base nos conteúdos de RS0 e RS1, durante o tempo de execução do programa, conforme mostra a Tabela 5.1.

RS1 RS0 BANCO Endereço na RAM interna

0 0 0 00H - 07H 0 1 1 08H - 0FH 1 0 2 10H - 17H 1 1 3 18H - 1FH

Tabela 5.1 - Seleção do banco de registros O bit de paridade reflete o número de uns do acumulador. P será 1 se o acumulador tiver um número ímpar de uns e P será 0 se ACC tiver um número par de uns. Assim, o número de uns do acumulador mais P será sempre par.

O flag de overflow é afetado por operações aritméticas.

Além do flags usuais, como CY, AC , OV, P, há dois flags de propósito geral que não estão associados com qualquer estado ou função da CPU. Estes são os bits PSW.5 ( F0 ) e PSW.1 ( sem nome ). O programador pode usar F0 ( PSW.5 ) como um bit de flag para aplicação definida pelo usuário. Pode ser “setado” ou “ressetado” pelo programa como uma função de alguma condição especial ou ser lido de um pino de alguma porta. Documentos da INTEL indicam que PSW.1 está reservado para uma utilização futura e é recomendado que não seja utilizado em programas Note que o PSW não tem flag ZERO, mas isto não é problema, porque o 8051 tem instrução específicas para testar se o acumulador é zero. Exemplos: JZ rel * - desvia se o acumulador for zero JNZ rel * - desvia se o acumulador não for zero * rel. = indica um byte sinalizado com complemento de dois, usado para deslocamento relativo na faixa de –128 a +127.

5.2 Registro Apontador de Pilha ( SP - Stack Pointe r )

O registro SP é um registro de 8 bits. O mesmo será incrementado antes que um dado seja armazenado na pilha, durante a execução de uma instrução PUSH, ou CALL. Sendo um registro de 8 bits, a região de pilha ( stack ) irá residir no espaço de RAM interna do 8051. O SP é inicializado com o valor 07H após ocorrer o RESET. Isto faz com que a pilha inicie na localização 08H. Caso sejam usados os bancos de registradores 1, 2 e/ou 3, e seja utilizada a pilha, o SP deverá ser alterado para iniciar a pilha em outra região da RAM que não cause problemas. Neste caso, a instrução MOV SP,#novo endereço deverá aparecer no programa, preferencialmente no início. O SP é acessado pelo endereço 81H e, portanto, não é bit endereçável (os registros especiais que são endereçáveis também por bit têm seu endereço de byte terminando em “0” ou em “8”.

5.3 Registro Apontador de Dados ( DPTR – Data PoinT eR)

O registro apontador de dados é formado por um byte alto (DPH), acessado pelo endereço 83H, e por um byte baixo (DPL), acessado pelo endereço 82H. Este registro pode ser manipulado como um registro de 16 bits (DPTR), ou como dois registros independentes de 8 bits.A principal função do DPTR é manter um endereço de 16 bits, o qual é usado para acessar memórias externas.

Page 14: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

13

6. Modos de Endereçamento do 8051

Como o conjunto de instruções da família 8051 foi otimizado para aplicação de controle em 8 bits, o mesmo contém uma variedade de modos de endereçamento rápidos para acessar a RAM interna, facilitando operações de byte em pequenas estruturas de dados.

6.1 Modo de endereçamento DIRETO

Neste modo o operando é especificado na instrução por um campo de endereço de 8 bits. Somente a RAM de dados interna (as primeiras 128 posições de memória) e os registros de função especial podem ser endereçados diretamente. Exemplo a: MOV A, 25H A ← ( 25H )

Exemplo b: ADD A, 7FH A ← A + ( 7FH )

Exemplo c: MOV 90H, A Obs.: 90H = Porta 1 ( 90H ) ← A

6.2 Modo de endereçamento de registro ou modo REGIS TRADOR

Os bancos de registros, contendo de R0 a R7, são acessados por certas instruções onde a especificação do registro é feita por três bits do próprio opcode (código da operação). As instruções de acesso aos registros são eficientes, visto que nenhum endereço é necessário. Quando a instrução for executada, um dos oito registros do banco selecionado será acessado. Exemplo a: MOV R5, A R5 ← A

Exemplo b: ADD A, R0 A ← A + R0

6.3 Modo de endereçamento INDIRETO

Neste modo, a instrução deve especificar o registro que contém o endereço do operando. As memórias interna e externa poderão ser endereçadas indiretamente. Somente R0 e R1 podem ser usados para endereçamento indireto de 8 bits, enquanto que para endereços de 16 bits é necessário utilizar-se o registro apontador de dados ( DPTR ). Exemplo a: MOV @ R1, 15H ( R1 ) ← ( 15H )

Exemplo b: ADD A, @ R0 A ← A + ( R0 )

Exemplo c: MOVX @ DPTR, A ( DPTR ) ← A Obs.: @ é utilizado para indicar endereçamento indireto. @ pode ser lido como “endereçado pelo conteúdo de ... “

Page 15: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

14

6.4 Modo de endereçamento de registros específicos (ESPECÍFICO A REGISTRO)

Algumas instruções referem-se a certos registros. Por exemplo, algumas instruções operam o acumulador, o registro DPTR etc. Desta forma, nenhum byte de endereço será necessário, pois o opcode já define qual é o registro que será afetado. Exemplo a: DA A Faz o ajuste decimal do acumulador

Exemplo b: CLR A A ← 00H ( zera o acumulador )

Exemplo c: INC DPTR DPTR ← DPTR + 1

6.5 Modo de endereçamento IMEDIATO ou CONSTANTE IME DIATA

Neste modo de endereçamento, o opcode é seguido de um valor de uma constante que será operada. Na linguagem assembly, este modo é indicado através do símbolo #. Exemplo a : MOV B, # 252 B ← FCH

Exemplo b : MOV A, # 100 A ← 64H

Exemplo c : MOV DPTR, # 05FEH DPTR ← 05FEH Obs.: # indica valor constante; Um “H” após a constante indica que o valor da mesma é hexadecimal, um “B” indica

binário e quando a letra for omitida ou aparecer um “D”, o valor será decimal.

6.6 Modo de endereçamento INDEXADO

Somente a memória de programa (ROM) poderá ser acessada (lida) com endereçamento indexado. O endereço efetivo é a soma do acumulador e um registro de 16 bits ( DPTR ou PC ). Este modo é usado para leituras de tabelas colocadas na memória de programa (ROM), como, por exemplo, tabelas de conversão ou de mensagens. Um registro base de 16 bits, como o registro DPTR ou contador de programa (PC), aponta para a base da tabela e o acumulador recebe o deslocamento dentro da tabela. Assim, o endereço de entrada da tabela será formado com a soma do conteúdo do acumulador e do registro base. Exemplo a: MOVC A, @ A + DPTR A ← ( A+DPTR ) da ROM

Exemplo b: MOVC A, @ A + PC A ← ( A + PC ) da ROM Outro tipo de endereçamento indexado é usado nas instruções de “case jump”. Neste caso, o endereço destino do salto (jump) é calculado com a soma do conteúdo do acumulador e do conteúdo do apontador base. Assim, o valor base do endereço do salto será carregado no apontador base (DPTR), e o valor de indexação do salto que realiza a condição (case) será carregado no acumulador. Exemplo : JMP @ A + DPTR Faz um salto para o endereço dador por A + DPTR PC ← A + DPTR

Page 16: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

15

7. Reset no 8051

O reset é conseguido mantendo-se nível alto no pino 9 (RST) por, pelo menos, dois ciclos de máquina (24 pulsos de clock). Isto pode ser obtido ao alimentarmos o dispositivo, com um circuito como o apresentado na Figura 7.1. Nesta figura, a chave permite que o dispositivo seja “ressetado” sempre que se queira.

Figura 7.1 - Circuito para reset do 8051

Para a versão CMOS ( 80C51 ), o resistor se torna desnecessário. Se existir, não interfere em nada.

O RESET afetará os registros de função especial, de acordo com a Tabela 7.1

REGISTRO VALOR REGISTRO VALOR PC 0000 H TMOD 00 H

ACC 00 H TCON 00 H B 00 H TH0 00 H

PSW 00H TL0 00 H SP 07 H TH1 00 H

DPTR 0000 H TL1 00 H P0 a P3 FF H ou SCON 00 H

11111111 B SBUF indeterminado IP XXX00000 B PCON (NMOS) 0XXXXXXX B IE 0XX00000 B PCON (CMOS) 0XXX0000 B

Tabela 7.1 - Registros afetados pelo Reset do 8051

A RAM não é afetada por reset forçado. Em caso de reset por inicialização, o seu valor será aleatório.

Page 17: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

16

8. Clock no 8051

Para sincronização do 8051, pode-se utilizar clock externo, se houver um gerador de clock disponível, ou clock interno. As formas de sincronismo são mostradas na Figura 8.1. Freqüência de clock mínima = 3,5 MHz Freqüência de clock máxima = 33 MHz (algumas versões) e 12 MHz (mais comum) Clock interno (válido para versões NMOS e CMOS)

33pF

33pF XTAL18 XTAL2

19 XTAL1

8051 Clock externo (válido somente para versões NMOS)

18 XTAL2

19 XTAL1

8051

GERADORDE CLOCK

Clock externo (válido somente para versões CMOS)

18 XTAL2

19 XTAL1

8051

GERADORDE CLOCK

NC

Clock externo (válido para versões NMOS e CMOS)

18 XTAL2

19 XTAL1

8051

GERADORDE CLOCK

Figura 8.1 - Circuito para clock do 8051

Page 18: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

17

9. Interrupções no 8051

O 8051 pode ser interrompido de 5 maneiras:

- pela interrupção externa 0 ( INT0 - pino P3.2 );

- pela interrupção externa 1 ( INT1 - pino P3.3 ); - pelo contador/temporizador 0; - pelo contador/temporizador 1; - pelo canal de comunicação serial. As interrupções do 8051 são VETORADAS , ou seja, têm um endereço de início da rotina de tratamento da interrupção fixo. Os vetores das interrupções são os seguintes:

INTERRUPÇÃO Endereço no 8051 Endereço no kit

INT0 0003H 4230H

C/T 0 000BH 4240H

INT1 0013H 4250H

C/T 1 001BH 4260H

SERIAL 0023H 4270H Quando atende uma interrupção, o PC é salvo no stack (pilha). O acumulador, PSW e demais registros não são salvos. As interrupções no 8051 são MASCARADAS , ou seja, podem ser desabilitadas pelo software. O registro IE (Interrupt Enable) é o registro responsável pelas habilitações das interrupções (ver Figura 9.1).

AFH AEH ADH ACH ABH AAH A9H A8H A8H EA X X ES ET1 EX1 ET0 EX0 IE bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0

Figura 9.1a - Registro IE - bits

- EA ( Enable All ) - em “0” desabilita todas as interrupções; em “1” permite que cada interrupção seja habilitada individualmente. - ES ( Enable Serial ) - Habilita ou desabilita a interrupção pedida pelo canal de serial; “0” desabilita e “1” habilita se EA = 1; - ET1 ( Enable Timer 1 ) - Habilita ou desabilita a interrupção pedida pelo temporizador 1; “0” desabilita e “1” habilita se EA = 1; - EX1 ( Enable External 1 ) - Habilita ou desabilita a interrupção externa 1; “0” desabilita e “1” habilita se EA = 1; - ET0 ( Enable Timer 0 ) - Habilita ou desabilita a interrupção pedida pelo temporizador 0; “0” desabilita e “1” habilita se EA = 1; - EX0 ( Enable External 0 ) - Habilita ou desabilita a interrupção externa 0; “0” desabilita e “1” habilita se EA = 1;

Figura 9.1b - Registro IE - função dos bits

Page 19: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

18

Cada interrupção no 8051 poderá ser individualmente programada para um dos dois níveis de prioridade (0 ou 1). Isto é feito através dos bits do registro IP (Interrupt Priority) (Figura 9.2).

BFH BEH BDH BCH BBH BAH B9H B8H B8H

X X X PS PT1 PX1 PT0 PXO IP bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0

“0”, Prioridade BAIXA / “1”, Prioridade ALTA

- PS ( Priority Serial ) - Nível de prioridade para o canal serial; - PT1 ( Priority Timer 1 ) - Nível de prioridade para o temporizador 1; - PX1 ( Priority External 1 ) - Nível de prioridade para a interrupção externa 1; - PT0 ( Priority Timer 0 ) - Nível de prioridade para o temporizador 0; - PX0 ( Priority External 0 ) - Nível de prioridade para a interrupção externa 0;

Figura 9.2 - Registro IP - bits e função dos bits

Uma interrupção de prioridade baixa poderá ser interrompida por outra de prioridade alta, mas não por outra de prioridade baixa. Uma interrupção de prioridade alta não poderá ser interrompida por qualquer outra fonte de interrupção. Se ocorrerem dois pedidos de interrupções simultaneamente (difícil de ocorrer), e ambas forem de mesma prioridade, ocorrerá uma outra seleção interna, que escolherá qual interrupção será atendida primeiro, de acordo com a Tabela 9.1.

INTERRUPÇÃO PRIORIDADE INTERNA Externa 0 MAIOR

Temporizador 0 Externa 1

Temporizador 1 Serial MENOR

Tabela 9.1 - Seleção interna de prioridade de interrupções As interrupções EXTERNAS no 8051 podem ser ativadas por transição 1 para 0 (borda de descida) ou por nível (nível lógico baixo). O ajuste da forma de ativar as interrupções externas está no registro TCON (Controle do Temporizador).

8FH 8EH 8DH 8CH 8BH 8AH 89H 88H 88H TF1 TR1 TF0 TRO IE1 IT1 IE0 IT0 TCON bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0

- IT 0 = “0” - ativa a interrupção com nível lógico baixo no pino INT0 (pino P3.2);

= “1” - ativa a interrupção com borda de descida no pino INT0 ;

- IT 1 = “0” - ativa a interrupção com nível lógico baixo no pino INT1 (pino P3.3);

= “1” - ativa a interrupção com borda de descida no pino INT1 ; - IE x - fica em “1”quando for detectado uma borda de descida (pedido de interrupção). É resetado após o atendimento da rotina de tratamento da interrupção.

Obs.: * Caso a interrupção seja ativada por nível lógico baixo, o pino INTx poderá permanecer em “0” durante a execução da rotina de tratamento da interrupção (RTI), só que deve estar em “1” antes do término da RTI para evitar um novo pedido de interrupção. * Com interrupção acionada por borda de descida, o pino correspondente deverá ficar em zero por pelo menos 12 períodos de clock.

Page 20: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

19

10. Temporizadores e Contadores no 8051

O 8051 possui internamente 2 Contadores/Temporizadores denominados de Temporizador 0 (T0) e Temporizador 1 (T1). Ambos podem ser configurados para operar como temporizador ou contador de eventos, individualmente. Podem ter sua operação habilitada por software ou hardware.

Na função de temporizador, um registro será incrementado a cada ciclo de máquina. Como cada ciclo de máquina consiste em 12 períodos do clock, a taxa de contagem será de 1/12 da freqüência do clock.

Na função de contador, um registro será incrementado em resposta a uma transição de “1” para “0” (borda de descida) de seu correspondente pino de entrada externa, T0 (P3.4) e T1 (P3.5). Nesta função, os pinos externos (T0 e T1) são amostrados a cada ciclo de máquina. Quando uma amostragem indicar um nível alto em um ciclo de máquina e um nível baixo no próximo ciclo, o contador será incrementado. A máxima taxa de contagem será, portanto, de 1/24 da freqüência do clock, visto que são necessários dois ciclos de máquina para o reconhecimento de uma transição de “1” para “0”.

A operação dos Contadores/Temporizadores pode ser feita de quatro formas possíveis (modos 0, 1, 2 ou 3), sendo o registro TMOD responsável pela seleção do modo. TMOD também seleciona se o Temporizador/Contador irá operar como temporizador ou como contador. O registro TMOD é dividido em duas partes iguais que controlam o TEMPORIZADOR 1 e o TEMPORIZADOR 0. O registro TMOD é acessado pelo endereço 89H e não é bit endereçável. O registro TMOD é mostrado abaixo, assim como a função de cada bit.

GATE.1 C/T .1 M1.1 M0.1 GATE.0 C/T .O M1.0 M0.0 89H bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 Bit 0

Controle do C/T 1 Controle do C/T 0

C/T .x - Seleciona a função, TEMPORIZADOR (timer) ou CONTADOR. Será selecionado como TEMPORIZADOR se este bit estiver em “0”. Se em “1” a operação será como CONTADOR.

GATE.x - Quando GATE.x = 1 e TRx = 1, o temporizador irá operar somente enquanto o pino

INTx (pinos P3.2 e P3.3) = 1 (controle por circuito). Quando GATE.x = 0, o temporizador irá operar somente quando TRx = 1 (controle por software). Obs.: TRx é um bit de TCON (palavra de controle do Contador/Temporizador) que será vista a seguir.

M1.x e M0.x – Bits de seleção de modo de operação. O registro TCON (Timer CONtrol – Controle do Temporizador) é mostrado abaixo. TCON é um registro acessado pelo endereço 88H e é bit endereçável.

8FH 8EH 8DH 8CH 8BH 8AH 89H 88H TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 88H

TCON.7 TCON.6 TCON.5 TCON.4 TCON.3 TCON.2 TCON.1 TCON.0

- TFx = Bit de overflow do temporizador. É ativado (“setado”) pelo circuito quando ocorrer um overflow no temporizador, gerando um pedido de interrupção. É “ressetado” pelo hardware após terminada a rotina de interrupção.

- TRx = Bit de controle de operação do temporizador. É o bit que liga e desliga o C/T. Para ligar o temporizador, o software deverá “setar” este bit, e para desligar deverá “ressetá-lo”.

Page 21: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

20

10.1 Modos de Operação dos Contadores / Temporizado res

M 1.x M 0.x Modo de operação Característica

0 0 Modo 0 C/T de 13 bits 0 1 Modo 1 C/T de 16 bits 1 0 Modo 2 C/T de 8 bits com recarga automática 1 1 Modo 3 1 C/T de 8 bits e 1 Temporizador

10.1.1 MODO 0 – Contador / Temporizador de 13 bits (8 bits com divisor de freqüência por 32)

Neste modo, o registro do temporizador será configurado como um registro de 13 bits. Quando o registro TH1 (ou TH0) mudar de FFH para 00H, o mesmo habilita a solicitação de interrupção do temporizador, através de o bit TF1 (ou TF0) do registro de função especial TCON (88H). O registro de 13 bits é composto por todos os bits de TH1 ou TH0, e pelos 5 bits menos significativos de TL1 ou TL0. Estes 5 bits possibilitam a divisão por 32. Os 3 bits mais significativos de TL1 e TL0 são indeterminados e devem ser ignorados em caso de leitura. A habilitação de operação do temporizador através de TRx não limpa estes registros. Os registros TH1, TH0, TL1 e TL0 estão localizados na região dos registros de função especial e são acessados pelos endereços 8DH (TH1), 8CH (TH0), 8BH (TL1) e 8AH (TL0). Estes registros não são bit endereçáveis. No modo 0, a operação do temporizador poderá ser controlada por programação (software) ou por circuito externo (hardware). O controle por circuito externo será realizado colocando-se o bit TRx em “1”, o bit

GATE.x em “1” e a entrada INTx em “1”. Desta maneira, será possível que a temporização seja

controlada externamente por INTx . Isto possibilita a medição de largura de pulsos, pois o

temporizador somente opera enquanto o pino INTx estiver em nível alto. O controle por programação será realizado colocando-se o bit GATE.x em “0” e colocando-se TRx em “1”. Neste caso, o bit TRx atua como habilitador de operação do temporizador. Para realizar uma temporização, o registro THx deverá receber o valor inicial da contagem (via software) e, dessa forma, ao ligar o temporizador (através de TRx), o mesmo conta até FFH e em seguida avança para 00H (overflow). Ao ocorrer o overflow nesse registro, o C/T em questão fará um pedido de interrupção, que será ou não aceito pela CPU. O valor deste registro poderá ser lido a qualquer momento pelo software. O sinal de contagem (clock interno ou externo) será dividido por 32. Desta maneira, para que o registro THx seja incrementado, deverá ter ocorrido 32 pulsos. Quando ocorrer overflow (na troca de THx de FFH para 00H), um pedido de interrupção será feito. Caso a interrupção esteja habilitada, desejando-se fazer uma nova temporização ou contagem, os registros THx e TLx deverão ser novamente carregados. Neste modo,a freqüência é dividida por 32 (TLx) e pode-se contar no máximo até 256 (THx). Portanto, este modo permite contar até 8192 (256x32).

10.1.2 MODO 1 – Contador / Temporizador de 16 bits

Neste modo de operação, o Contador/Temporizador será de 16 bits, sendo utilizado os registros TH1 e TL1 ou TH0 e TL0 para formar estes 16 bits. Desta forma, pode-se contar de 0000H até FFFFH (65536 contagens). O valor inicial da contagem deverá ser programado por software. Quando ocorrer overflow (passar de FFFFH para 0000H), será feito um pedido de interrupção. Assim como no modo 0, o valor inicial de uma nova contagem deverá ser carregado na rotina de interrupção, se esta estiver habilitada.

Page 22: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

21

10.1.3 MODO 2 – Contador / Temporizador de 8 bits com recarga automática

Neste modo, os registros TL1 e TL0 são responsáveis pela contagem e TH1 e TH0 retêm o valor a ser carregado nos registros TL1 e TL0, quando ocorrer overflow. Mesmo com a recarga automática do valor da contagem, os registros TH1 e TH0 podem ser alterados a qualquer momento. Neste modo de funcionamento, temos um sistema no qual não há necessidade de reescrever por software o valor a ser contado. Aqui, escreve-se no registro TLx, o valor inicial da contagem, e em THx o valor inicial da próxima contagem. Ao ocorrer o overflow em TLx, o sistema gera a interrupção e automaticamente recarrega em TLx o valor contido em THx, e prossegue incrementando sob comando do sinal externo (contador) ou interno (temporizador). Devido à recarga automática, não é necessário que seja feita a carga do valor inicial na rotina de interrupção.

10.1.4 MODO 3 – 1 Contador / Temporizador de 8 bits e 1 Temporizador de 8 bits

O modo 3 apresenta comportamentos diferentes para os dois temporizadores. Em T0, TL0 e TH0 operarão como dois contadores separados. TL0 usa os bits de controle do temporizador 0, ou seja, usa os bits C/T .0, GATE.0, TR0, TF0 e INT0 e pode operar como contador ou temporizador. TH0 opera somente como temporizador e usa os bits de controle TR1 e TF1 do temporizador 1. Assim, TH0 controla a interrupção do temporizador 1. O temporizador 1 permanece com a sua contagem (mantém TH1 e TL1) quando no modo 3. Fica desligado, ou seja, é como se o TR1 estivesse em “0”. Quando configurado para outro modo (com T0 no modo 3) funciona normalmente, mas fica permanentemente ligado, ou seja, como se TR1 = “1”. O temporizador 1 poderá então ser usado em aplicações que não necessitem de interrupções, como, por exemplo, geração de taxa de transmissão para a porta serial. Obs.: Para ativar as interrupções dos Contadores/Temporizadores, os bits EA, ET1 e ET0 do registro IE (Interrupt Enable) deverão ser ajustados. Para habilitar a interrupção do C/T 1, além do bit EA =1, ET1 = 1 e para o C/T 0, EA =1 e ET0 = 1.

Page 23: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

22

11. O Canal Serial no 8051

O 8051 permite comunicação serial full-duplex (à exceção do modo 0 de operação), através dos pinos RXD (P3.0) e TXD (P3.1). A comunicação serial é controlada pelo registro especial SCON (Serial CONtrol), o qual é mostrado na Figura 11.1.

9FH 9EH 9DH 9CH 9BH 9AH 99H 98H SCON SM0 SM1 SM2 REN TB8 RB8 TI RI 98H

SCON.7 SCON.6 SCON.5 SCON.4 SCON.3 SCON.2 SCON.1 SCON.0

Figura 11.1 - Registro SCON Como a função dos bits SCON.0 a SCON.5 depende do modo de operação do canal serial (controlado pelos bits SCON.6 e SCON.7), a explicação sobre os mesmos será feita em função do modo de operação. A Tabela 11.1 mostra cada um dos modos de operação.

SM0 SM1 Modo de operação Taxa de Transmissão 0 0 Modo 0 FreqClock/12 0 1 Modo 1 Variável 1 0 Modo 2 FreqClock/32 ou FreqClock/64 1 1 Modo 3 Variável

Tabela 11.1 - Modos de operação do canal serial

Tanto a transmissão quanto a recepção utilizam o registro especial SBUF (Serial BUFfer), cujo endereço de byte é 99H. Quer dizer, para a transmissão, é necessária uma escrita no endereço 99H, enquanto que para recepção é necessária uma leitura no referido endereço. Mas é importante salientar que existem dois registradores físicos distintos SBUF, um para transmissão (acessado por escrita) e outro para recepção (acessado por leitura), o que permite comunicação FULL-DUPLEX. Ainda, o SBUF receptor é de dois estágios, o que significa que se pode começar a receber um segundo byte sem que o byte previamente recebido tenha sido lido. Entretanto, se o primeiro byte não for lido e o segundo byte for completamente recebido, um dos dois será perdido.

11.1 Canal serial operando no Modo 0

Este é o único modo em que a operação é síncrona. Desta forma, o pino TXD (P3.1) é utilizado para o envio do sinal de clock de sincronismo, enquanto que o pino RXD (P3.0) é utilizado para transmissão ou recepção. Como mostra a Tabela 11.1, a taxa de transmissão é fixa no modo 0, sendo de 1/12 da freqüência de clock do sistema. Como este valor é relativamente alto, deve-se ter especial cuidado com ruídos.

11.1.1 Funções dos demais bits do SCON no Modo 0

SM2 - não tem função. Deve ficar em 0. REN - em 1 habilita a recepção. Em 0 desabilita a recepção e o pino RXD (P3.0) pode ser

utilizado como I/O. TB8 - sem função. RB8 - sem função TI - flag de requisição de interrupção de transmissão. É “setado” pelo hardware após a

transmissão do oitavo bit de dados. Deve ser zerado pelo software da rotina de transmissão para permitir novas interrupções.

RI - flag de requisição de interrupção de recepção. É “setado” pelo hardware após a recepção do oitavo bit de dados. Deve ser zerado pelo software da rotina de recepção para permitir novas interrupções.

Page 24: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

23

11.2 Canal serial operando no Modo 1

O modo 1, assim como os modos 2 e 3, permite operação full-duplex com TXD (P3.1) usado para transmissão e RXD (P3.0) usado para recepção. Em cada pacote são transmitidos/recebidos 10 bits, sendo 1 start bit (nível 0), 8 bits de dados (vão para o SBUF) e um stop bit (nível 1).

11.2.1 Funções dos demais bits do SCON no Modo 1

SM2 - não permitirá a geração do pedido de interrupção se estiver em 1 e se o stop bit recebido for ilegal.

REN - em 1 habilita a recepção. Em 0 desabilita a recepção e o pino RXD (P3.0) pode ser utilizado como I/O.

TB8 - sem função. RB8 - indica o estado do stop bit recebido, se SM2 estiver em 0. TI - flag de requisição de interrupção de transmissão. É “setado” pelo hardware ao início

do stop bit. Deve ser zerado pelo software da rotina de transmissão para permitir novas interrupções.

RI - flag de requisição de interrupção de recepção. É “setado” pelo hardware durante a recepção do stop bit. Deve ser zerado pelo software da rotina de recepção para permitir novas interrupções.

11.2.2 Geração da taxa de transmissão

Como pode ser visto pela Tabela 11.1, a taxa de transmissão nos modos 1 e 3 é variável. A mesma é fornecida pelo Temporizador 1, através de overflow. O bit SMOD do registro especial PCON (o qual tem 87H como endereço de byte)1 também influencia na taxa de transmissão, a qual pode ser obtida pela fórmula abaixo:

1

1

1232

2

contagensT

SMOD

n

FreqClokTaxa=

Exemplo: Para obter uma taxa de 4800 BPS com um cristal de freqüência 11,059MHz, pode-se fazer SMOD=1 para obter

ncontagensT1 = contagens 12 4800 x 12 x 32

11,059.106 x 2 =

O que pode ser obtido com T1 operando no modo 2 (temporizador de 8 bits com recarga automática) com TH1 valendo 256 - 12 = 244 = F4H, onde 256 é o numero máximo com 8 bits e TH1 indica o valor inicial do contador.

A Tabela 11.2 relaciona valores que podem ser utilizados para a obtenção de taxas de transmissão usuais, considerando-se T1 no modo 2 e SMOD=0.

Taxa (BPS) Recarga/TH1 (decimal) Recarga/TH1 (hexadecimal) 300 160 A0H 600 208 D0H 1200 232 E8H 2400 244 F4H 4800 250 FAH 9600 253 FDH

Tabela 11.2 - Obtenção de valores usuais de taxas de transmissão para T1 no modo 2 e SMOD=0

11.3 Canal serial operando no Modo 2

O modo 2, assim como os modos 1 e 3, permite operação full-duplex com TXD (P3.1)

1 ATENÇÃO: o registro PCON não é bit endereçável. Assim, para se alterar o seu bit7 é necessário fazer-se uma escrita de um byte completo, o que altera os outros bits (os bits b0 a b3 têm funções nas versões CMOS).

Page 25: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

24

usado para transmissão e RXD (P3.0) usado para recepção. Na recepção, em cada pacote são recebidos 11 bits, sendo 1 start bit (nível 0), 8 bits de dados (no SBUF), um nono bit de dado que vai para o RB8 e um stop bit (nível 1). Na transmissão, o 9º bit de dado a ser enviado deve ser escrito no TB8. A taxa de transmissão será de 1/32 (com o bit SMOD do registro especial PCON, o qual tem 87H como endereço de byte, em 1) ou de 1/64 (com SMOD em 0) da freqüência de clock do sistema.

11.3.1 Funções dos demais bits do SCON no Modo 2

SM2 - habilita ou não a comunicação entre vários 8051s (de modo geral é “setado” para comunicação multiprocessador). Não permitirá a geração do pedido de interrupção se estiver em 1 e se o nono bit de dados for zero.

REN - em 1 habilita a recepção. Em 0 desabilita a recepção e o pino RXD (P3.0) pode ser utilizado como I/O.

TB8 - indica o estado do nono bit de dados a ser transmitido. Pode ser “setado” ou zerado por software.

RB8 - indica o estado do nono bit de dados recebido. TI - flag de requisição de interrupção de transmissão. É “setado” pelo hardware ao início

do stop bit. Deve ser zerado pelo software da rotina de transmissão para permitir novas interrupções.

RI - flag de requisição de interrupção de recepção. É “setado” pelo hardware durante a recepção do stop bit. Deve ser zerado pelo software da rotina de recepção para permitir novas interrupções.

11.4 Canal serial operando no Modo 3

O modo 3 é idêntico ao modo 2, com exceção à taxa de transmissão, que é variável e pode ser obtida como apresentada no item. 11.2.2.

11.5 Comunicação entre CIs 8051

Para a comunicação entre um 8051 mestre e vários 8051 escravos, utiliza-se os mesmos no modo 2 ou no modo 3, sendo que o TXD do mestre deve ser ligado no RXD de todos escravos e o RXD do mestre deve ser ligado no TXD de todos os escravos. Como a interrupção do canal serial só será atendida se SM2=1 e RB8=1, o protocolo para comunicação é o seguinte: Todos os escravos partem com SM2=1. Quando o mestre deseja transmitir, envia um byte de endereço do escravo de destino com 1 no nono bit de dados. Como todos os escravos recebem o nono bit em nível alto, todos passarão a ter SM2=1 e RB8=1, portanto todos vão entrar na rotina de interrupção para verificar se trata-se do seu endereço. O escravo com endereço correto zera seu SM2, impossibilitando nova chamada à rotina de interrupção até que a transmissão esteja concluída. Os dados enviados para o escravo escolhido não acionarão interrupções nos demais, pois possuem o nono bit em nível baixo.

Page 26: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

25

12. O assembly do 8051

SÍMBOLOS UTILIZADOS * Rn → Indica Registro R0 a R7 genericamente, dependendo de “n”. * Ri → Indica Registro R0 ou R1, dependendo de “i”. * @ → 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ço de memória de 8 bits (256 posições internas - RAM interna

e Registros de Função Especial). * rel → Indica que endereçamento é relativo. * ? → Indica que o flag indicado é afetado pela instrução e depende do resultado.

12.1 INSTRUÇÕES DE TRANSFERÊNCIA DE DADOS

MOV A,Rn – Move o Registro n para o Acumulador. (1 byte – 12 pulsos); MOV A,Direto – Move o conteúdo da posição de memória para o Acumulador.

(2 bytes – 12 pulsos); MOV A,@Ri – Move o conteúdo da RAM interna endereçada por Ri para o

Acumulador. (1 byte – 12 pulsos); MOV A,#Dado – Move o Dado para o Acumulador. (2 bytes – 12 pulsos); MOV Rn,A – Move o conteúdo do Acumulador para o Registro n.

(1 byte – 12 pulsos); MOV Rn,Direto – Move o conteúdo da memória para o Registro n. (2 bytes – 24 pulsos); MOV Rn,#Dado – Move o Dado para o Registro n. (2 bytes – 12 pulsos); MOV Direto,A – Move o conteúdo do Acumulador para a posição de memória.

(2 bytes – 12 pulsos); MOV Direto,Rn – Move o conteúdo do Registro n para a posição de memória. (2 bytes – 24 pulsos); MOV Direto1,Direto2 – Move o conteúdo da posição de memória 2 para a posição de memória

1. (3 bytes– 24 pulsos); MOV Direto,@Ri – Move o conteúdo da posição de memória endereçada por Ri para a

posição de memória destino. (2 bytes – 24 pulsos); MOV Direto,#Dado – Move o Dado para a posição de memória. (3 bytes– 24 pulsos); MOV @Ri,A – Move o conteúdo do Acumulador para a posição de memória

endereçada por Ri. (1 byte – 12 pulsos); MOV @Ri,Direto – Move o conteúdo da posição de memória fonte para a posição de

memória endereçada por Ri. (2 bytes – 24 pulsos); MOV @Ri,#Dado – Move o Dado para a posição de memória endereçada por Ri.

(2 bytes – 12 pulsos); MOV DPTR,#Dado 16 – Move o Dado de 16 bits para o Registro DPTR. (3 bytes– 24 pulsos); MOVC A,@A+DPTR – Move o conteúdo da posição de memória da ROM endereçada por A +

DPTR. O endereço fonte é de 16 bits. (1 byte – 24 pulsos); MOVC A,@A+PC – Move o conteúdo da posição de memória da ROM endereçada por A +

PC. O endereço fonte é de 16 bits. (1 byte – 24 pulsos); MOVX A,@Ri – Move o conteúdo da posição de memória da RAM externa endereçada

por Ri para o Acumulador. (1 byte – 24 pulsos); MOVX A,@DPTR – Move o conteúdo da posição de memória da RAM externa endereçada

por DPTR para o Acumulador. (1 byte – 24 pulsos); MOVX @Ri,A – Move o conteúdo do Acumulador para a posição de memória da RAM

externa endereçada por Ri. (1 byte – 24 pulsos); MOVX @DPTR,A – Move o conteúdo do Acumulador para a posição de memória da RAM

externa endereçada por DPTR. (1 byte – 24 pulsos);

Page 27: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

26

PUSH Direto – Coloca na pilha o conteúdo da posição de memória. Incrementa primeiro o SP (Stack Pointer) e escreve na pilha. (2 bytes – 24 pulsos);

POP Direto – Retira da pilha o Dado e coloca na posição de memória. Decrementa o SP (2 bytes – 24 pulsos);

XCH A,Rn – Troca entre si os conteúdo do Acumulador e do Registro n. (1 byte – 12 pulsos);

XCH A,Direto – Troca entre si os conteúdo do Acumulador e da posição de memória. (2 bytes – 12 pulsos);

XCH A,@Ri – Troca entre si os conteúdo do Acumulador e da posição de memória endereçada por Ri. (1 byte – 12 pulsos);

XCHD A,@Ri – Troca os nibbles menos significativos do conteúdo do Acumulador e da posição de memória endereçada por Ri. (1 byte – 12 pulsos).

12.2 INSTRUÇÕES PARA VARIÁVEIS BOOLEANAS

CLR C – Zera o Carry. (1 byte – 12 pulsos) (CY=0); CLR Bit – Zera o bit Endereçado. (2 bytes – 12 pulsos); SETB C – Seta o Carry. (1 byte – 12 pulsos) (CY=1); SETB Bit – Seta o bit endereçado. (2 bytes – 12 pulsos); CPL C – Complementa (inverte) o Carry. (1 byte – 12 pulsos) (CY=?); CPL Bit – Complementa (inverte) o bit endereçado. (2 bytes – 12 pulsos); ANL C,Bit – Operação AND entre o Carry e o bit endereçado. (2 bytes – 24 pulsos) (CY=?); ANL C,/Bit – Operação AND entre o Carry e o complemento do bit endereçado.

(2 bytes – 24 pulsos) (CY=?); ORL C,Bit – Operação OR entre o Carry e o bit endereçado. (2 bytes – 24 pulsos) (CY=?); ORL C,/Bit – Operação OR entre o Carry e o complemento do bit endereçado.

(2 bytes – 24 pulsos) (CY=?); MOV C,Bit – Move o bit endereçado para o Carry. (2 bytes – 12 pulsos) (CY=?) MOV Bit,C – Move o Carry para o bit endereçado. (2 bytes – 24 pulsos); JC rel – Salta se o Carry for “1”. O jump é relativo. (2 bytes – 24 pulsos); JNC rel – Salta se o Carry for “0”. O jump é relativo. (2 bytes – 24 pulsos); JB Bit, rel – Salta se o bit endereçado estiver em “1”. (3 bytes – 24 pulsos); JNB Bit,rel – Salta se o bit endereçado estiver em “0”. (3 bytes – 24 pulsos); JBC Bit,rel – Salta se o bit endereçado estiver em “1” depois zera o bit. (3 bytes– 24 pulsos).

12.3 - INSTRUÇÕES ARITMÉTICAS

ADD A,Rn – Soma o conteúdo do Registro n ao Acumulador. (1 byte – 12 pulsos) (CY=?, AC=?, OV=?);

ADD A,Direto – Soma o conteúdo da posição de memória ao Acumulador. (2 bytes – 12 pulsos) (CY=?, AC=?, OV=?);

ADD A,@Ri – Soma o conteúdo da posição de memória endereçada por Ri ao Acumulador. (1 byte – 12 pulsos) (CY=?, AC=?, OV=?);

ADD A,#Dado – Soma o Dado ao Acumulador.(2 bytes – 12 pulsos) (CY=?, AC=?, OV=?); ADDC A,Rn – Soma o conteúdo do Registro n e o Carry ao Acumulador.

(1 byte – 12 pulsos) (CY=?, AC=?, OV=?); ADDC A,Direto – Soma o conteúdo da posição de memória e o Carry ao Acumulador.

(2 bytes – 12 pulsos) (CY=?, AC=?, OV=?); ADDC A,@Ri – Soma o conteúdo da posição de memória endereçada por Ri e o Carry ao

Acumulador. (1 byte – 12 pulsos) (CY=?, AC=?, OV=?); ADDC A,#Dado – Soma o Dado e o Carry ao Acumulador.

(2 bytes – 12 pulsos) (CY=?, AC=?, OV=?); SUBB A,Rn – Subtrai o conteúdo do Registro n e o Carry do Acumulador.

(1 byte – 12 pulsos) (CY=?, AC=?, OV=?); SUBB A,Direto – Subtrai o conteúdo da posição de memória e o Carry do Acumulador.

(2 bytes – 12 pulsos) (CY=?, AC=?, OV=?);

Page 28: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

27

SUBB A,@Ri – Subtrai o conteúdo da posição de memória endereçada por Ri e o Carry do Acumulador. (1 bytes – 12 pulsos) (CY=?, AC=?, OV=?);

SUBB A,#Dado – Subtrai o Dado e o Carry do Acumulador. (2 bytes – 12 pulsos) (CY=?, AC=?, OV=?);

INC A – Incrementa o Acumulador. (1 byte – 12 pulsos); INC Rn – Incrementa o Registro n. (1 byte – 12 pulsos); INC Direto – Incrementa o conteúdo da posição de memória. (2 bytes – 12 pulsos); INC @Ri – Incrementa o conteúdo da posição de memória endereçada por Ri.

(1 byte – 12 pulsos); DEC A – Decrementa o Acumulador. (1 byte – 12 pulsos). DEC Rn – Decrementa o Registro n. (1 byte – 12 pulsos); DEC Direto – Decrementa o conteúdo da posição de memória. (2 bytes – 12 pulsos); DEC @Ri – Decrementa o conteúdo da posição de memória endereçada por Ri.

(1 byte – 12 pulsos); INC DPTR – Incrementa o DPTR. (1 byte – 24 pulsos); MUL AB – Multiplica A e B. O resultado fica: parte mais significativa em B e menos

significativa no Acumulador. (1 byte – 48 pulsos) (CY=0, OV=?); DIV AB – Divide A por B. O resultado fica: a parte inteira no Acumulador e o resto

em B. (1 byte – 48 pulsos) (CY=0, OV=0*) *OV=1 caso B inicialmente seja 00H;

DA A – Faz o ajuste decimal do Acumulador. (1 byte – 12 pulsos) (CY=?, AC=?).

12.4 - INSTRUÇÕES DE DESVIO

ACALL End 11 – Chama sub-rotina numa faixa de 2 Kbytes da atual posição. (2 bytes – 24 pulsos); LCALL End 16 – Chama sub-rotina em qualquer posição da memória de programa

(ROM).(3 bytes – 24 pulsos); RET – Retorno de sub-rotina. (1 byte – 24 pulsos); RETI – Retorno de rotina de interrupção. (1 byte – 24 pulsos); AJMP End 11 – Salta para outro endereço numa faixa de 2 Kbytes da atual. (2 bytes – 24 pulsos); LJMP End 16 – Salta para qualquer posição de memória de programa (ROM). (3 bytes – 24 pulsos); SJMP rel – Salto curto relativo, até 127 posições para frente ou 128 para trás. (2 bytes – 24 pulsos); JMP @A+DPTR – Salta para o endereço A + DPTR. (1 byte – 24 pulsos); JZ rel – Salta se o Acumulador for zero. (2 bytes – 24 pulsos); JNZ rel – Salta se o Acumulador não for zero. (2 bytes – 24 pulsos); CJNE A, Direto, rel – Compara e salta se o Acumulador for diferente da memória

endereçada. (3 bytes – 24 pulsos) (CY=?); CJNE A,#Dado ,rel – Compara e salta se o Acumulador for diferente do Dado. (3 bytes – 24 pulsos) (CY=?); CJNE Rn,#Dado ,rel – Compara e salta se o Registro n for diferente do Dado. (3 bytes – 24 pulsos) (CY=?); CJNE @Ri,#Dado , rel – Compara e salta se o conteúdo da RAM interna endereçada for

diferente do Dado . (3 bytes – 24 pulsos) (CY=?); DJNZ Rn,rel – Decrementa o Registro n e salta se for diferente de zero. (2 bytes – 24 pulsos); DJNZ Direto,rel – Decrementa o conteúdo da posição de memória e salta se for diferente

de zero. (3 bytes – 24 pulsos); NOP – Nenhuma operação. (1 byte – 12 pulsos).

Page 29: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

28

12.5 - INSTRUÇÕES LÓGICAS

ANL A,Rn – Executa a operação AND entre o Acumulador e o Registro n. (1 byte – 12 pulsos);

ANL A,Direto – Executa a operação AND entre o Acumulador e o conteúdo da posição de memória. (2 bytes – 12 pulsos);

ANL A,@Ri – Executa a operação AND entre o Acumulador e o conteúdo da posição de memória endereçada por Ri. (1 byte – 12 pulsos);

ANL A,#Dado – Executa a operação AND entre o Acumulador e o Dado. (2 bytes – 12 pulsos);

ANL Direto,A – Executa a operação AND entre o conteúdo da posição endereçada e o Acumulador. O Resultado fica na posição endereçada. (2 bytes – 12 pulsos);

ANL Direto,#Dado – Executa a operação AND entre a posição de memória endereçada e o Dado. (3 bytes – 24 pulsos);

ORL A,Rn – Executa a operação OR entre o Acumulador e o Registro n. (1 byte – 12 pulsos);

ORL A,Direto – Executa a operação OR entre o Acumulador e o conteúdo da posição de memória. (2 bytes – 12 pulsos);

ORL A,@ Ri – Executa a operação OR entre o Acumulador e o conteúdo da posição de memória endereçada por Ri. (1 byte – 12 pulsos);

ORL A,#Dado – Executa a operação OR entre o Acumulador e o Dado. (2 bytes – 12 pulsos);

ORL Direto,A – Executa a operação OR entre o conteúdo da posição endereçada e Acumulador. O Resultado fica na posição endereçada. (2 bytes – 12 pulsos);

ORL Direto,#Dado – Executa a operação OR entre a posição de memória endereçada e o Dado.(3 bytes – 24 pulsos);

XRL A,Rn – Executa a operação “OU EXCLUSIVO” entre o Acumulador e o Registro n. (1 byte – 12 pulsos);

XRL A,Direto – Executa a operação “OU EXCLUSIVO” entre o Acumulador e o conteúdo da posição de memória. O resultado fica no Acumulador. (2 bytes – 12 pulsos);

XRL A,@Ri – Executa a operação “OU EXCLUSIVO” entre o Acumulador e o conteúdo da posição de memória endereçada por Ri. (1 byte – 12 pulsos);

XRL A,#Dado – Executa a operação “OU EXCLUSIVO” entre o Acumulador e o Dado. (2 bytes – 12 pulsos);

XRL Direto,A – Executa a operação “OU EXCLUSIVO” entre o conteúdo da posição de memória e o Acumulador O resultado fica na posição de memória. (2 bytes – 12 pulsos);

XRL Direto,#Dado – Executa a operação “OU EXCLUSIVO” entre o conteúdo da posição de memória e o Dado. O resultado fica na posição de memória. (3 bytes – 24 pulsos);

CLR A – Zera o Acumulador. (1 byte – 12 pulsos); CPL A – Complementa o Acumulador. (1 byte – 12 pulsos); RL A – Desloca o Acumulador à esquerda. (1 byte – 12 pulsos); RLC A – Desloca o Acumulador à esquerda através do Carry.

(1 byte – 12 pulsos) (CY=?); RR A – Desloca o Acumulador à direita. (1 byte – 12 pulsos); RRC A – Desloca o Acumulador à direita através do Carry.

(1 byte – 12 pulsos) (CY=?); SWAP A – Troca o nibble inferior do Acumulador com o superior. Equivale a 4

vezes RR A ou RL A. (1 byte – 12 pulsos).

Page 30: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

29

13. Exercícios

Responda as questões: 1 – Relacione microprocessador com microcontrolador. 2 – Cite vantagens dos microcontroladores sobre os microprocessadores. 3 – Em que tipo de memória é gravado o programa de um microcontrolador? 4 – Quais os tipos de memórias de programa utilizadas em microcontroladores? Cite diferenças

entre elas. 5 – Cite as principais características do microcontrolador 8051. 6 – Por que se fala muito em microcontrolador 8051 mas não utiliza-se, aqui, o CI 8051? 7 – Por que não se pode utilizar o CI 8031 no modo mínimo? 8 – Quais as diferenças entre os CIs 8051, 8031 e 8751? 9 – Cite e descreva os 2 modos básicos de funcionamento do 8051. 10 – Em relação à questão 9, qual o modo de funcionamento é mais vantajoso de se utilizar?

11 – Qual a função dos pinos EA , ALE e PSEN? 12 – Como o 8051 consegue utilizar uma mesma porta como saída de endereços e entrada/saída

de dados?

13 – Quais as possibilidades de combinações entre os pinos ALE, PSEN, RD e WR ? O que ocorre em cada uma delas?

14 – Qual a máxima quantidade de memória que se pode acessar, utilizando o 8051? 15 – Sabendo que existem endereço iguais para as memórias ROM, RAM interna e RAM

externa, como o 8051 não confunde esses endereços? 16 – Descreva como funciona a pilha no 8051. 17 – Descreva as regiões da RAM interna do 8051. 18 – Para que servem os bits endereçáveis? 19 – Quais Registros de Função Especial são bits endereçáveis? Cite uma maneira de identificá-

los. 20 – Descreva o registro PSW. 21 – Como se faz a seleção dos bancos de registradores ( R0 a R7 )? 22 – Quais os modos de endereçamento do 8051? Comente cada um. 23 – Em que estado ficam os pinos das portas quando ocorre o reset?

Page 31: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

30

24 – O que é necessário para realizar o reset? 25 – O que acontece com a memória RAM quando se realiza um reset? 26 – Logo após um reset, qual posição da ROM passa a ser apontada? 27 – Escreva a(s) instrução(ões) que realiza(m) as funções pedidas abaixo:

a) Carrega o valor 81H no acumulador; b) Carrega o conteúdo da posição 30H da RAM interna no acumulador; c) Escreve, na posição 51H da RAM interna, o conteúdo do acumulador; d) Carrega o Registrador 5 com o valor 87H; e) Carrega o acumulador com o conteúdo do Registrador 3; f) Carrega a posição 31H da RAM interna com o valor 80H; g) Transfere o conteúdo da posição 20H da RAM interna para a posição 10H da mesma

memória; h) Carrega no acumulador o conteúdo da posição de memória (RAM interna) endereçada

pelo Registrador 1; i) Carrega no acumulador o conteúdo da posição de memória (RAM externa) endereçada

pelo Registrador 1; j) Carrega no acumulador o conteúdo da posição 1234H da RAM externa; k) Transfere para a posição 5678H da RAM externa o conteúdo do acumulador; l) Transfere o conteúdo da posição 1357H da ROM para o Registrador 0; m) Lê o valor do bit 3 da porta 1 e guarda no bit 00H; n) Salta se o bit 2 da Porta 3 for “1”; o) Salta se o bit 7 da Porta 1 for “0”; p) Realiza a operação AND entre o carry e o bit 5 da Porta 3; q) Realiza a operação OR entre os bits 00H e 01H e guarda o resultado no bit 03H; r) Soma os valores 12H com 34H e guarda o resultado no Registrador 0; s) Incrementa o conteúdo da posição 60H da RAM interna; t) Salta incondicionalmente para a posição 0000H; u) Salta se acumulador for diferente de AAH; v) Salta para o posição 6789H se acumulador for igual ao Registrador 7; w) Decrementa o conteúdo da posição 7FH e salta se for 00H; x) Realiza a operação AND entre as posições 78H e 79H e coloca o resultado na posição

7AH; y) Realiza a operação OR entre o Registrador 4 e o valor 55H; z) Zera o acumulador; aa) Complementa os 4 bits menos significativos do acumulador; bb) Complementa todo o conteúdo do acumulador; cc) Habilita o banco de registradores 2; dd) Habilita o banco de registradores 1; ee) Coloca em nível lógico alto o pino P1.0; ff) Coloca em nível baixo o pino P3.7; gg) Salta se no pino P1.1 tiver nível alto; hh) Salta se o pino P1.5 estiver em nível baixo; ii) Realiza a operação AND entre as posições 9876H e 5432H da RAM externa e coloca o

resultado na posição 8642H; jj) Altera a região da pilha, fazendo-a começar na posição 67H; kk) Coloca na pilha o conteúdo da posição 0003H da ROM; ll) Salta se acumulador for zero;

Complete as lacunas 28 – O 8051 pode operar no modo mínimo (também conhecido como modo microcomputador)

ou no modo expandido (também conhecido como modo microprocessador).

Page 32: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

31

a) No modo mínimo, o mesmo tem que ter o pino _____ (EA / PSEN / ALE) ligado constantemente a nível lógico ___ (alto / baixo). Ainda, no modo mínimo, tem-se disponível ____ (4K / 8K / 2K) bytes de memória de programa e _____ (64 / 128 / 256) bytes de memória de dados, além de poder-se contar também com as portas __________ (P1 e P3 / P0 e P3 / P0 e P2) para entrada/saída.

b) No modo expandido, tem-se, no máximo, ______ (64K / 32K / 16K) bytes de memória de programa e no máximo __________ (64K + 128 / 32K + 128 / 16K + 128 / 64K / 32K / 16K) bytes de memória de dados.

29 – A família 8051 é constituída por mais de 100 dispositivos distintos. O 8051 propriamente

dito possui uma ROM interna. Se for de tecnologia CMOS, chamar-se-á 80C51. a) A versão sem R0M interna para o 80C51 chama-se ________, a versão com uma EPROM

chama-se __________ e a versão com uma EEPROM interna chama-se __________. b) O 87C52 possui ______ (128 / 256 / 8K) bytes de RAM interna e _____ (4K / 8K / 64K)

bytes de _________ (ROM / EPROM / EEPROM) interna.

30 – Através de modos de endereçamento diferentes, o 8052 pode acessar posições físicas

distintas que possuem o mesmo endereço hexadecimal. a) Os registros de função especial (SFRs) só podem ser acessados por endereçamento

_________________, enquanto que a RAM interna de _____H a _____H somente pode ser acessada por endereçamento _______________.

b) As instruções de movimento (MOVE) de dados de acesso a RAM interna têm como

mnemônico o _________, as (MOVE) de acesso a RAM externa têm como mnemônico o _________ e só podem ser utilizadas com endereçamento _____________, enquanto que as (MOVE) de acesso a memória de programa, interna ou externa, têm como mnemônico o _________ e só podem ser utilizadas com endereçamento ___________.

31 – Os registros de função especial com endereço de byte terminando em ____ ou em ____ têm

bits endereçáveis, sendo que o endereço do bit ________ (mais / menos) significativo coincide com o endereço de byte do registro.

32 – O reset do 8051 afeta vários registros especiais. Imediatamente após o reset, se não fizermos

nenhuma alteração nos SFRs, alguns cuidados devem ser tomados. a) O Stack Pointer é inicializado com o valor ______H. Isto significa que, caso não alteremos o

valor do mesmo e formos utilizar uma pilha com até 20 bytes de extensão, as posições de memória interna de _____H a _____H não poderão ser utilizadas pelo programa, pois o SP é incrementado _________ (antes / depois) de jogar o dado na pilha.

33 – No 8051, há 5 interrupções possíveis, 2 interrupções externas, 1 interrupção do canal serial e

uma para cada um dos temporizadores. a) Para tratamento de interrupções, há dois registros de função especial: o IP, responsável

pelo(a) ____________________ (mascaramento / definição de prioridade); e o IE, responsável pelo(a) ____________________ (mascaramento / definição de prioridade). O bit ______do registro _______ permite que todas as interrupções sejam desabilitadas simultaneamente.

Page 33: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

32

b) Uma interrupção de prioridade _________ poderá ser interrompida por uma de prioridade _________, enquanto que uma interrupção de prioridade __________ não poderá ser interrompida.

34 – O 8051 possui 2 Temporizadores de 16 bits (T0 , T1), cada um deles sendo composto de 2

registros de 8 bits (TH0 e TL0, TH1 e TL1) . Cada temporizador pode operar em 4 modos distintos.

a) T1 e T0 _________ (podem / não podem) operar em modos distintos, simultaneamente. b) No modo 1, cada temporizador tem uma contagem máxima igual a ___________, pois opera

como um circuito de _____ bits. c) No modo 2, TL é um temporizador de ____ bits, enquanto que a função de THx é

__________________________________. d) Se estiver no modo 3, T1 fica __________________ . e) T0, no modo 3, opera como um contador/temporizador normal de 8 bits, através do registro

______. Com T0 no modo 3, o registro TH0 __________ (pode / não pode) gerar interrupção. f) Com T0 no modo 3, a utilidade do temporizador T1 é a de ___________________________,

e para isto o mesmo __________ (pode / não pode) estar no modo 3. g) Tanto T1 como T0 podem operar como temporizador (conta os pulsos do relógio interno) ou

como contador (conta os pulsos aplicados no pino de mesmo nome que o temporizador, ou seja, pino T1 ou pino T0). O bit responsável pela seleção contador/temporizador é o bit _____ do registro ______.

h) Com GATE.1 em nível baixo, o controle de T1 é por _______________ (circuito externo /

software). Neste caso o mesmo será ligado/desligado através do _________________. i) Com GATE.1 em nível alto, o controle de T1 é por _________________ (circuito externo /

software). Neste caso o mesmo será ligado/desligado através do __________________ . 35 – Escreva as instruções necessárias para o que é pedido abaixo: a) carregar no acumulador o conteúdo da posição 35h da RAM interna ( Obs.: faça de 2 maneiras distintas ); b) carregar no acumulador o conteúdo da posição 83h da RAM interna ( Obs.: só é válido para o 8052 ); c) carregar no acumulador o conteúdo da posição 83h da EPROM externa. 36 – Sabendo que a posição D0h dos registros de função especial é igual a 11010000B, responda

em que posição de memória será colocado o conteúdo do acumulador com a seguinte instrução:

MOV R3, A

Page 34: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

33

37 – Dada a tabela abaixo: ENDEREÇO CONTEÚDO

04H 1EH 03H 0CH 02H ABH 01H 33H 00H F2H

e sabendo que RS1 = 0 e RS0 = 0, responda o que faz a instrução MOVX A, @ R1

38 – Dado o programa abaixo, diga qual o conteúdo do Acumulador, do acumulador auxiliar (B) e dos registradores R0 e R7, após a execução do mesmo.

END. MNEUMÔNICO COMENTÁRIOS 5000H MOV A, # 05H 5002H ADD A, # 90 5004H MOV R0, # 20H 5006H MOV @ R0, A 5007H ADD A, @ R0 5008H ADD A, 20H 500AH MOV A, # 05H 500CH ADDC A, # 07H 500EH MOV A, # 05H 5010H INC A 5011H MOV B, # 07H 5014H MUL AB 5015H MOV A, # 23H 5017H MOV R7, # 48H 5019H ADD A, R7 501AH DA A

39 – Dada a tabela abaixo que representa a RAM interna:

ENDEREÇO CONTEÚDO 23H BCH 22H 83H 21H A7H 20H 00H 00H F2H

Responda como ficarão as mesmas posições de memória após a execução do programa abaixo:

MNEUMÔNICO COMENTÁRIOS CLR C CLR 0AH SETB 16H CPL 1DH CPL 18H ORL C, /05H MOV 03H, C

Page 35: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

34

40 – Dado o programa abaixo, responda qual o conteúdo do acumulador e do Registrador 1 (R1) após a execução do mesmo.

END. MNEUMÔNICO COMENTÁRIOS 5000H MOV SP, # 20H 5003H MOV A, # 26H 5005H MOV R1, # 18H 5007H MOV @ R1, A 5008H MOV 26H, # 7AH 500CH MOV DPTR, # 5038H 500FH MOVX @ DPTR, A 5010H PUSH R1 5012H XCH A, R1 5013H XCHD A, @ R1 5014H POP R1

41 – Dado o programa abaixo, responda qual valor estará presente na Porta 1 (P1) e o estado do

carry (CY) após a execução do mesmo.

END. LABEL MNEUMÔNICO COMENTÁRIOS 5000H MOV P1, # 01H 5003H MOV 20 h, # 0D4H 5006H MOV C, 00H 5008H ORL C, 01H 500AH MOV 90H, C 500CH MOV C, 02H 500EH ORL C, 03H 5010H MOV 90H, C 5012H MOV C, 04H 5014H ANL C, / 05H 5016H MOV 91H, C 5018H SETB C 5019H MOV 92H, C 501BH MOV C, 06H 501DH JNB 07H, FIM 5020H CPL C 5021H FIM : MOV 92H, C

42 – Dado o programa abaixo, responda qual o conteúdo do acumulador após a execução do

mesmo.

END. LABEL MNEUMÔNICO COMENTÁRIOS 5000H MOV A, 00H 5002H REPETE : MOV P1, A 5004H MOV R0, # 05H 5007H SALTO 3 : MOV R1, # 0FFH 500AH SALTO 2 : MOV R2, # FFH 500DH SALTO 1 : DJNZ R2, SALTO 1 500FH DJNZ R1, SALTO 2 5011H DJNZ R0, SALTO 3 5013H INC A 5014H CJNE A, # 81H,REPETE

Page 36: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

35

43 – Determine que códigos devem ser gravados na EPROM para a subrotina abaixo:

MOV R7, # 0AH

VAI: MOV TH1, # 00H MOV TL1, # 01H SETB TR1 JNB TF1, $ CLR TF1 CLR TR1 DJNZ R7, VAI RET

44 – A subrotina acima é um delay. Considerando o clock de 12 MHz e Temporizador 1 no modo

1, qual é o tempo que foi programado para esta rotina?

Page 37: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

36

14. Tabela dos códigos das instruções do microcontrolador 8051

TABELA DOS CÓDIGOS DAS INSTRUÇÕES DO MICROCONTROLAD OR 8051

* Rn → Indica registro R0 a R7 genericamente, dependendo de “n”. * Ri → Indica registro R0 ou R1, dependendo de “i”. * @ → 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ço de memória de 8 bits ( 256 posições internas - RAM interna e Registros de Função Especial ) * rel → Indica que o endereçamento é relativo

INSTRUÇÕES DE TRANSFERÊNCIA DE DADOS Mnemônico R0 R1 R2 R3 R4 R5 R6 R7 MOV A,Rn E8 E9 EA EB EC ED EE EF MOV A,Direto E5 xx MOV A,@Ri E6 E7 MOV A,#Dado 74 xx MOV Rn,A F8 F9 FA FB FC FD FE FF MOV Rn,Direto A8 xx A9 xx AA xx AB xx AC xx AD xx AE xx AF xx MOV Rn,#Dado 78 xx 79 xx 7A xx 7B xx 7C xx 7D xx 7E xx 7F xx MOV Direto,A F5 xx MOV Direto,Rn 88 xx 89 xx 8A xx 8B xx 8C xx 8D xx 8E xx 8F xx MOV Direto1,Direto2 85 xx xx MOV Direto,@Ri 86 xx 87 xx MOV Direto,#Dado 75 xx xx MOV @Ri,A F6 F7 MOV @Ri,Direto A6 xx A7 xx MOV @Ri,#Dado 76 xx 77 xx MOV DPTR,#Dado16 90 xx xx MOVC A,@A+DPTR 93 MOVC A,@A+PC 83 MOVX A,@Ri E2 E3 MOVX A,@DPTR E0 MOVX @Ri,A F2 F3 MOVX @DPTR,A F0 PUSH Direto C0 xx POP Direto D0 xx XCH A,Rn C8 C9 CA CB CC CD CE CF XCH A,Direto C5 xx XCH A,@Ri C6 C7 XCHD A,@Ri D6 D7

INSTRUÇÕES DE DESVIO Mnemônico R0 R1 R2 R3 R4 R5 R6 R7 LCALL End 16 12 xx xx RET 22 RETI 32 LJMP End 16 02 xx xx SJMP rel 80 xx JMP @A+DPTR 73 JZ rel 60 xx JNZ rel 70 xx CJNE A, Direto, rel B5 xx xx CJNE A,#Dado,rel B4 xx xx CJNE Rn,#Dado,rel B8 xx xx B9 xx xx BA xx xx BB xx xx BC xx xx BD xx xx BE xx xx BF xx xx CJNE @Ri,#Dado, rel B6 xx xx B7 xx xx DJNZ Rn,rel D8 xx D9 xx DA xx DB xx DC xx DD xx DE xx DF xx DJNZ Direto,rel D5 xx xx NOP 00 ACALL End 11 A10A9A8 1 / 0001 AJMP End 11 A10A9A8 0 / 0001

INSTRUÇÕES PARA VARIAVEIS BOOLEANAS

Mnemônico CLR C C3 CLR Bit C2 xx SETB C D3 SETB Bit D2 xx CPL C B3 CPL Bit B2 xx ANL C,Bit 82 xx ANL C,/Bit B0 xx ORL C,Bit 72 xx ORL C,/Bit A0 xx MOV C,Bit A2 xx MOV Bit,C 92 xx JC rel 40 xx JNC rel 50 xx JB Bit, rel 20 xx xx JNB Bit,rel 30 xx xx JBC Bit,rel 10 xx xx

Page 38: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

37

INSTRUÇÕES LÓGICAS

Mnemônico R0 R1 R2 R3 R4 R5 R6 R7 ANL A,Rn 58 59 5A 5B 5C 5D 5E 5F ANL A,Direto 55 xx ANL A,@Ri 56 57 ANL A,#Dado 54 xx ANL Direto,A 52 xx ANL Direto,#Dado 53 xx xx ORL A,Rn 48 49 4A 4B 4C 4D 4E 4F ORL A,Direto 45 xx ORL A,@Ri 46 47 ORL A,#Dado 44 xx ORL Direto,A 42 xx ORL Direto,#Dado 43 xx xx XRL A,Rn 68 69 6A 6B 6C 6D 6E 6F XRL A,Direto 65 xx XRL A,@Ri 66 67 XRL A,#Dado 64 xx XRL Direto,A 62 xx XRL Direto,#Dado 63 xx xx CLR A E4 CPL A F4 RL A 23 RLC A 33 RR A 03 RRC A 13 SWAP A C4

INSTRUÇÕES ARITMÉTICAS Mnemônico R0 R1 R2 R3 R4 R5 R6 R7 ADD A,Rn 28 29 2A 2B 2C 2D 2E 2F ADD A,Direto 25 xx ADD A,@Ri 26 27 ADD A,#Dado 24 xx ADDC A,Rn 38 39 3A 3B 3C 3D 3E 3F ADDC A,Direto 35 xx ADDC A,@Ri 36 37 ADDC A,#Dado 34 xx SUBB A,Rn 98 99 9A 9B 9C 9D 9E 9F SUBB A,Direto 95 xx SUBB A,@Ri 96 97 SUBB A,#Dado 94 xx INC A 04 INC Rn 08 09 0A 0B 0C 0D 0E 0F INC Direto 05 xx INC @Ri 06 07 DEC A 14 DEC Rn 18 19 1A 1B 1C 1D 1E 1F DEC Direto 15 xx DEC @Ri 16 17 INC DPTR A3 MUL AB A4 DIV AB 84 DA A D4

F7 F6 F5 F4 F3 F2 F1 F0 F0 H B

E7 E6 E5 E4 E3 E2 E1 E0 EO H ACC

D7 D6 D5 D4 D3 D2 D1 D0 DO H CY AC F0 RS1 RS0 OV - P PSW

BF BE BD BC BB BA B9 B8 B8 H

PS PT1 PX1 PT0 PX0 IP

B7 B6 B5 B4 B3 B2 B1 B0 RD\ WR\ T1 T0 INT1\ INT0\ TXD RXD B0 H P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0 P3

AF AE AD AC AB AA A9 A8 A8 H EA ES ET1 EX1 ET0 EX0 IE

A7 A6 A5 A4 A3 A2 A1 A0 A0 H

P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P2 99 H SBUF

9F 9E 9D 9C 9B 9A 99 98 98 H SM1 SM2 SM3 REN TB8 RB8 T1 R1 SCON

97 96 95 94 93 92 91 90 90 H

P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P1 8D H TH 1 8C H TH 0 8B H TL 1 8A H TL 0 89 H

GATE-1

C / T-1 M 1-1 M 0-1 GATE-0

C / T-0 M 1-0 M 0-0 TMOD

8F 8E 8D 8C 8B 8A 89 88 88 H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TCON

87 H

SMOD GF 1 GF 0 PD IDL PCON 83 H DPH 82 H DPL 81 H SP

87 86 85 84 83 82 81 80 80 H P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 P0

Page 39: Sumárioqacademico.ifsul.edu.br/UPLOADS/MATERIAIS_AULAS/63021-8051-ap… · 12.2 – Instruções para variáveis booleanas ..... 26 12.3 – Instruções aritméticas

38

15. Bibliografia

SILVA JÚNIOR, Vidal Pereira da. Aplicações práticas do microcontrolador 8051. São Paulo-SP: Ed. Érica, 4. ed . 1994. STEWART, James W. The 8051 microcontroller: hardware, software and interfacing. Englewoods Cliffs - New Jersey: Ed. Regents/Prentice Hall, 1993. RIBEIRO, Celso Henrique e FERREIRA, Ignácio Sérgio Miranda. Microcontroladores 68HC11 e 8051. Apostila. Itajubá-MG: FUPAI, 1995. TAVARES, Maurício Campelo. Projeto de Sistemas Dedicados a Microcontrolador. Apostila. Pelotas-RS: UCPel, 1994. DATA HANDBOOK IC20. 80C51 – Based 8-Bit Microcontrollers. Philips. 1998. PREDKO, Myke. Programming & customizing the 8051 microcontroller. New York-NY: Ed. MCGraw-Hill, 1999.