Você está na página 1de 108

Escola de Engenharia Eltrica, Mecnica e de Computao

Universidade Federal de Gois

NOTAS DE AULA
MICROPROCESSADORES E
MICROCONTROLADORES

Prof. Dr. Jos Wilson Lima Nerys

Goinia, 2012

Notas de Aula 2011

A vida a soma de todas as suas escolhas Albert Camus


Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

SUMRIO
1

Introduo a Microprocessadores ......................................................................................... 5


1.1

Conceitos Iniciais ........................................................................................................... 5

1.2

Um pouco de Histria ................................................................................................... 8

1.3

Sistema de Numerao ................................................................................................ 14

Arquitetura e Princpio de Funcionamento de Microprocessadores ................................. 18


2.1

Arquiteturas RISC, CISC e Hbrida ......................................................................... 18

2.2

Arquitetura 8085, 8088/86, 8051 e PIC ..................................................................... 20

2.3

Registradores Principais 8085, 8088/8086, 8051 ....................................................... 23

2.4

Princpio de Funcionamento 8085, 8088/86, 8051 .................................................... 25

2.5

Formato das Instrues .............................................................................................. 30

2.6

Modos de Endereamento e Grupos de Instrues .................................................. 33

2.7

Registradores de Flags do 8085, 8088/86 e 8051 ....................................................... 34

2.8

Funcionamento da Pilha no 8085, 8051 e 8088/86 ................................................... 38

Microcontrolador 8051......................................................................................................... 41
3.1

Memrias ROM e RAM ............................................................................................. 43

3.2

Os Registradores de Funes Especiais ..................................................................... 45

3.3

Instrues Gerais do Microcontrolador 8051 ........................................................... 46

3.4

Instrues de Comparao, Deciso e de Desvio ...................................................... 48

3.5

Operaes com bit ....................................................................................................... 49

3.6

Diretivas de programao .......................................................................................... 49

3.7

Programas Exemplos .................................................................................................. 50

Interrupes .......................................................................................................................... 54
4.1

Princpio de Funcionamento e Habilitao ............................................................... 54

4.2

Endereos Desvio das Interrupes ........................................................................... 55

4.3

Programas Exemplos com Interrupo ..................................................................... 56

Temporizadores e Contadores do 8051 ................................................................................ 59


5.1

Princpio de Funcionamento e Modos de Operao ................................................ 59

5.2

Programas Exemplos usando Temporizadores ........................................................ 62

Comunicao Serial ............................................................................................................. 70


6.1

Noes Bsicas de Comunicao Serial ..................................................................... 70

6.2

Roteiros de Programas usando Comunicao Serial ............................................... 74

Expanso e Mapeamento de Memria ................................................................................ 79


7.1

Expanso de Memria ................................................................................................ 80

7.2

Mapeamento de Memria ........................................................................................... 81


Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

Dispositivos para Entrada, Sada e Acionamentos Eltricos .............................................. 85


8.1

Teclado ......................................................................................................................... 85

8.2

Display de 7-Segmentos .............................................................................................. 89

8.3

Display LCD................................................................................................................. 92

8.4

Sensores de Presena ................................................................................................... 98

8.5

Medio de Velocidade ............................................................................................... 99

8.6

Motor de Corrente Contnua ................................................................................... 100

8.7

Motor de Passo .......................................................................................................... 104

8.8

Lmpada Incandescente ........................................................................................... 107

Bibliografia ......................................................................................................................... 108

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

Introduo a Microprocessadores
1.1 Conceitos Iniciais
O presente material tem o intuito de apresentar uma introduo ao estudo de microprocessadores
e ao desenvolvimento de projetos com microcontroladores da famlia 8051. Para iniciar, portanto,
fundamental uma introduo aos conceitos bsicos associados a microprocessadores e um pouco de
histria desse componente, que est cada vez mais presente nas nossas vidas. Est presente, por
exemplo, no computador, no aparelho de DVD, no forno micro-ondas, no carro, no telefone celular, em
sistemas de alarme, em sistemas de controle de acesso, dentre outros.
O estudo de microprocessadores tem incio com o estudo do princpio de funcionamento de suas
unidades internas, vistas isoladamente em disciplinas como Materiais Eltricos, Sistemas Digitais e
Eletrnica. Nestas disciplinas estuda-se, por exemplo, as junes PN, NPN e PNP e os componentes
bsicos a partir dessas junes, tais como diodos e transistores. Estudam-se ainda configuraes
diversas a partir desses componentes, tais como retificadores, amplificadores e flip-flops, Fig. 1.1.

Diodo

Transistor
Retificador
Flip-flop
Fig. 1.1 Diodo, transistor, retificador e flip-flop

O flip-flop, em especial, pelo princpio de funcionamento e os dois estados na sada (baixo/alto)


usado para compor 1 bit, que a unidade bsica de todos os componentes de um microprocessador e na
construo de um tipo de memria chamada de memria esttica. Dentre os componentes internos de
um microprocessador destaca-se: registradores, contadores, somadores, codificadores e decodificadores.
Todos eles encapsulados em uma nica pastilha, e adequadamente conectados e sincronizados no
funcionamento, integram um microprocessador, Fig. 1.2.

Fig. 1.2: Componentes de um microprocessador


A Fig. 1.3 mostra uma forma mais compacta de um microprocessador, com suas unidades
bsicas: registradores, unidade lgica e aritmtica e unidade de controle. Estas trs unidades, em uma
nica pastilha, compem o que se denomina de unidade central de processamento (CPU) de um
computador. Em resumo, pode-se dizer que o corao de um computador. A CPU responsvel pela
busca e execuo de programas na memria e pelo controle de todas as unidades de um computador.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

Os registradores so usados na movimentao interna de dados de um microprocessador. A


quantidade de registradores disponveis fundamental para o desempenho de um microprocessador,
uma vez que o acesso memria, que externa pastilha, mais lento. O principal registrador do
microprocessador denominado de acumulador e utilizado na maioria das instrues.
A unidade lgica e aritmtica (ALU ou ULA) realiza funes bsicas de processamento de dados,
tais como adio, subtrao e operaes lgicas. A unidade de controle tem como funo o controle do
funcionamento de todas as unidades.

Fig. 1.3 Unidade Central de Processamento ou Microprocessador


Alm da CPU um computador composto de memria e unidades de entrada/sada. As unidades
de entrada/sada permitem a comunicao do microprocessador com o meio externo, atravs de
perifricos tais como mouse, impressora, monitor, scanner e outros.
De um modo geral h dois tipos de memria, a memria de programa (ROM Read Only
Memory, ou Memria somente de leitura) e a memria de dados (RAM Random Access Memory, ou
Memria de acesso aleatrio). A memria ROM, como o prprio nome diz, uma memria somente de
leitura. As informaes so previamente gravadas pelo fabricante e no pode ser alteradas. A memria
RAM permite a gravao e a leitura de dados durante o funcionamento do sistema. Os dados so
perdidos quando h falta de energia.
Foi dito que a memria de programa ROM vem gravada de fbrica com as informaes
necessrias para o funcionamento do computador e que no podem apagadas. Essa a ROM bsica. No
entanto, h outros tipos de ROM. A PROM (Programmable Read-Only Memory) equivalente ROM
bsica; ela pode ser gravada pelo usurio, mas no pode ser apagada. A EPROM (Erasable
Programmable Read-Only Memory) pode ser apagada com luz ultravioleta, e posteriormente reutilizada.
A EEPROM (Electrically Erasable Programmable Read-Only Memory) pode ser apaga eletricamente e
programada novamente.
Quanto memria RAM, h dois tipos bsicos: RAM esttica (SRAM) e RAM dinmica
(DRAM). A primeira construda com flip-flops e, por isso, de alta densidade. Comparada com a
RAM dinmica, ela ocupa muito mais espao na pastilha. No entanto, ela tem a vantagem de ser bem
mais rpida que a memria dinmica. A memria dinmica construda com capacitores e necessita de
um circuito de atualizao peridica dos dados (refresh). Assim, a memria principal de um computador
construda com RAM dinmica, pelo pouco espao necessrio.
Com o passar dos anos os processadores tornaram-se cada vez mais rpidos, o mesmo no
acontecendo com as pastilhas de memria, que evoluram de forma bem menos acentuada (em
particular, a memria dinmica, que possui velocidade de acesso bem menor que a esttica, mas bem
mais barata). Para evitar com que a baixa velocidade de acesso da memria comprometesse o
desempenho dos processadores mais modernos, um tipo especial de memria RAM foi criado: a
memria CACHE.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

A memria cache consiste numa pequena quantidade de memria RAM esttica (SRAM) usada
para acelerar o acesso RAM dinmica. Quando h necessidade de ler dados da memria dinmica,
estes so antes transferidos para a memria cache. Enquanto o processador l dados da memria cache,
mais dados so antecipadamente transferidos da memria dinmica para a memria cache, de forma que
o processamento torna-se mais rpido.
Cada endereo da memria permite o acesso a um conjunto de dados de 8 bits, ou 1 byte. O bit
(binary digit) pode assumir valor 0 (nvel lgico baixo) ou 1 (nvel lgico alto). A capacidade da
memria, ou quantidade de bytes que ela pode armazenar, normalmente dada em kbytes, Mbytes e
Gbytes. Ao contrrio de outras grandezas o fator de multiplicao 1024 (210), como mostrado a seguir:
1 kbyte = 210 = 1.024 bytes;
1 Mbyte = 210 x 210 = 220 = 1.048.576 bytes = 1.024 kbytes;
1 Gbyte = 210 x 210 x 210 = 230 = 1.073.741.824 bytes = 1.024 Mbytes
1 byte
Bit 7

Bit 6
Bit 5
Nibble Superior

Bit 4

Bit 3

Bit 2
Bit 1
Nibble Inferior

Bit 0

16 bits (2 bytes) formam 1 word e 2 words formam 1 word dupla (Double Word) ou Dword.
Bit15

Bit14

Bit13 Bit12 B11 Bit10


Byte superior (High Byte)

Bit9

1 word
Bit8 Bit7

Bit6

Bit5 Bit4 Bit3 Bit2


Byte Inferior (Low Byte)

Bit1

Bit0

Outros conceitos utilizados no estudo de microprocessadores:


MIPS Millions of Instructions Per Seconds (Milhes de Instrues Por Segundo): uma unidade de
desempenho do microprocessador.
FLOPS FLOating point instructions Per Seconds (Instrues com Ponto Flutuante Por Segundo).
tambm uma unidade de desempenho do microprocessador. Indica a capacidade de trabalhar
com nmeros decimais.
Representao em Ponto Fixo Sistema numrico no qual o ponto est implicitamente fixo ( direita
do digito mais a direita);
Representao em Ponto Flutuante Sistema numrico no qual um nmero real representado por
um par distinto de numerais: uma mantissa (ou significante) e um expoente. Possibilita
representao de nmeros fracionrios.
Set de instrues Conjunto de Instrues. Conjunto de Mnemnicos (siglas que fazem lembrar uma
ao) que representam todas as instrues do processador. Cada processador possui o seu set de
instrues particular.
CISC Complex Instruction Set Computer (Computador com Conjunto Complexo de Instrues): Tipo
de arquitetura de microprocessadores onde o barramento de comunicao entre as unidades que
compem a CPU comum a todas as unidades, ou seja, no h comunicao direta entre
unidades, atravs de um barramento exclusivo.
RISC Reduced Instruction Set Computer (Computador com Conjunto Reduzido de Instrues): Tipo
de arquitetura de microprocessadores cujas principais caractersticas so:
Conjunto de instrues limitado e simples;
Grande nmero de registradores de propsito geral;
Pipeline otimizado. Em outras palavras, h comunicao direta entre algumas unidades,
atravs de barramento exclusivo, possibilitando, assim, o processamento paralelo de
instrues.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

BIOS Basic Input/Output System o conjunto mnimo de instrues necessrias para a


inicializao do computador. Tambm gerencia o fluxo de dados entre o sistema operacional do
computador e os dispositivos perifricos conectados.
Desempenho de microprocessadores O desempenho de processadores, ou velocidade de
processamento, depende de alguns pontos chaves. O aumento de desempenho pode ser obtido
atravs de:
Aumento de clock
O sinal de clock responsvel pelo sincronismo entre as unidades de processamento internas
ao microprocessador e pelas unidades externas. Quanto maior a frequncia de clock mais
rpido o processamento. No entanto, no se pode aumentar de forma indefinida essa
frequncia. Isso pode causar falhas de processamento e sobreaquecimento. O aumento
depende de pesquisas com o objetivo de reduzir o tamanho dos componentes bsicos do
microprocessador e aumento da quantidade de componentes, sem perda de estabilidade no
funcionamento.
Aumento do nmero interno de bits
Uma maior quantidade de bits dos registradores e dos barramentos internos permite a
movimentao de uma maior quantidade de dados por unidade de tempo, aumentando o
desempenho do microprocessador.
Aumento do nmero externo de bits
Um nmero maior de bits externos permite a movimentao de uma maior quantidade de
dados por unidade de tempo com os perifricos, tais como memria, unidade de entrada e
sada, controlador de acesso direto memria (DMA).
Reduo do nmero de ciclos para executar cada instruo
A execuo de uma instruo normalmente feita em duas etapas: busca (onde a instruo
transferida da memria para a unidade de decodificao) e execuo (onde os sinais de
controle ativam, em uma sequncia lgica, todas as unidades envolvidas na execuo). No
microprocessador 8085 as instrues mais rpidas so executadas em quatro ciclos de clock;
as mais lentas, em at 16 ciclos de clock. A reduo do nmero de ciclos de clock na
execuo de uma instruo torna o processamento mais rpido.
Aumento da capacidade e velocidade da memria cache
Como j foi dito anteriormente, ao longo dos anos, o aumento de velocidade de
processamento dos microprocessadores tem sido muito maior do que o aumento da
velocidade de acesso memria principal. Assim, a velocidade de acesso memria
principal torna-se um limitador de desempenho dos processadores. Em razo desse problema
foi criada a memria cache. A memria cache (constituda de memria RAM esttica)
usada para acelerar a transferncia de dados entre a CPU e a memria principal (constituda
de RAM dinmica, de menor volume, porm mais lenta). O aumento da capacidade e da
velocidade da memria cache resulta no aumento da velocidade de transferncia de dados
entre a CPU e a memria principal e, consequentemente, resulta no aumento do desempenho
global do sistema.
Execuo de instrues em paralelo
O microprocessador 8085 compartilha um barramento comum entre suas unidades internas e
seus perifricos, o que significa dizer que no permite a execuo simultnea de duas
operaes que utilizem o barramento. Assim, apenas uma instruo executa por vez. Uma
arquitetura que permita que duas ou mais operaes sejam executadas simultaneamente torna
o processamento mais rpido.

1.2 Um pouco de Histria


4000 A.C BACO Inveno do baco pelos babilnios. Instrumento usado para realizar operaes
aritmticas, onde cada coluna representa uma casa decimal. Era o principal instrumento de clculo
do sculo XVII e usado at hoje. Data da mesma poca do baco o octograma chins Yin Yang, o
qual tido como a primeira representao binria dos nmeros de 0 a 7. Foi criado pelo imperador
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

chins Fou-Hi para representar a interao entre as duas energias que juntas so o fundamento da
totalidade.

baco

Octograma chins Yin Yang

Fig. 1.4 baco e Octograma


1614 LOGARITMO O cientista escocs JOHN NAPIER criou os logaritmos. Atravs das tabelas
criadas, as operaes de multiplicao e diviso tornaram-se mais simples, pois eram substitudas
por operaes de adio e subtrao, reduzindo o tempo de processamento.

Tabela de logaritmos

Pascaline

Calculadora de 4 funes de Leibniz

Fig. 1.5 Tabela de logaritmos, Pascaline e Calculadora de Leibniz


1623 RELGIO DE CALCULAR WILHELM SHICKARD, professor de matemtica da
Universidade de Tbingen, Alemanha, inventou um relgio de calcular que considerado a
primeira mquina mecnica de calcular da histria. Fazia multiplicao e diviso, mas requeria
vrias intervenes do operador. Usava o princpio desenvolvido por Napier (Napiers bones).
Essa calculadora foi desenvolvida para auxiliar o matemtico e astrnomo Johannes Kepler.
1642 PASCALINE O cientista francs BLAISE PASCAL criou uma calculadora capaz de realizar
operaes de adio e subtrao. A mquina implementada utilizava rodas e engrenagens, com as
quais era possvel representar nmeros decimais de 0 a 9. Pascal desenvolveu essa mquina para
ajudar seu pai na coleta de impostos. A mquina teve mais de 50 verses diferentes em uma
dcada.
1671 O matemtico alemo GOTTFRIED LEIBNIZ criou uma calculadora de 4 funes, capaz de
realizar operaes de adio, subtrao, multiplicao e diviso. a antecessora das calculadoras
atuais. O problema comum s calculadoras at esta poca era a necessidade de entrar com todos os
resultados intermedirios.
1738 ANDROIDES PROGRAMVEIS O cientista francs JACQUES VAUCANSON criou
robs (imitando a aparncia humana). Eram capazes de tocar flautas. Sua criao mais famosa foi
O Pato. Esse pato mecnico era capaz de imitar todos os movimentos de um pato real (bater asas,
movimentar a cabea, fazer barulho equivalente, comer e evacuar. Em 1749 ele construiu o
primeiro TEAR AUTOMTICO, que aceitava comandos atravs de um cilindro de metal
perfurado.
1801 CARTO PERFURADO O Tecelo francs JOSEPH MARIE JACQUARD aperfeioou o
tear construdo por Vaucanson. Ele construiu uma mquina de tear que memorizava em cartes
perfurados os padres de desenho dos tecidos e depois os reproduzia com fidelidade, lendo
comandos na presena ou ausncia de orifcios. A verso seguinte do Tear, em 1804, era totalmente
automatizada e podia fazer desenhos muito complicados. Esse considerado o primeiro registro de
programao semelhante de computadores modernos.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

10

Tear de Vaucanson

Tear de Jacquard

Fig. 1.6 Tear de Vaucanson e Tear de Jacquard


1822 MQUINA DE DIFERENAS e MQUINA ANALTICA Aborrecido pelos inmeros e
frequentes erros que encontrava nas tabelas de logaritmos, o professor de matemtica CHARLES
BABBAGE (ingls) decidiu construir uma mquina que eliminasse o trabalho repetitivo de fazer
esses clculos, a "Mquina de Diferenas". O modelo apresentado em 1822 encantou o Governo
Britnico que decidiu financi-lo na construo de uma mquina de diferenas completa, movida a
vapor e completamente automtica, comandada por um programa de instruo fixo capaz de
imprimir as tabelas. Baseada em operaes de adio e subtrao e na tcnica de diferenas finitas,
era capaz de resolver funes polinomiais e trigonomtricas (clculo de tabelas de navegao).

Mquina de diferenas

Mquina analtica

Fig. 1.7 Mquina de diferenas e analtica


O projeto da sua nova mquina levou 10 anos e foi abandonada em 1833, quando decidiu criar a
Mquina Analtica, um computador mecnico-automtico totalmente programvel, funo que
designou para sua esposa, a condessa Ada Lovelace (filha de Lord Byron). O novo computador
decimal paralelo a vapor operaria nmeros de 50 dgitos e faria uso de uma memria de 1000
nmeros, usando cartes perfurados e condicionais (IF), alm de instrues de desvio. Apesar de
ter uma estrutura correta, a metalurgia da poca no permitia a simetria e resistncia das peas,
razo ao qual a mquina nunca funcionou. Seria capaz de fazer uma adio em 1 segundo e uma
multiplicao em 1 minuto.
1885 - O CARTO DE HOLLERITH HERMAN HOLLERITH, funcionrio do Departamento de
Estatstica dos Estados Unidos, construiu uma mquina de carto perfurado para fazer o
recenseamento da populao americana. Antes da mquina o recenseamento durava 7 anos e
ocupava 500 empregados. Com a mquina o recenseamento de 1890 durou 1 ano e ocupou 43
empregados. A mquina foi aproveitada nas mais diversas aplicaes em reparties pblicas,
comrcio e indstria, e aperfeioada para realizar operaes aritmticas elementares. Em 1896
Hollerith fundou a TMC (Tabulation Machine Company). Para ampliar seus negcios, a TMC se
uniu a duas pequenas empresas para formar a CTRC (Computing Tabulation Recording
Company), em 1914. Em 1924, a CTRC se tornou uma empresa internacional e mudou seu nome
para IBM (Internacional Business Machine).
1936 COMPUTADORES Z1, Z3 e Z4 O cientista alemo KONRAD ZUSE criou o computador Z1, baseado em rel eletro-mecnico. Criou tambm o computador Z3, que foi o primeiro
computador de propsito geral controlado por programa. Criou ainda o Z4, computador projetado
para o desenvolvimento de msseis. Ele foi destrudo por bomba na 2a. guerra mundial.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

11

Mquina de Herman Hollerith

Computador Z4

Fig. 1.8 Mquina de Herman Hollerith e Computador Z4


1943 COLOSSO Na Inglaterra, em 1943, ALAN TURING, do Servio de Inteligncia Britnico,
construiu o Colosso, de dimenses gigantescas. A mquina, abrigada em Bletchley Park, tinha
2000 vlvulas e lia smbolos perfurados numa argola de fita de papel, inserida na mquina de
leitura fotoeltrica, comparando a mensagem codificada com sequncias conhecidas at encontrar
uma coincidncia. Processava cerca de 5 mil caracteres por segundo e foi usada para descodificar
as mensagens dos alemes, tendo sido decisiva no resultado final da guerra.

Colosso

Mark I

Fig. 1.9 Computadores Colosso e Mark I


1944 MARK I Na Universidade de Harvard em 1937, o professor Howard Aiken, financiado pela
IBM, comeou a construir o Mark I, concludo em 1944. Baseado em um sistema decimal,
manipulava nmeros de at 23 dgitos e tinha medidas grotescas: 15 m de comprimento e 2,5 m de
altura; 760.000 peas envoltas em vidro e ao inoxidvel brilhante; 800 km de fios e 420
interruptores para controle. Trabalhava sob o controle de um programa perfurado em uma fita de
papel. Adio e subtrao em 0,3 s, multiplicao em 3 s e diviso em 12 s,
1946 ENIAC (Electronic Numerical Integrator and Computer) - 1o Computador de propsito geral
a vlvula: 18.000 vlvulas, 30 toneladas, 15.000 ps quadrados, 140 kW, representao e aritmtica
com nmeros decimais, 5.000 adies/seg. Projetado pela Ballistics Research Labs. Foi
aproveitado no desenvolvimento da Bomba H.
1946 VON NEWMANN MACHINE A Mquina de Von Newman, ou Mquina de Touring
introduziu o conceito de programa armazenado (Stored Programa Concept) no qual a memria
conteria, alm de dados, programas. Os computadores modernos so baseados na mquina de Von
Newman.
1950 UNIVAC (Universal Automatic Computer) Lanado pela SPERRY, foi o 1o Computador de
aplicao cientfica e comercial. Seguiram UNIVAC II e UNIVAC 1100 series .
1953 IBM 701 Computador desenvolvido para aplicaes cientficas.
1947 TRANSISTOR Inveno do transistor pelos cientistas John Bardeen, William Shockley e
Walter Brattain. Passou a ser usado em escala comercial somente em 1952 pela Bell Laboratories.
1958 CIRCUITO INTEGRADO O engenheiro Jack Kilby, da Texas Instruments, criou o Circuito
Integrado.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

Vlvula

12

Transistor

Circuito Integrado

Fig. 1.10 Vlvula, transitor e circuito integrado


1960 IBM 7090, 7094 Computador transistorizado. Utilizao de linguagens de programao de
alto nvel, tais como FORTRAN, COBOL e PASCAL.
1964 IBM 360 Primeira famlia planejada de computadores.
DEC PDP 8 Introduziu o conceito de Minicomputador. Criou a estrutura de barramento, ou seja,
unidade de Entrada e Sada, Memria e CPU interligados por um conjunto de condutores.
1971 4004 (INTEL) - 1o microprocessador a ser lanado, de 4 bits, com aplicao voltada para
calculadoras (manipulao de nmeros em BCD) - 45 instrues - 640 Bytes de memria - clock de
108 kHz - 60.000 instrues/seg. (OBS: desempenho superior ao ENIAC) - 2.300 transistores
(tamanho do transistor: 10 m).
1972 8008 (INTEL) - 1o microprocessador de 8 bits, com aplicao voltada para terminais (que
trabalham com caracteres - codificao ASCII) - 48 instrues - 16KB de memria - clock de 200
KHz - 300.000 instrues/seg. 3500 transistores.
1974 8080 (INTEL) - Processador de 8 bits, de propsito geral - 72 instrues - opera com 12V clock de 2 MHz - 640.000 instrues/s. 64KB de memria. 6.000 transistores.
1975 Z80 (ZILOG), 6502 (MOS) Utilizado pelo 1o APPLE (APPLE 1) em 1976 por Steve
Wozniak e Steve Jobs (data da fundao da APPLE).
1976 8085 (INTEL) 8080 operando com 5V - 2 instrues a + que o 8080 - melhor performance.
5 MHz - 370.000 instrues/s. 6500 transistores.
1978 8086 (INTEL) - Processador 16 bits (barramento externo de 16 bits e registradores de 16 bits). 5
MHz - 0.33 MIPS, 8 MHz - 0.66 MIPS e 10 MHz - 0.75 MIPS. 29.000 transistores.
1979 8088 (INTEL) - Processador 16 bits (barram. externo de 8 bits e registradores de 16 bits) - 133
instrues - chip utilizado no primeiro PC em 1981. O PC/XT seria lanado em 1983 com HD de
10 MB e 128 Kbyte RAM. 29.000 transistores. Lanado o 68.000 (MOTOROLA) que foi utilizado
no Machintosh em 1984
1980 Co-processador 8087 (processador matemtico).
8051 (INTEL Lanado o microcontrolador 8051: microprocessador + perifricos (RAM, ROM,
Serial, Timer, Controlador de Interrupo, etc.) num nico chip, voltado para aplicaes de
controle
1982 80186/188 - 80286 - 80287 (INTEL) PC/AT 16 bits, modo protegido, 24 linhas endereos.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

13

1985 80386 (INTEL) Processador de 32 bits - bus externo de dados de 32bits - 275.000 transistores.
16MHz - 2.5 MIPS, 20 MHz - 2.5 MIPS, 25 MHz - 2.7 MIPS, 33 MHz - 2.9 MIPS.
1989 80486 (INTEL) - Processador de 32 bits: 386 que incorpora o 387 (coprocessador), cache
interna (L1) de 8KB e maior performance - 235 instrues - 1,2 milhes de transistores. 25 MHz 20 MIPS, 33 MHz - 27 MIPS, 50 MHz - 41 MIPS.
1991 WEB Tim Berners-Lee desenvolve a Rede Mundial de Computadores (World Wide Web). O
primeiro servidor Web lanado. O conceito de conexo de vrios usurios a um nico
computador por via remota nasceu no MIT no final da dcada de 50 e incio da dcada de 60. As
idias bsicas da Internet foram desenvolvidas em 1973 por Bob Kahn e Vint Cerf.
1993 Pentium 60 MHz e 66 MHz - Processador de 32 bits bus ext. de 64 bits - 5V - 3 milhes de
transistores. Primeiro processador de 5a gerao.
1994 Pentium 90 MHz e 100 MHz - Alimentao de 3,3V (maior confiabilidade). 3.2 milhes de
transistores.
1996 Pentium Pro 200 - Incorpora cache L2 de 256kB, utilizando tecnologia MCM (Multi-Chip
Module) - 5 milhes de transistores - idealizado para programas de 32 bits. Usa memria de 64 bits.
1997 Pentium 200MMX (Pentium MultiMidia eXtensions): contm 57 novas instrues dedicadas
para programas de Multimdia. 4.5 milhes de transistores. 200 MHz e 166 MHz. Barramento de
64 bits. Cada instruo MMX equivale a vrias instrues comuns.
1997 Pentium II 233, 266, 300MHz utiliza o slot I. 7,5 milhes de transistores (tecnologia 0.35
micron), cache L2 com 512kB - 242 pinos - 64GB de memria enderevel. Poder de
processamento de 32 bits do Pentium Pro e maior eficincia no processamento de 16 bits.
Instrues MMX.
1998 Pentium II 450 MHz - Cache L2 de 512 kB, 7.5 milhes de transistores, tecnologia 0.25
micron, barramento de 64 bits. 64 GB de memria enderevel.
1999 Pentium III 450 e 500 MHz (at 1,2 GHz) Barramento de sistema de 100 MHz ou 133 MHz,
cache L2 de 512 kB, processador de 32 bits, 9,5 milhes de transistores, tecnologia 0.25 micron, 64
GB de memria enderevel. 70 novas instrues voltadas para multimdia e processamento 3D.
2000 Pentium IV at 2 GHz, barramento de sistema de 400 MHz, Cach L1 de 32 kB e L2 de 256
kB, 42 milhes de transistores.
2004 Pentium 4 (Prescott) - processador de 32/64 bits, 125 milhes de transistores, 7.000 MIPS,
teconologia de 0,09 m.
2005 Pentium D processador de 32 bits, 230 milhes de transistores, 26.000 MIPS, tecnologia de
90nm.
2006 Core2 processador de 32 bits, 152 milhes de transistores, 26.000 MIPS, tecnologia de 65 nm.
2007 Core2 Duo processador de 64 bits, 820 milhes de transistores, 53.000 MIPS, tecnologia de
45nm.
2008 Core i7 processador de 64 bits, 731 milhes de transistores, 76.000 MIPS, tecnologia de 45 nm
2008 N270 Famlia tomo Intel lana uma nova famlia de microprocessadores visando o
mercado de dispositivos mveis, tais como notebooks, palmtops e iphones. So menores e mais
eficientes. Tecnologia de 45 nm, cache de 512 kB L2, clock de at 2.13 GHz.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

14

2009 N450 Intel lana uma nova gerao de processadores da famlia tomo visando melhorar o
desempenho de laptops e aumentar a vida til das baterias desses equipamentos. 60% menor que
seus antecessores e consome 20% menos energia. A potncia dissipada de 5,5 W. Frequncia de
clock de 1,66 GHz.
2010 - Core i5-661 processador de 64 bits, 559 milhes de transistores de 32 nm e 3,33 GHz de
frequncia. Memria cache de 4 MB.
Resumindo, o primeiro processador que a Intel lanou, em 1971 (Intel 4004) funcionava com uma
frequncia de 108 kHz e possua 2.300 transistores, sendo que cada transistor tinha 10 m de tamanho.
O novo processador Intel Core i5-661, lanado em 2010, funciona com frequncia de 3,33 GHz e
possui 559 milhes de transistores de 32 nm.
Observa-se, ao longo da linha de tempo, um aumento no nmero de transistores nos
microprocessadores e uma reduo no tamanho desses componentes (tecnologia empregada). A reduo
no tamanho dos transistores resulta no aumento da velocidade de operao e tambm na reduo das
conexes internas, alm de permitir a insero de um nmero cada vez maior de transistores numa nica
pastilha. O aumento da capacidade de integrao de transistores resulta ainda na reduo do consumo de
energia eltrica e do custo dos microprocessadores. H um postulado que diz que o gate de um transistor
no pode ser menor do que a largura correspondente a 10 tomos. A previso de pesquisadores da Intel
que a dimenso do gate dos transistores alcanar esse valor por volta do ano 2017.

1.3 Sistema de Numerao


No estudo de microprocessadores o sistema de numerao mais utilizado o hexadecimal, uma
vez que os dados e os endereos so manipulados em hexadecimal. Algumas anlises, no entanto, so
feitas utilizando-se o sistema binrio. Por exemplo, as operaes lgicas e a rotao de dados do
acumulador. Tambm utiliza-se o sistema decimal, principalmente na entrada e sada de dados, de modo
a facilitar a interao com o usurio. Assim, so apresentados a seguir os principais sistemas de
numerao e a converso de valores entre eles.
1.3.1 Sistema Decimal
O sistema decimal utiliza 10 dgitos, que vo de 0 a 9. Exemplo: 34610
1o dgito: Armazena as unidades (ou 100 = 1). No ex.: seis unidades (ou 6 100);
2o dgito: Armazena as dezenas (ou 101 = 10). No ex.: quatro dezenas (ou 4 101);
3o dgito: Armazena as centenas (ou 102 = 100). No ex.: trs centenas (ou 3 102);
A soma destas parcelas equivale a: 300 + 40 + 6 = 34610
A ponderao dada pelo nmero 10 elevado potncia representada pela coluna, sendo que a 1 a
coluna da direita 0.
1.3.2 Sistema Binrio
O sistema binrio o sistema de numerao que o computador entende. Utiliza 2 dgitos, 0 e 1 ou
(OFF e ON) ou (0V e 5V), ou (0V e 3,3V). Exemplo: 110010112
1o dgito: Armazena o equivalente a 20 (1). No ex.: 1 20
2o dgito: Armazena o equivalente a 21 (2). No ex.: 1 21
3o dgito: Armazena o equivalente a 22 (4). No ex.: 0 22

8o dgito: Armazena o equivalente a 27 : No ex.: 1 27


A soma destas parcelas resulta no seguinte equivalente decimal:
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

15

128 + 64 + 0 + 0 + 8 + 0 + 2 + 1 = 20310
A ponderao dada pelo nmero 2 elevado potncia representada pela coluna, sendo que a 1 a
coluna 0, a segunda coluna 1 e assim sucessivamente.
1.3.3

Sistema BCD (Binary-Coded Decimal)

O Sistema BCD o sistema em que se combina o sistema binrio e o sistema decimal. utilizado
como formato de sada de instrumentos. Utiliza 2 dgitos: 0 e 1 que so dispostos em grupos de 4 dgitos,
utilizados para representar um dgito decimal (nmero 0 at 9). A representao de um nmero maior que
9 deve ser feita por outro grupo de 4 bits, com a ponderao dada pelo sistema decimal.
Exemplo: 97310 = 1001 0111 0011.
Note a diferena entre este valor e o valor do nmero binrio 1001 0111 00112 = 241910
1.3.4

Sistema Octal

O Sistema Octal baseado nos mesmos princpios do decimal e do binrio, apenas utilizando
base 8. Utiliza 8 dgitos: 0 a 7. Exemplo: 32078
1o dgito: Armazena o equivalente a 80 (1). No ex.: 7 80
2o dgito: Armazena o equivalente a 81 (8). No ex.: 0 81
3o dgito: Armazena o equivalente a 82 (64). No ex.: 2 82
4o dgito: Armazena o equivalente a 83 (512). No ex.: 3 83
O equivalente decimal : 1536 + 128 + 0 + 7 = 167110
1.3.5

Sistema Hexadecimal

O Sistema Hexadecimal baseado nos mesmos princpios do decimal, apenas utiliza base 16.
Utiliza 16 dgitos: 0 a 9, A, B, C, D, E e F. Exemplo: Ex.: 20DH ou 20Dh ou 20D16
1o dgito: Armazena o equivalente a 160 (1). No ex.: 13 160
2o dgito: Armazena o equivalente a 161 (16). No ex.: 0 161
3o dgito: Armazena o equivalente a 162 (256). No ex.: 2 162
O equivalente decimal : 512 + 0 + 13 = 52510
1.3.6

Converso de Base

O sistema hexadecimal mais fcil de trabalhar que o sistema binrio e utilizado na codificao
de programas no microprocessador. Na converso de hexadecimal para binrio, cada dgito hexadecimal
convertido em 4 dgitos binrios equivalentes. Na converso de binrio para hexadecimal, cada grupo de
4 dgitos binrios convertido em 1 dgito hexadecimal equivalente.
Exemplos:
7 D 3 F16 (7D3FH)= 0111 1101 0011 11112
10100001101110002 = 1010 0001 1011 10002 = A 1 B 816 ou A1B8H
Um algoritmo para a converso de base pode ser obtido. A diviso termina quando o quociente
zero. Um exemplo de decimal para hexadecimal dado.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

16

Representao: r2 r1 r0
Valor hexadecimal correspondente a 1234: 4D2 H
Algoritmo genrico:
Se q0 = 0 Valor = q0 B+ r0 = 0.B + r0 = r0
Valor = r0 Representao: r0
Se q1 = 0 Valor = q0 B+ r0;

q0= q1 .B + r1 = 0.B + r1 = r1 ou,

Valor = r1 .B+ r0 Representao: r1 r0


Se q2 = 0 Valor = q0 B+ r0 ;

q0= q1 .B + r1;

q1= q2 .B + r2 = 0.B + r2 = r2

Da, q0= r2 .B + r1 e Valor = (r2 .B + r1 ) B+ r0 . Logo,


Valor = r2 B2 + r1 B + r0 Representao: r2 r1 r0
1.3.7

Representao de Nmeros Positivos e Negativos

Na representao de nmeros no microprocessador pode-se utilizar tanto a representao de


nmeros com sinal, quanto a de nmeros sem sinal. O crculo da figura a seguir mostra as possibilidades
de um nmero de 4 bits. Na representao de nmero com sinal, o bit mais significativo representa o sinal
do nmero. No caso do nmero de 4 bits, o bit 3 indica se o nmero positivo ou negativo. Se ele zero
o nmero positivo, se for 1, negativo.

Fig. 1.11 Crculo para um nmero de 4 bits


Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

17

Valor Simtrico de um Nmero


Nmero binrio: a = (complemento de 1 de a) + 1 = complemento de 2 de a = 2n a
Nmero decimal: a = (complemento de 9 de a) + 1 = complemento de 10 de a = 10n a

Subtrao usando adio de um nmero binrio:


a b = a + (complemento de 2 de b) a b = a + (2n b)
Exemplo para um nmero binrio de 4 dgitos:
a 1 = a + (24 1) = a + (10000 0001) = a + 1111
a 3 = a + (24 3) = a + (10000 0011) = a + 1101
Se a = 1001 (910), ento a subtrao no modo direto fica:
a 1 = 1001 0001 = 1000
a 3 = 1001 0011 = 0110
E a subtrao usando a adio com o complemento de 2 do nmero fica:
a 1 = 1001 + 1111 = 1 1000 (despreza-se o quinto dgito)
a 3 = 1001 + 1010 = 1 0110 (o nmero de 4 dgitos)

Subtrao usando adio de um nmero decimal:


a b= a + (complemento de 10 de a) a b = a + (10n b)
Exemplo para um nmero decimal de 2 dgitos:
a 1 = a + (102 1) = a + (100 1) = a + 99
a 3 = a + (102 3) = a + (100 3) = a + 97
Se a = 94, ento a subtrao de modo direto fica:
a 1 = 94 1 = 93
a 3 = 94 3 = 91
E a subtrao usando a adio com o complemento de 10 do nmero fica:
a 1 = 94 + 99 = 1 93 (despreza-se o terceiro dgito)
a 3 = 94 + 97 = 1 91 (o nmero de 2 dgitos)

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

18

Arquitetura e Princpio de Funcionamento de Microprocessadores


2.1 Arquiteturas RISC, CISC e Hbrida
H dois tipos bsicos de arquitetura de microprocessadores: CISC (Complex Instruction Set
Computer Computador com Conjunto Complexo de Instrues) e RISC (Reduced Instruction Set
Computer Computador com Conjunto Reduzido de Instrues), e uma terceira, que utiliza
caractersticas dos dois tipos bsicos. Uma das caractersticas que diferenciam as duas arquiteturas que
na arquitetura CISC o conjunto de instrues contm muito mais instrues do que na arquitetura RISC.
A Tabela 2.1 lista essa e outras caractersticas das duas arquiteturas.
Tabela 2.1: Comparao entre arquiteturas CISC e RISC
CISC
RISC
Conjunto com dezenas ou centenas de instrues
Conjunto com poucas dezenas de instrues
Instrues complexas, com vrios ciclos de Instrues simples, normalmente executadas em 1
execuo
ciclo (1 ciclo de busca e 1 de execuo)
Muitas instrues com acesso memria
Uso reduzido da memria
Nmero reduzido de registradores
Quantidade grande de registradores. Uso
preferencial de registradores, ao invs de memria
Menor nmero de instrues em assembly por Programa compilado tem maior nmero de
programa, porm mais lento na execuo
instrues em assembly, mas a execuo mais
rpida
Uso de micro-cdigos gravados no processador. No usa micro-cdigos gravados no processador.
Necessidade de interpretao das instrues
As instrues RISC j so semelhantes aos microcdigos e so executadas diretamente no hardware
Instrues com diferentes tamanhos
Codificao das instrues em uma palavra de
tamanho fixo
Arquitetura mais complexa
Arquitetura mais simples
Processo de fabricao mais caro que a dos Processo de fabricao mais barato
processadores RISC
Exemplos: 386 e 486
Exemplos: MIPS R10000 e HP PA-8000
Vrios modos de endereamento
Poucos modos de endereamento
Nem todos os processadores usam pipeline. Por Uso intenso de pipelines
exemplo, o 8085.
Pelo menos um dos argumentos de cada instruo As operaes com a memria principal esto
buscado na memria.
restritas a transferncia atravs das instrues load
e store.
Endereos de retorno de subrotinas e interrupes Endereos de retorno de subrotinas so
so guardados na pilha, uma regio previamente normalmente guardados em registradores
definida na memria
Devido ao nmero reduzido de registradores, as Uso de registradores para a alocao das variveis
variveis de um programa muitas vezes so de um programa
associadas a posies de memria
Um processador hbrido usa as caractersticas de operao da arquitetura CISC, mas possui um
ncleo RISC. Uma das vantagens da arquitetura CISC o fato de j possuir as micro-instrues
previamente gravadas no processador, facilitando o trabalho dos programadores. Por outro lado, os
micro-cdigos so usados aps a decodificao da instruo, ou seja, aps o ciclo de busca. Na
arquitetura CISC, antes de executar uma instruo, h necessidade de busca da instruo na memria e
de decodificao. Utiliza-se micro-cdigos gravados no processador, para a execuo das instrues.
Na arquitetura RISC as instrues so equivalentes aos micro-cdigos da arquitetura CISC, no
precisando de decodificao. Assim, na arquitetura RISC as instrues so executadas em um nico
ciclo de via de dados. De fato, as instrues so buscadas em um ciclo de clock e executadas,
normalmente, no prximo ciclo. Efetivamente, devido ao uso de pipeline, explicado mais adiante, a cada
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

19

ciclo uma nova instruo buscada. No possvel ter instrues de multiplicao e diviso, por
exemplo, por exigir muitos ciclos para execuo. Multiplicaes so resolvidas com adies e
deslocamentos. A Fig. 2.1 compara as etapas de execuo na arquitetura RISC e na CISC.

Fig. 2.1 Etapas de execuo nas arquiteturas RISC e CISC


O pipeline uma tcnica usada para acelerar a execuo de instrues. A cada ciclo de clock,
enquanto uma instruo est na etapa de execuo, a instruo seguinte est sendo buscada. O resultado
global que, a cada ciclo, uma nova instruo iniciada e uma instruo encerrada. No caso mostrado
a seguir a instruo B faz referncia memria e, assim, enquanto a instruo A necessita de apenas um
ciclo para busca e um para execuo, a instruo B precisa de um ciclo para busca e dois para execuo.
Ciclos
Busca da Instruo
Execuo da Instruo
Referncia Memria

1
A

2
B
A

3
C
B

4
D
C
B

5
E
D

Caso a instruo B interfira na etapa de execuo da instruo C (por exemplo, usando o mesmo
registrador ou quando a instruo C precisa do resultado da instruo B) necessrio aguardar o trmino
da instruo B antes de executar a instruo C.
Ciclos
Busca da Instruo
Execuo da Instruo
Referncia Memria

1
A

2
B
A

3
C
B

4
NOP
NOP
B

5
D
C

6
E
D

Assim, a arquitetura RISC apresenta algumas vantagens quando comparada com a arquitetura
CISC:
Velocidade de execuo;
O uso de pipeline torna os processadores RISC duas a quatro vezes mais rpidos que um CISC
de mesmo clock;
Simplicidade de Hardware;
Ocupa menos espao no chip, devido ao fato de trabalhar com instrues simples;
Instrues de mquina simples e pequenas, o que aumenta seu desempenho.
No entanto, a arquitetura RISC tambm apresenta desvantagens com relao arquitetura CISC:
O desempenho de um processador RISC depende diretamente do cdigo gerado pelo
programador. Um cdigo mal desenvolvido pode resultar em tempo de execuo muito
grande;
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

20

Um programa originalmente compilado para uma mquina CISC tem um equivalente


compilado para mquina RISC com uma quantidade muito maior de cdigos assembly,
ocupando um espao maior na memria;
A arquitetura RISC requer sistema de memria rpida para alimentar suas instrues.
Normalmente possuem grande quantidade de memria cach interna, o que encarece o projeto.

2.2 Arquitetura 8085, 8088/86, 8051 e PIC


O microprocessador 8085 e o microcontrolador 8051 so equivalentes em arquitetura. A diferena
est em que, sendo um microcontrolador, o 8051 possui vrias unidades adicionais (portas de entrada e
sada paralela e serial, memria ROM, memria RAM, temporizadores etc) alm da CPU. O
microprocessador 8085 equivale CPU do 8051. Os registradores de ambos so de 8 bits, exceto o
registrador PC (Program Counter Contador de Programa), que de 16 bits. O Apontador de Pilha, SP
(Stack Pointer) um registrador de 16 bits no 8085 e de 8 bits no 8051. O Apontador de Dados, DPTR,
do 8051, um registrador de 16 bits, formado por dois registradores de 8 bits (DPH e DPL), e equivale
ao par HL (16 bits) do 8085, formado pelos registradores H e L, de 8 bits). As Fig. 2.2 e 2.3 mostram,
respectivamente, a arquitetura do 8085 e do 8051.

Fig. 2.2 Estrutura interna do microprocessador 8085 (CISC)

Fig. 2.3 Estrutura bsica do microcontrolador 8051 (CISC).

Na comparao entre o microprocessador 8086/88 e o 8085 a principal diferena est nos


registradores de 16 bits do 8086/88, em contraste com os registradores de 8 bits do 8085. Outra
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

21

diferena fundamental que o 8086 possui unidade de busca independente da unidade de execuo, o
que permite buscar uma nova instruo (e colocar numa fila) antes de terminar de executar a instruo
anterior. No 8085 a busca da prxima instruo feita aps a execuo da instruo anterior. Busca-se
a primeira instruo, executa-se essa instruo e ento busca-se a prxima instruo.
A Tabela 2.1 mostra algumas caractersticas desses microprocessadores. Dentre elas destaca-se a
diferena bsica entre o 8086 e o 8088, que o barramento externo de 8 bits do 8088, o que permite o
interfaceamento com perifricos de 8 bits e com estruturas previamente construdas para o 8085.
Tabela 2.1 Comparao entre os microprocessadores 8085 e 8086/88
Caracterstica

Microprocessador
8085

Microprocessador
8088

Microprocessador
8086

Barramento de endereo

16 bits

20 bits

20 bits

Capacidade de
endereamento de memria

65.536 ( 64 kB )

1.048.576 ( 1 MB )

1.048.576 ( 1 MB )

Barramento de dados

8 bits

Interno: 16 bits
Externo: 8 bits

Interno: 16 bits
Externo: 16 bits

Manipulao de STRINGS

No

Sim

Sim

Registradores Internos

8 bits e 16 bits

16 bits

16 bits

Uso de segmentao para


endereamento

No

Sim

Sim

Aritmtica Decimal completa

No

Sim

Sim

Em sequncia:
Busca
Executa

Unidades Independentes:
Unidade de
Interfaceamento com
Barramento (BIU)
responsvel pela Busca e
Unidade de Execuo (EU)

Unidades Independentes:
Unidade de
Interfaceamento com
Barramento (BIU)
responsvel pela Busca e
Unidade de Execuo (EU)

Etapas de Busca e Execuo

A Fig. 2.4 mostra a estrutura bsica do microprocessador 8086/88, destacando a Unidade de


Interfaceamente com o Barramento (BIU), responsvel pela busca de instrues e agrupamento em uma
fila (queue) e a Unidade de Execuo, responsvel pela execuo das instrues previamente guardadas
na fila.
Observando as arquiteturas das Fig. 2.4, 2.3 e 2.4, verifica-se uma caracterstica chave da
arquitetura CISC: nessa arquitetura os barramentos de dados e endereos so comuns a todas as
unidades internas. Assim, a comunicao entre unidades sempre atravs desse barramento comum, no
permitindo operaes em paralelo. Na arquitetura RISC, mostrada na Fig. 2.5, h mais de uma via de
comunicao entre unidades. Destaca-se aqui o fato da unidade lgica e aritmtica est conectada
memria de programa e memria de dados atravs de canais diferentes, o que permite operaes
simultneas de busca de instruo e de dados. A estrutura mostrada de um microcontrolador da famlia
PIC.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

22

Fig. 2.4 Estrutura bsica do microprocessador 8086/88 (CISC).

Fig. 2.5 Estrutura do microcontrolador da famlia PIC 16F8X (RISC)


Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

23

2.3 Registradores Principais 8085, 8088/8086, 8051


A quantidade de registradores em um microprocessador/microcontrolador fundamental para o
desempenho na execuo de tarefas porque a movimentao de dados entre registradores mais rpida
do que as operaes que utilizam a memria. Os microprocessadores 8085 e 8086/8088 possuem poucos
registradores quando comparados com os microcontroladores da famlia 8051 e da famlia PIC. Assim,
as variveis de um programa so alocadas em posies de memria, ao invs de registradores. E nesse
processo so necessrios vrios modos de endereamento. Na arquitetura RISC h uma quantidade
grande de registradores (em mdia 512 com 32 visveis por vez: 8 para variveis globais e ponteiros, 8
para parmetros de entrada, 8 para variveis locais e 8 para parmetros de sada). Dessa forma, h um
nmero reduzido de acesso memria (o acesso memria torna o processamento mais lento). A
alocao de variveis feita em registradores e h apenas um ou dois modos de endereamento para
acesso memria.
A Tabela 2.2 mostra os registradores do 8085 e do 8086/8088. Na comparao entre eles destacase: o acumulador do 8085 (principal registrador) equivalente ao byte inferior do acumulador primrio
do 8086/8088; o par HL equivale ao registrador BX, que composto pelos registradores BH e BL; os
registradores B e C, equivalem aos registradores CH e CL, que formam o registrador CX e os
registradores D e E equivalem aos registradores DH e DL, que formam o registrador DX. Os
apontadores de pilha, SP, so equivalentes. Alm do apontador de pilha, o 8086/8088 possui outros trs
registradores apontadores (BP, SI, DI), que so usados como offset na formao do endereo absoluto.
O registrador PC do 8085 equivalente ao ponteiro de instruo IP, 8086. Enquanto o registrador PC j
fornece diretamente o endereo da prxima instruo, o ponteiro IP precisa do registrador de segmento
CS para a formao do endereo absoluto que indica a prxima instruo. Os outros registradores de
segmento (DS, SS, ES) permitem a seleo de outras reas de memria de 64 kB, dentro da memria
principal de 1 MB. Os registradores de flags diferem no nmero de bits e no nmero de flags. No 8085
so 5 flags e no 8086/8088 so 9 flags (6 refletem o resultado das operaes lgicas e aritmticas e 3 so
bits de controle).
Tabela 2.2 Registradores dos microprocessadores 8085 e 8086/8088
Registradores do 8085
Registradores do 8086/8088
A Acumulador
AH AL(A) AX Acumulador Primrio
BX Acumulador e Registrador Base
H
L Apontador de dados
BH
BL
CX Acumulador e Contador
B
C
CH
CL
DX Acumulador e Endereador de I/O
D
E
DH
DL
Apontador de pilha
Apontador de pilha
SP
SP
Apontador Base usado na pilha
BP
ndice da Fonte usado para indexao
SI
ndice de Destino usado para indexao
DI
Contador de Programa
Ponteiro de Instruo
PC
IP
Segmento de Cdigo
CS
Registradores de
Segmento de Dados
DS
Segmento. Usados
para a formao do
Segmento de Pilha
SS
endereo absoluto
Segmento Extra
ES
Registrador de Flags
F Registrador de Flags
FLAGS
H dois grupos de registradores no microcontrolador 8051: os registradores de propsito geral,
num total de 32, que ocupam a parte baixa da memria RAM e os registradores especiais, cujos
endereos so equivalentes aos endereos da parte alta da memria RAM. A Tabela 2.3 mostra os
registradores especiais e a Fig. 2.6 mostra os registradores de propsito geral.
Os registradores podem ser referidos pelo mnemnico ou pelo endereo. Na regio dos
registradores especiais, por exemplo, o acumulador pode ser referido como A, ACC ou pelo endereo
E0 H. Esse registrador especial e outros da lista podem ainda ser acessados por bit. Os latches das
portas de entrada/sada (P0, P1, P2 e P3) tambm so registradores especiais cujos endereos so,
respectivamente 80 H, 90 H, A0 H e B0 H.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

24

Tabela 2.2: Principais Registradores Especiais


Endereos individuais dos Bits e
Mnemnico
Endereo
denominaes de alguns bits
P0
80 H
87 86 85 84 83 82 81
SP
81 H
DPTR
82H 83H
DPL
82 H
DPH
83 H
SMOD
PCON
87 H

Registrador
Latch da Porta 0
Apontador de Pilha
Apontador de Dados
LSB do Apontador de Dados
MSB do Apontador de Dados
Controle de Energia
Controle do Contador/Temporizador

TCON

88 H

80

8F

8E

8D

8C

8B

8A

89

TF1

TR1

TF0

TR0

IE1

IT1

IE0

88
IT0

Controle do Modo do Temporizador/


Contador
LSB do Temporizador/Contador 0
LSB do Temporizador/Contador 1
MSB do Temporizador/Contador 0
MSB do Temporizador/Contador 1
Latch da Porta 1

TMOD

89 H

G1

C/T1

M11

M01

G0

C/T0

M10

M00

TL0
TL1
TH0
TH1
P1

8A H
8B H
8C H
8D H
90 H

97

96

95

94

93

92

91

90

Controle da Porta Serial

SCON

98 H

9F

9E

9D

9C

9B

9A

99

98

SM1

SM2

SM3

REN TB8

RB8

TI

RI

A0

Porta de Dados Seriais


Latch da Porta 2
Habilitador de Interrupo

SBUF
P2

99 H
A0 H

A7

A6

A5

A4

A3

A2

A1

IE

A8 H

AF

AE

AD

AC

AB

AA

A9

A8

ES

ET1

EX1

ET0

EX0

EA

Latch da Porta 3

P3

B0 H

B7

B6

B5

B4

B3

B2

B1

B0

Controle de Prioridade da Interrup.

IP

B8 H

BF

BE

BD

BC

BB

BA

B9

B8

PS

PT1

PX1

PT0

PX0

D1

D0

Registrador de Estado do Programa

PSW

Acumulador
Registrador B

ACC ou A
B

D0 H
E0 H
F0 H

D7

D6

D5

D4

D3

D2

CY

AC

F0

RS1

RS0

OV

E7
F7

E6
F6

E5
F5

E4
F4

E3
F3

E2
F2

E1
F1

E0
F0

Na regio de registradores de propsito geral verifica-se que h quatro bancos de registradores,


cada um com 8 registradores. Os registradores de cada banco so denominados de R0 a R7. Os bits
responsveis pela seleo do R0 do banco 0 ou R0 do banco 3, por exemplo, so os bits RS1 e RS0 do
registrador especial PSW (Program Status Word), mostrado a seguir, e que tambm contm as flags do
8051. As flags sero comentadas em uma seo posterior.

CY

AC

PSW (Program Status Word)


F0
OV
RS1
RS0
RS1
0
0
1
1

RS0
0
1
0
1

Banco Selecionado
0
1
2
3

Ao invs de fazer referncia aos registradores R0 a R7 pelo nome, pode-se usar os endereos
desses registradores, que variam de 00 H (R0 do banco 0) at 1F H (R7 do banco 3).

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

25

Fig. 2.6 Registradores de propsito geral do 8051 parte baixa da memria RAM

2.4 Princpio de Funcionamento 8085, 8088/86, 8051


2.4.1

Microprocessador 8085

A execuo de uma instruo no microprocessador 8085 comea com a busca da instruo na


memria e na decodificao dessa instruo. Isso ocorre em trs ciclos de clock.

Fig. 2.7 Ciclos de Mquina e de Instruo do 8085

O trs primeiros estados de uma instruo (T1, T2 e T3) correspondem ao ciclo de busca. Cada
estado corresponde a um ciclo de clock. A frequncia que corresponde a um ciclo de clock a
frequncia do cristal oscilador dividida por 2. Assim, se o cristal oscilador for de 2 MHz, a frequncia
de clock 1 MHz e o perodo de clock 1 s. O microprocessador 8085A-2 pode ser operado com
frequncia do cristal de 500 kHz a 5 MHz.
Aps a busca e decodificao da instruo o microprocessador passa para a etapa de execuo,
que pode ocorrer em 1 ou mais ciclos de clock. Uma vez completada a execuo da instruo, est
completo o ciclo de instruo, que composto pelo ciclo de busca mais o ciclo de execuo.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

26

Se o ciclo de execuo ocorrer em mais de um ciclo de clock inicia-se um novo ciclo denominado
de ciclo de mquina. A cada incio de um novo ciclo de mquina tem um novo valor do contador de
programa PC. O primeiro ciclo de mquina tem trs ciclos de clock (T1 a T4), os demais tem trs ciclos
de clock (T1, T2 e T3). O diagrama de temporizao mostrado na Fig. 2.8 ilustra os sinais de controle
presentes durante a execuo de uma instruo. So mostrados apenas os dois primeiros ciclos de
mquina.

Fig. 2.8 Ciclos de Mquina e de Instruo do 8085

Observa-se no diagrama de temporizao que o sinal ALE (Adress Latch Enable) est presente no
incio de cada ciclo de mquina. Ele habilita o registrador PC a colocar no barramento o endereo da
prxima instruo (ou endereo do dado a ser buscado na memria). Esse sinal tambm usado no
controle de perifricos.
O barramento denominado A15-A8 contm a parte alta do endereo de 16 bits (PC H). O
barramento AD7-AD0 contm a parte baixa do endereo a ser acessado na memria, ou a instruo que
foi buscada na memria ou ainda dados originados da memria ou de registradores.
Os sinais RD\, WR\ e IOM\ so sinais de controle de perifricos. Eles indicam o estado das
operaes em andamento. RD\ baixo (RD\ = 0) indica que o microprocessador est em perodo de
leitura, que pode ser de memria (IOM\ = 0) ou de uma porta de entrada (IOM\. = 1). WR\ baixo
(WR\ = 0) indica uma operao de escrita em memria (IOM\ = 0) ou em uma porta de sada (IOM\.
= 1).
O que ocorre em cada estado do diagrama de temporizao mostrado na parte superior da Fig.
2.8:
Estado T1 (ciclo de mquina M1): o contedo do registrador PC (contador de programa)
colocado no barramento e indica o endereo de leitura da memria para obteno do cdigo de operao
(opcode) da instruo.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

27

Estado T2 (ciclo de mquina M1): o barramento est liberado. O contedo do registrador PC


incrementado em uma unidade, preparando-se para a busca da prxima instruo ou do segundo byte da
instruo em andamento.
Estado T3 (ciclo de mquina M1): a instruo lida da memria e enviada para o registrador de
instruo para ser decodificada. No final deste estado a instruo j est decodificada e a unidade de
controle inicia o comando das unidades envolvidas na execuo da instruo.
Estado T4 (ciclo de mquina M1): nesse perodo normalmente comea a execuo da instruo.
Na instruo MOV A,B, por exemplo, nesse perodo ocorre a transferncia do contedo de B em um
registrador temporrio, TMP, para depois ser transferido para o registrador A, durante o estado T2 da
prxima instruo.
Estado T1 (ciclo de mquina M2): o contedo do registrador PC (contador de programa)
colocado no barramento e indica o endereo de leitura da memria para obteno do cdigo de operao
(opcode) da instruo. Nesse ciclo de mquina M2 o contedo buscado pode ser o opcode da prxima
instruo ou o segundo byte da instruo em andamento. Os estados T1 e T2 so os nicos estados onde
pode ocorrer sobreposio entre duas instrues. Durante o perodo de busca da nova instruo a
instruo anterior encerrada. a sobreposio entre a etapa de busca de uma instruo e a etapa de
execuo da prxima instruo (SBE Sobreposio Busca Execuo).
Estado T2 (ciclo de mquina M2): o barramento est liberado. O contedo do registrador PC
incrementado em uma unidade, preparando-se para a busca da prxima instruo ou do terceiro byte da
instruo em andamento. Nesse perodo, o barramento usado para encerramento da instruo anterior.
Estado T3 (ciclo de mquina M2): a instruo lida da memria e enviada para o registrador de
instruo para ser decodificada. No final deste estado a instruo j est decodificada e a unidade de
controle inicia o comando das unidades envolvidas na execuo da instruo.
2.4.2

Microcontrolador 8051

A busca e execuo da grande maioria das instrues do 8051 ocorre em um ou dois ciclos de
mquina. As excees so as instrues de diviso e multiplicao que so executadas em 4 ciclos de
mquina. Cada ciclo de mquina composto por 6 estados (S1 a S6), cada um equivalente a 2 perodos do
oscilador . Assim, cada ciclo de mquina corresponde a 12 perodos do oscilador, ou perodo de clock. Se
o cristal oscilador for de 12 MHz, 1 ciclo de clock corresponde a

Tclock

1
f clock

1
12 MHz

E o ciclo de mquina :
T(ciclo de mquina) = 12*T(clock) = 1 s
S1

S2

S3

S4

S5

S6

Ciclo de mquina
Fig. 2.9 Ciclo de mquina do 8051

Operaes em cada estado do ciclo de mquina:


Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

28

A Tabela 2.3 mostra algumas instrues e o nmero de ciclos de mquina necessrios para sua
busca e execuo. V1 um endereo de desvio dentro da faixa de endereos permitidos. A seo de ajuda
do simulador PEQui apresenta a codificao de cada instruo e o nmero de ciclos de clock para sua
execuo.
Tabela 2.3 Algumas instrues e o nmero de ciclos de mquina

Instruo
MOV A,#50H
MOV 10H,#30H
DJNZ R1,V1
JMP V1
MUL AB

Nmero de ciclos de
mquina
1
2
2
2
4

Instruo
MOV A,R1
MOV DPTR,#1000H
CJNE A,#40H,V1
RLC A
DIV AB

Nmero de ciclos de
mquina
1
2
2
1
4

Uma frequncia muito comum para o cristal oscilador no uso do 8051 11,0592 MHz. Nesse caso,
o ciclo de mquina de 1,085 s.
2.4.3

Microprocessador 8086/8088

A execuo de uma instruo no microprocessador 8086/8088 feita em duas etapas: a etapa de


busca e a etapa de execuo propriamente dita. A diferena com relao ao 8085 que no 8086 as etapas
de busca e execuo so independentes. A Unidade de Interfaceamento com o Barramento (BIU)
responsvel pela busca das instrues e empilhamento das mesmas em uma fila (queue). A Unidade de
Execuo (EU) executa as instrues da fila. A sequncia :
A BIU coloca o contedo do IP (que somado ao registrador CS) no barramento para efetuar a
busca de instruo;
O registrador IP incrementado (aponta para a prxima instruo);
A instruo lida passada para a fila;
A EU pega a primeira instruo da fila;
Enquanto a EU executa esta instruo a BIU faz uma nova busca de instruo para preencher a
fila.
Se a instruo a ser executada pela EU for muito demorada a BIU preenche toda a fila.
H duas situaes em que as instrues contidas na fila no so aproveitadas:

Na execuo de instrues de desvio. Neste caso a fila descartada (ou seja, sobrescrita);
Quando a instruo faz referncia memria.

Foi dito que no incio do ciclo de busca o contedo do IP (Ponteiro de Instruo) somado ao
contedo do registrador CS para a formao do endereo absoluto necessrio para a busca da instruo.
No uma soma direta, mas a combinao de dois registradores de 16 bits para formar um endereo de
20 bits. Esse processo denominado de segmentao. O registrador CS aponta para o incio de uma rea
de memria dentro da regio de 1 MB (20 bits 220 = 1.048.596 posies diferentes de memria) e o
registrador IP usado como offset dentro da regio com incio definido por CS. Assim, como o
registrador IP de 16 bits, tem-se uma regio de 64 kB de memria que pode ser acessada por esse
conjunto de registradores CS:IP. A Fig. 2.10 ilustra a segmentao da memria em regies e a Fig. 2.11
ilustra o processo de formao do endereo absoluto atravs da segmentao. A formulao usada na
determinao do endereo absoluto :
Endereo absoluto =

Contedo do Registrador de Segmento 16 +


Contedo do Registrador de Offset

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

29

Fig. 2.10 Segmentao da memria em regies

Fig. 2.11 Formao do endereo absoluto para o 8086/8088

Exemplos de formao de endereo absoluto a partir dos registradores de segmento e offset:


Exemplo 1:

Segmento CS = 2000H; Offset IP = 2000H


Representao: CS:IP = 2000H:2000H
Endereo Absoluto (ou Fsico) = 20000H + 02000H = 22000H

Exemplo 2:

Segmento SS = 4000H; Offset SP = 2000H


Representao: SS:SP = 4000H:2000H
Endereo Absoluto (Fsico) = 40000h + 02000h = 42000h

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

30

A segmentao da memria tem a vantagem de permitir o armazenamento de diferentes tipos de


informao (cdigos, dados, pilha...) em diferentes reas da memria, possibilitando o a manipulao de
diferentes conjuntos de dados, por exemplo, em um ambiente multitarefa, onde um programa atende a
vrias entradas de dados. Outra vantagem a possibilidade de armazenamento e realocao de
programas dentro da memria que vai de (00000 H a FFFFF H).

2.5 Formato das Instrues


Cada microprocessador apresenta um conjunto de instrues com formatos pr-definidos. A
seguir mostrada uma forma geral das instrues do 8085, 8051, 8086/8088 e PIC.

2.5.1

Formato das Instrues do 8085

O microprocessador 8085 apresenta instrues com trs formatos diferentes: instrues de 1, 2 ou


3 bytes, como ilustrado na Tabela 2.4.
Tabela 2.4 Formato geral das instrues do 8085
Caractersticas

Tipo de instruo
1 byte

O byte da instruo o prprio cdigo de operao (opcode)

2 bytes

O primeiro byte o opcode e o segundo byte o dado de 8 bits


necessrio para a instruo

3 bytes

O primeiro byte o opcode; o segundo e o terceiro bytes


correspondem a um dado de 16 bits

Exemplos
MOV A,C
ADD B
RLC
DCR C
MVI A,35H
ADI 05H
ORI 01H
LDA 2030H
STA 2040H
LXI H, 2080H

A Tabela 2.5 apresenta alguns exemplos de instruo com suas respectivas codificaes.
Observar que nas instrues de 3 bytes o byte menos significativo da instruo precede o byte mais
significativo na memria.
Tabela 2.5 Exemplos de instrues do 8085 e cdigos assembly

Instruo

1 byte
(opcode)
79 H
80 H
07 H

2 byte
(menos significativo)

MVI A,35H
ADI 05H
ORI 01H

3E H
C6 H
F6 H

35 H
05 H
01 H

LDA 2030H
STA 2050H
LXI H,2080H

3A H
32 H
21 H

30 H
50 H
80 H

MOV A,C
ADD B
RLC

2.5.2

3 byte
(mais significativo)

Cdigo assembly
(HEX)
79
80
07
3E 35
C6 05
F6 01

20 H
20 H
20 H

3A 30 20
32 50 20
21 80 20

Formato das Instrues do 8051

O microcontrolador 8051 tambm apresenta instrues com trs formatos de 1, 2 e 3 bytes, mas
h diferenas de codificao para cada tipo, como mostrado na Fig. 2.12.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

31

Fig. 2.12 Formato das instrues do 8051

Nas Tabelas 2.6, 2.7 e 2.8 so mostrados alguns exemplos de instrues respectivamente de 1, 2 e
3 bytes.
Tabela 2.6 Codificao de instrues de 1 byte do 8051

Instruo
RLC A
CLR A
CLR C

Codificao
0011:0011
1110:0100
1100:0011

Cdigo Assembly (H)


33
E4
C3

ADD A,Rn
ADD A,R0
ADD A,R1

0 0 1 0 : 1 r r r (rrr = 000 a 111)


0010:1000
0010:1001

2X (X = 8 a F)
28
29

MOV A,Rn
MOV A,R0

1 1 1 0 : 1 r r r (rrr = 000 a 111)


1110:1000

EX (X = 8 a F)
E8

Tabela 2.7 Codificao de instrues de 2 bytes do 8051

Instruo
ADD A,#dado
ADD A,#35H

Codificao
0 0 1 0 : 0 1 0 0 | d7 d6 d5 d4 : d3 d2 d1 d0
0010:0100|0011:0101

Cdigo Assembly (H)


24 XX
24 35

MOV A,#dado
MOV A,#35H

0 1 1 1 : 0 1 0 0 | d7 d6 d5 d4 : d3 d2 d1 d0
1110:0100|0011:0101

74 XX
74 35

SJMP Relativo
SJMP 80H (*)

1 0 0 0 : 0 0 0 0 | r7 r6 r5 r4 : r3 r2 r1 r0
1000:0000|0010:1110

80 XX
80 2E

AJMP end 11 bits


a10 a9 a8 0 : 0 0 0 1 | d7 d6 d5 d4 : d3 d2 d1 d0
XX XX
AJMP 620 H
1100:0001|0010:0000
C1 20
* Supondo que a instruo SJMP 80H esteja na posio 50 H, aps a execuo da mesma o
contador de programa PC estar apontando para a posio 52 H, uma vez que esta instruo tem 2
bytes. Assim, o endereo relativo na codificao da instruo 80 H 52 H = 2E H.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

32

Um endereo de 11 bits pode acessar 2048 posies diferentes de memria (211 = 2048). Assim, o
endereo de 11 bits varia de 0 a 2047 ou de 000 H a 7FF H. Para o endereo 620 H tem-se:
620 H = 0 1 1 0 | 0 0 1 0 | 0 0 0 0 b a10 = 1, a9 = 1 e a8 = 0
Da: a10 a9 a8 0: 0 0 0 1 1 1 0 0 : 0 0 0 1 = C1 H (primeiro byte da instruo)
E o segundo byte da instruo 20 H.
Tabela 2.8 Codificao de instrues de 3 bytes do 8051
Instruo

Codificao

LCALL End.16 bits


LCALL 0100 H

0 0 0 1:0 0 1 0 | a15 a14 a13 a12:a11 a10 a9 a8 | a7 a6 a5 a4:a3 a2 a1 a0


0001:0010|0000:0001|0000:0000

Cdigo Assembly
(H)
12 XX XX
12 01 00

LJMP End.16 bits


LCALL 0125 H

0 0 0 0:0 0 1 0 | a15 a14 a13 a12:a11 a10 a9 a8 | a7 a6 a5 a4:a3 a2 a1 a0


0000:0010|0000:0001|0010:0101

02 XX XX
02 01 25

DJNZ direto,relativo
DJNZ 01H,$

1 1 0 1:0 1 0 1 | a7 a6 a5 a4 : a3 a2 a1 a0 | r7 r6 r5 r4 : r3 r2 r1 r0
1 1 0 1:0 1 0 1 | 0 0 0 0 : 0 0 0 1 | 1 1 1 1 : 1 1 0 1

D5 XX XX
D5 01 FD

Na instruo DJNZ 01H,$, na Tabela 2.8, o registrador 01 H decrementado em 1 e, caso o


resultado no seja zero, o programa volta para o incio da instruo. O valor FD H da codificao ( 3
na notao de complemento de 2) o valor que adicionado ao endereo atual (PC aps a execuo
desta instruo), para obter o endereo de desvio. Como a instruo de 3 bytes, adicionando-se 3 ao
endereo no final da instruo, volta-se para o incio.
2.5.3

Formato das Instrues do 8086/8088

As instrues de transferncia de dados do microprocessador 8086/8088 possui o formato


mostrado na Fig. 2. 13. Ela composta de 4 bytes, onde o primeiro byte traz o opcode e a definio com
relao a manipulao de byte ou Word.
7

2
opcode

1
s

0
w

0 7

0 7

postbyte

data

data if sw=01

ou
7

6
5
4
3
2
Opcode (cdigo da operao)
postbyte
data
data if s w = 0 1

1
s

0
w

Byte 1
Byte 2
Byte 3
Byte 4

Fig. 2.13 Formato das instrues de transferncia de dados do 8086/8088

As Tabelas 2.9 e 2.10 mostram, respectivamente, o efeito dos bits s e w na operao e a


subdiviso do segundo byte da instruo (postbyte). Se a instruo manipular byte, o ltimo da instruo
no utilizado. S haver dados nesse byte se a instruo manipular word, o que definido atravs de s
= 0 e w = 1.
Tabela 2.9 Bits de definio do tipo de dado
w
Efeito
0
A instruo manipula byte
1
A instruo manipula word

s
0
0

6
mod

Tabela 2.10 Postbyte


4
3
2
reg

1
r/m

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

33

Se mod = 1 1, ento o operando da instruo um registrador, que identificado em r/m. Se a


instruo envolver dois registradores, ento o campo reg identifica o segundo registrador.

2.5.4

Formato das Instrues do PIC 16F628

As instrues do microcontrolador PIC 16F628 so compostas de 14 bits e divididas em quatro


tipos: operaes com registradores orientadas por byte, operaes com registradores orientadas por bit,
operaes de controle e literal e operaes de desvio.

13

Tipo 1: Operaes com registradores orientadas por byte


12
11
10
9
8
7
6
5
4
3
2
1
OPCODE
d
f (endereo do registrador)

OPCODE Cdigo da operao


d = 0 o destino do resultado o registrador W, na sada da unidade lgica e aritmtica.
d = 1 o destino do resultado o registrador f, cujo endereo fornecido nos 7 primeiros bits.
f Registrador de endereos de 7 bits (operando)

13

Tipo 2: Operaes com registradores orientadas por bit


12
11
10
9
8
7
6
5
4
3
2
1
OPCODE
b
f (endereo do registrador)

OPCODE Cdigo da operao


b = 0 endereo de 3 bits
f Registrador de endereos de 7 bits (operando)

13

Tipo 3: Operaes de controle e literal


12
11
10
9
8
OPCODE

5
4
3
2
k (endereo do registrador)

OPCODE Cdigo da operao


k Indica um valor constante ou literal

13

Tipo 4: Operaes de desvio


12
11
10
9
OPCODE

5
4
k (literal)

OPCODE Cdigo da operao


k Indica um valor constante ou literal de 11 bits.

2.6 Modos de Endereamento e Grupos de Instrues


As Tabelas 2.11 e 2.12 mostram, respectivamente, os modos de endereamento e os grupos de
instrues dos microprocessadores 8085 e 8086/8088.
Tabela 2.11 Modos de endereamento

8085
Endereamento
Imediato
Por registrador
Direto
Indireto por registrador

Exemplo
MVI A,15H
MOV A,B
JMP 2005H
MOV M,A

8086/8088
Endereamento
Exemplo
Imediato
MOV AX,1000H
Por registrador
MOV AX,BX
Absoluto ou Direto
MOV AX,[1000H]
Indireto por registrador MOV AX,[BX]
Indexado
MOV AX,0100H[BX]
Baseado
MOV [BX+0100H],AX

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

34

Baseado e indexado
Baseado e indexado
com deslocamento
Strings

MOV AX,[BX+SI]
MOV AX,[BX+SI+5]
MOVSB

Tabela 2.11 Grupos de Instrues

8085
Tipo de Instruo
Transferncia de dados
Aritmtico
Lgico
Desvio
Controle, Pilha e E/S

Exemplo
MVI A,15H
MOV A,B
ADD B
SUB C
ANA B
ORI 0FH
JMP 2005 H
JNZ 2010 H
PUSH PSW
IN Porta
EI

8086/8088
Tipo de Instruo
Exemplo
MOV AX,1000H
Transferncia de dados MOV AX,BX
MOV DL,23H
ADD SI,DX
Aritmtico
SUB AX,DX
NOT BX
Lgico
AND CX,DX
Desvio

JMP BX

Controle

CLC
STC

Strings

MOVSB
STOSW

2.7 Registradores de Flags do 8085, 8088/86 e 8051


2.7.1

Flags do microprocessador 8085

As flags so bits de um registrador especial que indicam o estado da ltima operao realizada na
Unidade Lgica e Aritmtica. A Fig. 2.14 ilustra a presena desse registrador para o caso do
microprocessador 8085. So cinco as flags desse microprocessador: flag de carry (CY), flag de paridade
(P), flag auxiliar de flag (AC), flag de zero (Z) e flag de sinal (S).

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

AC

Bit 2

Bit 1

Fig. 2.14 Registrador de flag do 8085

Flag de Carry: Assume valor 1 quando h transporte do bit 7 para o bit 8 (O Bit 8 fora do acumulador)
Flag de Paridade: Assume valor 1 quando h uma quantidade par de dgitos 1no acumulador. Assume
valor 0 quando h uma quantidade mpar.
Flag Auxiliar de Carry: Assume valor 1 quando h transporte do bit 3 para o bit 4.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Bit 0
CY

Notas de Aula 2011

35

Flag de Zero: Assume valor 0 para nmero diferente de zero e 1 para nmero igual a zero.
Flag de Sinal: Assume valor 0 para nmero positivo (bit 7 = 0) e 1 para negativo (bit 7 = 1)
Exemplo: A adio dos nmeros decimais 150 e 120 resulta em 270. O maior valor possvel de se
armazenar em um registrador do 8085 255. A adio citada mostrada a seguir em hexadecimal e
binrio.
CY
Acumulador
Decimal
Hexa
bit8
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
150
96
1
0
0
1
0
1
1
0
120
78
0
1
1
1
1
0
0
0
270
10E
1
0
0
0
0
1
1
1
0
Observando o resultado da operao efetuada, conclui-se:
CY = 1 Houve transporte do bit 7 para o bit 8 (fora do acumulador).
P=0

H uma quantidade mpar de dgitos 1 no resultado da operao e, portanto, a flag de


paridade 0.

AC = 0 No houve transporte do bit 3 para o bit 4.


Z = 0 O resultado da operao diferente de zero e, portanto, Z = 0.
S = 0 O bit 7 do resultado zero e, portanto, S = 0, indicando um nmero positivo para operaes com
sinal.

2.7.2

Flags do microcontrolador 8051

O registrador de flags do microcontrolador 8051 faz parte dos registradores especiais. o


registrador PSW (Program Status Word), mostrado a seguir.
Registrador PSW
Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

CY

AC

F0

RS1

RS0

OV

Bit 1

Bit 0
P

As flags de carry (CY), auxiliar de carry (AC) e de paridade (P) so idnticas quelas do
microprocessador 8085. A flag F0 uma flag de uso geral que pode ser usada pelo programador.
A flag de overflow (OV) uma flag til em operaes com nmero sinalizado representados na
forma de complemento de 2. Ela setada quando h um carry do bit 7, mas no do bit 6 ou um carry do
bit 6, mas no do bit 7. H duas situaes que resultam em OV setado:

Se a soma de dois nmeros positivos for maior que 7F H e menor que FFH a flag de overflow
indica que o nmero no deve ser interpretado como nmero negativo.
Se a soma de dois nmeros negativos (bit 7 = 1) resultar em um nmero no intervalo de 00 H a
7F H (ou 100 H a 17F H, considerando a flag de carry, que sempre estar presente nessa
situao), a flag de overflow indicar que o nmero no pra ser interpretado como nmero
positivo.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

36

Em outras palavras, a flag de overflow (OV) o resultado de uma operao XOR do carry-in
(transporte do bit 6 para o bit 7) com o carry-out (transporte do bit 7 para o bit 8). A Fig. 2. 15 ilustra o
carry-in e o carry-out e a Tabela 2.12 mostra as situaes possveis na determinao da flag de overflow.

Fig. 2.15 Carry-in e carry-out


Tabela 2.12 Determinao da flag OV

CY_IN

CY_OUT

OV = (XOR)

Exemplo 1: Os nmero 64 H e 2C H esto no intervalo 00 H a 7F H e, portanto, so nmeros


positivos nas operaes com nmero sinalizado. No entanto, a soma desses nmero resulta em 90 H, que
est na faixa de 80 H a FF H, ou seja, nmero negativo nas operaes com nmero sinalizado. Nesse
caso, a flag de overflow (OV) setada, para indicar que o resultado um nmero positivo fora da faixa de
magnitude dos nmeros positivos. Verifica-se na ilustrao a seguir que h transporte do bit 6 para o bit
7, mas no h do bit 7 para bit 8.

Decimal
100
44
140

Hexa
64
2C
90

CY
bit8

bit7
0
0
1

bit6
1
0
0

bit5
1
1
0

Acumulador
bit4
bit3
0
0
0
1
1
0

bit2
1
1
0

bit1
0
0
0

bit0
0
0
0

Exemplo 2: Se o nmero 01 H for adicionado ao resultado anterior (90 H) o resultado 91 H,


dentro do intervalo de 80 H a FF H, no entanto, no h flag de overflow (OV = 0) porque, na operao
com nmeros sinalizados, foram adicionados um nmero positivo (01 H) e um nmero negativo (90 H).
Verifica-se na ilustrao a seguir que no h transporte do bit 6 para o bit 7, nem do bit 7 para i bit 8, ou
seja, ambos, carry-in e carry-out so zero, resultando em OV = 0.

Decimal
140
01
141

Hexa
90
01
91

CY
bit8

bit7
1
0
1

bit6
0
0
0

bit5
0
0
0

Acumulador
bit4
bit3
1
0
0
0
1
0

bit2
0
0
0

bit1
0
0
0

bit0
0
1
1

Exemplo 3: Os nmero 80 H e 85 H esto no intervalo 80 H a FF H e, portanto, so nmeros


negativos nas operaes com nmero sinalizado. No entanto, a soma desses nmeros resulta em 05 H (ou
105 H, levando-se em conta a flag de carry CY, fora do acumulador). O resultado dentro do acumulador
est na faixa de 00 H a 7F H, ou seja, nmero positivo nas operaes com nmero sinalizado. Nesse caso,
a flag de overflow (OV) setada para indicar que o resultado no um nmero positivo. Verifica-se na
ilustrao a seguir que h transporte do bit 7 para o bit 8, mas no h do bit 6 para bit 7.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

Decimal
128
133
261

2.7.3

37

Hexa
80
85
1 05

CY
bit8

bit7
1
1
0

bit6
0
0
0

bit5
0
0
0

Acumulador
bit4
bit3
0
0
0
0
0
0

bit2
0
1
1

bit1
0
0
0

bit0
0
1
1

Flags do microprocessador 8086/8088

O registrador de flags do microprocessador 8086/8088 tambm denominado de registrador PSW


(Program Status Word), como no caso do 8051, mas tem 16 bits, dos quais 9 so usados como flags,
sendo 3 bits de controle. Esse registrador mostrado na Fig. 2.16 seguir.

Fig. 2.16 Flags do microprocessador 8086/8088

C Flag de carry reflete o vai um do bit mais significativo, nas operaes aritmticas (de 8 ou
16 bits). Ele tambm modificado por algumas instrues de rotao e deslocamento. Nas operaes de
subtrao (aritmtica em complemento dois) o carry invertido e passa a funcionar como borrow
(emprstimo). Se, aps uma operao de subtrao, obtm-se C = 1, isso indica que no houve borrow,
mas C=0, indica que houve borrow.
P Flag de Paridade indica a paridade (par), dos 8 bits menos significativos, do resultado da
operao realizada.
P = 1 nmero par de 1 nos 8 bits menos significativos
P = 0 nmero mpar de 1 nos 8 bits menos significativos
A Flag Auxiliar de Carry reflete o vai um do bit 3, em uma operao de 8 bits.
Z Flag de Zero indica se uma operao teve zero como resultado.
Z = 1 se o resultado da operao for igual a zero
Z = 0 se o resultado da operao for diferente de zero
S Flag de Sinal igual ao bit de mais alta ordem do resultado de uma operao aritmtica.
S = 0 resultado positivo
S = 1 resultado negativo
O Flag de Overflow seu contedo obtido atravs de uma operao XOR do carry in com o
carry out do bit de mais alta ordem do resultado de uma operao aritmtica (Fig. 2.17). Ele indica um
overflow de magnitude, em aritmtica binria com sinal. Indica que o resultado muito grande para o
campo destino.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

38

Fig. 2.17 Transporte do bit 7 e do bit 15

Flags de Controle
T Flag de Trap (armadilha) usada para a depurao de programas. Coloca o 8086 no modo
passo a passo. Aps cada instruo uma interrupo gerada automaticamente.
I Flag de Interrupo habilita ou desabilita a interrupo externa (pedida pelo pino INTR). Ao
contrrio do 8085, onde as interrupes RST 7.5, RST 6.5 e RST 5.5 podem ser habilitadas/desabilitadas
individualmente, no 8086 todas so habilitadas ou desabilitadas ao mesmo tempo. A habilitao/
desabilitao individual pode ser feita atravs do controlador de interrupo 8259.
I = 1 interrupo habilitada

I = 0 interrupo desabilitada

D Flag de Direo determina se as operaes com strings vo incrementar ou


decrementar os registradores de indexao (SI e DI).
D = 1 SI e DI sero decrementados, ou seja, a string ser acessada a partir do
endereo mais alto em direo ao mais baixo.
D = 0 SI e DI sero incrementados, ou seja, a stringser acessada a partir do
endereo mais baixo em direo ao mais alto.

2.8 Funcionamento da Pilha no 8085, 8051 e 8088/86


A pilha, nos microprocessadores 8085 e 8086/8088 e no microcontrolador 8051, uma regio da
memria reservada pelo usurio, para armazenar temporariamente valores que se deseja guardar enquanto
o registrador associado utilizado em outras operaes e para guardar endereos de retorno em chamadas
de subrotinas e em interrupes.
A pilha uma estrutura LIFO (Last In First Out), ou seja, o ltimo valor colocado na pilha o
primeiro a ser retirado.
Nos trs componentes citados: 8085, 8086/8086 e 8051 a instruo PUSH usada para guardar
um valor na pilha e a instruo POP usada para retirar um valor da pilha e o registrador SP usado para
apontar o endereo do ltimo valor colocado na pilha.
No 8085 e no 8086/8088 a pilha cresce no sentido decrescente do endereo de memria (Fig.
2.18) e no 8051 (Fig. 2.19) ela cresce no sentido crescente do endereo de memria.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

39

Fig. 2.18 Pilha no 8085 e no 8086/8088

Fig. 2.19 Pilha no 8051

Embora cada posio de memria tenha apenas 8 bits, as operaes com a pilha envolve a
transferncia de 16 bits. Quando se trata de endereo, automaticamente o microprocessador armazena os
dois bytes do endereo de retorno em duas posies subsequentes da pilha. O byte mais significativo
guardado primeiro. E o byte menos significativo retirado primeiro da pilha (LIFO). O apontador de
pilha SP sempre aponta para o topo da pilha (ltimo valor armazenado).
A sequncia de operao para as instrues PUSH e POP :
PUSH reg16 guarda contedo do registrador de 16 bits na pilha
1.
2.
3.
4.

O valor de SP decrementado em 1
O byte mais significativo armazenado na posio SP 1
O valor de SP decrementado em 1
O byte menos significativo armazenado na posio SP 2

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

40

POP reg16 carrega registrador de 16 bits com contedo da pilha


1.
2.
3.
4.

O contedo apontado por SP copiado para o byte menos significativo


O valor de SP incrementado em 1
O contedo apontado por SP + 1 copiado para o byte mais significativo
O valor de SP incrementado em 1

No microprocessador 8085 os registradores de 16 bits (reg16) que podem ser armazenados na


pilha so formados por dois registradores de 8 bits, como mostrado na Tabela 2.13, onde so indicados os
registradores envolvidos para a instruo PUSH.
Tabela 2.13 Operaes PUSH no 8085

Instruo PUSH
PUSH PSW
PUSH B
PUSH D
PUSH H

Registradores
A e Flags
BeC
DeE
HeL

No microprocessador 8086/8088 os registradores j so de 16 bits e, assim, as instrues PUSH


armazena um registrador por vez, como por exemplo, nas instrues PUSH AX e PUSH CS.
Alm das instrues PUSH e POP e das interrupes, as instrues CALL e RET manipulam a
pilha. Ao ser executa uma instruo CALL o endereo da instruo seguinte guardado na pilha. A
execuo da instruo RET faz o processamento retornar para a instruo seguinte instruo CALL.
No microcontrolador 8051 as instrues PUSH e POP manipulam apenas dados de 8 bits. Por
exemplo: PUSH ACC guarda na pilha o contedo do acumulador. PUSH DPH guarda na pilha o byte
mais significativo do registrador de 16 bits DPTR.
A sequncia para as instrues PUSH e POP no 8051 :
PUSH reg8 guarda contedo do registrador de 8 bits na pilha
1. O valor de SP incrementado em 1
2. O contedo do registrador armazenado na posio SP + 1
POP reg8 carrega registrador de 8 bits com contedo da pilha
1. O contedo apontado por SP copiado para o registrador
2. O valor de SP decrementado em 1

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

41

Microcontrolador 8051

As sees anteriores j apresentaram uma breve introduo ao microcontrolador da famlia 8051.


A partir desta seo feito o estudo desse microcontrolador visando aplicaes diversas, tais como
acionamento de motor de passo, motor de corrente contnua e lmpadas e uso de teclado, display de 7segmentos, display LCD e sensor de presena.
Ao longo dos ltimos anos, na disciplina de microprocessadores, j foram utilizadas vrias verses
da famlia 8051. A Tabela 3.1 mostra as verses utilizadas e algumas caractersticas das mesmas.

Verso do
Microcontrolador
8031/8032
8051/8052
8751/8752
8951/8952
AT89S8252
AT89S52

Tabela 3.1: Algumas verses de microcontroladores da famlia 8051


Memria interna
Frequncia
Memria de
Memria de
Memria de
de Clock
Programa
Dados (RAM)
Dados (EEPROM)
No tem
128kB/256kB
No tem
12 MHz
ROM 128kB/256kB
No tem
12 MHz
4kB/8kB
EPROM128kB/256kB
No tem
12 MHz
4kB/8kB
Flash 128kB/256kB
No tem
24 MHz
4kB/8kB
Flash 256kB
2 kB
24 MHz
4kB/8kB
Flash 256kB
No tem
33 MHz
4kB/8kB

Nmero de
Temporizadores
2/3
2/3
2/3
2/3
3
3

Verifica-se na Tabela 3.1 que as verses com terminao 1 possuem memria de dados (RAM)
de 128 bytes, enquanto a capacidade da memria RAM das verses com terminao 2 de 256 bytes.
Todas as verses 2 possuem 8 kB de memria de programa, o dobro das verses 1.
Quanto aos contadores/temporizadores, as verses 1 possuem 2, enquanto que as verses 2
possuem 3. Todos eles so de 16 bits, podendo trabalhar em quatro modos diferentes: modo de 13 bits,
modo de 16 bits, modo nico de 8 bits com recarga automtica e modo duplo independente de 8 bits. O
contador caracterizado por um clock externo, enquanto o temporizador usa o clock interno do
microcontrolador. Essa unidade trabalha de forma independente da CPU e pode ser ativada tanto por
software quanto por hardware.
Das verses mostradas na Tabela 3.1, somente uma, AT89S8252, possui memria EEPROM
interna, permitindo o armazenamento de at 2 kB de dados, o que dispensaria uma memria EEPROM
externa quando o volume de dados a serem guardados pequeno. A Fig. 3.1 mostra a pinagem de uma
verso bsica de 40 pinos.

Fig. 3.1: Pinagem do microcontrolador de 40 pinos da famlia 8051.

As portas paralelas, num total de 4 (quatro), so numeradas de P0 a P3 e so todas de 8 bits. A


porta P3 tem dupla funo: alm de servir como canal de entrada e sada de dados tambm pode ser
usada para a comunicao serial (P3.0 e P3.1 = RxD e TxD), interrupes externas (P3.2 e P3.3 = INT0\
e INT1\), canal de clock para o contador (P3.4 e P3.5 = T0 e T1) e canal de controle de gravao e
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

42

leitura de perifricos (P3.6 e P3.7 = WR\ e RD\). A porta P0 tem uma caracterstica diferente das outras
portas: ela de coletor aberto, o que significa que necessita de um resistor de pull-up e pode drenar uma
corrente maior que as demais. Outra caracterstica da porta P0 que ela tambm o canal de dados e
parte baixa do endereo para operaes com perifricos (AD0 ... AD7). A porta P2, alm da funo de
entrada e sada de dados, o canal da parte alta do endereo nas operaes com perifricos (A0 ... A7).
Os pinos 18 (XTAL2) e 19 (XTAL1) so usados para a conexo do cristal oscilador para a
gerao da frequncia de clock (Fig. 3.2), que determina o ciclo de mquina. A frequncia de oscilao
do cristal deve estar na faixa de 3.5 MHz a 12 MHz, para as verses bsicas. Os valores recomendados
para os capacitores no caso de oscilador a cristal so entre 20 pF e 40 pF.

Fig. 3.2: Conexo do cristal oscilador

O pino 9 usado para reinicializao (reset) do microcontrolador. A Fig. 3.3 mostra o circuito
tpico para o reset. A colocao de um capacitor de 10 F em srie com um resistor de 8,2 k
conectados ao pino 9 do 8051 garante que o pino 9 fique em nvel lgico alto por pelo menos 2 ciclos de
mquina (24 perodos do oscilador) na energizao do sistema. Com isso, os registradores assumem os
valores mostrados na Tabela 3.2, e o 8051 est pronto para iniciar o processamento. O boto em paralelo
com o capacitor usado para o Reset forado. Para algumas verses da famlia 8051 no necessrio o
resistor de 8,2 k , por j existir um resistor interno.

Fig. 3.3: Circuito de Reset do 8051.


Tabela 3.2: Valores dos registradores especiais aps o Reset
Registro
Valor
Registro
Valor
PC
0000h
TCON
00h
A
00h
TH0
00h
B
00h
TL0
00h
PSW
00h
TH1
00h
SP
07h
TL1
00h
DPTR
0000h
SCON
00h
P0 - P3
FFh
SBUF
Indeterminado
IP
xxx00000b
PCON(NMOS)
0xxxxxxxb
IE
0xx00000b
PCON(CMOS)
0xxx0000b
TMOD
00h

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

43

3.1 Memrias ROM e RAM


Nas verses que possuem memria ROM, ela pode ser expandida at o limite de 65.536 bytes (64
kBytes) com uma pastilha externa, ou ainda usar somente uma pastilha externa de 64 kbytes (0000 a
FFFF h). O pino EA\ (pino 31) usado para selecionar a memria externa ou interna. Caso EA\ = 0, o
microcontrolador busca o programa na memria ROM externa; caso EA\ = 1, o programa buscado na
memria ROM interna.
O pino PSEN\ usado para habilitao da leitura da memria externa. Caso PSEN\ = 1 a leitura
da memria ROM interna est habilitada; caso PSEN\ = 0, a leitura da memria ROM externa est
habilitada. Enquanto usada a instruo MOV para manipulao de cdigos na ROM interna, usa-se
MOVC (MOV Code) para as mesmas operaes com a ROM externa. A Fig. 3.4 ilustra a composio
da memria ROM. So duas opes excludentes: usa-se memria externa para expandir a memria
interna ou somente memria externa.

Fig. 3.4: Memrias ROM interna e externa

A memria RAM, em qualquer verso, pode ser adicionada em 64 kbytes (0000 a FFFFh), alm
dos 128 ou 256 bytes de memria interna (Fig. 3.5).

Fig. 3.5: Memrias RAM interna e externa

A memria RAM interna subdivida em duas regies bsicas:


Endereo de 00 a 7F h (Parte baixa da RAM) Contm 128 bytes. Todas as verses do 8051
possuem essa regio. O acesso pode ser direto ou indireto.
Endereo de 7F a FFh (Parte alta da RAM) Essa faixa de endereo s est presente nas
verses xxx2. Ela contm 128 bytes, cujo acesso sempre atravs de endereamento indireto. Essa
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

44

faixa de endereos coincide com a faixa de endereos dos registradores especiais. A diferena est no
tipo endereamento para acesso. Os registradores especiais so acessados sempre atravs de
endereamento direto. A manipulao de dados na memria RAM interna atravs da instruo MOV,
enquanto que na RAM externa com uso da instruo MOVX (MOV eXtern). Os sinais RD\ e WR\
so usados na operao com a memria RAM externa. A Fig. 3.6 mostra a regio baixa em detalhes.

Fig. 3.6: Detalhes da Parte baixa da memria RAM interna


Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

45

Como j foi mostrado em uma seo anterior, a seleo dos bancos de registradores (Banco 0 a
Banco 3) feita atravs dos bits RS1 e RS0 do registrador especial PSW (Program Status Word).
Acima dos registradores de propsito geral tem-se duas regies distintas: a regio mais alta, do endereo
30 h at 7F h, enderevel apenas por byte; no entanto, a regio do endereo 20 h at 2F h
enderevel por byte e por bit, ou seja, os bits dessa regio podem ser referenciados pelos seus
endereos individuais ou atravs dos bytes dos quais eles fazem parte, como exemplificado a seguir:
Bit 00h

20h.0;

bit 01h

20h.1

bit 07h

20h.7

Bit 08h

21h.0;

bit 09h

21h.1

bit 0Fh

21h.7

Bit 10h

22h.0;

bit 11h

22h.1

bit 17h

22h.7

bit 7Fh

2Fh.7

3.2 Os Registradores de Funes Especiais


A Tabela 3.3 uma repetio da Tabela 2.2. Ela mostra os principais Registradores Especiais,
que ficam localizados na regio de 80h a FF h. Os registradores dessa regio, com endereos de final 0
ou 8, so endereveis por byte ou por bit. Os demais, apenas por byte. A tabela mostra tambm os bits
individuais desses registradores de final 0 e 8.

Registrador
Latch da Porta 0
Apontador de Pilha
Apontador de Dados
LSB do Apontador de Dados
MSB do Apontador de Dados
Controle de Energia
Controle do Contador/Temporizador

Tabela 3.3: Principais Registradores Especiais


Endereos individuais dos Bits e
Mnemnico
Endereo
denominaes de alguns bits
P0
80 H
87 86 85 84 83 82 81
SP
81 H
DPTR
83H 82H
DPL
82 H
DPH
83 H
SMOD
PCON
87 H
TCON

88 H

80

8F

8E

8D

8C

8B

8A

89

TF1

TR1

TF0

TR0

IE1

IT1

IE0

88
IT0

Controle do Modo do Temporizador/


Contador
LSB do Temporizador/Contador 0
LSB do Temporizador/Contador 1
MSB do Temporizador/Contador 0
MSB do Temporizador/Contador 1
Latch da Porta 1

TMOD

89 H

G1

C/T1

M11

M01

G0

C/T0

M10

M00

TL0
TL1
TH0
TH1
P1

8A H
8B H
8C H
8D H
90 H

97

96

95

94

93

92

91

90

Controle da Porta Serial

SCON

98 H

9F

9E

9D

9C

9B

9A

99

98

SM1

SM2

SM3

REN TB8

RB8

TI

RI

Porta de Dados Seriais


Latch da Porta 2

SBUF
P2

99 H
A0 H

A7

A6

A5

A4

A3

A2

A1

A0

IE

A8 H

AF

AE

AD

AC

AB

AA

A9

A8

ES

ET1

EX1

ET0

EX0

Habilitador de Interrupo

EA

Latch da Porta 3

P3

B0 H

B7

B6

B5

B4

B3

B2

B1

B0

Controle de Prioridade da Interrup.

IP

B8 H

BF

BE

BD

BC

BB

BA

B9

B8

PS

PT1

PX1

PT0

PX0

D1

D0

Registrador de Estado do Programa


Acumulador
Registrador B

PSW
ACC ou A
B

D0 H
E0 H
F0 H

D7

D6

D5

D4

D3

D2

CY

AC

F0

RS1

RS0

OV

E7
F7

E6
F6

E5
F5

E4
F4

E3
F3

E2
F2

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

E1
F1

E0
F0

Notas de Aula 2011

46

Deve ser enfatizado que os registradores especiais ocupam os endereos de 80h a FFh, que
coincide com os 128 bytes superiores da RAM interna dos microcontroladores xxx2. A diferena entre o
acesso aos Registradores especiais e a parte superior da RAM interna o tipo de endereamento. Os
registradoress especiais so acessados sempre por endereamento direto, enquanto a parte superior da
RAM interna acessada somente por endereamento indireto.
Exemplos:
MOV A, 80h

Carrega o acumulador com o contedo do registrador especial 80 h (Porta P0)

MOV RO, #80h Carrega o acumulador com o contedo da posio de memria RAM apontada por
R0, ou seja, endereo 80 h da memria superior
MOV A,@RO

Algumas observaes:
Apontador de Pilha (Stack Pointer): SP: 81h - Como valor default, SP aponta para o endereo
hexadecimal 07h da memria RAM interna. Ao contrrio do Microprocessador 8085, o endereo do
apontador de pilha incrementado a cada endereo guardado na pilha e o byte menos significativo
guardado primeiro.
Registradores DPH (83h) e DPL (82h) - Equivalem aos registradores H e L do 8085, que juntos
formam o par HL. No 8051 DPH e DPL formam o registrador de 16 bits DPTR, usado
principalmente no manuseio de tabelas.
Registradores dos Temporizadores/Contadores TH e TL armazenam as partes alta e baixa,
respectivamente, da contagem dos temporizadores/contadores; TMOD (89 H) define o modo de
operao dos temporizadores/contadores e TCON (88 H) controla o incio e o fim de uma contagem.
Controle da Porta Serial: SCON (98 H) Registrador que contm todos os bits que definem o modo
de operao e o controle da porta serial. SBUF (99 H) o registrador que armazena tanto os dados a
serem transmitidos quanto os dados recebidos via serial. Efetivamente h dois registradores de
mesmo nome SBUF e mesmo endereo (99 H), um responsvel pela transmisso e outro pela
recepo de dados.

3.3 Instrues Gerais do Microcontrolador 8051


As instrues do 8051 podem ser digitadas em maisculas ou minsculas. A seguir so mostradas
algumas dessas instrues, com exemplos. O smbolo # necessrio para diferenciar dado de
registrador. Os dados seguidos de H ou h esto no sistema hexadecimal; os dados seguidos de B
ou b esto em binrio e os dados sem nenhuma indicao esto no sistema decimal.
Instruo
MOV A,#DADO

Descrio e exemplos

Carrega o acumulador com o valor de dado.


MOV A,#25 Carrega acumulador com valor decimal 25 (19 hexadecimal)
MOV A,#15H Carrega acumulador com valor hexadecimal 15H
MOV A,#01011001b Carrega acumulador com o binrio equivalente a 59H

MOV A,DIRETO

Copia no acumulador o contedo do registrador cujo endereo direto.


MOV A,15H Copia no acumulador o contedo do registrador R5 (15H), do banco 2.

MOV A,REG

Copia no acumulador o contedo do registrador reg, sendo reg = R0, R1, ..., R7, do
banco de registradores que estiver ativo.
MOV A,R6 Copia no acumulador o contedo do registrador R6.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

Instruo
MOV dir2,dir1

47

Descrio e exemplos
Copia no registrador cujo endereo dir2 o contedo do registrador cujo endereo
dir1.
MOV 02H,05H Copia em R2 (02H) o contedo do registrador R5 (05).

MOV R0,#20H
MOV @R0,#55H

Carrega registrador R0 com valor 20h


Copia o valor 55h na posio apontada pelo registrador R0, ou seja, endereo 20H, que
a primeira posio acima do banco de registradores.

MOV DPTR,#200H
MOVC A,@A+DPTR

Carrega registrador de 16 bits dptr com valor 200H


Carrega acumulador com o contedo da posio apontada por a + dptr. Se, por
exemplo, A = 04H, ento carrega acumulador com o contedo da posio 204H.

ADD A,REG

Adiciona o contedo do registrador reg ao contedo do acumulador.


ADD A,R1 Se A = 07 H e R1 = 03 H, ento, aps a instruo, a = 0AH.

ADD A,DIRETO

Adiciona o contedo do registrador de endereo direto ao contedo do acumulador:


A = A + (direto)
ADD A,10H Se A = 07 H e 10H = 03 H, ento, aps a instruo, A = 0AH.

ADD A,#DADO

Adiciona ao contedo do acumulador o valor dado: A = A + dado


ADD A,#04h Se a = 07 H, ento, aps a instruo, A = 0BH.

ADD A,@Rn

Adiciona ao contedo do acumulador o contedo da posio apontada por Rn.


A = A + ((Rn)).
MOV R0,#20h
ADD A,@R0 Se A = 07 H e registrador 20H = #03H, ento, aps a instruo,
A = 0AH.

SUBB A,#DADO

Subtrai o contedo do acumulador do DADO. A = A DADO.


SUBB A,#05H Se A = 07 H, ento, aps a instruo, A = 02 H.

RL A

Rotaciona o contedo do acumulador para a esquerda (rotate left). Por exemplo, se


originalmente A= 21 H (0010 0001b), aps a instruo, tem-se: A = 42 H (0100
0010b).

RR A

Rotaciona o contedo do acumulador para a direita (rotate right). Por exemplo, se


originalmente A= 8C H (1000 1100b), aps a instruo, tem: A = 46 H (0100 0110b).

INC REG

Incrementa contedo do registrador reg. Por exemplo, se R1 = 05H, ento INC R1


resulta em R1 = 06 H.

DEC REG

Decrementa contedo do registrador reg. Por exemplo, se R2 = 0B H, ento DEC R2


resulta em R2 = 0A H.

CPL A

Complementa o contedo do acumulador. Por exemplo, se originalmente, A = 55 H,


ento, aps a instruo, A = AA H.

SWAP A

Faz a troca dos nibbles do acumulador, ou seja, o nibble mais significativo passa a
ocupar os quatro primeiros bits do acumulador e o nibble menos significativo passa a
ocupar os quatro ltimos bits. Por exemplo, se originalmente, A = 35 H, aps a
instruo, A = 53 H.

DA A

Faz o ajuste decimal do acumulador. Adiciona 6 ao dgito que esteja no intervalo de


A a F. Por exemplo, se originalmente A = 7A H, aps a instruo torna-se A = 80 H.

MUL AB

Multiplica o contedo de A pelo contedo de B. O resultado est em B A. O resultado


da multiplicao um nmero de 16 bits, por isso precisa de dois registradores para o
resultado.
MUL AB se A = 25 H e B = 30 H, aps a instruo, tem-se: B = 06 H e A = F0 H,
pois o resultado da multiplicao : 6F0 H

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

Instruo
DIV AB

48

Descrio e exemplos
Divide o contedo de A pelo contedo de B. A recebe o quociente e B o resto.
DIV AB se A = CA H (202) e B = 19 H (25), aps a instruo, tem-se: A = 08 H
e B = 02, pois a diviso em decimal (202/25) resulta em quociente 8 e resto 2.

ANL A,#DADO

Faz uma operao AND entre acumulador e DADO. A = A (AND) DADO.


ANL A,#0FH se originalmente A = 35 H, aps a instruo torna-se: A = 05H.

ORL A,#DADO

Faz uma operao OR entre o acumulador e DADO. A = A (OR) DADO.


ORL A,#20H se originalmente A = 07 H, aps a instruo torna-se: A = 27 H.

3.4 Instrues de Comparao, Deciso e de Desvio


As instrues desta seo so de desvio incondicional e desvio que depende do estado de flags.

Instruo
SJMP DESVIO

Descrio e exemplos
Desvio incondicional curto (Short Jump) relativo. Pula at 127 bytes para a frente e at
128 bytes para trs.

AJMP DESVIO

Instruo de desvio para distncias correspondentes a at 2048 bytes. Endereo de 11


bits.

LJMP DESVIO

Desvio incondicional longo, para qualquer posio da memria de programa. Endereo


de 16 bits.

JNZ DESVIO

Instruo de desvio condicional: Jump IF Not Zero. Pula para desvio se a operao
anterior no resultar em zero. Verifica automaticamente a flag de zero.

LCALL SUBROT

Chamada de subrotina. Desvia para o endereo onde a subrotina est localizada.


Ao encontrar a instruo RET, retorna para a instruo que vem logo aps a chamada de
subrotina.

JC DESVIO

Desvio condicional para a posio indicada por desvio. Desvia se a flag de CARRY
estiver setada.

JNC DESVIO

Desvio condicional para a posio indicada por desvio. Desvia se a flag de CARRY
no estiver setada.

DJNZ REG,DESVIO

Decrementa registrador reg e pula para a posio desvio se o resultado no for zero.
uma combinao das instrues DEC e JNZ do microprocessador 8085.
MOV R5,#10
V1: DJNZ R5,V1 O registrador R5 decrementado at tornar-se zero

CJNE A,#DADO,V1

Compara contedo do acumulador com dado e pula para a posio V1 se no forem


iguais.
MOV A,#00H
V1: INC A
CJNE A,#20H,V1 Compara o contedo de A com 20 hexadecimal e, caso no
seja igual pula para V1 para incrementar A. Quando for igual, pula para a prxima linha.

A diferena entre LJMP e SJMP que a primeira instruo refere-se a um endereo de 16 bits e
codificada em 3 bytes: o opcode e os dois bytes de endereo. A instruo SJMP codificada em 2
bytes sendo o segundo byte o valor que deve ser adicionado posio atual do apontador de programa
PC, para determinar o endereo de desvio. O exemplo a seguir mostra um programa e sua codificao,
com as instrues SJMP e LJMP. No programa mostrado o cdigo de SJMP V1 8009, onde 80H o
opcode da instruo e 09H o valor que deve ser adicionado ao contador de programa PC para indicar a
prxima instruo a ser executada. Aps a execuo de SJMP V1 o valor de PC 0037H. Adicionando
09H chega-se a 0040H, endereo da instruo ADD A,#53H.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

49

O cdigo da instruo LJMP INICIO 020030, onde 02H o opcode da instruo e 0030H o
endereo de desvio, ou seja, a posio de incio do programa, para execuo da instruo MOV A,#35H.
Endereo
0000
0000

Codificao

020030

0030
0030
0032
0035
0037

7435
75F045
8009

0040
0040
0042

2453
020030

Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV A,#35H
MOV B,#45H
SJMP V1

ORG 40H
V1: ADD A,#53H
LJMP INICIO
END

3.5 Operaes com bit


As instrues mostradas a seguir so algumas das instrues usadas nas operaes com bit, ao
invs de byte. O bit pode ser de um registrador especial (daqueles que permitem controle individual por
bit) ou da regio da memria RAM que vai do endereo 20H at 2FH.
Instruo
JB BIT,DESVIO

Descrio e exemplos
Desvia para a posio desvio, caso o bit esteja setado.
JB LIGADO,DESLIGA Se o bit ligado = 1, ento o programa desvia para a posio
deliga.

JNB BIT,DESVIO

Desvia para desvio, caso o bit NO esteja setado.


JNB LIGADO,LIGA Se o bit ligado = 0, ento o programa desvia para a posio
liga.

SETB BIT

Seta o bit.
SETB LIGADO Torna o bit ligado igual a 1.

CLR BIT

Limpa o bit
CLR LIGADO Torna o bit ligado igual a zero

3.6 Diretivas de programao


Durante a programao em assembly, so necessrias algumas informaes para o compilador.
Essas informaes no so compiladas, mas apenas informam sobre variveis, sobre posicionamento na
memria e sobre dados. As principais diretivas so dadas a seguir:
org endereo Informa ao compilador o endereo onde deve ser armazenada a prxima instruo.
Exemplo:
org 30 H
mov sp,#2Fh Esta instruo ser armazenada na posio 30 H da memria ROM.
varivel equ ender. reg. informa ao compilador que a varivel equivale ao registrador cujo
endereo ender. reg.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

50

Exemplo:
velocidade
equ
05H Esta diretiva diz ao compilador que as operaes com a varivel
velocidade equivalem s operaes com o registrador R5 do banco 0 (endereo do
registrador: 05 H). Por exemplo: mov velocidade,#52H equivale instruo mov R5,#52H.
varivel bit ender. bit informa ao compilador que a varivel do tipo bit e ser armazenada
no endereo dado por ender.bit.
Exemplo:
sentido bit 00H Esta diretiva diz ao compilador que a varivel sentido do tipo bit e ser
armazenada no endereo 00H da regio acima dos bancos de registradores. O endereo do
bit 00H corresponde ao primeiro endereo dessa regio, ou seja, posio 20.0H.
db byte Esta diretiva diz ao compilador que o byte a seguir um dado e no uma instruo.
Exemplo:
db 45H O valor 45H tratado como um dado, no como uma instruo.

3.7 Programas Exemplos


(a) Programa que faz uma contagem hexadecimal crescente ininterrupta de 00 H a FF H.
Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV A,#00H
VOLTA: MOV P1,A
INC A
SJMP VOLTA
END

Comentrio sobre o Efeito da Operao


Incluso de arquivo com variveis pr-definidas
A prxima instruo estar no endereo 00h
Pula para o endereo indicado com o rtulo inicio
A prxima instruo estar no endereo 30h
Carrega acumulador com valor 00h
Transfere para a porta P1 o contedo do acumulador
Incrementa o contedo do acumulador
Pula para o endereo indicado pelo rtulo volta
Instruo obrigatria no fim de todo programa

(b) Programa que faz uma contagem hexadecimal ininterrupta na sequncia 00 30 h 00 h.

Rtulo

Mnemnico

$MOD51
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV A,#00H
VOLTA: MOV P1,A
INC A
CJNE A,#30H,VOLTA

VOLTA2: MOV P1,A


DJNZ ACC,VOLTA2
SJMP VOLTA
END

Comentrio sobre o Efeito da Operao


Incluso de arquivo com variveis pr-definidas
A prxima instruo estar no endereo 00h
Pula para o endereo indicado com o rtulo inicio
A prxima instruo estar no endereo 30h
Carrega acumulador com valor 00h
Transfere para a porta P1 o contedo do acumulador
Incrementa o contedo do acumulador
Compara contedo do acumulador com 30h. Caso no
seja igual, volta
Transfere para a porta P1 o contedo do acumulador
Decrementa contedo do acumulador e vai para volta2
se no for zero
Pula para volta. No precisa usar LJMP porque a
distncia curta.
Instruo obrigatria no fim de todo programa

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

51

(c) Programa que faz uma contagem decimal ininterrupta de 0 a 59 h.


Rtulo

Mnemnico

Comentrio sobre o Efeito da Operao

$MOD51
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV A,#00H
VOLTA: MOV P1,A
ADD A,#01H
DA A
CJNE A,#60H,VOLTA
SJMP INICIO
END

Incluso de arquivo com variveis pr-definidas


A prxima instruo estar no endereo 00h
Pula parainicio
A prxima instruo estar no endereo 30h
Carrega apontador de pilha SP com valor 2Fh
Carrega acumulador com valor 00h
Transfere contedo do acumulador para porta P1
Adiciona 01 ao contedo do acumulador
Faz o ajuste decimal do contedo do acumulador
Compara contedo do acumulador com 60h.
Caso seja diferente, volta
Pula para inicio
Instruo obrigatria no fim de todo programa

A contagem do programa acima no apresenta qualquer atraso de tempo, o que pode dificultar a
visualizao da contagem durante a simulao e durante a implementao em laboratrio. Dessa forma,
apresentada abaixo uma subrotina de atraso de tempo implementada com dois registradores. suposto
que a frequncia do cristal oscilador de 12 MHz, o que significa um perodo de clock de 1/12 s e um
ciclo de mquina de 1 s. Observar que as instrues djnz e ret so executadas em dois ciclos de
mquina, enquanto a instruo mov executada em apenas 1 ciclo.

Rtulo

No.
ciclos
1

No.
vezes
1

Tempo
de atraso

10

10 s

DJNZ R1,$

1000

2000 s

DJNZ R0,REPETE
RET

2
2

10
1

20 s
2 s
2033 s

Mnemnico

ATRASO: MOV R0,#10


REPETE: MOV R1,#100

1 s

Comentrio sobre o Efeito da Operao


Carrega R0 com 10 decimal
Faz R1=100 decimal. Repete instruo 10
vezes.
Decrementa R1 1000 vezes: 10 passagens
com 100 decrementos
Decrementa R0 10 vezes
Atraso de tempo de 2 ms

A subrotina de atraso deve ser includa aps a instruo sjmp inicio. Deve-se incluir tambm a
chamada da subrotina lcall atraso, logo aps a instruo MOV P1,A.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

52

(d) Programa que faz uma contagem decimal decrescente interrupta de 59 a 0. Acrescente a subrotina
de atraso dada anteriormente.
Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV A,#60H
VOLTA: ADD A,#99
DA A
MOV P1,A
CJNE A,#00H,VOLTA
SJMP INICIO
END

Comentrio sobre o Efeito da Operao


Inclui biblioteca pr-definida
A prxima instruo ser alocada no endereo 00h
Pula para o incio do programa
A prxima instruo ser alocada no endereo 30h
Define a pilha na posio 2Fh da memria RAM
Carrega acumulador com valor 60h
Aciona 99 ao acumulador
Corrige para decimal
Transfere contedo do acumulador para a Porta P1
Se contedo de A for diferente de 0 pula para volta
Pula (Short Jump) para inicio

(e) Programa que rotaciona um bit alto na porta P0 para a esquerda e para a direita de forma
ininterrupta.

Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV A,#10000000B
V1: RL A
MOV P0,A
LCALL ATRASO
CJNE A,#80H,V1
V2: RR A
MOV P0,A
LCALL ATRASO
CJNE A,#01H,V2
SJMP VOLTA

Comentrio sobre o Efeito da Operao


Carrega biblioteca de definies
A prxima instruo ser alocada no endereo 00h
Pula para o incio do programa
A prxima instruo ser alocada no endereo 30h
Define a pilha na posio 2Fh da memria RAM
Carrega acumulador com valor binrio 10000000b
Rotaciona para a esquerda o contedo do acumulador
Transfere para a porta P0 o contedo do acumulador
Chama subrotina de atraso de tempo
Se A for diferente de 80h desvia para VOLTA
Rotaciona para a direita o contedo do acumulador
Transfere para a porta P0 o contedo do acumulador
Chama subrotina de atraso
Se A for diferente de 01h desvia para VOLTA2
Pula para VOLTA

ATRASO: MOV R0,#10


V3: MOV R1,#100
DJNZ R1,$
DJNZ R0,V3
RET
END

(f) Programa que l os valores de uma tabela e mostra na porta P1 o maior desses valores. O maior
valor ser guardado em R0. O ltimo elemento da tabela FFH. DPTR aponta o incio da tabela.
Observaes:
A instruo MOV DPTR,#TABELA faz com que o registrador de 16 bits DPTR assuma o valor
correspondente ao endereo inicial da tabela. Nesse programa DPTR = 0100 H.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

53

Antes de fazer SUBB A,R0 fez-se necessrio guardar em B o valor de A, para o caso de A ser
menor que R0. Porque, nesse caso, preciso trocar o valor de R0 pelo valor de A (que agora est
em B).

Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV A,#00H
MOV R0,#00H
MOV DPTR,#TABELA
VOLTA: PUSH ACC
MOVC A,@A+DPTR
CJNE A,#0FFH,PULA
MOV P1,R0
LJMP FIM
PULA: MOV B,A
SUBB A,R0
JC PULA2
MOV R0,B
PULA2: POP ACC
INC A
SJMP VOLTA
ORG 100H
TABELA: DB 05H
DB 35H
DB 12H
DB 98H
DB 0A1H
DB 0B5H
DB 5AH
DB 09H
DB 72H
DB 40H
DB 0FFH

Comentrio sobre o Efeito da Operao


Diretiva para incluso de smbolos usados pelo compilador
Diretiva que indica que a prxima instruo ser alocada no endereo 00h
Pula para o incio do programa
Diretiva que indica que a prxima instruo ser alocada no endereo 30h
Pilha na posio 2Fh da memria RAM
Carrega acumulador com valor 00h
Carrega registrador R0 com valor 00h
DPTR recebe endereo inicial da tabela, que nesse programa 100h
Guarda na pilha o contedo do acumulador
acumulador recebe o contedo da posio (a + dptr)
Compara o contedo de a com FFh. Se for diferente pula
Transfere para P1 o contedo de R0
sjmp no funcionaria aqui porque o pulo seria maior que 127 bytes.
guarda em B o contedo do acumulador, para recuper-lo aps SUBB A,R0
Faz a subtrao: A = A R0
Vai para pula2 caso a flag de carry esteja setada
Carrega R0 com o contedo de b
Recupera contedo do acumulador
Incrementa o contedo do acumulador
Pula para volta
Diretiva com endereo do incio da tabela
Primeiro valor da tabela de dados

Dados que comeam com letra devem ser precedidos de 0

Ultimo dado de interesse da tabela


Valor usado para indicar fim da tabela

FIM: NOP
END

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

54

Interrupes
4.1 Princpio de Funcionamento e Habilitao
Interrupo o processo pelo qual a execuo de um programa interrompida para a execuo de
um outro processamento que pode ser solicitado por uma das trs fontes abaixo:
Interrupo por software (instruo)
Interrupo pedida por perifrico externo
Interrupo pedida por perifrico interno (temporizador/contador, porta serial)
O microcontrolador 8051 pode ser interrompido de cinco maneiras diferentes:

Pela interrupo externa INTO\ - pino 12 (P3.2)


Pelo timer/counter (temporizador/contador) interno TIMER0
Pela interrupo externa INT1\ - pino 13 (P3.3)
Pelo timer/counter (temporizador/contador) interno TIMER1
Pelo canal de comunicao serial (Pinos 10 e 11 = P3.0 e P3.1)

O pedido de interrupo pode ou no ser atendido, de acordo com a condio de certos


registradores. No 8051 os registradores que comandam a interrupo so
Registrador de Habilitao: IE (Interrupt Enable) = Reg. A8h
Registrador de Prioridades: IP (Interrupt Priority) = Reg. B8h
Registrador de Controlador: TCON (Timer Control) = Reg. 88h
Registrador IE:
(Reg. A8h)
EA (Enable All)

Bit 7
EA

Bit 6
x

Bit 5
x

Bit 4
ES

Bit 3
ET1

Bit 2
EX1

Bit 1
ET0

Bit 0
EX0

- Quando est zerado (EA = 0), todos as interrupes esto desabilitadas


(mascaradas), independentemente de seus bits individuais de controle. Quanto
est setada (EA = 1), cada uma das interrupes pode ser habilitada ou
desabilitada fazendo seus bits de controle 1 ou 0.

EX0 (Enable External Interrupt 0) - Quando est zerado (EX0 = 0) a interrupo externa, cujo
pedido vem atravs do pino INT0\ est desabilitada. Quando est setado (EX0
= 1), a interrupo INT0\ fica habilitada.
ET0 (Enable Timer 0) - Quando ET0 = 0, a interrupo pedida pelo temporizador/contador 0 fica
desabilitada. Quando ET0 = 1, a interrupo vinda do temporizador/contador 0
fica habilitada.
EX1 (Enable External Interrupt 1) - Quando est zerado (EX1 = 0) a interrupo externa, cujo
pedido vem atravs do pino INT1\ est desabilitada. Quando est setado (EX1
= 1), a interrupo INT1\ fica habilitada.
ET1 (Enable Timer 1) - Quando ET1 = 0, a interrupo pedida pelo temporizador/contador 1 fica
desabilitada. Quando ET1 = 1, a interrupo vinda do temporizador/contador 1
fica habilitada.
ES (Enable Serial) - Quando ES = 0, a interrupo pedida pela porta serial fica dasabilitada.
Quando ES = 1 essa interrupo fica habilitada.

Registrador IP:
(Reg. B8h)

Bit 7
x

Bit 6
x

Bit 5
x

Bit 4
PS

Bit 3
PT1

Bit 2
PX1

Bit 1
PT0

Bit 0
PX0

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

55

PX0 (Priority of External Interrupt 0) - Quando PX0 = 1 a interrupo externa INT0\ recebe
prioridade alta.
PT0 (Priority of Timer/Counter Interrupt 0) - Quando PT0 = 1 a interrupo pedida pelo
temporizador/contador 0 recebe prioridade alta.
PX1 (Priority of External Interrupt 1) - Quando PX1 = 1 a interrupo externa INT1\ recebe
prioridade alta.
PT1 (Priority of Timer/Counter Interrupt 1) - Quando PT1 = 1 a interrupo pedida pelo
temporizador/contador 1 recebe prioridade alta.
PS (Priority of Serial Port Interrupt) - Quando PS = 1 a interrupo pedida atravs da porta serial
recebe prioridade alta.
Quando PX0, PT0, PX1, PT1 e PS so zero, elas so de prioridade baixa. Caso uma interrupo
de prioridade 1 seja solicitada durante a execuo de uma de prioridade 0, o processamento
interrompido para o atendimento da interrupo de prioridade maior.
No caso de todas as interrupes terem a mesma prioridade (0 ou 1), a ordem de atendimento das
interrupes :

Interrupo externa 0
Temporizador/contador 0
Interrupo externa 1
Temporizador/contador 1
Canal serial

Maior prioridade

Menor prioridade

As interrupes externas podem ser ajustadas para serem detectadas por nvel 0 ou pela transio
do nvel 1 para o nvel 0. O ajuste feito atravs o registrador TCON, dado abaixo.
Registrador TCON:
(Reg. 88h)

Controle do Temporizador
TF1
TR1
TF0
TR0

Bit 3
IE1

Bit 2
IT1

Bit 1
IE0

Bit 0
IT0

IT0 (Interrupt 0 Type) - Quando IT0 = 1 a interrupo externa 0 ser reconhecida pela transio de
1 para 0 no pino INTO\. Quando IT0 = 0, a interrupo reconhecida quando
o sinal no pino INTO\ est em nvel baixo (0).
IE0 (Interrupt 0 Edge Flag) - setado pelo hardware quando uma interrupo externa atravs de
INT0\ detectada. zerada quando da execuo da instruo RETI (retorno
da subrotina de atendimento).
IT1 (Interrupt 1 Type) - Quando IT1 = 1 a interrupo externa 1 ser reconhecida pela transio de
1 para 0 no pino INT1\. Quando IT1 = 0, a interrupo reconhecida quando
o sinal no pino INT1\ est em nvel baixo (0).
IE1 (Interrupt 1 Edge Flag) - setado pelo hardware quando uma interrupo externa atravs de
INT1\ detectada. zerada quando da execuo da instruo RETI (retorno
da subrotina de atendimento).

4.2 Endereos Desvio das Interrupes


Quando ocorre uma das cinco interrupes do 8051 o processamento desviado para os
endereos abaixo. Como h pouco espao em bytes nesses endereos, deve-se usar uma instruo de
desvio para um outro endereo onde seja possvel escrever toda a rotina de atendimento da interrupo.
Interrupo Solicitada
Reset
INT0\
Timer/counter 0
INT1\
Timer/counter 1
Canal Serial

Endereo de desvio
0000h
0003h
000Bh
0013h
001Bh
0023h

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

56

Para o caso dos microcontroladores com 3 temporizadores, como o caso do AT89S52, o


endereo de desvio para o caso de interrupo do temporizador 2 o 002BH. O bit de habilitao o bit
5 (ET2), do registrador IE. A prioridade 1 para o temporizador 2 dada atravs do bit 5 (PT2) do
registrador IP. Os registradores associados esto no prximo captulo.

4.3 Programas Exemplos com Interrupo


1. Programa com interrupo externa 0. Quando a interrupo INT0 solicitada atravs do pino P3.2 o
processamento desviado para a posio 03 h da memria ROM e, em seguida, desviado para uma
subrotina que manda uma contagem crescente para a porta P1.
Rtulo

Mnemnico

Comentrio sobre o Efeito da Operao

$MOD51
ORG 00H
LJMP INICIO
ORG 03H

Endereo de desvio quando h um pedido da interrupo INT0 (pino P3.2).

LJMP ATENDE

Quando h um pedido de interrupo atravs do pino P3.2, desvia para atende

ORG 30H
INICIO: MOV SP, #2FH
MOV IE, #81H

Habilita a interrupo externa 0 (EA = 1 e EX0 = 1)

MOV TCON, #01H

INT0\ reconhecida pela transio de 1 para 0 (IT0 = 1). Poderia ser SETB IT0

MOV A, #00H
CJNE A,#01H, $
SJMP FIM
ATENDE: MOV P1,A

Aguarda interrupo. Enquanto a 01h, fica aguardando nessa linha.


O caractere $ indica desvio para a mesma linha.
Subrotina de atendimento da interrupo INT0. Faz P1 = a

INC A

Incrementa valor de A

LCALL ATRASO

Chama subrotina de atraso

CJNE
A,#00H,ATENDE

Compara a com 00h. Se for diferente, vai para atende

MOV A,#01H

Quando a = 00h, na linha anterior, ento faz A = 01h, nesta linha.

RETI

Retorna da subrotina de interrupo

ATRASO: MOV R0,#10

Subrotina de atraso de tempo

REPETE: MOV R1,#100


DJNZ R1, $

Repete a instruo que decrementa r1 at zerar r1

DJNZ R0, REPETE


RET
FIM: NOP
END

Obs.: O pedido de interrupo atendido quando pino P3.2 do microcontrolador passa de 1 para 0.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

57

2. Programa com as interrupes externas 0 e 1. Neste programa, quando a interrupo INT0 acionada
atravs do pino P3.2, o processamento desviado para uma subrotina que faz uma contagem crescente
na porta P1. Quando a interrupo INT1 solicitada atravs do pino P3.3, uma contagem decrescente
enviada tambm para a porta P1. Lembrar de guardar o acumulador na pilha em cada atendimento de
subrotina, uma vez que ele utilizado nas duas subrotinas.
Rtulo

Mnemnico

Comentrio sobre o Efeito da Operao

$MOD51
ORG 00H
LJMP INICIO
ORG 03H
LJMP ATENDE0

Desvia para a subrotina de atendimento da interrupo INT0

ORG 13H
LJMP ATENDE1

Desvia para a subrotina de atendimento da interrupo INT1

ORG 30H
INICIO: MOV SP, #2fH
MOV IE, #85H

Habilita interrupes externas 0 e 1 (EA = 1, EX0 = 1 e EX1 = 1)

MOV TCON, #05H

INT0 e INT1 por transio de 1 para 0 (IT0 = 1 e IT1 = 1).

MOV A, #00H
SJMP $
ATENDE0: PUSH ACC
MOV A,#00H
V1: MOV P1,A

Aguarda interrupo em um lao infinito


Incio da subrotina de atendimento da interrupo 0.
Faz acumulador igual a zero
Contedo de A transferido para a porta P1

INC A

Incrementa acumulador

LCALL ATRASO

Chama subrotina de atraso de tempo

CJNE A,#00H,V1

Compara acumulador com 00h. Se for diferente desvia para V1

POP ACC

Recupera da pilha o contedo do acumulador

RETI

retorna de subrotina de interrupo

ATENDE1: PUSH ACC

Incio da subrotina de atendimento da interrupo 1.

MOV A,#0ffH
V2: MOV p1,A
LCALL ATRASO
DEC A

Decrementa contedo do acumulador

CJNE A,#0FFH,V2

Compara A com FFh. Se for diferente desvia para V2

POP ACC

Recupera contedo do acumulador que foi guardado na pilha

RETI
ATRASO: MOV R0,#10
REPETE: MOV R1,#100
DJNZ R1, $
DJNZ R0, REPETE
RET
END

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

58

3. Este programa funciona como o anterior, mas ao invs de uma contagem crescente e uma decrescente,
ele faz um deslocamento esquerda dos bits da porta P1 para um pedido de INT0 e um deslocamento
direita dos mesmos bits para um pedido de INT1.
Rtulo

Mnemnico

Comentrio sobre o Efeito da Operao

$MOD51
ORG 00H
LJMP INICIO
ORG 03H
LJMP ATENDE0

Desvia para a subrotina de atendimento da interrupo INT0

ORG 13H
LJMP ATENDE1

Desvia para a subrotina de atendimento da interrupo INT1

ORG 30H
INICIO: MOV SP, #2FH
MOV IE, #85H

Habilita interrupes externas 0 e 1 (EA = 1, EX0 = 1 e EX1 = 1)

MOV TCON, #05H

INT0 e INT1 por transio de 1 para 0 (IT0 = 1 e IT1 = 1).

MOV A, #00H

Acumulador assume o valor inicial 00.

SJMP $

aguarda interrupo num loop infinito nessa linha

ATENDE0: PUSH ACC


MOV A,#01H
V1: MOV P1,A

Subrotina de atendimento da interrupo 0. Guarda acumulador na pilha


O bit 0 do acumulador assume o valor 1. Os demais so zero.
Transfere para a porta P1 o contedo do acumulador

LCALL ATRASO

Chama subrotina de atraso de tempo

RL A

Rotaciona para a esquerda o contedo do acumulador

CJNE A,#01H,V1

Compara acumulador com 01h. Se for diferente desvia para V1

POP ACC

Recupera da pilha o contedo do acumulador

RETI

retorna de subrotina de interrupo

ATENDE1: PUSH ACC


MOV A,#80H
VOLTA2: MOV P1,A

Subrotina de atendimento da interrupo 1. Guarda acumulador na pilha


O bit 7 do acumulador assume o valor 1. Os demais so zero.
Transfere para a porta P1 o contedo do acumulador

LCALL ATRASO

Chama subrotina de atraso de tempo

RR A

Rotaciona para a direita o contedo do acumulador

CJNE A,#80H,VOLTA2

Compara A com 80h. Se for diferente desvia para V2

POP ACC

Recupera da pilha o contedo do acumulador

RETI

Retorna de subrotina de interrupo

ATRASO: MOV R0,#10


REPETE: MOV R1,#100
DJNZ R1, $
DJNZ R0, REPETE
RET
END

Obs.:
1. Lembrar que, na simulao, o pedido de interrupo feito posicionando o cursor nos bits 2 e 3 da
porta P3 e digitando 0 no lugar do 1 presente. As interrupes sero atendidas sempre na transio de
1 para zero, uma vez que TCON = 05h (0000 0101b).
2. Durante uma das contagens, simule dois pedidos de interrupo simultneos fazendo a transio de 1
para 0 nos pinos P3.2 e P3.3. Verifique ento que a interrupo INT0 ser atendida primeiro, porque
ela tem prioridade sobre a INT1.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

59

Temporizadores e Contadores do 8051


5.1 Princpio de Funcionamento e Modos de Operao

O 8051 tem dois temporizadores/contadores de 16 bits que podem trabalhar em 4 modos distintos,
mostrados na Tabela 5.1.
Tabela 5.1: Modos de operao dos temporizadores 0 e 1
Modo
0
1
2
3

Descrio
Contador/Temporizador de 13 bits (8 bits com divisor de frequncia de at 32 vezes). Pode contar at
8192 = 32 x 255.
Contador/Temporizador de 16 bits (pode contar at 65535)
Contador/Temporizador de 8 bits com recarga automtica
2 contadores/temporizadores independentes de 8 bits. Esse modo no vale para o
Contador/Temporizador 1, que fica inativo nesse modo.

Fig. 5.1: Diagrama de blocos simplificado do temporizador/contador 0

O diagrama da Fig. 5.1 auxilia na anlise do funcionamento do temporizador/contador. So


mostrados os registradores TMOD e TCON, atravs dos quais o temporizador configurado e
controlado. No registrador TMOD o nibble inferior refere-se ao temporizador/contador zero e o nibble
superior refere-se ao temporizador/contador 1. Os bits M0 e M1 configuram o modo de operao (0, 1 2
ou 3). O bit C/T\ define se o funcionamento como contador (C/T\ = 1), ou como temporizador (C/T\
= 0). Na operao como temporizador, o clock interno, vindo do oscilador. A frequncia 1/12 da
frequncia do cristal oscilador. Na operao como contador de eventos, o clock externo, vindo atravs
de T0 (P3.4), para o contador zero e T1 (P3.5), para o contador 1. O pino GATE\ define se o sinal de
disparo do contador/temporizador vem atravs de software (bit TR) do registrador TCON, ou de um
sinal externo, atravs do pino INT0\ (P3.2), para o temporizador/contador zero e INT1\ (P3.3), para o
temporizador/contador 1. Se GATE\ = 0, o comando SETB TR0 dispara o contador/temporizador zero
e CLR TR0 interrompe. Para disparar e parar o temporizador/contador 1 utiliza-se, respectivamente, as
instrues SETB TR1 e CLR TR1.
Alm dos bits TR0 e TR1, o registrador TCON possui os bits TF0 e TF1 que se referem aos
temporizadores/contadores zero e 1. O bit TF setado pelo tempozidador/contador ao final de cada
contagem, o que gera um pedido de interrupo. Se as interrupes desses temporizadores estiverem
setadas h um desvio para os endereos 0BH ou 1BH, respectivamente, para os temporizadores zero e
1. O nibble inferior do registrador TCON refere-se s interrupes e j foi estudado.
A contagem do contador/temporizador comea sempre do valor definido pelo programador,
atravs dos registradores TH e TL e vai at o valor mximo de contagem, por exemplo, FFFFH, para o
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

60

caso do modo 1 (temporizador de 16 bits). A partir da segunda contagem o temporizador/contador


comea do valor 0000H, a menos que o programador recarregue os registradores TH e TL com o incio
desejado. No modo 2 (recarga automtica) no h necessidade dessa recarga pelo programador; ela
feita automaticamente pelo microcontrolador. Nesse caso, modo 2, o contador o registrador TL (8
bits) e o valor da recarga dado atravs do registrador TH. Ou seja, a cada nova contagem, o
microcontrolador transfere o contedo de TH para TL e segue a contagem at FFH.
No caso de existncia de 3 temporizadores, os registradores especiais associados ao temporizador
2 so: T2CON, T2MOD, RCAP2L, RCAP2H, TL2 e TH2. Os pinos externos associados a esse
temporizador so: P1.0 (T2) e P1.1 (T2EX).
O Temporizador 2 pode funcionar como temporizador e como contador de eventos, assim como
os temporizadores zero e 1. O tipo de operao selecionado atravs do bit C/T2\ do registrador
especial T2CON (Registrador Especial C8H), mostrado na Tabela 5.2.
T2CON

Bit 7
T2F

Bit 6
EXF2

Bit 5
RCLK

Bit 4
TCLK

Bit 3
EXEN2

Bit 2
TR2

Bit 1
C/T2\

Bit 0
CP/RL2\

Tabela 5.2: Descrio dos bits do registrador T2CON.

Bit
T2F

EXF2

RCLK

TCLK

EXEN2
TR2
C/T2\

CP/RL2\

Descrio
Flag de overflow do temporizador 2. setada por hardware e deve ser zerada por software. Essa flag
no ser setada nos casos de TCLK = 1 ou RCLK = 1.
Flag externa do Temporizador 2. setada quando uma captura ou recarga automtica causada por
uma transio de 1 para 0 no pino T2EX (P1.1) e EXEN2 = 1. Quando a interrupo do temporizador
2 est habilitada, EXF2 = 1 far com que o processamento seja desviado para a subrotina de
atendimento da interrupo (endereo 2BH). A flag EXF2 deve ser zerada por software. A flag EXF2
no provoca interrupo no modo de operao como contador crescente/decrescente (DCEN = 1).
Habilita clock de recepo. Quando setado faz com que os pulsos de overflow do temporizador 2 seja
usado como clock de recepo da porta serial nos modos 1 e 3. RCLK = 0 faz com que o
temporizador 1 seja usado para gerar o clock de recepo.
Habilita clock de transmisso. Quando setado faz com que os pulsos de overflow do temporizador 2
seja usado como clock de transmisso da porta serial nos modos 1 e 3. TCLK = 0 faz com que o
temporizador 1 seja usado para gerar o clock de transmisso.
Habilitao externa do temporizador 2. Quando setado permite a captura ou recarga como o resultado
de uma transio negativa no pino T2EX (P1.1) se o temporizador 2 no estiver sendo usado para
gerar o clock da porta serial. EXEN2 = 0 faz com que o temporizador 2 ignore eventos no pino T2EX.
Controle de partida (TR2 = 1) /parada (TR2 = 0) do temporizador 2.
Seleciona o modo como temporizador (C/T2\ = 0) ou como contador (C/T2\ = 1).
Bit de seleo dos modos de recarga/captura. CP/RL2\ = 1 ativa a captura na transio 1 para 0 no
pino T2EX (P1.1), se EXEN2 = 1. CP/RL2\ = 0 ativa recarga automtica quando h overflow do
temporizador 2 ou na transio de 1 para 0 no pino T2EX, quando EXEN2 = 1. Quando RCLK ou
TCLK = 1, este bit ignorado e o temporizador forado a operar no modo de recarga no overflow
do temporizador 2.

O temporizador 2 possui 3 modos de operao: modo de captura, modo de recarga automtica


(como contador crescente ou decrescente) e gerador de clock para a comunicao serial. Os modos de
operao so selecionados atravs de bits do registrador T2CON, como mostrado na Tabela 5.3. O
temporizador 2 consiste de dois registradores de 8 bits, TH2 e TL2. No modo Temporizador o
registrador TL2 incrementado a cada ciclo de mquina. Uma vez que um ciclo de mquina consiste de
12 ciclos de clock, a frequncia do temporizador corresponde a 1/12 da frequncia do cristal oscilador.
RCLK + TCLK
0
0
1
X

Tabela 5.3: Modos de operao do temporizador 2


CP/RL2\
TR2
Modo
0
1
Modo de recarga automtica de 16 bits
1
1
Modo de captura de 16 bits
X
1
Gerador de clock para a porta serial
X
0
Desligado

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

61

Na funo de contador, o registrador incrementado na transio de 1 para 0 no pino externo T2


(P1.0). Nesta funo, a entrada externa amostrada durante o estado S5P2 de cada ciclo de mquina.
Quando as amostras mostram um nvel alto em um ciclo e baixo no prximo ciclo, o contador
incrementado. O novo valor do contador aparece no registrador durante o estado S3P1 do ciclo seguinte
ao ciclo de deteco da transio. Desde que so necessrios dois ciclos de mquina para o
reconhecimento de uma transio de 1 para 0, a taxa mxima de contagem 1/24 da frequncia do
cristal oscilador. Para assegurar que um determinado nvel seja detectado pelo menos uma vez antes que
ele mude de nvel, o nvel deveria ser mantido por pelo menos um ciclo de mquina completo.
No modo de captura, duas opes so selecionadas pelo bit EXEN2 do registrador T2CON. Se
EXEN2 = 0, o temporizador 2 um temporizador ou contador de 16 bits que, quando ocorre overflow,
seta o bit TF2 do registrador T2CON. Esse bit pode ser usado para gerar uma interrupo. Se EXEN2 =
1, o temporizador 2 executa a mesma operao, mas uma transio de 1 para 0 no bit externo T2EX
(pino P1.1) tambm faz com que o contedo atual dos registradores TH2 e TL2 seja transferido
(capturado) para os registradores RCAP2H e RCAP2L, respectivamente. A transio de 1 para 0 em
T2EX seta ainda o bit EXF2 do registrador T2CON. A flag EXF2, assim como a flag TF2, pode gerar
uma interrupo. A Fig. 5.2 ilustra a operao no modo de captura.

Fig. 5.2: Diagrama de blocos mostrando o modo de captura

O temporizador 2 pode ser programado para uma contagem crescente ou decrescente quando
configurador no modo de 16 bits com recarga automtica. Esta seleo feita atravs do bit DCEN
(habilitao de contagem decrescente) do registrador especial T2MOD (registrador C9H).
T2MOD

Bit 7
X

Bit 6
X

Bit 5
X

Bit 4
X

Bit 3
X

Bit 2
X

Bit 1
T2OE

Bit 0
DCEN

Tabela 5.3: Descrio dos bits do registrador T2MOD.

Bit
T2OE
DCEN

Descrio
Bit que habilita a sada do temporizador 2
Quando setado, este bit permite que o temporizador 2 seja configurado como contador crescente ou
decrescente, dependendo do valor do pino externo T2EX (pino P1.1). Se DCEN = 0 o temporizador 2
faz uma contagem crescente.

A Fig. 5.3 ilustra a operao no modo recarga automtica crescente (DCEN = 0). Quando DCEN
= 0 o temporizador 2 automaticamente faz uma contagem crescente com recarga automtica. O valor da
recarga armazenado nos registradores RCAP2H e RCAP2L. O bit EXEN2 do registrador T2CON
permite duas opes de operao: com EXEN2 = 0, a cada fim de contagem, quando o valor dos
registradores TH2 e TL2 chega a FFFFH, a flag TF2 setada e o contedo de RCAP2H e RCAP2L
recarregado em TH2 e TL2. Se EXEN2 = 1 a recarga automtica pode ocorrer a cada final de contagem
(overflow do temporizador) ou pela transio de 1 para 0 do sinal no pino T2EX (pino P1.1). Essa
transio tambm seta a flag EXF2 que, do mesmo modo que a flag TF2, pode gerar uma interrupo, se
a interrupo do temporizador 2 estiver habilitada.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

62

Fig. 5.3: Diagrama de blocos mostrando o modo de contagem crescente com recarga automtica

A Fig. 5.4 ilustra a operao no modo recarga automtica crescente ou decrescente (DCEN = 1).
Quando DCEN = 1 o temporizador 2 pode fazer uma contagem crescente ou decrescente, dependendo
do estado do pino de controle T2EX (pino P1.1). T2EX = 1 habilita uma contagem crescente do
temporizador 2. Haver overflow quando a contagem chegar a FFFFH e o bit TF2 ser setado (pedido
de interrupo pendente). Haver ainda a recarga dos valores armazenados em RCAP2H e RCAP2L nos
registradores TH2 e TL2, respectivamente.
T2EX = 0 habilita uma contagem decrescente do temporizador 2. Haver um underflow
(ultrapassagem para baixo) quando a contagem em TH2 e TL2 for igual ao valor armazenado em
RCAP2H e RCAP2L. O underflow seta o bit TF2 e provoca a recarga do valor FFFFH nos registradores
TH2 e TL2. O bit EXF2 alterna seu valor sempre que ocorre um overflow ou um underflow do
temporizador 2. Esse bit pode ser usado como o 17 bit de resoluo do contador. Neste modo de
operao esse bit no gera interrupo.

Fig. 5.4: Diagrama de blocos mostrando o modo de contagem crescente/decrescente com recarga automtica

5.2 Programas Exemplos usando Temporizadores


Exemplo 1: Programa em que o temporizador 0 faz uma contagem ininterrupta de 0 a 65535 (no modo 1)
e o temporizador 1 faz uma contagem de 0 a 8192 (no modo 0). Observar no simulador a evoluo dos
registradores TH0 e TL0, para o temporizador 0 e TH1 e TL1 para o registrador 1.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

Rtulo

63

Mnemnico
$MOD51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP, #2FH
MOV TMOD,#01H
SETB TR0
SETB TR1
SJMP $
END

Comentrio sobre o Efeito da Operao


Carrega biblioteca de definies
Pula para o incio do programa

Faz apontador de pilha SP = 2FH


Temporizador 0 no modo de 16 bits (modo 1) e temporizador 1 no modo 0
Dispara temporizador 0
Dispara temporizador 1
Lao infinito

Exemplo 2: Programa em que o temporizador 0, no modo 1, faz uma contagem ininterrupta de 10.000
pulsos (de 55535 a 65535) e gera uma onda quadrada no pino P1.0. Observar no simulador a evoluo
dos registradores TH0 e TL0 e a mudana de estado do pino P1.0.
Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP, #2FH
MOV TMOD,#01H
V1: MOV TH0,#0D8H
MOV TL0,#0EFH
SETB TR0
JNB TF0,$
CLR TF0
CPL P1.0
SJMP V1
END

Comentrio sobre o Efeito da Operao


Carrega biblioteca de definies
Pula para o incio do programa

Faz apontador de pilha SP = 2FH


Temporizador 0 no modo de 16 bits (modo 1) e temporizador 1 no modo 0
Carrega TH0/TL0 com valor hexadecimal D8EFH = 55.535 decimal
Dispara temporizador 0
Aguarda final de contagem do temporizador 0
Limpa flag de final de contagem
Complementa o pino 0 da porta P1 Gera onda quadrada no pino P1.0
Desvia para recarregar valor inicial da contagem

A Fig. 5.5 mostra a onda gerada no pino P1.0 pelo programa do Exemplo 2. O cristal oscilador
utilizado de 12 MHz, o que significa um clock de 1 MHz do temporizador. Assim, um perodo de clock
do temporizador 1 s, e uma contagem de 10.000 pulsos resulta em um perodo de tempo de 10 ms.

10 ms

Fig. 5.5: Onda quadrada gerada com o temporizador 0 modo 1

Exemplo 3: Programa em que o temporizador 0, no modo 1, faz uma contagem ininterrupta de 10.000
pulsos (de 55535 a 65535) e gera uma onda quadrada no pino P1.0 atravs de interrupo do
temporizador. Observar no simulador o desvio para o endereo 0BH para atendimento da interrupo.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

Rtulo

64

Mnemnico
$MOD51
ORG 00H
LJMP INICIO

Comentrio sobre o Efeito da Operao


Carrega biblioteca de definies

ORG 0BH
MOV TH0,#0D8H
MOV TL0,#0EFH
CLR TF0
CPL P1.0
RETI

Endereo da interrupo do temporizador 0


Carrega TH0/TL0 com valor hexadecimal D8EFH = 55.535 decimal

ORG 30H
INICIO: MOV SP, #2FH
MOV IE,#82H
MOV TMOD,#01H
MOV TH0,#0D8H
MOV TL0,#0EFH
SETB TR0
SJMP $
END

Pula para o incio do programa

Limpa flag de final de contagem


Complementa o pino 0 da porta P1 Gera onda quadrada no pino P1.0

Faz apontador de pilha SP = 2FH


Habilita a interrupo do temporizador 0
Temporizador 0 no modo de 16 bits (modo 1) e temporizador 1 no modo 0
Carrega TH0/TL0 com valor hexadecimal D8EFH = 55.535 decimal
Dispara temporizador 0
Aguarda em um lao infinito. Sai do lao a cada final de contagem

Exemplo 4: Programa que gera onda quadrada no pino P1.0 e cuja subrotina de atraso de tempo utiliza o
temporizador 1 no modo 1. Se o cristal oscilador for de 12 MHz o tempo de atraso corresponder a
aproximadamente 1 s.
Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP, #2FH
MOV TMOD,#10H
V1: CPL P1.0
LCALL ATRASO
SJMP V1
ATRASO: MOV R0,#20
V2: MOV TH1,#3CH
MOV TL1,#0AFH
SETB TR1
ESPERA: JNB TF1, ESPERA
CLR TF1
DJNZ R0, V2
CLR TR1
RET
END

Comentrio sobre o Efeito da Operao

Temporizador 1 no modo de 16 bits (modo 1)


Complementa o bit 0 da porta P1
Chama subrotina de atraso de tempo

Registrador R0 recebe valor 20 decimal


TH1 recebe valor 3CH
TL1 recebe valor AFH. Contador conta de 15535 at 65535 = 50000 pulsos
TR1 = 1 dispara o temporizador 1
Espera a flag de fim de contagem ser setada Espera TF0 = 1.
Limpa flag que indica fim da contagem.
Decrementa R0 e desvia para V2 se no for zero
Pra contador aps o fim de 20 x 50000 pulsos = 1.000.000 pulsos.
Retorna da subrotina. Se cada pulso corresponder a 1 s atraso 1 s

A Fig. 5.6 mostra uma onda quadrada com meio perodo de 1 s, gerada no pino P1.0 pelo programa
do Exemplo 4. O cristal oscilador utilizado de 12 MHz, o que significa um clock de 1 MHz do
temporizador. Assim, um perodo de clock do temporizador 1 s e so necessrios 1.000.000 de pulsos
para se obter o tempo de 1 s. Uma vez que o temporizador no modo 1 conta somente at 65.535, o que
resultaria em um tempo de 65,535 ms, optou-se por gerar 50.000 pulsos (50 ms), repetida por 20 vezes.
Os 50.000 pulsos so gerados fazendo uma contagem de 15.535 (3CAFH) at 65.535 (FFFFH).

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

65

1,0 s

Fig. 5.6: Onda quadrada gerada com o temporizador 1 modo 1 atraso de 1 s

Exemplo 5: Uso do temporizador 1 no modo 2, com interrupo. Nesse exemplo, a cada vez que o
temporizador 1 chega ao final da contagem (FFH), h um desvio para a subrotina atende1, onde o pino
0 da porta P1 complementado e o valor de recarga TH1 tambm complementado. Observar que a onda
gerada no pino P1.0 possui tempo ligado diferente do tempo desligado, devido complementao de TH1
a cada interrupo (Gerao de sinal PWM: Modulao de Largura de Pulso).
Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO
ORG 1BH
LJMP ATENDE1

ORG 30H
INICIO: MOV SP, #2FH
MOV IE,#88H
MOV TMOD,#20H
MOV TH1,#3FH
MOV TL1,TH1
SETB TR1
SJMP $
ATENDE1: CPL P1.0
CLR TF1
MOV A,TH1
CPL A
MOV TH1,A
RETI
END

Comentrio sobre o Efeito da Operao

Endereo de desvio para a interrupo do temporizador 1.


Desvia para subrotina de atendimento de interrupo do temporizador 1

Habilita interrupo do temporizador 2


Temporizador 1 no modo de recarga automtica (modo 2)
Carrega registrador de recarga TH1 com valor 3FH
Transfere para TL1 o contedo de TH1. TL1 o contador no modo 2.
D incio contagem do temporizador 1
Fica num loop infinito, saindo a cada fim de contagem do temporizador 1
Complementa o pino P1.0
Limpa a flag de final de contagem
Transfere contedo de TH1 para acumulador
Complementa acumulador
Devolve para TH1 o contedo complementado
Retorna da subrotina de interrupo

A Fig. 5.7 mostra uma onda modulada gerada pelo temporizador 1 no modo 2. O perodo da onda
corresponde ao perodo completo do temporizador nesse modo (255 s), uma vez que o contador o
registrador TL1 (8 bits) e o cristal oscilador utilizado de 12 MHz, ou seja, um perodo de clock do
temporizador 1 s. O tempo ligado de 63 s, uma vez que nesse intervalo o contador conta de C0H at
FFH, que corresponde a 63 pulsos. O tempo desligado de 192 us, que corresponde a uma contagem de
3FH at FFH do contador no modo 2.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

66

255 s

192 s
63 s

Fig. 5.7: Onda modulada gerada pelo temporizador 1 no modo 2

Exemplo 6: O programa gera uma onda modulada no pino P1.0 (sinal PWM) usando o temporizador 1 no
modo 2, com interrupo. A interrupo externa 0 usada para aumentar o tempo ligado de P1.0 e a
externa 1 usada para diminuir o tempo ligado. Ambas so por transio. Na subrotina de interrupo
externa 0 o perodo ligado TON incrementado e seu complemento transferido para TOFF. Na
subrotina da interrupo externa 1 o perodo ligado TON decrementado e seu complemento
transferido para TOFF.
Rtulo

Mnemnico
$MOD51
TON EQU 0AH
TOFF EQU 0BH

Comentrio sobre o Efeito da Operao


Registrador 0AH recebe o nome de TON (Tempo ligado de P1.0)
Registrador 0BH recebe o nome de TOFF (Tempo desligado de P1.0)

ORG 00H
LJMP INICIO
ORG 03H
LJMP EXTERNA0

Endereo de desvio para a interrupo externa 0


Desvia para a subrotina de atendimento da interrupo externa 0

ORG 13H
LJMP EXTERNA1

Endereo de desvio para a interrupo externa 1


Desvia para a subrotina de atendimento da interrupo externa 1

ORG 1BH
LJMP ATENDE1

Endereo de desvio para a interrupo do temporizador 1.


Desvia para subrotina de atendimento de interrupo do temporizador 1

ORG 30H
INICIO: MOV SP, #2FH
MOV IE,#8DH
MOV TCON,#05H
MOV TMOD,#20H
MOV TH1,#3FH
MOV A,TON
CPL A
MOV TOFF,A
CLR P1.0
MOV TL1,TON
MOV TH1,TOFF
SETB TR1
SJMP $
ATENDE1: CLR TF1
JB P1.0,DESLIGA
LIGA: SETB P1.0
MOV TH1,TON
RETI

Apontador de pilha SP = 2FH


Habilita interrupo do temporizador 2 e as externas 0 e 1. IE = 1000 1101
As interrupes externas 0 e 1 so por transio
Temporizador 1 no modo de recarga automtica (modo 2)
Carrega registrador de recarga TH1 com valor 3FH
Carrega acumulador com valor do tempo ligado
Complementa o tempo ligado
Carrega registrador de tempo desligado TOFF com complemento de TON
Limpa o pino P1.0
Carrega TL1 com tempo ligado. TL1 o contador no modo 2
Carrega valor da prxima recarga TH1 com tempo desligado TOFF
D incio contagem do temporizador 1
Fica num loop infinito, saindo a cada fim de contagem do temporizador 1
Limpa a flag de final de contagem
Se P1.0 = 1 desvia para DESLIGA. Se P1.0 = 0 vai para prxima linha
Liga o pino P1.0
Carrega TH1 com o prximo valor de recarga

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

DESLIGA: CLR P1.0


MOV TH1,TOFF
RETI

67

Desliga pino P1.0


Carrega TH1 com o prximo valor de recarga

EXTERNA0: INC TON


MOV A,TON
CPL A
MOV TOFF,A
RETI

Aumenta o tempo ligado


Carrega acumulador com o valor do tempo ligado
Complementa o tempo ligado
Carrega o tempo desligado com o complemento do tempo ligado

EXTERNA1: DEC TON


MOV A,TON
CPL A
MOV TOFF,A
RETI
END

Diminui o tempo ligado do pino P1.0


Carrega acumulador com valor do tempo ligado
Complementa o tempo ligado
Carrega o tempo desligado com o complemento do tempo ligado

Exemplo 7: Uso do temporizador 1 no modo 2, com interrupo. O programa gera no pino P1.0 uma
onda cujos tempos ligado e desligado variam devido ao incremento do valor de recarga TH1. Na
subrotina de atendimento da interrupo do temporizador 1 o valor de recarga TH1 incrementado a cada
final de contagem. Assim, a recarga seguinte est incrementada em uma unidade. Assim, a contagem
comea sempre uma unidade a mais que a anterior e o perodo da onda quadrada diminui a cada nova
contagem.
Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO
ORG 1BH
LJMP ATENDE1

ORG 30H
INICIO: MOV SP, #2FH
MOV IE,#88H
MOV TMOD,#20H
MOV TH1,#00H
MOV TL1,TH1
SETB TR1
SJMP $
ATENDE1: CLR TF1
CPL P1.0
INC TH1
RETI
END

Comentrio sobre o Efeito da Operao

Endereo de desvio para a interrupo do temporizador 1.


Desvia para a subrotina que atende o temporizador 1.

Habilita a interrupo do temporizador 2


Temporizador 1 no modo de recarga automtica (modo 2)
Carrega registrador de recarga TH1 com valor 00h
Transfere para TL1 o contedo de TH1. TL1 o contador no modo 2.
D incio contagem do temporizador 1
Fica num loop infinito, saindo a cada fim de contagem do temporizador 1
Limpa a flag de final de contagem
Complementa o bit zero da porta P1 a cada fim de contagem do TEMP1
Incrementa TH1. Cada nova contagem comea 1 unidade acima da anterior
Retorna da subrotina que atende a interrupo do temporizador 1.

Exemplo 8: Uso do temporizador 1 no modo 2, com interrupo. O programa gera no pino P1.0 uma
onda cujos tempos ligado e desligado variam devido variao do valor de recarga TH1.
Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO
ORG 1BH
LJMP ATENDE1

Comentrio sobre o Efeito da Operao

Endereo de desvio para a interrupo do temporizador 1.


Desvia para a subrotina que atende o temporizador 1.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

68

ORG 30H
INICIO: MOV SP, #2FH
MOV IE,#88H
MOV TMOD,#20H
MOV TH1,#00H
MOV TL1,TH1
CLR F0
SETB TR1
SJMP $

Habilita a interrupo do temporizador 2


Temporizador 1 no modo de recarga automtica (modo 2)
Carrega registrador de recarga TH1 com valor 00h
Transfere para TL1 o contedo de TH1. TL1 o contador no modo 2.
Flag que indica se TH1 est sendo incrementado (F0 = 0) ou decrementado
D incio contagem do temporizador 1
Fica num loop infinito, saindo a cada fim de contagem do temporizador 1

ATENDE1: CPL P1.0


CLR TF1
JB F0,DECREM
INC TH1
MOV A,TH1
CJNE A,#0FAH,SAI
SETB F0
RETI

Complementa o bit zero da porta P1 a cada fim de contagem do TEMP1


Limpa a flag de final de contagem
Se F0 = 1, decrementa TH1
Incrementa valor de recarga TH1
Transfere TH1 para acumulador para verificar se j alcanou FAH
Enquanto TH1 menor que FAH continua aumentando TH1
Seta flag que indica se TH1 deve ser incrementado ou decrementado

DECREM: DEC TH1


MOV A,TH1
CJNE A,#05H,SAI
CLR F0
SAI:
NOP
RETI
END

Decrementa valor de recarga TH1


Transfere TH1 para acumulador para verifica se j alcanou 05H
Enquanto TH1 maior que 05H, continua diminuindo TH1
Limpa flag que indica se TH1 deve ser incrementado ou decrementado

Exemplo 9: O programa usa a interrupo externa 0, por transio, para alternar entre os modos 0 e 1 a
operao do temporizador 0. A flag F0, do registrador especial PSW (F0 = PSW.5), usada para a
alternncia entre os dois modos de operao.
Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO

Comentrio sobre o Efeito da Operao

ORG 03H
LJMP MUDA

Endereo de desvio para a interrupo externa 0


Desvia para a subrotina que define o modo de operao do temporizador

ORG 0BH
CPL P1.0
CLR TF0
RETI

Endereo de desvio para a interrupo do temporizador 0


Gera uma onda quadrada no pino P1.0. Perodo depende do modo 0 ou 1
Limpa a flag de final de contagem

ORG 30H
INICIO: MOV SP,#2FH
MOV TMOD,#00H
MOV IE,#83H
MOV TCON,#01H
SETB TR0
SJMP $
MUDA: CPL F0
JB F0, MODO_UM
MODO_ZERO: MOV TMOD,#00H
RETI
MODO_UM: MOV TMOD,#01H
RETI
END

Apontador de pilha SP = 2FH


Temporizador 0 no modo 0
Habilita interrupo do temporizador 0 e da interrupo externa 0
Interrupo externa 0 por transio
Dispara temporizador 0
Fica em um loop infinito, saindo apenas quando h interrupo
Limpa a flag que indica modo 0 (F0=0) ou modo 1 (F0=1)
Se F0=1, desvia para executar modo 1. Se F0=0, executa modo 0
Configura temporizador 0 para operar no modo 0 (13 bits)
Retorna da interrupo
Configura temporizador 0 para operar no modo 1 (16 bits)
Seta flag que indica se TH1 deve ser incrementado ou decrementado

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

69

Exemplo 10: O programa usa o temporizador 2 para gerar uma onda quadrada no pino P1.0 a cada 50.000
pulsos. Os registradores relacionados ao temporizador 2 so definidos no incio do programa porque no
esto presentes na biblioteca MOD51.
Rtulo

Mnemnico
$MOD51
T2MOD EQU
RCAP2L EQU
RCAP2H EQU
TR2
BIT
TF2
BIT

Comentrio sobre o Efeito da Operao


0C9H ; Registrador de Configurao do Temporizador 2
0CAH ; Byte Inferior do registrador de recarga do Temporizador 2
0CBH ; Byte Superior do registrador de recarga do Temporizador 2
0CAH ; Bit de disparo do Temporizador 2 (=T2CON.2)
0CFH ; Bit que indica fim de contagem do Temporizador 2 (=T2CON.7)

ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV T2MOD,#01H
MOV RCAP2H,#3CH
MOV RCAP2L,#0AFH
SETB TR2
V1: JNB TF2,V1
CPL P1.0
CLR TF2
SJMP V1
END

Apontador de pilha SP = 2FH


Configura Temporizador 2 para operar crescente ou decrescente
Byte superior de recarga do temporizador 2
Byte inferior de recarga do temporizador 2
Dispara do temporizador 2
Aguarda fim da contagem do temporizador 2
Complementa pino P1.0. Gera onda quadrada

A Fig. 5.8 mostra a onda quadrada usada com o temporizador 2. Esse temporizador funciona com
recarga automtica. Foi definido o valor 3CAFH (15.535) como recarga para gerar 50.000 pulsos a cada
contagem. Sendo o cristal oscilador de 12 MHz, o ciclo de clock do temporizador 1 s e cada contagem
corresponde a 50 ms.

50 ms

Fig. 5.8: Onda quadrada gerada pelo temporizador 2

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

70

Comunicao Serial
6.1 Noes Bsicas de Comunicao Serial

A comunicao serial consiste em enviar ou receber pacotes de informao bit a bit. No caso do
8051 o canal de comunicao serial do tipo full duplex, o que significa que ele pode, ao mesmo
tempo, receber e transmitir dados.
Uma grande questo da transmisso serial como informar o receptor do incio e do final do pacote
de informao, ou seja, qual o primeiro bit da informao e qual o ltimo. Assim, existem dois tipos de
comunicao: sncrona e assncrona.
Na comunicao serial sncrona, so utilizados dois canais: um para transmitir e receber os dados e
outro para transmitir um sinal de sincronismo. O transmissor, portanto, o responsvel pela
sincronizao. A cada sinal de sincronismo recebido o receptor l o canal de dados.

No caso do 8051 a transmisso e tambm a recepo sncrona de dados so feitas atravs do pino
RxD (pino P3.0). O pino TxD (pino P3.1) usado para o sinal de sincronismo. Na transmisso serial
sncrona via MODEM, que no o caso tratado aqui, a informao de sincronismo enviada junto com
os dados. Para isso existem tcnicas especiais de codificao, que no so tratadas nesta apostila.
Na comunicao assncrona no h um sinal de sincronismo e, portanto, alguns cuidados especiais
devem ser tomados:
As taxas de recepo e de transmisso devem ser iguais
Um bit de incio da transmisso deve ser enviado
Um bit de fim de transmisso deve ser enviado
Assim, um pacote de informaes pode ser ilustrado como a seguir:

Fig. 6.1: Pacote de informaes na comunicao serial assncrona

Observe que o bit de incio de transmisso zero, isto porque o canal normalmente fica em repouso
no nvel lgico alto. Assim, a primeira passagem para zero, aps a habilitao da transmisso,
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

71

interpretada como o sinal de incio. O sinal de parada de nvel lgico alto, aps ser recebida a
quantidade de bits especificada. Observe ainda que, alm do bit de incio (Start bit) e do bit de fim (Stop
bit), tambm pode existir um terceiro bit extra, que o bit de paridade, usado para verificar a consistncia
dos dados. Assim, se houver erro na transmisso que implique na alterao da paridade, esse bit extra
detecta o erro.
A verificao de erros atravs do bit de paridade no detecta erro quando h inverso, por exemplo,
de dois bits de dados. Assim, normalmente so utilizados outros mtodos de verificao de erros,
principalmente quando a informao constituda de vrios bytes. So utilizados ainda os chamados
protocolos de comunicao, que garantiro uma transmisso serial mais segura.
Um mtodo utilizado para deteco de erros na transmisso de vrios bytes o mtodo do
checksum, onde o complemento de 2 da soma dos dados acrescentada ao pacote de informaes.
Assim, na recepo, o processador adiciona todos os bytes e verifica se o resultado zero. Caso no seja,
houve um erro na transmisso. Veja a exemplificao abaixo:

No projeto de irrigao desenvolvido na EEEC/UFG dois pacotes de informao so utilizados: no


primeiro pacote cada byte de dados (presso numa tubulao de gua) do transmissor 1 enviado
juntamente com seu complemento. O primeiro byte um byte que indica incio dos dados (foi escolhido o
byte 13h) e o ltimo byte indica fim do pacote (foi escolhido o byte 01h).

O segundo pacote de informaes composto pelos dados do transmissor 1 e os dados do


transmissor 2. Para o byte de incio foi escolhido o byte 17h e o byte de fim escolhido foi o byte 01h.
Novamente o complemento dos dados enviado. Na recepo os dados so verificados. Se for detectado
erro de transmisso, os dados so enviados novamente.

necessrio destacar outro ponto da comunicao serial: normalmente a comunicao serial entre
dois dispositivos se d usando o padro ASCII. Um exemplo o display de cristal lquido (LCD). Para
mostrar o nmero 1 no display LCD deve-se enviar seu cdigo ASCII, ou seja, 31h. Da mesma
forma, na comunicao entre o computador e o 8051, o cdigo ASCII utilizado. A tabela ASCII
mostrada a seguir.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

72

Tabela 6.1: Cdigos ASCII

Tabela 6.2: Registrador de Controle da Comunicao Serial

(SCON) =

SM0 SM1 SM2 REN TB8 RB8

TI

RI

SM0
SM1
Modo
Descrio
Baud Rate
0
0
0
Registrador de Deslocamento
fosc./12
0
1
1
UART de 8 bits
varivel
1
0
2
UART de 9 bits
fosc./64 ou fosc./32
1
1
3
UART de 9 bits
varivel
Smbolo
Nome e Significado
SM2
Habilita a caracterstica de comunicao de multiprocessadores no modo 2 e 3. Nesses
modos, se SM2=1, RI no ser ativado se o nono bit de dado recebido for igual a 0. No
modo 1, se SM2=1, RI no ser ativado se um stop bit vlido no for recebido. No modo 0,
dever ser 0.
REN
Bit habitador da recepo serial. Setado/limpado por software para habilitar ou desabilitar
a recepo serial.
TB8
o nono bit de dado que ser transmitido no modo 2 e 3. Setado ou limpado por software.
RB8
No modo 2 e 3, o nono bit de dado que foi recebido. No modo 1, se SM2=0, RB8 o stop
bit que foi recebido. No modo 0, RB8 no usado.
TI
o flag de interrupo de transmisso. Setado por hardware no final do tempo do 8 bit no
modo 0 ou no incio do stop bit em outros modos, em qualquer transmisso serial. Dever
ser limpado por software.
RI
o flag de interrupo de recepo. Setado por hardware no final do tempo do 8 bit no
modo 0 ou na metade do tempo do stop bit em outros modos, em qualquer recepo serial.
Dever ser limpado por software.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

73

O canal serial do 8051 pode operar em 4 modos diferentes, definidos atravs do registrador especial
SCON (mostrado na tabela 6.2), cujos bits podem ser manipulados individualmente. O modo 0 uma
comunicao sncrona. Os demais modos so do tipo assncrono.
Modo 0:
Taxa de transmisso fixa e igual frequncia de clock dividida por 12. A recepo tem incio com
REN = 1 e RI = 0. Ao final da recepo o bit RI setado por hardware e o contedo recebido
transferido para um registrador denominado por SBUF. RI deve ser ressetado antes da prxima recepo.
A transmisso iniciada automaticamente quando o contedo do acumulador transferido para o
SBUF. Quanto ao registrador SBUF da transmisso, embora tenha o mesmo nome do registrador da
recepo, trata-se de um outro registrador especfico para a transmisso. Ao final da transmisso o bit TI
setado por hardware. TI deve ser ressetado antes da prxima transmisso.
Modo 1:
Comunicao assncrona com taxa de transmisso a ser definida pelo usurio. So transmitidos 8
bits de dados, alm de um bit de incio e um bit de fim. A recepo tem incio quando h uma transio
do nvel lgico 1 para 0 no pino RxD (pino P3.0) e o bit RI est zerado. Ao final da recepo o RI
setado por hardware.
A transmisso iniciada quando h uma transferncia de dados para SBUF. Ao final da
transmisso o bit TI setado.
Modo 2:
Modo assncrono onde 11 bits so transmitidos (bit de incio + 9 bits de dados + bit de fim). A taxa
de transmisso/recepo pode ser 1/32 ou 1/64 da freqncia de clock. A recepo tem incio quando h
uma transio do nvel lgico 1 para 0 no pino RxD (pino P3.0) e o bit RI est zerado. Ao final da
recepo o bit RI setado por hardware. O nono bit de dados guardado em RB8. Esse bit pode ser o bit
de paridade.
A transmisso iniciada quando h uma transferncia de dados para SBUF. Ao final da
transmisso o bit TI setado. O nono bit a ser transmitido guardado em TB8. Esse bit pode ser o bit de
paridade. Expresso que define a taxa de transmisso no modo 2.

Baud rate

2 SMOD *

f osc
(bits / s)
64

Se o bit SMOD for zero, a taxa 1/64, caso seja igual a 1, a taxa 1/32.
Modo 3:
semelhante ao modo 1; a diferena est no bit a mais de dados no modo 3. Tanto no modo 1
quanto no modo 3 a taxa de transmisso definida pelo usurio, seguindo a equao a seguir:

Baud rate

f osc
2SMOD
*
(bits / s)
32 12 * (256 TH 1)

Nesses dois modos (1 e 3) o temporizador 1 deve ser configurado para operar no modo de recarga
automtica (modo 2). O valor da recarga (TH1), juntamente com o bit SMOD, que define a freqncia
de comunicao (transmisso e recepo). A tabela a seguir fornece alguns dos valores mais comuns de
taxa de transmisso.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

74

Tabela 6.3: Taxas de transmisso mais comuns

Baud Rate (bits/seg)


Modo 0 Mx: 1MHz
Modo 2 Mx: 375K
Modo 1, 3: 62,5K
19,2K
9,6K
4,8K
2,4K
1.2K
137,5
110
110

Freq. Osc. (MHz)


12
12
12
11,059
11,059
11,059
11,059
11,059
11,059
6
12

SMOD
X
1
1
1
0
0
0
0
0
0
0

C/Tbarra
X
X
0
0
0
0
0
0
0
0
0

Timer 1
Modo Valor Recar.
X
X
X
X
2
FFh
2
FDh
2
FDh
2
FAh
2
F4h
2
E8h
2
1Dh
2
72h
1
FEEBh

6.2 Roteiros de Programas usando Comunicao Serial


1. No programa a seguir a porta serial configurada no modo 0 e usada para transmitir uma contagem
crescente decimal, que tambm enviada para a porta P1, onde um conjunto de LEDs pode ser usado
para mostrar a contagem. O pino P3.0 (RxD) usado para a transmisso dos dados e o pino P3.1
(TxD) usado para a frequncia de clock.
Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV R0,#00H
V1: MOV SBUF,R0
JNB TI,$
MOV P1,R0
MOV A,R0
ADD A,#01
DA A
MOV R0,A
LCALL ATRASO
SJMP V1

Comentrio sobre o Efeito da Operao

; Apontador de pilha SP = 2FH


; Registrador R0 assume o valor 0
; Transfere o contedo de R0 para o Registrador SBUF
; Aguarda o final da transmisso do contedo de R0
; Transfere para a porta P1 o contedo de R0
; Transfere para o acumulador o contedo de R0
; Adiciona 1 ao contedo do acumulador
; Faz o ajuste decimal do contedo do acumulador
; Devolve para R0 o contedo atualizado de R0
; Chama subrotina de atraso de tempo
; Volta para transferir o valor atualizado de R0

ATRASO: MOV R4,#100


V2: MOV R5,#250
DJNZ R5,$
DJNZ R4,V2
RET
END

A Fig. 6.2 mostra um instante da contagem. No instante mostrado o valor transmitido corresponde
a 12 H (0 0 0 1 0 0 1 0). O bit menos significativo da contagem est esquerda na tela do osciloscpio. O
canal TxD transmite a frequncia de clock. Como o cristal oscilador, nesse caso, 12 MHz, a taxa de
transmisso no modo sncrono 1 MHz, o que resulta em um perodo de 1 s.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

75

1 s f = 1 MHz

Bit menos significativo

Fig. 6.2: Transmisso sncrona de contagem crescente

2. O programa a seguir equivalente ao anterior, mas utiliza o modo 1 (assncrono) de comunicao


serial com baud rate de 9600 bps. Nesse caso, o cristal oscilador de 11,0592 MHz, o que resulta (da
Tabela 6.3) em um valor de recarga TH1 = FDH, para o temporizador 1 no modo 2 (recarga
automtica).
Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV SCON,#40H
MOV TMOD,#20H
MOV TL1,#0FDH
MOV TH1,#0FDH
MOV R0,#00H
SETB TR1
V1: MOV SBUF,R0
JNB TI,$
MOV P1,R0
MOV A,R0
ADD A,#01
DA A
MOV R0,A
LCALL ATRASO

SJMP V1

Comentrio sobre o Efeito da Operao

; Apontador de pilha SP = 2FH


; Configura serial para modo 1 assncrono
; Configura o temporizador 1 para operar no modo 2
; Faz TL1 = FDH baud rate de 9600 bps para f = 11,0592 MHz
; Carrega TH1 com o valor de recarga automtica
; Faz R0 = 0 para iniciar contagem
; Adiciona 1 ao contedo do acumulador
; Transfere contedo de R0 para o registrador SBUF da serial
; Aguarda final da transmisso do contedo de R0
; Transfere para a porta P1 o contedo de R0
; Transfere para o acumulador o contedo de R0
; Adiciona 1 ao contedo do acumulador
; Faz o ajuste decimal do contedo do acumulador
; Devolve para R0 o contedo atualizado de R0
; Chama subrotina de atraso de tempo
; Volta para transferir o valor atualizado de R0

ATRASO: MOV R4,#100


V2: MOV R5,#250
DJNZ R5,$
DJNZ R4,V2
RET
END

A Fig. 6.3 mostra um instante da contagem. No instante mostrado o valor transmitido corresponde
a 37 H (0 0 1 1 0 1 1 1). O bit mais esquerda no osciloscpio o bit de start, cujo valor 0. O bit
mais direita o bit de stop, cujo valor 1. O bit menos significativo da contagem o primeiro bit
direita do bit de start. No modo assncrono, como trata-se de transmisso, o canal TxD usado. Como a
taxa de transmisso escolhida 9600 bps, um bit corresponde a 104 s.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

76

104 s f = 9600 Hz

Bit de stop

Bit de start

Fig. 6.3: Transmisso assncrona de contagem crescente

3. No programa a seguir o microcontrolador recebe dados via serial no modo 1, com taxa de recepo de
4800 bps, usando interrupo. O dado recebido enviado para a porta P1. A frequncia do cristal
oscilador de 11,0592 MHz. Assim, da Tabela 2, tem-se o valor de recarga TH1 = FAH, para o
temporizador 1 no modo 2 (recarga automtica). Caso o programa seja executado no laboratrio, use o
HyperTerminal do microcomputador, configurado para 4800 bps e 8 bits de dados para transmitir os
dados para o microcontrolador.
Rtulo

Mnemnico0
$MOD51
ORG 00H
LJMP INICIO
ORG 23H
CLR RI
MOV A,SBUF
RETI

ORG 30H
INICIO: MOV SP,#2FH
MOV SCON,#40H
MOV IE,#90H
MOV TMOD,#20H
MOV TL1,#0FAH
MOV TH1,#0FAH
MOV A,#00H
SETB TR1
SETB REN
V1: MOV P1,A
SJMP V1

Comentrio sobre o Efeito da Operao

; Limpa flag de recepo


; Transfere para o acumulador contedo recebido via serial
; Retorna da subrotina de atendimento da serial

; Apontador de pilha SP = 2FH


; Configura serial para modo 1 assncrono
; Habilita interrupo da serial. IE = 1 0 0 1 0 0 0 0b
; Configura o temporizador 1 para operar no modo 2
; Faz TL1 = FAH baud rate de 4800 bps para f = 11,0592 MHz
; Carrega TH1 com o valor de recarga automtica
; Carrega acumulador com 0
; Dispara temporizador 1
; Habilita recepo serial
; Transfere para a porta P1 o contedo do acumulador
; Loop mostrando o contedo de A. Esse valor muda a cada recepo

END

A Fig. 6.4 mostra no osciloscpio o dado enviado do computador para o microcontrolador. No caso
mostrado o dado enviado o nmero 5. Verificar que o valor mostrado 35H = 0 0 1 1 0 1 0 1b, que
corresponde ao cdigo ASCII do nmero 5. Como a taxa de recepo escolhida 4800 bps, um bit
corresponde a 208 s.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

77

208 s f = 4800 Hz

1 1

0 0

Bit de start

Fig. 6.4: Recepo assncrona do nmero 5 (ASCII 35H) enviado pelo computador

4. No programa a seguir o microcontrolador recebe dados via serial no modo 1, com taxa de recepo de
9600 bps, usando interrupo. O dado recebido usado para definir a rotao de LEDs na porta P1. Se
o dado recebido for a letra D os LEDs so rotacionados para a direita. A letra E rotaciona os LEDs
para a esquerda. Qualquer outra letra ou nmero faz o programa aguardar. A frequncia do cristal
oscilador de 11,0592 MHz. Assim, da Tabela 2, tem-se o valor de recarga TH1 = FDH, para o
temporizador 1 no modo 2 (recarga automtica).
Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO
ORG 23H
CLR RI
MOV R0,SBUF
RETI

ORG 30H
INICIO: MOV SP,#2FH
MOV SCON,#40H
MOV IE,#90H
MOV TMOD,#20H
MOV TL1,#0FDH
MOV TH1,#0FDH
MOV R0,#00H
MOV A,#01H
SETB TR1
SETB REN
V2: CJNE R0,#44H,V1
LJMP DIREITA
V1: CJNE R0,#45H,V2
LJMP ESQUERDA
DIREITA: MOV P1,A
RR A
LCALL ATRASO
SJMP V2
ESQUERDA: MOV P1,A
RL A
LCALL ATRASO
SJMP V2

Comentrio sobre o Efeito da Operao

; Limpa flag de recepo


; Transfere para o registrador R0 contedo recebido via serial
; Retorna da subrotina de atendimento da serial

; Apontador de pilha SP = 2FH


; Configura serial para modo 1 assncrono
; Habilita interrupo da serial. IE = 1 0 0 1 0 0 0 0b
; Configura o temporizador 1 para operar no modo 2
; Faz TL1 = FAH baud rate de 4800 bps para f = 11,0592 MHz
; Carrega TH1 com o valor de recarga automtica
; Carrega registrador R0 com valor 0
; Carrega acumulador com valor 01H
; Dispara temporizador 1
; Habilita recepo serial
; Se A for diferente de 44H (letra D) verificar se 45H
; Se A = 44H (letra D), desvia para rotina que rotaciona LEDs para a direita
; Se A for diferente de 45H (letra E) voltar para aguardar novo valor
; Se A = 45H (letra E), desvia par rotina que rotaciona LEDs para a esquerda
; Transfere para a porta P1 o contedo do acumulador
; Rotaciona para a direita contedo do acumulador

; Rotaciona para a esquerda o contedo do acumulador

ATRASO: MOV R7,#100


V3: MOV R6,#250
DJNZ R6,$
DJNZ R7,V3
RET
END

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

78

Observaes:
1. A conexo serial entre o microcontrolador 8051 e um computador exige um componente para
adaptao dos nveis de tenso. Enquanto no microcontrolador tenso zero representa nvel lgico
0 e tenso de 5 V representa o nvel lgico 1, no computador diferente. No computador o nvel
lgico 0 representado por uma tenso de + 12 V e o nvel lgico 1 representado por uma
tenso de 12 V. Essa adaptao entre os nveis de tenso conseguida com o componente
MAX232.
2. O cabo de conexo entre o microcontrolador
0 1 0 1 1 0 0 e o PC pode ser do tipo direto, ou do tipo invertido,
conforme mostra o diagrama a seguir.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

79

Expanso e Mapeamento de Memria

O microcontrolador bsico da famlia 8051 no possui memria EEPROM interna para o


armazenamento de dados. Assim, quando h necessidade de armazenamento de dados, por exemplo,
valores de temperatura e umidade ao longo de uma semana, necessrio acrescentar ao projeto uma
pastilha de memria EEPROM externa.
Alm disso, se houver necessidade de vrios perifricos, tais como display de LCD, teclado,
display de 7 segmentos e outros, pode acontecer de no ter portas suficientes para todos esses
componentes. Nesse caso, h necessidade de um mapeamento de memria, ou seja, acessar esses
componentes como se fossem posies de memria. Assim, todos os componentes, inclusive a memria
externa so acessados atravs das portas P2 e P0, com o uso da instruo MOVX. A porta P0 transporta
os dados e o byte inferior do endereo e a porta P2 transporta o byte superior do endereo.
O chip AT89S8252 possui 2 K de EEPROM interna para o armazenamento de dados. Dessa forma,
se a quantidade de dados que se deseja armazenar for pequena, no h necessidade de acrescentar uma
memria EEPROM externa. A instruo MOVX tambm usada para acessar essa memria. O
registrador especial WMCON (endereo 96H), mostrado na tabela 7.1, usado para controle.
WMCON

Bit 7
PS2

Bit 6
PS1

Bit 5
PS0

Bit 4
EEMWE

Bit 3
EEMEN

Bit 2
DPS

Bit 1
WDTRST

Bit 0
WDTEN

Tabela 7.1: Descrio dos bits do registrador WMCON.


Bit
Descrio
PS2
PS1
PS0

Bits que definem o tempo para o modo Watchdog. Quando os trs bits so 0, o tempo do watchdog
de 16 ms. Quando os trs bits esto em nvel alto (valor 1), o tempo de 2048 ms.

EEMWE

EEMEN
DPS

WDTRST
RDY/BSY\

WDTEN

Bit de habilitao da escrita na memria EEPROM interna. Deve ser setado (EEMWE=1) antes de
uma instruo de escrita na memria com a instruo MOVX. Depois da escrita na memria deve
ser limpo (EEMWE=0).
Bit que habita o acesso memria EEPROM interna. Fazendo EEMEN = 1, a instruo MOVX com
o DPTR usado para acessar a EEPROM interna. EEMEN = 0 d acesso memria EEPROM
externa.
Bit de seleo do apontador de dados. DPS = 0 habilita o uso do primeiro banco, DP0, de apontador
de dados. DPS = 1 seleciona o segundo banco, DP1, de apontador de dados.
Bit de reset do Watchdog e flag de Ready/Busy\ da EEPROM interna. Cada vez que esse bit
setado, um pulso de reset do watchdog gerado. Em seguida o bit WDTRST automaticamente
reset para 0 no ciclo de instruo seguinte. Esse bit do tipo Write-Only (somente escrita). Este
bit tambm serve como flag de RDY/BSY\ (pronto/ocupado) durante operao de escrita na
EEPROM interna. RDY/BSY\ = 1 significa que a EEPROM est pronta para ser programada.
Enquanto as operaes de programao esto sendo executadas, a flag RDY/BSY\ permanece igual
a zero. Ela torna-se automaticamente 1 quando a programao completada.
Bit de habilitao do watchdog. WDTEN = 1 habilita o temporizador watchdog e WDTEN = 0
desabilita.

O programa-exemplo a seguir usa a memria EEPROM interna para armazenar dados que chegam
ao microcontrolador atravs do nibble superior porta P3 (dados digitados atravs de um teclado de 16
teclas cdigos de 0 a FH). Os dados so lidos a cada pedido da interrupo externa 0, por transio.
Uma vez que os dados chegam atravs do nibble superior da porta P3, e o nibble inferior no faz parte dos
dados, feita uma operao de troca do nibble superior pelo inferior, atravs da instruo SWAP e, em
seguida, feita uma operao AND com 0FH. Assim, o resultado final o dado digitado atravs do
teclado. A memria EEPROM do chip AT89S8252 de 2 K e, portanto, seu endereo vai de 0000 H at
07FFH.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

Rtulo

80

Mnemnico

Comentrio sobre o Efeito da Operao

$MOD51
EEMWE BIT 9AH; Atribui ao bit WMCON.4 o nome de EEMWE
ORG 00H
LJMP INICIO
ORG 03H
LJMP ATENDE
ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#81H
MOV TCON,#01H
MOV DPTR,#0000H
SJMP $
ATENDE: MOV A,P3
SWAP A
ANL A,#0FH
SETB EEMWE
MOVX @DPTR,A
CLR EEMWE
INC DPTR
RETI

; Apontador de pilha SP = 2FH


; Habilita interrupo externa 0. IE = 1 0 0 0 0 0 0 1 b
; Interrupo externa 0 por transio
; Carrega DPTR com endereo inicial da memria EEPROM

; Carrega no acumulador o contedo da porta P1


; Troca o nibble superior pelo nibble inferior do acumulador
; Elimina o nibble superior usando uma operao AND
; Habilita a escrita na memria EEPROM interna
; Escreve na memria EEPROM interna o contedo do acumulador
; Desabilita escrita na memria
; Prepara DPTR para armazenar o prximo dado
; Retorna da interrupo

END

7.1 Expanso de Memria


A Figura 7.1 mostra o esquemtico para uma memria externa de 8 K. So necessrias 13 linhas de
endereo (AD0 ... A12) para acessar todas as 8.192 posies dessa memria. Assim, o endereo interno da
memria vai de 0000H at 1FFFH. No entanto, o intervalo de endereo para acesso memria no
precisa, necessariamente, comear em 0000H. Ele pode comear, por exemplo, da posio 2000H,
4000H, E000H, ou outras posies que se desejar. Essa escolha feita atravs de linhas de endereos da
porta P2. Na Figura 7.1 o endereo escolhido foi 6000H, uma vez que so usadas as linhas de endereo
A13 e A14 para habilitar o latch de endereos 74LS573.

Fig. 7.1: Memria externa com endereo inicial de 6000H


Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

81

No diagrama da Fig. 7.1 h sombras de memria, uma vez que o pino A15 ficou livre, podendo
assumir valores 0 ou 1, sem alterar a posio efetiva de memria. Por exemplo, desejando-se acessar a
posio 6500H da memria EEPROM mostrada, pode-se usar o endereo 6500H (0110 0101 | 0000 0000)
ou o endereo E500H (1110 0101 | 0000 0000), uma vez que o bit A15 no afetar o endereamento. Para
eliminar essa sombra de memria pode-se utilizar uma porta NAND de trs entradas, como mostrado na
Fig. 7.2. Nesse caso, a sada s estar habilitada quando A13 = 1, A14 = 1 e A15\ = 0.

Fig. 7.2: Eliminao de sombras de memria do diagrama da figura 7.1

As linhas de endereo so usadas para habilitar a sada do latch (OE\). No entanto, outros sinais de
controle esto envolvidos no processo. O sinal de ALE usado para habilitar o latch (74LS573) e os
sinais de READ (RD\) e WRITE (WR\) so usados na habilitao de leitura e escrita da memria
EEPROM. A Tabela 7.2 mostra as vrias possibilidades de alocao da memria EEPROM da Fig. 7.1 no
espao de 64 K, usando as trs linhas de endereo disponveis A13, A14 e A15 e a Tabela 7.3 mostra o
estado da memria a partir do sinal de controle RD\, conectado ao pino de habilitao de sada da
memria (OE\) e do sinal WR\, conectado ao pino de habilitao de escrita na memria (WE\).
A15
A15\
A15\
A15\
A15\
A15
A15
A15
A15

A14
A14\
A14\
A14
A14
A14\
A14\
A14
A14

RD\
0
0
1
1

A13
A13\
A13
A13\
A13
A13\
A13
A13\
A13

Tabela 7.2: Regies de memria


Endereo Inicial
Endereo Final
0000H
1FFFH
2000H
3FFFH
4000H
5FFFH
6000H
7FFFH
8000H
9FFFH
A000H
BFFFH
C000H
DFFFH
E000H
FFFFH

Regio
0
1
2
3
4
5
6
7

Tabela 7.3: Estado da memria


WR\
Estado da memria EEPROM
0
Estado inexistente
1
Escrita na memria
0
Leitura da memria
1
Operaes internas do microprocessador

7.2 Mapeamento de Memria


A Tabela 7.2 mostra 8 regies da memria que podem ser selecionadas atravs das linhas de
endereo A13, A14 e A15, cada uma com 8 K. Escolhendo-se a regio 0 para a memria EEPROM
AT28C64, de 8 K, as outras regies podem ser usadas para outros componentes externos, tais como
display LCD, display de 7-segmentos, conjunto de LEDs e conversor analgico/digital.
A Fig. 7.3 mostra um diagrama onde esto presentes a memria EEPROM de 8 K, alocada na
regio 0 (incio em 0000H); um conjunto de 8 LEDs, alocado na regio 1 (incio em 2000H) e um display
LCD, alocado na regio 2 (incio em 4000H). Vale destacar que o conjunto de LEDs precisa do latch
porque no constitui um circuito com pino de habilitao. Assim, sem o latch, todos os dados presentes
no barramento seriam mostrados nos LEDs, mesmo aqueles relativos a endereos e enviados para outros
componentes.
Quanto ao display LCD, esse componente tem um pino de habilitao (E) e, a princpio, no
precisaria de um latch. No entanto, o funcionamento do LCD depende da definio de endereos para
leitura e escrita de instrues e leitura e escrita de dados, como mostrado na Tabela 7.4.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

82

Fig. 7.3: Microcontrolador com memria externa, conjunto de LEDs e display LCD

RW
0
0
1
1

RS
0
1
0
1

Tabela 7.4: Endereos do display LCD


Operao
Endereo no Mapeamento da Fig. 7.3
Escrita de Instruo no LCD
4000H = 0100 0000 0000 0000
Escrita de Dados no LCD
4001H = 0100 0000 0000 0001
Leitura de Instruo do LCD
4002H = 0100 0000 0000 0010
Leitura de Dados do LCD
4003H = 0100 0000 0000 0011

No endereo do mapeamento mostrado na Tabela 7.4 destacam-se os dois primeiros bits, que
correspondem aos bits RW e RS, e os trs bits mais significativos (A15, A14 e A13), usados na habilitao
do display LCD.
A opo de usar portas NAND para habilitao dos perifricos da Fig. 7.3 no a mais adequada
quando deseja-se acrescentar mais de um perifrico. Uma opo melhor o uso de um circuito
decodificador, por exemplo, o 74LS138, que permite a habilitao de at 8 componentes com trs linhas
de endereo. O diagrama do 74LS138 mostrado na Fig. 7.4 e a Tabela-Verdade mostrada na Tabela
7.5. A sada ativa baixa.
A Fig. 7.5 mostra as conexes necessrias para o endereamento dos trs componentes mostrados
na Fig. 7.3. Os bits de endereo A15, A14 e A13 so usados para a seleo do componente e os bits RD\ e
WR\ so usados para a habilitao do decodificador.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

83

Fig. 7.4: Decodificador 74LS138


Tabela 7.5: Tabela-Verdade do decodificador 74LS138

E1
1

0
0
0
0
0
0
0
0

E2

0
0
0
0
0
0
0
0

Entradas
E3
A2

1
0
1
0
1
0
1
0
1
1
1
1
1
1
1
1

A1

0
0
1
1
0
0
1
1

A0

0
1
0
1
0
1
0
1

O7
1
1
1
1
1
1
1
1
1
1
0

O6
1
1
1
1
1
1
1
1
1
0
1

O5
1
1
1
1
1
1
1
1
0
1
1

Sadas
O4
O3
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
0
1
1
1
1
1
1

O2
1
1
1
1
1
0
1
1
1
1
1

O1
1
1
1
1
0
1
1
1
1
1
1

O0
1
1
1
0
1
1
1
1
1
1
1

Fig. 7.5: Decodificador para habilitao da memria EEPROM, do conjunto de LEDs e do LCD

No exemplo a seguir um texto enviado para a memria EEPROM externa. O texto lido de uma
tabela da memria de programa. Cada caractere lido e, a seguir, enviado para a memria externa. Nesse
exemplo o apontador DPTR usado para duas funes distintas: a primeira para buscar o caractere do
texto na tabela da memria de programa (DPTR fixo e igual ao endereo inicial da tabela) e a segunda
para enviar esse caractere para a memria externa (DPTR com valor inicial 0000H, mas incrementado a
cada novo caractere). So endereos distintos e, por isso, o DPTR relativo memria, precisa ser
guardado na pilha antes da leitura de um novo caractere da tabela.
Esse procedimento de guardar DPTR na pilha, no exemplo mostrado, no necessrio se o
microcontrolador utilizado tiver mais de um apontador de dados (DPTR), como o caso do AT89S8252.
Nesse caso pode-se usar apontadores diferentes para cada operao. Observar que o DPTR guardado na
pilha em duas etapas: guarda-se o byte superior (ou inferior) e depois guarda-se o outro byte do
apontador. Isso necessrio porque a instruo PUSH guarda apenas um byte por vez na pilha. A
recuperao dos valores da pilha feita na forma inversa ao armazenamento, ou seja, o ltimo valor
guardado recuperado primeiro.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011


Rtulo

84
Mnemnico
$MOD51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV DPTR,#0000H
MOV R7,#00

Comentrio sobre o Efeito da Operao

; Apontador de pilha SP = 2FH


; Endereo inicial da memria
; Valor inicial do contador de leitura do texto

V1: PUSH DPH


PUSH DPL
MOV DPTR,#TEXTO
MOV A,R7
MOVC A,@A+DPTR
CJNE A,#0FFH,V2
SJMP FIM

; Guarda na pilha o byte superior do DPTR relativo memria externa


; Guarda na pilha o byte inferior do DPTR relativo memria externa
; Carrega DPTR com endereo inicial da tabela texto
; Carrega acumulador com valor atual do contador
; Carrega acumulador com o contedo da posio A+DPTR da tabela
; Verificar se j chegou o final da tabela. Se no, envia caractere para memria
; Desvia para final do programa

V2: POP DPL


POP DPH
MOVX @DPTR,A
INC R7
INC DPTR
SJMP V1

; Recupera da pilha o byte inferior do DPTR relativo memria externa


; Recupera da pilha o byte superior do DPTR relativo memria externa
; Envia para a memria externa o caractere lido da tabela
; Incrementa contador de leitura da tabela
; Incrementa apontador DPTR da memria externa
; Volta para ler o caractere seguinte do texto

TEXTO: DB ESTUDAR MICROCONTROLADORES EH GRATIFICANTE


DB 0FFH
FIM: NOP
END

No exemplo a seguir faz-se a rotao dos LEDs conectados conforme a Fig. 7.3. Os LEDs esto no
endereo 2000H. Na verdade, os LEDs podem ser acessados em toda a faixa de endereos da regio 1
(2000H a 3FFFH). seguida, feita uma operao AND com 0FH. Assim, o resultado final o dado
digitado atravs do teclado. A memria EEPROM do chip AT89S8252 de 2 K e, portanto, seu endereo
vai de 0000 H at 07FFH.
Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV DPTR,#2000H
MOV A,#01H
V1: MOVX @DPTR,A
LCALL ATRASO
RL A
SJMP V1
ATRASO: MOV R5,#250
V2: MOV R6,#250
DJNZ R6,$
DJNZ R5,V2
RET

Comentrio sobre o Efeito da Operao

; Apontador de pilha SP = 2FH


; Endereo inicial da regio 1, que d acesso aos LEDs
; Valor inicial do acumulador
; Envia para os LEDs o contedo do acumulador
; Chama subrotina de atraso de tempo
; Rotaciona o contedo do acumulador para a esquerda
; Carrega acumulador com valor atual do contador
; Carrega registrador R5 com valor decimal 250
; Carrega registrador R6 com valor decimal 250
; Aguarda registrador R6 zerar
; Decrementa R5. Enquanto no for zero, volta para recarregar R6
; Retorna de subrotina de atraso de tempo

END

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

85

Dispositivos para Entrada, Sada e Acionamentos Eltricos

Neste captulo so apresentados dispositivos de entrada (teclado) e sada de dados (display de 7segmentos e display LCD) e ainda um sensor de presena e circuitos para acionamento de motores de
corrente contnua e motor de passo. Ao mesmo tempo, alguns programas-exemplos so apresentados para
ajudar no entendimento do assunto abordado.

8.1 Teclado
A Fig. 8.1(a) mostra um teclado de 4 linhas e 3 colunas e seu circuito decodificador. A Fig. 8.1(b)
mostra o esquema bsico de conexes para o teclado mostrado.

(a)

C1

C2

C3

L1
L2
7

9
L3

L4
(b)
Fig. 8.1: (a) Teclado e (b) esquema matricial de conexes do teclado

A leitura da tecla digitada pode ser feita diretamente, atravs dos sete canais resultantes da matriz
de 4 linhas e 3 colunas ou atravs de um decodificador de teclado que gera um cdigo de 4 bits a partir do
sinal dos sete canais.
No primeiro caso, com leitura direta, pode-se colocar uma das trs colunas em nvel lgico baixo
(C1, por exemplo) e monitorar o sinal das quatro linhas. As portas do microcontrolador esto
normalmente em nvel lgico alto e, assim, se o nvel lgico da linha L1 torna-se baixo, significa que a
tecla 1 foi pressionada. Com uma varredura peridica pode-se detectar cada uma das teclas pressionadas.
Um decodificador que pode ser utilizado para leitura das teclas o 74LS922. Nesse caso, o sinal
resultante das 4 linhas e 3 colunas originadas do teclado decodificado em um sinal de 4 bits. Alm do
cdigo da tecla pressionada o decodificador tambm gera um bit de flag para indicar a disponibilidade
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

86

do cdigo na sada. Quando uma tecla pressionada essa flag vai a zero, o que pode ser usado como
pedido de interrupo para a leitura do dado disponvel.
O decodificador 74LS922 apropriado para teclado de 16 teclas. No entanto, o teclado da Fig.
8.1 tem apenas 12 teclas, distribudas em 4 linhas e 3 colunas. Assim, o uso desse decodificador com o
teclado mostrado resulta numa sada hexadecimal diferente do nmero pressionado no teclado, o que
exige a utilizao de uma tabela-verdade como a mostrada na Tabela 8.1. Verifica-se, por exemplo, que
ao pressionar a tecla 1, o cdigo hexadecimal resultante na sada do decodificador 0 h (0000). No
entanto, ao se pressionar a tecla 4, por exemplo, o resultado 4 (0100). Assim, na elaborao de um
programa onde o teclado tem a configurao mostrada, h necessidade de observar os resultados da
Tabela 8.1.
Tecla digitada
1
2
3
4
5
6
7
8
9
0
*
#

Tabela 8.1: tabela-verdade do conjunto teclado + decodificador


Sada
Sada Flag Liberao
Hex
DA
D
C
B
A
0
0
0
0
0
0
0
0
0
1
1
0
0
0
1
0
2
0
0
1
0
0
4
0
0
1
0
1
5
0
0
1
1
0
6
0
1
0
0
0
8
0
1
0
0
1
9
0
1
0
1
0
A
0
1
1
0
1
D
0
1
1
0
0
C
0
1
1
1
0
E
0

A Fig. 8.2 mostra o circuito adotado para o drive do teclado. O decodificador 74LS922 utilizado
de 18 pinos.

Fig. 8.2: Circuito do decodificador do teclado

So apresentados a seguir trs programas-exemplo. No primeiro exemplo (Teclado 1) o teclado


lido por varredura. Ele conectado porta P2 e os LEDs porta P1. Assim, cada tecla lida enviada para
os LEDs.
Nos outros dois exemplos o teclado est conectado ao nibble superior da porta P3 e usa a
interrupo externa 1 (INT1). No programa Teclado 2 a tecla digitada enviada para os LEDs sem
qualquer converso, ou seja, dever aparecer o nmero 0 no display ao ser digitado 1; dever aparecer o
nmero 1 ao ser digitado 2 e o nmero 4, as ser digitado 4 (conforme mostrado na Tabela 8.1). No
exemplo Teclado 3 o cdigo da tecla digitada convertido atravs da Tabela 8.1, antes de ser enviado
para os LEDs.
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

87

Deve-se observar que o cdigo do teclado lido atravs do nibble superior da porta P3 (P3.4,
P3.5, P3.6, P3.7), o que significa que dever haver uma troca de nibbles (SWAP A) antes de mostrar o
dado atravs do nibble inferior da porta P1. Deve-se observar ainda que o dado mostrado apenas no
nibble inferior da porta P1. Assim, antes de enviar o dado para a porta, feita uma operao AND com
0FH para eliminar qualquer lixo presente no nibble superior.
Teclado 1: O teclado est conectado porta P2 e lido por varredura. A tecla digitada mostrada em P1.
Rtulo

Mnemnico
$MOD51
LINHA_L1 EQU
LINHA_L2 EQU
LINHA_L3 EQU
LINHA_L4 EQU
COLUNA_C1
COLUNA_C2
COLUNA_C3

Comentrio sobre o Efeito da Operao


P2.0
P2.1
P2.2
P2.3

EQU P2.4
EQU P2.5
EQU P2.6

ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
VARREDURA: SETB LINHA_L1
SETB LINHA_L2
SETB LINHA_L3
SETB LINHA_L4

; Apontador de pilha SP = 2FH


; Preparao para cada varredura

; VERIFICA AS TECLAS DA LINHA 1


CLR LINHA_L1
; Limpa linha L1 do Teclado
JB COLUNA_C1,TC2
; Verifica se a Tecla 1 foi pressionada.
MOV P1,#01H
; Tecla 1 foi pressionada
SJMP VARREDURA
TC2: JB COLUNA_C2,TC3
MOV P1,#02H
SJMP VARREDURA

; Verifica se a Tecla 2 foi pressionada


; Tecla 2 foi pressionada

TC3: JB COLUNA_C3,TC4
MOV P1,#03H
SJMP VARREDURA

; Verifica se Tecla 3 foi pressionada


; Tecla 3 foi pressionada

; VERIFICA AS TECLAS DA LINHA 2


TC4: CLR LINHA_L2
; Limpa linha L2 do Teclado
JB COLUNA_C1,TC5
; Verifica se a Tecla 4 foi pressionada.
MOV P1,#04H
; Tecla 4 foi pressionada
SJMP VARREDURA
TC5: JB COLUNA_C2,TC6
MOV P1,#05H
SJMP VARREDURA

; Verifica se a Tecla 5 foi pressionada


; Tecla 5 foi pressionada

TC6: JB COLUNA_C3,TC7
MOV P1,#06H
SJMP VARREDURA

; Verifica se Tecla 6 foi pressionada


; Tecla 6 foi pressionada

; VERIFICA AS TECLAS DA LINHA 3


TC7: CLR LINHA_L2
; Limpa linha L3 do Teclado
JB COLUNA_C1,TC8
; Verifica se a Tecla 7 foi pressionada.
MOV P1,#07H
; Tecla 7 foi pressionada
SJMP VARREDURA

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

88
TC8: JB COLUNA_C2,TC9
MOV P1,#08H
SJMP VARREDURA

; Verifica se a Tecla 8 foi pressionada


; Tecla 8 foi pressionada

TC9: JB COLUNA_C3,TCA
MOV P1,#09H
SJMP VARREDURA

; Verifica se Tecla 9 foi pressionada


; Tecla 9 foi pressionada

; VERIFICA AS TECLAS DA LINHA 4


TCA: CLR LINHA_L2
; Limpa linha L4 do Teclado
JB COLUNA_C1,TC0
; Verifica se a Tecla * foi pressionada.
MOV P1,#0AH
; Tecla * foi pressionada
SJMP VARREDURA
TC0: JB COLUNA_C2,TCB
MOV P1,#00H
SJMP VARREDURA

; Verifica se a Tecla 0 foi pressionada


; Tecla 0 foi pressionada

TCB: JB COLUNA_C3,NADA
MOV P1,#0BH
SJMP VARREDURA

; Verifica se Tecla # foi pressionada


; Tecla # foi pressionada

NADA: LJMP VARREDURA


END

Teclado 2: A tecla digitada mostrada em P1 sem converso, ou seja, o cdigo liberado pelo
decodificador para cada tecla digitada mostrado.
Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO
ORG 13H
LJMP ATENDE_UM

ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#84H
MOV TCON,#04H
SJMP $
ATENDE_UM: MOV A,P3
SWAP A
ANL A,#0FH
MOV P1,A
RETI

Comentrio sobre o Efeito da Operao

; Endereo da interrupo externa 1


; Desvia para a subrotina de atendimento

; Apontador de pilha SP = 2FH


; Habilita interrupo externa 1
; Interrupo INT1 por transio
; Aguarda interrupo em um lao infinito
; Acumulador recebe cdigo da tecla digitada
; H inverso entre os nibbles superior e inferior
; O lixo do nibble superior removido
; Mostra em P1 cdigo da tecla digitada
; Retorna de subrotina de interrupo

END

Teclado 3: A tecla digitada mostrada em P1 aps converso, ou seja, para cada cdigo liberado pelo
teclado, buscado numa tabela de converso o cdigo a ser mostrado em P1.
Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO
ORG 13H
LJMP ATENDE_UM

ORG 30H
INICIO: MOV SP,#2FH

Comentrio sobre o Efeito da Operao

Endereo da interrupo externa 1


Desvia para a subrotina de atendimento

Apontador de pilha SP = 2FH

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

89
MOV IE,#84H
MOV TCON,#04H
MOV DPTR,#TABELA
SJMP $

ATENDE_UM: MOV A,P3


SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
RETI

Habilita interrupo externa 1


Interrupo INT1 por transio
Carrega DPTR com endereo de incio da TABELA
Aguarda interrupo em um lao infinito
Acumulador recebe cdigo da tecla digitada
H inverso entre os nibbles superior e inferior
O lixo do nibble superior removido
Carrega A com cdigo convertido com o uso da TABELA
Mostra em P1 cdigo da tecla digitada, convertido pela TABELA
Retorna de subrotina de interrupo
; TECLA DIGITADA: 1 SADA: 0 H (0000)
; TECLA DIGITADA: 2 SADA: 1 H (0001)
; TECLA DIGITADA: 3 SADA: 2 H (0010)
; NENHUMA TECLA SADA: 3 H (0011)-> NO EXISTENTE
; TECLA DIGITADA: 4 SADA: 4 H (1000)
; TECLA DIGITADA: 5 SADA: 5 H (0101)
; TECLA DIGITADA: 6 SADA: 6 H (0110)
; NENHUMA TECLA: SADA: 7 H (0111)-> NO EXISTENTE
; TECLA DIGITADA: 7 SADA: 8 H (1000)
; TECLA DIGITADA: 8 SADA: 9 H (1001)
; TECLA DIGITADA: 9 SADA: A H (1010)
; NENHUMA TECLA: SADA: B H (1011)-> NO EXISTENTE
; TECLA DIGITADA: * SADA: C H (1100)
; TECLA DIGITADA: 0 SADA: D H (1101)
; TECLA DIGITADA: # SADA: E H (1110)

TABELA: DB 01H
DB 02H
DB 03H
DB 0FFH
DB 04H
DB 05H
DB 06H
DB 0FFH
DB 07H
DB 08H
DB 09H
DB 0FFH
DB 0CH
DB 00H
DB 0EH
END

8.2 Display de 7-Segmentos


O display de 7-segmentos apresentado nesta seo do tipo catodo comum, cujos terminais so
mostrados na Fig. 8.3.

Fig. 8.3: Display de 7-segmentos do tipo catodo comum

O display mostrado pode ser acionado diretamente pelo microcontrolador conectando os


terminais a, b, c, d, e, f, g e DP a uma porta de sada ou atravs de um driver decodificador.
Para o acionamento direto necessrio criar uma tabela de converso que associe o nmero que
se deseja com os trechos a serem ativados no display. A Tabela 8.2 mostra um exemplo de tabela que
pode ser criada. Assim, desejando-se, por exemplo, mostrar o nmero 5 no display, o cdigo 6Dh deve
ser enviado para a porta escolhida.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

90

Tabela 8.2: cdigo hexadecimal para cada dgito a ser mostrado no display
Nmero
Px.7 Px.6 Px.5 Px.4 Px.3 Px.2 Px.1 Px.0 Hexadecimal
desejado no
resultante
DP
g
f
e
d
c
b
a
display
1
2
3
4
5
6
7
8
9
0

0
0
0
0
0
0
0
0
0
0

0
1
1
1
1
1
0
1
1
0

0
0
0
1
1
1
0
1
1
1

0
1
0
0
0
1
0
1
0
1

0
1
1
0
1
1
0
1
0
1

1
0
1
1
1
1
1
1
1
1

1
1
1
1
0
0
1
1
1
1

0
1
1
0
1
1
1
1
1
1

06
5B
4F
66
6D
7D
07
7F
67
3F

A outra opo de acionamento utiliza o driver decodificador CD4511, cuja entrada BCD (4 bits)
e cuja sada alimenta cada um dos terminais mostrados (a, b, c, d, e, f, g). Quando se deseja tambm
mostrar o ponto decimal, um bit extra deve alimentar o terminal DP (ponto decimal).
A Fig. 8.4 ilustra o uso de 4 displays, conectados porta P1 e usando apenas um decodificador. A
sada do decodificador alimenta simultaneamente os 4 displays, mas apenas um selecionado de cada
vez, com o uso de transistores conectados como mostrado na Fig. 8.3. Assim, alm dos 4 bits de dados
enviados para os displays, necessrio enviar mais 4 bits de comando para a seleo de cada display. A
Fig. 8.4 mostra os pinos escolhidos para o envio de dados e de comando.
g

comum

comum

Display
4
P1.7

DP

DP

comum

DP

DP

DP

comum

DP

d
d

DP

comum

comum

comum

comum

DP

Comandos
Dados
Display Display Display
3
2
1
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
Fig. 8.4: Conjunto de displays de 7-segmentos e suas conexes

So dados a seguir dois programas para ilustrar o uso dos displays de 7-segmentos, conectados
Porta P1. No primeiro exemplo tem-se apenas um display conectado porta P1, como mostrado atravs
da Tabela 8.2. Uma contagem de 0 a 9 mostrada. No programa necessria a decodificao de cada
dgito a ser mostrado. No segundo exemplo utilizado o decodificador CD4511 para o acionamento de 4
displays de 7-segmentos simultaneamente.
Display 1: Programa que mostra uma contagem de 0 a 9 em um nico display de 7-segmentos conectado
diretamente porta P1, seguindo as conexes da Tabela 8.2.
Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV DPTR,#DIGITO
V2: MOV R7,#00
V3: MOV A,R7
CJNE A,#0AH,V1
SJMP V2

Comentrio sobre o Efeito da Operao

; Apontador de pilha SP = 2FH


; Carrega DPTR com endereo de incio da tabela DIGITO
; Contador para leitura do DIGITO da tabela
; Acumulador recebe valor atualizado do contador
; Faz a leitura de 10 valores da tabela DIGITO e retorna pro incio

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

91

V1: MOVC A,@A+DPTR


MOV P1,A
INC R7
LCALL ATRASO
SJMP V3
ATRASO: MOV R4,#20
V5: MOV R5,#250
V4: MOV R6,#250
DJNZ R6,$
DJNZ R5,V4
DJNZ R4,V5
RET
DIGITO: DB 3FH
DB 06H
DB 5BH
DB 4FH
DB 66H
DB 6DH
DB 7DH
DB 07H
DB 7FH
DB 67H
END

; Carrega A com cdigo que equivale ao nmero desejado


; Transfere para P1 o cdigo de cada nmero (de 0 a 9)
; Incrementa contador usado na leitura da tabela DIGITO
; Chama subrotina de atraso de tempo
; Retorna leitura do prximo dgito
; Carrega registrador R4 com valor decimal 20
; Carrega registrador R5 com valor decimal 250
; Carrega registrador R6 com valor decimal 250
; Aguarda registrador R6 zerar
; Decrementa R5. Enquanto no for zero, volta para recarregar R6
; Decrementa R4. Enquanto no for zero, volta para recarregar R5
; Retorna de subrotina de atraso de tempo
; Cdigo para mostrar o nmero 0 no display
; Cdigo para mostrar o nmero 1 no display
; Cdigo para mostrar o nmero 2 no display
; Cdigo para mostrar o nmero 3 no display
; Cdigo para mostrar o nmero 4 no display
; Cdigo para mostrar o nmero 5 no display
; Cdigo para mostrar o nmero 6 no display
; Cdigo para mostrar o nmero 7 no display
; Cdigo para mostrar o nmero 8 no display
; Cdigo para mostrar o nmero 9 no display

Display 2: mostrada em um conjunto de 4 displays de 7-segmentos uma contagem decimal crescente de


0000 a 9999. O byte mais significativo da contagem guardado em R1 e o byte menos significativo
guardado em R0. Cada dado sempre enviado para o display atravs do nibble inferior da porta P1. O
nibble superior da porta P1 usado para a escolha do display para mostrar milhar, centena, dezena
ou unidade.
Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV R0,#00
MOV R1,#00
MOV R7,#10
V1: LCALL CONTAGEM
LCALL DISPLAY
SJMP V1
CONTAGEM: MOV A,R0
ADD A,#01H
DA A
MOV R0,A
JNC V2
MOV A,R1
ADD A,#01H
DA A
MOV R1,A
V2: NOP
RET
DISPLAY: PUSH ACC
MOV A,#0F0H
ANL A,R1
SWAP A
ORL A,#80H
MOV P1,A

Comentrio sobre o Efeito da Operao

Apontador de pilha SP = 2FH


Byte inferior da contage
Byte superior da contagem
Contador
Chama subrotina que faz a contagem decimal
Chama subrotina que mostra a contagem nos displays

Carrega acumulador com valor atual do byte inferior


Incrementa acumulador em uma unidade
Faz o ajuste decimal do byte inferior
Atualiza o valor de R0
Desvia para V2 se no houver Carry, ou seja, se R0 =< 99
Carrega acumulador com valor atual do byte superior
Incrementa acumulador em uma unidade
Faz o ajuste decimal do byte superior
Atualiza o valor de R1

Este bloco separa o nibble superior de R1


Instruo que separa o nibble superior de R1
Inverte nibble superior com inferior
Junta o quarto dgito com o comando do quarto display
Envia quarto dgito + comando para a porta P1

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

92
LCALL ATRASO

Chama subrotina de atraso de tempo

MOV A,#0FH
ANL A,R1
ORL A,#40H
MOV P1,A
LCALL ATRASO

Este bloco separa o nibble inferior de R1


Instruo que separa o nibble inferior de R1
Junta o terceiro dgito com o comando do terceiro display
Envia terceiro dgito + comando para a porta P1

MOV A,#0F0H
ANL A,R0
SWAP A
ORL A,#20H
MOV P1,A
LCALL ATRASO

Este bloco separa o nibble superior de R0


Instruo que separa o nibble superior de R0
Inverte nibble superior com inferior
Junta o segundo dgito com o comando do segundo display
Envia segundo dgito + comando para a porta P1
Chama subrotina de atraso de tempo

MOV A,#0FH
ANL A,R0
ORL A,#10H
MOV P1,A
LCALL ATRASO
POP ACC

Este bloco separa o nibble inferior de R0


Instruo que separa o nibble inferior de R0
Junta o primeiro dgito com o comando do primeiro display
Envia primeiro dgito + comando para a porta P1

DJNZ R7,DISPLAY
MOV R7,#10
RET

Contador necessrio para uma contagem mais lenta


Recarrega valor do contador

ATRASO: MOV R4,#10


V3: MOV R5,#200
DJNZ R5,$
DJNZ R4,V3
RET
END

Carrega registrador R4 com valor decimal 20


Carrega registrador R5 com valor decimal 250
Aguarda registrador R6 zerar
Decrementa R5. Enquanto no for zero, volta para recarregar R6
Retorna de subrotina de atraso de tempo

8.3 Display LCD


Esta seo usa um display LCD de 2 linhas x 16 colunas, cujo esquemtico mostrado na Fig.
8.5. Essa informao enviada na forma de comando para o LCD, numa rotina de inicializao necessria
a cada vez que o LCD vai ser usado. Outras informaes necessrias so: se o cursor vai ficar piscando,
se a mensagem vai rolar para a esquerda ou para a direita, ou no vai rolar, se sero usados 4 ou 8 bits
para os dados etc. A Tabela 8.3 mostra os sinais de controle para escrita e leitura do LCD e a Tabela 8.4
mostra as instrues mais comuns utilizadas no uso do LCD.

Fig. 8.5: Display LCD de 2 linhas por 16 colunas

E
0
1
1
1
1

Tabela 8.3: Habilitao do display LCD


RW
RS
Operao

Display desabilitado
0
0
Escrita de Instruo no LCD
0
1
Escrita de Dados no LCD
1
0
Leitura de Instruo do LCD
1
1
Leitura de Dados do LCD

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

93

Tabela 8.4: instrues mais comuns utilizadas para o display LCD


DESCRIO
MODO
RS
R/W
Display

Liga (sem cursor)


Desliga

Limpa Display com Home cursor


Controle do Cursor

Sentido de deslocamento do cursor ao


entrar com caractere
Deslocamento da mensagem ao entrar
com caractere
Deslocamento da mensagem sem
entrada de caractere
Endereo da primeira posio

Liga
Desliga
Desloca para Esquerda
Desloca para Direita
Cursor Home
Cursor Piscante
Cursor com Alternncia
Para a esquerda
Para a direita
Para a esquerda
Para a direita
Para a esquerda
Para a direita
Primeira linha
Segunda linha

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

Cdigo
(Hexa)
0C
0A/08
01
0E
0C
10
14
02
0D
0F
04
06
07
05
18
1C
80
C0

A Tabela 8.5 mostra o endereo em decimal de cada posio do LCD de 16 colunas x 2 linhas.
Colunas
Linha 1
Linha 2

Tabela 8.5: Endereos em decimal do display LCD


1
2
3
4
5
6
7
8
9
10 11 12 13 14 15 16
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207

O programa-exemplo a seguir mostra uma mensagem na primeira linha e uma contagem decimal
crescente de 0000 a 9999 na segunda linha do LCD. So utilizados 8 bits para os dados e 3 bits de
comando. No exemplo a porta P0 usada para os dados e os pinos P2.0, P2.1 e P2.2 so usados para os
comandos.
LCD 1: mostrada no display LCD uma contagem decimal crescente de 0000 a 9999. O byte mais
significativo da contagem guardado em R1 e o byte menos significativo guardado em R0. Cada um
dos quatro dgitos da contagem convertido para caractere ASCII e depois enviado para o LCD atravs
da porta P0.
Rtulo

Mnemnico
$MOD51
RS EQU P2.0
RW EQU P2.1
EN EQU P2.2

Comentrio sobre o Efeito da Operao


; RS = 0 INSTRUO. RS = 1 DADO
; RW =0 ESCRITA. RW = 1 LEITURA
; PINO DE HABILITAO DO LCD

CONTADOR EQU 00H


DADOS EQU P0
; Porta P0 o canal de dados
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV R0,#00
MOV R1,#00
MOV R7,#0FFH
LCALL INICIA
LCALL LIMPA
LCALL LINHA1
LCALL LINHA2

; Apontador de pilha SP = 2FH


; Byte inferior da contagem
; Byte superior da contagem
; Contador
; Chama subrotina de inicializao do LCD
; Chama subrotina que limpa LCD
; Chama subrotina que mostra mensagem na linha 1
; Chama subrotina que mostra mensagem na linha 2

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

94

REPETE: LCALL CONTAGEM


LCALL CONVERTE4
LCALL MOSTRA4
LCALL CONVERTE3
LCALL TEXTO_WR
LCALL CONVERTE2
LCALL TEXTO_WR
LCALL CONVERTE1
LCALL TEXTO_WR
LCALL ATRASO
LCALL ATRASO
LCALL ATRASO
SJMP REPETE

; Chama subrotina de contagem decimal contagem de 0000 a 9999


; Converte Dgito 4 para ASCII
; Mostra Dgito 4 no display LCD
; Converte Dgito 3 para ASCII
; Mostra Dgito 3 no display LCD
; Converte Dgito 2 para ASCII
; Mostra Dgito 2 no display LCD
; Converte Dgito 1 para ASCII
; Mostra Dgito 1 no display LCD

; Volta para o incio

; SUBROTINA DE INICIALIZAO DO DISPLAY LCD


INICIA: MOV A,#38H
; Instruo que indica display de 16 colunas e 2 linhas
LCALL INSTR_WR
; Chama subrotina para escrever instruo no LCD
MOV A,#38H
LCALL INSTR_WR

; Instruo que indica display de 16 colunas e 2 linhas


; Chama subrotina para escrever instruo no LCD

MOV A,#0EH
LCALL INSTR_WR

; Instruo para ligar o cursor


; Chama subrotina para escrever instruo no LCD

MOV A,#06H
LCALL INSTR_WR

; Instruo para deslocar cursor para a direita


; Chama subrotina para escrever instruo no LCD

RET

; Retorna da subrotina de inicializao do LCD

; SUBROTINA QUE LIMPA O DISPLAY


LIMPA: MOV A,#01H
; Instruo para limpar LCD
LCALL INSTR_WR
; Chama subrotina para escrever instruo no LCD
RET
LINHA1: INC R7
MOV A,R7
MOV DPTR,#MSG1
MOVC A,@A+DPTR
CJNE A,#0FFH,V1
RET

; Incrementa contador
; Carrega acumulador com o contedo do contador
; DPTR recebe o endereo da mensagem MSG1
; Acumulador recebe o cdigo do caractere do endereo A+DPTR
; Se A = 0FFH fim da mensagem. Caso contrrio, pula para V1

V1: LCALL TEXTO_WR


LCALL ATRASO_LCD
SJMP LINHA1
LINHA2: MOV A,#192
LCALL INSTR_WR
MOV R7,#0FFH

; Instruo para definir endereo do LCD: 192 = C0H


; Chama subrotina para escrever instruo no LCD
; Contador recebe valor FFH

V3: INC R7
MOV A,R7
MOV DPTR,#MSG2
MOVC A,@A+DPTR
CJNE A,#0FFH,V2
RET

; Incrementa contador
; Carrega acumulador com o contedo do contador
; DPTR recebe o endereo da mensagem MSG2
; Acumulador recebe o cdigo do caractere do endereo A+DPTR
; Se A = 0FFH fim da mensagem. Caso contrrio, pula para V2

V2: LCALL TEXTO_WR


SJMP V3

; Chama subrotina para escrever dados no LCD

INSTR_WR: SETB EN
CLR RW
CLR RS
MOV DADOS,A
CLR EN
LCALL ATRASO_LCD

; Habilita LCD
; Operao de escrita no LCD
; Operao com instruo
; Transfere a instruo para o LCD
; Desabilita LCD
; Chama subrotina de atraso do LCD

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

95
RET

TEXTO_WR: SETB EN
CLR RW
SETB RS
MOV DADOS,A
CLR EN
LCALL ATRASO_LCD
RET

; Habilita LCD
; Operao de escrita no LCD
; Operao com dados
; Transfere os dados para o LCD
; Desabilita LCD
; Chama subrotina de atraso do LCD

CONTAGEM: MOV A,R0


ADD A,#01H
DA A
MOV R0,A
JNC V4

Carrega acumulador com valor atual do byte inferior


Incrementa acumulador em uma unidade
Faz o ajuste decimal do byte inferior
Atualiza o valor de R0
Desvia para V2 se no houver Carry, ou seja, se R0 =< 99

MOV A,R1
ADD A,#01H
DA A
MOV R1,A
V4: NOP
RET

Carrega acumulador com valor atual do byte superior


Incrementa acumulador em uma unidade
Faz o ajuste decimal do byte superior
Atualiza o valor de R1

; SUBROTINAS PARA CONVERTER VALORES EM ASCII


CONVERTE4: MOV A,#0F0H
ANL A,R1
SWAP A
ORL A,#30H
RET

; Prepara a separao do nibble superior de R1


; Separa nibble superior de R1
; Inverte nibble superior com inferior
; Converte nibble superior de R1 em ASCII

CONVERTE3: MOV A,#0FH


ANL A,R1
ORL A,#30H
RET

; Prepara a separao do nibble inferior de R1


; Separa nibble inferior de R1
; Converte nibble inferior de R1 em ASCII

CONVERTE2: MOV A,#0F0H


ANL A,R0
SWAP A
ORL A,#30H
RET

; Prepara a separao do nibble superior de R0


; Separa nibble superior de R0
; Inverte nibble superior com inferior
; Converte nibble superior de R1 em ASCII

CONVERTE1: MOV A,#0FH


ANL A,R0
ORL A,#30H
RET

; Prepara a separao do nibble inferior de R0


; Separa nibble inferior de R0
; Converte nibble inferior de R0 em ASCII

; SUBROTINA PARA MOSTRAR O CONTEDO DO ACUMULADOR NO LCD


MOSTRA4: PUSH ACC
MOV A,#202
LCALL INSTR_WR
POP ACC
LCALL TEXTO_WR
RET
ATRASO_LCD: MOV R4,#10
V6: MOV R5,#80
DJNZ R5,$
DJNZ R4,V6
RET
ATRASO: MOV R4,#200
V5: MOV R5,#250
DJNZ R5,$
DJNZ R4,V5

; Guarda dgito 4 na pilha, antes de definir endereo no LCD


; Endereo do dgito 4
; Chama subrotina para escrever instruo no LCD
; Recupere dgito 4 da pilha
; Chama subrotina para escrever dados no LCD dgito 4

; Carrega registrador R4 com valor decimal 10


; Carrega registrador R5 com valor decimal 80
; Aguarda registrador R5 zerar
; Decrementa R4. Enquanto no for zero, volta para recarregar R5
; Retorna de subrotina de atraso de tempo
; Carrega registrador R4 com valor decimal 200
; Carrega registrador R5 com valor decimal 250
; Aguarda registrador R5 zerar
; Decrementa R4. Enquanto no for zero, volta para recarregar R5

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

96
RET

; Retorna de subrotina de atraso de tempo

MSG1: DB MICROCONTROLADOR, 0FFH


MSG2: DB CONTAGEM:
FIM: NOP
END

,0FFH

LCD 2: A mesma contagem decimal crescente de 0000 a 9999 do exemplo anterior mostrada. No
entanto, utiliza-se o mapeamento de memria do captulo 7. Os endereos para leitura e escrita de
instruo e dados so dados na Tabela 7.4.
Rtulo

Mnemnico
$MOD51
ESCREVE_INST
ESCREVE_DADO
LE_INSTRUCAO
LE_DADOS

Comentrio sobre o Efeito da Operao

EQU
EQU
EQU
EQU

4000H;
4001H;
4002H;
4003H;

Endereo para escrever instruo: RW = 0; RS = 0


Endereo para escrever dados:
RW = 0; RS = 1
Endereo para leitura de instruo: RW = 1; RS = 0
Endereo para leitura de dados:
RW = 1; RS = 1

CONTADOR EQU 00H


ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV R0,#00
MOV R1,#00
MOV R7,#0FFH
LCALL INICIA
LCALL LIMPA
LCALL LINHA1
LCALL LINHA2
REPETE: LCALL CONTAGEM
LCALL CONVERTE4
LCALL MOSTRA4
LCALL CONVERTE3
LCALL TEXTO_WR
LCALL CONVERTE2
LCALL TEXTO_WR
LCALL CONVERTE1
LCALL TEXTO_WR
LCALL ATRASO
LCALL ATRASO
LCALL ATRASO
SJMP REPETE

; Apontador de pilha SP = 2FH


; Byte inferior da contagem
; Byte superior da contagem
; Contador
; Chama subrotina de inicializao do LCD
; Chama subrotina que limpa LCD
; Chama subrotina que mostra mensagem na linha 1
; Chama subrotina que mostra mensagem na linha 2
; Chama subrotina de contagem decimal contagem de 0000 a 9999
; Converte Dgito 4 para ASCII
; Mostra Dgito 4 no display LCD
; Converte Dgito 3 para ASCII
; Mostra Dgito 3 no display LCD
; Converte Dgito 2 para ASCII
; Mostra Dgito 2 no display LCD
; Converte Dgito 1 para ASCII
; Mostra Dgito 1 no display LCD

; Volta para o incio

; SUBROTINA DE INICIALIZAO DO DISPLAY LCD


INICIA: MOV A,#38H
; Instruo que indica display de 16 colunas e 2 linhas
LCALL INSTR_WR
; Chama subrotina para escrever instruo no LCD
MOV A,#38H
LCALL INSTR_WR

; Instruo que indica display de 16 colunas e 2 linhas


; Chama subrotina para escrever instruo no LCD

MOV A,#0EH
LCALL INSTR_WR

; Instruo para ligar o cursor


; Chama subrotina para escrever instruo no LCD

MOV A,#06H
LCALL INSTR_WR

; Instruo para deslocar cursor para a direita


; Chama subrotina para escrever instruo no LCD

RET

; Retorna da subrotina de inicializao do LCD

; SUBROTINA QUE LIMPA O DISPLAY

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

97

LIMPA: MOV A,#01H


LCALL INSTR_WR
RET
LINHA1: INC R7
MOV A,R7
MOV DPTR,#MSG1
MOVC A,@A+DPTR
CJNE A,#0FFH,V1
RET

; Instruo para limpar LCD


; Chama subrotina para escrever instruo no LCD

; Incrementa contador
; Carrega acumulador com o contedo do contador
; DPTR recebe o endereo da mensagem MSG1
; Acumulador recebe o cdigo do caractere do endereo A+DPTR
; Se A = 0FFH fim da mensagem. Caso contrrio, pula para V1

V1: LCALL TEXTO_WR


LCALL ATRASO_LCD
SJMP LINHA1
LINHA2: MOV A,#192
LCALL INSTR_WR
MOV R7,#0FFH

; Instruo para definir endereo do LCD: 192 = C0H


; Chama subrotina para escrever instruo no LCD
; Contador recebe valor FFH

V3: INC R7
MOV A,R7
MOV DPTR,#MSG2
MOVC A,@A+DPTR
CJNE A,#0FFH,V2
RET

; Incrementa contador
; Carrega acumulador com o contedo do contador
; DPTR recebe o endereo da mensagem MSG2
; Acumulador recebe o cdigo do caractere do endereo A+DPTR
; Se A = 0FFH fim da mensagem. Caso contrrio, pula para V2

V2: LCALL TEXTO_WR


SJMP V3

; Chama subrotina para escrever dados no LCD

INSTR_WR: MOV DPTR,#ESCREVE_INST


; DPTR assume o endereo de escrita de instruo: 4000H
MOVX @DPTR,A
; Transfere a instruo para o LCD
LCALL ATRASO_LCD ; Chama subrotina de atraso do LCD
RET
TEXTO_WR: MOV DPTR,#ESCREVE_DADO
; DPTR assume o endereo de escrita de dados: 4001H
MOVX @DPTR,A
; Transfere os dados para o LCD
LCALL ATRASO_LCD ; Chama subrotina de atraso do LCD
RET
CONTAGEM: MOV A,R0
ADD A,#01H
DA A
MOV R0,A
JNC V4
MOV A,R1
ADD A,#01H
DA A
MOV R1,A
V4: NOP
RET

Carrega acumulador com valor atual do byte inferior


Incrementa acumulador em uma unidade
Faz o ajuste decimal do byte inferior
Atualiza o valor de R0
Desvia para V2 se no houver Carry, ou seja, se R0 =< 99
Carrega acumulador com valor atual do byte superior
Incrementa acumulador em uma unidade
Faz o ajuste decimal do byte superior
Atualiza o valor de R1

; SUBROTINAS PARA CONVERTER VALORES EM ASCII


CONVERTE4: MOV A,#0F0H
ANL A,R1
SWAP A
ORL A,#30H
RET

; Prepara a separao do nibble superior de R1


; Separa nibble superior de R1
; Inverte nibble superior com inferior
; Converte nibble superior de R1 em ASCII

CONVERTE3: MOV A,#0FH


ANL A,R1
ORL A,#30H
RET

; Prepara a separao do nibble inferior de R1


; Separa nibble inferior de R1
; Converte nibble inferior de R1 em ASCII

CONVERTE2: MOV A,#0F0H

; Prepara a separao do nibble superior de R0

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

98
ANL A,R0
SWAP A
ORL A,#30H
RET

CONVERTE1: MOV A,#0FH


ANL A,R0
ORL A,#30H
RET

; Separa nibble superior de R0


; Inverte nibble superior com inferior
; Converte nibble superior de R1 em ASCII

; Prepara a separao do nibble inferior de R0


; Separa nibble inferior de R0
; Converte nibble inferior de R0 em ASCII

; SUBROTINA PARA MOSTRAR O CONTEDO DO ACUMULADOR NO LCD


MOSTRA4: PUSH ACC
MOV A,#202
LCALL INSTR_WR
POP ACC
LCALL TEXTO_WR
RET
ATRASO_LCD: MOV R4,#10
V6: MOV R5,#80
DJNZ R5,$
DJNZ R4,V6
RET
ATRASO: MOV R4,#200
V5: MOV R5,#250
DJNZ R5,$
DJNZ R4,V5
RET

; Guarda dgito 4 na pilha, antes de definir endereo no LCD


; Endereo do dgito 4
; Chama subrotina para escrever instruo no LCD
; Recupere dgito 4 da pilha
; Chama subrotina para escrever dados no LCD dgito 4

; Carrega registrador R4 com valor decimal 10


; Carrega registrador R5 com valor decimal 80
; Aguarda registrador R5 zerar
; Decrementa R4. Enquanto no for zero, volta para recarregar R5
; Retorna de subrotina de atraso de tempo
; Carrega registrador R4 com valor decimal 200
; Carrega registrador R5 com valor decimal 250
; Aguarda registrador R5 zerar
; Decrementa R4. Enquanto no for zero, volta para recarregar R5
; Retorna de subrotina de atraso de tempo

MSG1: DB MICROCONTROLADOR, 0FFH


MSG2: DB CONTAGEM:
FIM: NOP
END

,0FFH

8.4 Sensores de Presena


So apresentados nesta seo dois tipos de fotosensores: um com nvel lgico normalmente alto e
outro com nvel lgico normalmente baixo. Os dois modelos so mostrados na Fig. 8.6. O primeiro tipo
mostrado com um circuito auxiliar modulador, Fig. 8.7, que diminui a influncia da luz ambiente sobre o
fotosensor. Esse circuito emite uma luz de cerca de 1 kHz, que ao ser refletida satura o fototransistor.
utilizado o decodificador de frequncia NE567. O segundo modelo no usa circuito modulador.

(a)
(b)
Fig. 8.6: Sensor de presena com circuito auxiliar modulador e sem circuito modulador

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

99

Fig. 8.7: Circuito auxiliar modulador

A diferena bsica entre os sensores usados, alm do circuito de modulao, est no


encapsulamento. Em um deles (Fig. 8.6a) o encapsulamento faz com que o fototransistor fique
normalmente cortado (sem presena de luz); ele entra em saturao quando a luz do LED refletida em
um obstculo. Assim, o sinal de sada Vo (Fig. 8.9) passa de nvel lgico alto para baixo, na presena de
um obstculo.
No outro tipo de encapsulamento (Fig. 8.6b) a luz do LED incide diretamente sobre o
fototransistor, fazendo com que ele fique normalmente saturado, ou seja, o sinal de sada Vo (Fig. 8.9)
fica inicialmente em nvel lgico baixo; na presena de um obstculo entre os dois componentes o
fototransistor levado ao corte e o sinal de sada vai para o nvel lgico alto.

8.5 Medio de Velocidade


O processo de medio de velocidade mostrado nesta seo digital. Um sensor do tipo
apresentado na Fig. 8.6(b) associado a uma roda com 60 furos (Fig. 8.8) e usado para medir a
velocidade.

Fig. 8.8: conjunto roda de 60 furos e fotosensor

Fig. 8.9: Sinal de sada do sensor de velocidade


Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

100

A Fig. 8.9 mostra o esquema adotado. O sinal resultante do fotosensor, com a rotao da roda de
60 furos, uma onda quadrada (Fig. 8.9). Esse sinal pode ser conectado ao pino de uma das interrupes
(0 ou 1), definida para ativar por transio (na passagem de nvel lgico 1 para 0). Assim, a cada
interrupo o registrador com o nmero atualizado de pulsos incrementado em 1.
A medio de velocidade feita estabelecendo-se um tempo de amostragem, ou seja, um tempo
fixo em que o registro de pulsos lido. Mostra-se a seguir que o fato de ter 60 furos na roda faz com que
o nmero de pulsos registrados por segundo (frequncia) seja correspondente velocidade em rotaes
por minuto (rpm).
1 rotao/segundo 60 furos/segundo
60 rpm

60 furos/s X rpm

X furos/s

1 rotao/segundo 60 rotaes/minuto (rpm)

(rpm) f (Hz)
Um tempo de amostragem menor que 1 segundo pode ser adotado, e aconselhvel em muitas
aplicaes. Sendo assim, deve-se fazer a devida transformao de nmero de furos lidos no tempo de
amostragem para rotaes por minuto.

8.6 Motor de Corrente Contnua


O motor de corrente contnua consiste de um enrolamento de campo estacionrio e um
enrolamento de armadura rotativo. O enrolamento de campo pode ser acionado por corrente contnua, ou
ainda consistir de um estator de m permanente, no sendo necessria a alimentao. A armadura
acionada com corrente contnua atravs de escovas e um anel comutador. A Fig. 8.10 mostra o circuito
bsico de um motor CC, onde os enrolamentos de campo e de armadura so alimentados de forma
independente. As expresses bsicas tambm so dadas.

Ra

Rf
I
a

Va

If

Va

Ra I a

Va

Ra I a

Vf
a

Fig. 8.10: Motor de Corrente Contnua

Uma forma de variar a velocidade do motor CC variando a tenso de armadura. Uma forma de
variar a tenso de armadura usar modulao PWM, que consiste na definio de um perodo de
acionamento fixo e, dentro desse perodo, estabelecer um perodo ligado e outro desligado. A Fig. 8.11
ilustra esse processo. O motor usado de 12 V e, portanto, a tenso de alimentao deve variar de zero a
12 V para obter-se variao de velocidade de zero at o valor mximo. Isso feito chaveando-se um
transistor a uma frequncia alta, por exemplo, 5 kHz, que corresponde a um perodo de 0,2 ms ou 200 s.

Vm ax

Vm ax
Va

TON
Vm ax
T

Va

TON

TOFF

Fig. 8.11: Gerao do sinal PWM para controle do motor de contrente contnua
Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

101

Pode-se preferir definir o perodo como 255 s, por exemplo, o que corresponde a uma
frequncia de chaveamento de 3,92 kHz. Esse valor, 255, adequado porque corresponde a uma
contagem completa do microcontrolador com o temporizador operando no modo 2 (recarga automtica).
Se o cristal oscilador for de 12 MHz, tem-se um perodo de 255 s. A variao de velocidade pode ento
ser obtida variando-se o perodo ligado (TON) de 0 a 255 s, ao mesmo tempo em que o perodo desligado
(TOFF) deve variar de 255 s a 0, para manter constante o perodo total (T).
O microcontrolador 8051 possui dois temporizadores/contadores, que podem operar em 4 modos
diferentes: modo de 13 bits (modo 0), modo de 16 bits (modo 1), modo de 8 bits com recarga automtica
(modo 2) e 2 modos independentes de 8 bits (modo 3). O modo de recarga automtica (modo 2) pode ser
usado para gerar o sinal PWM para o controle do motor CC. Nesse modo a contagem feita atravs de
TL (a primeira contagem comea no valor inicial de TL) e o valor de TH usado para definir o incio da
prxima contagem. Se o temporizador comea sempre no valor dado em TH e vai at FFh (255), e sendo
TON = T TOFF, e sendo ainda escolhido T = 255, o procedimento usado no programa :
1. Para o perodo ligado faz-se TL = TOFF; dessa forma, o temporizador conta de TOFF at 255, o que
corresponde ao perodo ligado;
2. Para o perodo desligado faz-se TL = TON; dessa forma, o temporizador conta de TON at 255, o que
corresponde ao perodo desligado.
3. No incio do programa desliga-se o motor (CLR P2.0 e CLR P2.1) e faz-se TL = TON = 09H, o que
faz com que o temporizador, na primeira contagem j conte o perodo desligado, que comea em T ON
e vai at 255.
4. Aps fazer TL = TON, encontra-se o complementar de TON (CPL A), ou seja, TOFF, e carrega-se em
TH. Dessa forma, a prxima contagem comear em TOFF, o que significa que o temporizador
contar o perodo ligado.
5. Cada vez que a subrotina de controle executada define-se o prximo valor de recarga, TH.
6. Para aumentar a velocidade aumenta-se o perodo ligado TON. Para diminuir aumenta-se TOFF.
A interface entre o microcontrolador e o motor de corrente contnua (driver) pode permitir o
acionamento apenas em um sentido de rotao (Fig. 8.12) ou em ambos os sentido (Fig. 8.13). Na Fig.
8.12 um pulso alto na base do transistor BC548 leva o transistor BD139 saturao, o que aciona o
motor. Um pulso baixo leva esse transistor ao corte, quando ento a corrente do motor decresce
circulando pelo diodo 1N4001.
12
V
1N400
1
10
k

P1.1

BC54
8

BD13
9

Fig. 8.12: Driver acionamento do motor CC num nico sentido

Fig.8.13: Driver (ponte H) para acionamento do motor CC em ambos os sentidos


Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois
Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

102

A Fig. 8.13 mostra uma configurao denominada de Ponte H, que permite o acionamento em
ambos os sentidos. As chaves A, B, C e D so normalmente transistores do tipo MOSFET ou IGBT. Para
o acionamento em um dos sentidos as chaves A e B so acionadas; para o acionamento no sentido
contrrio as chaves C e D so acionadas. A lgica de acionamento dessas chaves no deve permitir o
acionamento simultneo das chaves A e D e das chaves C e B, o que resultaria num curto-circuito da
fonte de alimentao. O driver de acionamento em ponte H usado no laboratrio (L298N Diagrama na
Fig. 8.14) permite o acionamento de um motor com corrente de at 1,5 A atravs de dois pinos de
comando e segue a lgica da Tabela 8.6.
importante observar que os diodos so fundamentais para o retorno da corrente, quando
qualquer uma das chaves desligada. No momento de desligamento das chaves, h energia armazenada
nas indutncias do motor; sem os diodos as chaves poderiam ser danificadas por sobretenso.

Tabela 8.6: Pinos de controle da ponte H


In 1 In 2
Efeito
0
0
Motor parado
0
1
Gira no sentido direto
1
0
Gira no sentido reverso
1
1
Motor parado

Fig. 8.14: Diagrama de blocos parcial do L298N

O programa-exemplo a seguir para acionamento de um motor de corrente contnua cujo driver


est conectado aos pinos P1.0 e P1.1 do microcontrolador 8051. Ele permite aumentar a velocidade
atravs da interrupo zero e diminuir atravs da interrupo 1. O temporizador zero usado no modo 2
(recarga automtica) para gerar um sinal de perodo constante, mas cujo intervalo de tempo em nvel alto
e baixo alterado pelas interrupes.
Motor: Acionamento de um motor de corrente contnua com controle de velocidade
Rtulo

Mnemnicos
$MOD51

Comentrios

SAIDA0
SAIDA1
TON
TOFF
LIGADO

; Bit 0 de P1 para acionar o motor


; Bit 1 de P1 para acionar o motor
; Armazena periodo ligado
; Armazena periodo desligado
; Flag que indica motor ligado/desligado

EQU P1.0
EQU P1.1
EQU 03H
EQU 04H
BIT 00H

ORG 00H
LJMP INICIO
ORG 03H
LJMP AUM_VELOC

; Interrupo INT0 aumenta velocidade

ORG 0BH
LJMP ATENDE_TEMP

; Interrupo TEMP0 controla velocidade

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

INICIO:

103

ORG 13H
LJMP DIM_VELOC

; Interrupo INT1 diminui velocidade

ORG 30H
MOV SP,#2FH
MOV IE,#87H
MOV TCON,#05H
MOV IP,#02H
MOV TMOD,#02H
MOV TON, #01H
CLR SAIDA0
CLR SAIDA1
CLR LIGADO
MOV TL0,TON
MOV A,TON
CPL A
MOV TH0,A
SETB TR0
SJMP $

; Habilita interrupes INT0, INT1 e TEMP 0


; INT0 e INT1 so por transio
; Faz TEMP 0 com prioridade 1
; TEMP 0 no modo 2 com recarga
; Perodo ligado TON = 01h
; Desliga motor
; Desliga motor
; Limpa flag que indica motor ligado/desligado
; TL0 = periodo ligado
; Faz A = perodo ligado
; Acha perodo desligado
; TH0 = perodo desligado
; Inicia temporizador temp0 a partir de TON
; Lao de espera infinito.

JB LIGADO, DESLIGA
SETB SAIDA0
SETB LIGADO
MOV TH0,TON
RETI

; Se motor est ligado desliga


; Liga motor, que estava desligado
; Seta flag que indica motor ligado
; TH0 = periodo ligado. Valor de recarga

CLR SAIDA0
CLR LIGADO
MOV TH0, TOFF
RETI

; Desliga motor
; Limpa flag que indica motor ligado
; Faz A = periodo desligado

AUM_VELOC:

CLR EX0
CLR CY
MOV A, TON
ADD A,#0AH
JNC PULA
MOV A,#0FEH

; Desabilitar interrupo externa zero


; Limpa flag de carry
; Faz A = periodo ligado
; Faz A = A + 10
; Se CY = 0 desvia para pula
; Faz A = feh, se CY = 1

PULA:

MOV TON,A
CPL A
MOV TOFF, A
SETB EX0
RETI

; Faz periodo ligado = A


; Encontra periodo desligado
; Define periodo desligado
; Reabilita interrupo zero

DIM_VELOC:

CLR EX1
CLR CY
MOV A, TOFF
ADD A,#0AH
JNC PULA2
MOV A,#0FEH

; Desabilitar interrupo externa 1


; Limpa flag de carry
; Faz A = periodo desligado
; Faz A = A + 10
; Se CY = 0, desvia para pula2
; Faz A = FEH, se CY = 1

MOV TOFF,A
CPL A
MOV TON, A
SETB EX1
RETI

; Faz periodo desligado = A


; Encontra periodo ligado
; Define periodo ligado
; Reabilita interrupo 1

ATENDE_TEMP:

DESLIGA:

PULA2:

END

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

104

8.7 Motor de Passo


O motor de passo consiste de um estator contendo bobinas que so acionadas usando corrente
contnua e um rotor de m permanente, que gira a cada mudana das bobinas acionadas. Embora nas
figuras a seguir as quatro bobinas sejam mostradas como nicas (concentradas), na prtica elas so
distribudas ao longo do estator. Assim, pode-se obter um passo bem pequeno entre um pedao de
bobina e outro. O ngulo de passo tpico de um motor de passo 1,8o. As figuras a seguir ilustram, de
maneira simplificada, o funcionamento de um motor de passo. Observe que, na figura, uma volta
completa do motor alcanada aps percorrer todas as bobinas uma vez. Na prtica, uma volta completa
conseguida aps uma passagem por todas as partes de cada bobina. Se cada passo for de 1,8 o, uma
volta completa alcanada com 200 passos.
Na Fig. 8.15 so mostrados os transistores usados no acionamento e as bobinas concentradas. A
Tabela 8.7 mostra os comandos que devem ser enviados para a porta de sada de forma que o motor de
passo gire de meio em meio passo e com passo completo.

Fig. 8.15: Esquema que ilustra um motor de passo


Tabela 8.7: comandos para meio passo e passo completo
Passo
1
2
3
4
5
6
7
8
9

T0
1
0
0
0
0
0
1
1
1

T1
0
0
1
1
1
0
0
0
0

T2
1
1
1
0
0
0
0
0
1

T3
0
0
0
0
1
1
1
0
0

HEX
0A
02
06
04
05
01
09
08
0A

Passo
1
2
3
4
5

T0
1
0
0
1
1

T1
0
1
1
0
0

T2
1
1
0
0
1

T3
0
0
1
1
0

HEX
0A
06
05
09
0A

O circuito da Fig. 8.15 o circuito tpico utilizado no acionamento de motor de passo, entretanto,
h pastilhas integradas que so tambm utilizadas para essa funo. Um desses circuitos o driver
ULN2004A. A estrutura interna desse componente mostrada na Fig. 8.16. Trata-se de um conjunto de
transistores do tipo darlington, com capacidade de corrente de 500 mA. Cada uma das 4 bobinas do
motor ligada ao terminal comum (COM), que conectado ao Vcc, e a uma das sada (OUT).

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

105

(a)

(b)
Fig. 8.16: Esquemtico do driver ULN2004

Para ilustrar o funcionamento do motor de passo so apresentados a seguir dois exemplos:


Exemplo 1: Neste exemplo um motor de passo, conectado porta P2, acionado nos dois sentidos de
rotao. Um sensor de presena no pino P3.0 define o sentido direto e um sensor no pino P3.1 define o
sentido inverso.
Rtulo

Mnemnico
$MOD51

Comentrio sobre o Efeito da Operao

SENSOR1 EQU P3.0


SENSOR2 EQU P3.1
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
CLR F0
COMECO: MOV A,#00H
DECIDE: JB SENSOR1,OUTRO
CLR F0
OUTRO: JB SENSOR2,V1
SETB F0
V1: JB F0, INVERSO
MOV DPTR,#DIRETO
SJMP FRENTE
INVERSO: MOV DPTR,#INVERSO
FRENTE: PUSH ACC
MOVC A, @A+DPTR
CJNE A,#0FFH,V2
POP ACC
SJMP COMECO
V2: MOV P2,A
LCALL ATRASO
POP ACC
INC A
SJMP DECIDE
ATRASO: MOV R4,#3FH
V4: MOV R5,#3FH

; Apontador de pilha SP = 2FH


; Limpa flag que ser usada para definir sentido de rotao (PSW.5)

; Se SENSOR1 = 1, verificar o OUTRO sensor


; Se SENSOR1 = 0, limpa o bit F0, que indica sentido de rotao
; Se SENSOR2 = 1, pula para acionamento do motor
; Se SENSOR2 = 0, faz F0 = 1
; Se F0 = 1, desvia para INVERSO
; Se F0 = 0, faz DPTR igual ao endereo inicial da tabela DIRETO
; Desvia para acionar o motor no modo direto
; Se F0 = 1, faz DPTR igual ao endereo inicial da tabela INVERSO
; Guarda contador da tabela
; Carrega A com contedo da tabela (endereo A + DPTR)
; Se A = FFH, chegou ao fim da tabela. Volta pro comeo
; Recupera contador da tabela

; Envia contedo da tabela para porta P2

; Carrega registrador R4 com valor hexadecimal 3FH


; Carrega registrador R5 com valor hexadecimal 3FH

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

106
DJNZ R5,$
DJNZ R4,V4
RET

; Aguarda registrador R5 zerar


; Decrementa R4. Enquanto no for zero, volta para recarregar R5
; Retorna de subrotina de atraso de tempo

DIRETO: DB 0AH
DB 06H
DB 05H
DB 09H
DB 0FFH
INVERSO: DB 09H
DB 05H
DB 06H
DB 0AH
DB 0FFH
END

Exemplo 2: Esse exemplo usa a interrupo 1 para inverter o sentido de rotao do motor de passo.
Assim, a qualquer pedido de interrupo 1 (por transio) provoca mudana no sentido de rotao.
Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO
ORG 13H
CPL F0
RETI

Comentrio sobre o Efeito da Operao

; Endereo da interrupo externa 1


; Complemeta bit usado para mudana de sentido de rotao

ORG 30H
INICIO: MOV SP,#2FH
CLR F0
MOV IE,#84H
MOV TCON,#04H

; Apontador de pilha SP = 2FH


; Limpa flag que ser usada para definir sentido de rotao (PSW.5)
; Habilita interrupo externa 1
; Interrupo 1 por transio

COMECO: MOV A,#00H


DECIDE: JB F0, INVERSO
MOV DPTR,#DIRETO
SJMP FRENTE

; Se F0 = 1, desvia para INVERSO


; Se F0 = 0, faz DPTR igual ao endereo inicial da tabela DIRETO
; Desvia para acionar o motor no modo direto

INVERSO: MOV DPTR,#REVERSO


FRENTE: PUSH ACC
MOVC A, @A+DPTR
CJNE A,#0FFH,V2
POP ACC
SJMP COMECO
V2: MOV P2,A
LCALL ATRASO
POP ACC
INC A
SJMP DECIDE
ATRASO: MOV R4,#3FH
V4: MOV R5,#3FH
DJNZ R5,$
DJNZ R4,V4
RET

; Se F0 = 1, faz DPTR igual ao endereo inicial da tabela REVERSO


; Guarda contador da tabela
; Carrega A com contedo da tabela (endereo A + DPTR)
; Se A = FFH, chegou ao fim da tabela. Volta pro comeo
; Recupera contador da tabela

; Envia contedo da tabela para porta P2

; Carrega registrador R4 com valor hexadecimal 3FH


; Carrega registrador R5 com valor hexadecimal 3FH
; Aguarda registrador R5 zerar
; Decrementa R4. Enquanto no for zero, volta para recarregar R5
; Retorna de subrotina de atraso de tempo

DIRETO: DB 0AH
DB 06H
DB 05H
DB 09H
DB 0FFH

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

107

REVERSO: DB 09H
DB 05H
DB 06H
DB 0AH
DB 0FFH
END

8.8 Lmpada Incandescente


A Fig. 8.17 mostra um circuito para acionamento de uma lmpada incandescente. necessrio
apenas um bit (P1.0) para o controle da lmpada. No entanto, fundamental que esse bit seja zerado no
incio do programa, uma vez que todos os bits das portas ficam em nvel alto aps o reset e deseja-se que
a lmpada esteja apagada no incio do programa. utilizada uma lmpada de 20 W / 220V e um rel para
o circuito de acionamento.

Fig. 8.17 Acionamento de uma lmpada incandescente

Lmpada: Acionamento de lmpada atravs de sensor de presena conectado interrupo zero. O


sensor usado para acender e apagar a lmpada.
Rtulo

Mnemnico
$MOD51
ORG 00H
LJMP INICIO
ORG 03H
CPL P1.0
JNB P3.2,$
RETI

ORG 30H
INICIO: MOV SP,#2FH
CLR P1.0
MOV IE,#81H
MOV TCON,#01H
SJMP $

Comentrio sobre o Efeito da Operao

; Endereo da interrupo externa 1


; Complementa bit usado para acender/apagar a lmpada
; Lao para reduzir interferncia da trepidao da chave (debouncing)

; Apontador de pilha SP = 2FH


; Limpa bit que aciona a lmpada (Apaga a lmpada)
; Habilita interrupo externa zero
; Interrupo 0 por transio

END

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

108

Bibliografia

1.

PARHAMI, Behrooz, Arquitetura de Computadores:


supercomputadores, McGraw-Hill, So Paulo, 2007.

de

microprocessadores

2.

TANENBAUM, Andrew S., Organizao Estruturada de Computadores, 5 ed., Pearson Prentice


Hall, So Paulo, 2007.

3.

SILVA JNIOR, Vidal Pereira da, "Aplicaes Prticas do Microcontrolador 8051," rica, So
Paulo, 1994.

4.

YERALAN, Sencer e AHLUWALIA, Ashutosh, "Programming and Interfacing the 8051


Microcontroller," Addison Wesley, Reading, 1995.

5.

MACKENZIE, I. Scott, The 8051 Microcontroller, Prentice Hall, New Jersey, 1995.

6.

GIMENEZ, Salvador P., Microcontrolador 8051, Prentice Hall, 2002.

7.

NICOLOSI, Denys E. C., Microcontrolador 8051 Detalhado, rica, So Paulo, 2000.

8.

FLEURY, Cludio A. e BARBACENA, Ilton L., Microcontrolador 8051, Goinia, Maro 1997.

Escola de Engenharia Eltrica, Mecnica e de Computao Universidade Federal de Gois


Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br