Sei sulla pagina 1di 173

Pgina 0 de 173

Microcontroladores Microcontroladores Microcontroladores Microcontroladores


Industriais Industriais Industriais Industriais
Professor Ulisses Galvo Romo

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 1 de 173






Captulo 1 - Sistemas de Numerao e Clculos Matemticos Pgina 2

Captulo 2 - Circuitos Seqenciais Pgina 11

Captulo 3 - Memrias Pgina 21

Captulo 4 - Conversores A/D e D/A Pgina 30

Captulo 5 - Microprocessadores Pgina 41

Captulo 6 - Conjunto de Instrues do 8051 Pgina 73

Captulo 7 - Portas Paralelas Pgina 112

Captulo 8 - Interrupes Pgina 123

Captulo 9 - Temporizadores / Contadores Pgina 132

Captulo 10 - Porta Serial Pgina 141

Captulo 11 - Economia de Energia e Gravao Pgina 151

Captulo 11 - Projeto da Placa de Testes Pgina 156

Bibliografia Pgina 172

NDICE DE CAPTULOS
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 2 de 173
|

1) SISTEMA DE NUMERAO
Existem vrios sistemas de numricos, dentre os quais se destacam o decimal, o binrio, o octal e o
hexadecimal. O sistema decimal utilizado por ns no dia a dia, e sem dvida o mais importante dos
sistemas numricos, com os quais podemos formar qualquer nmero atravs da lei de formao.
A
n
B
n

+ A
n
-1B
n-1
+ A
n
-2B
n-2
+ ... + A
0
B
0

Onde: A
n
= Algarismo
B = Base do nmero
n = [(quantidade de algarismos) - 1]

Exemplo: 25934 (decimal)
n = 5 -1 = 4
B = 10
A
4
= 2, A
3
= 5, A
2
= 9, A
1
= 3 e A
0
= 4
2.10
4
+ 5.10
3
+ 9.10
2
+ 3.10
1
+ 4.10
0
= 2.10000 + 5.1000 + 9.100 + 3.10 + 4.1 = 25934

1.1.1) SISTEMA BINRIO (BASE 2)
O sistema binrio de numerao apresenta apenas dois algarismos, o zero e o um. Cada algarismo ou
dgito de um nmero binrio chamado de BIT que a abreviao de BInary DigiT. O conjunto de 4 bits
denominado de NIBBLE, e o de 8 bits de BYTE.
O sistema binrio utilizado em sistemas digitais e em microprocessadores, onde o 0 representado por
0V (Volt) e o 1 geralmente pela tenso de alimentao (em circuitos integrados com tecnologia de
fabricao TTL, o nvel 1 = 5 Volts).

1.1.2) SISTEMA HEXADECIMAL (BASE 16)
O sistema hexadecimal possui 16 smbolos para representar qualquer quantidade. Como so conhecidos
apenas dez smbolos numricos (0 a 9), adotou-se outros seis ( A a F).
O sistema hexadecimal tambm muito utilizado na rea de microprocessadores, e tem uma estreita
relao com o sistema binrio.

1.1.3) FORMAS DE APRESENTAO
decimal: 1234d ou (1234)
10

binrio: 0101b ou (0101)
2

hexadecimal: 9CF7h ou (9CF7)
16

Observao: Em microprocessadores quando se fala em numerao necessrio sempre identificar
qual base esteja se trabalhando para no haver confuso, pois o nmero 10 em binrio representa o
nmero 2 em decimal, mas o nmero 10 em hexadecimal representa o nmero 16 em decimal
(como ser visto na tabela a seguir).
Por este motivo colocada no final do nmero a letra que identifica sua base:
(d) para decimal (base 10);
(b) para binrio (base 2);
(h) para hexadecimal (base 16).
CAPTULO 1 - SISTEMAS DE NUMERAO E CLCULOS MATEMTICOS
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 3 de 173
CONVERSO ENTRE BASES

DECIMAL HEXADECIMAL BINRIO
0 0 0
1 1 1
2 2 10
3 3 11
4 4 100
5 5 101
6 6 110
7 7 111
8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111
16 10 10000

1.1.4) CONVERSO DO SISTEMA BINRIO PARA O SISTEMA DECIMAL
Para converter um nmero binrio em decimal basta utilizar a lei de formao.
Exemplo: Convertendo o nmero 101b (binrio) em Decimal:
n = 3 -1 = 2; A
2
= 1; A
1
= 0 e A
0
= 1
1.2
2
+ 0.2
1
+ 1.2
0
= 1.4 + 0.2 + 1.1 = 4 + 0 + 1 = 5, Conclui-se portanto que 101b = 5d

1.1.5) CONVERSO DO SISTEMA DECIMAL PARA O SISTEMA BINRIO
Quando trabalhamos com sistemas digitais, muitas vezes existe a necessidade de convertermos os
valores decimais em binrios.
Para converter um nmero decimal para a base binria, deve-se executar divises sucessiva pela base 2
quantas vezes forem necessrias para que o quociente da diviso seja menor que a base 2. O ltimo
quociente da diviso e os restos das divises sucessivas, so tomados na ordem inversa,
correspondendo ao nmero na base 2.

Exemplo: Converter o nmero 135d para a base binria (2).

135 2
1 67 2
1 33 2
1 16 2
0 8 2
Resultado 0 4 2
no sentido 0 2 2
oposto 0 1

Portanto: 135d = 10000111b
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 4 de 173
1.1.6) CONVERSO DE DECIMAL PARA UMA BASE QUALQUER (B)
Para converter de decimal para a base B basta utilizar o mtodo das divises sucessivas dividindo o
nmero pela base B
Exemplo: Converter o nmero 3882d para a base hexadecimal (16)

3882 16
10 242 16
2 15

Resposta no
sentido oposto

15 = F e 10 = A, Portanto: 3882d = F2Ah

1.1.7) CONVERSO ENTRE AS BASES 2 E 16
Existe uma relao estreita entre os sistemas binrio e hexadecimal, esta relao vem do fato de que o
nmero 16 pode ser escrito como 2
4
. Os nmeros hexadecimais podem ser vistos como uma forma
compacta de representar os nmeros binrios.

Para converter de binrio para hexadecimal devemos seguir os seguintes passos:
1. Divide-se o nmero em grupos de 4 algarismos da direita para a esquerda, colocando-se zeros
esquerda se necessrio;
2. Converte-se cada grupo no seu equivalente em hexadecimal, conforme a tabela dada anteriormente.

Exemplo: Converter o nmero 11101000101110b para hexadecimal (h)
1. Divide-se o nmero em grupos de 4 algarismos da direita para a esquerda, colocando-se zeros
esquerda se necessrio;
0011 1010 0010 1110
2. Converte-se cada grupo no seu equivalente em hexadecimal, e reunisse os algarismos obtidos (no
esquecer de acrescentar a letra h no final do nmero hexadecimal resultante).
0011 = 3, 1010 = A, 0010 = 2, 1110 = E

Portanto: 11101000101110b = 3A2Eh

Para a converso de hexadecimal para binrio, utilizado o processo inverso:
Exemplo: Converter o nmero 2AC7h para Binrio (b)
1. Separa cada algarismo hexadecimal e os converte-se no seu equivalente binrio em grupos de 4
dgitos.
2 = 0010, A = 1010, C = 1100, 7 = 0111
2. Reunisse os algarismos obtidos e retiram-se os zeros esquerda (no esquecer de acrescentar a
letra b no final do nmero binrio resultante).

Portanto: 2AC7h = 10101011000111b
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 5 de 173
Exerccios: Converter os nmeros para a base solicitada.
1) 23Fh = ?d; 2) 47d = ?b; 3) 11010011b = ?d; 4) 11100010b = ?h; 5) A2Ch = ?d; 6) 2DAh = ?b;
7) 11100001b = ?d; 8) 352d = ?h; 9) 510d = ?h; 10) 120d = ?b.

Respostas: 1)575d; 2) 101111b; 3) 211d; 4) E2h; 5) 2604d; 6) 1011011010b; 7) 225d; 8) 160h; 9) 1FEh;
10) 1111000b.

OBSERVAO: Qual o mtodo deve ser utilizado para fazer a converso?
Para converter de binrio ou hexadecimal para decimal utilize a lei de formao.
Para converter de decimal para hexadecimal ou binrio faa divises sucessivas.
Para converter entre binrio e hexadecimal utilize a tabela e as 2 regras dadas anteriormente.

1.2) OPERAES ARITMTICAS NO SISTEMA BINRIO

1.2.1) ADIO BINRIA
Para efetuarmos a adio no sistema binrio, devemos agir como numa adio convencional do sistema
decimal. Convm observar que no sistema decimal 1 + 1 = 2 e no sistema binrio como temos apenas
dois algarismos 1 + 1 = 0 e vai 1 para o prximo digito.
A operao de transporte tambm denominada carry.

Observao: Diferente do sistema decimal em que podem ser somar vrios nmeros ao mesmo tempo,
no sistema binrio no se somam mais do que dois nmeros por vez para no haver erro no transporte
do carry. Assim sendo teremos somente as seguintes possibilidades no sistema binrio:
Sem carry anterior
0 + 0 = 0 e no vai carry;
0 + 1 = 1 e no vai carry;
1 + 1 = 0 e vai 1 de carry (2d = 10b, ou seja resulta 0b e vai 1b para o prximo digito = carry) ;
Com carry anterior
1 + 1 + 1 (carry) = 1 e vai 1 de carry (3d = 11b, ou seja resulta 1b e vai um para o prximo digito = carry).

Exemplo 1: (11 + 10) = ?
carry
1
1 1
+ 1 0
1 0 1
Portanto o resultado da soma (11 + 10) = 01, com carry = 1. Ou com 3 dgitos = 101

Exemplo 2: (110 + 111) = ?
carry
1 1
1 1 0
+ 1 1 1
1 1 0 1
Portanto o resultado da soma (110 + 111) = 101, com carry =1. Ou com 4 dgitos = 1101
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 6 de 173
1.2.2) SUBTRAO
O mtodo de resoluo anlogo a uma subtrao no sistema decimal.
importante observar o caso 0 - 1, onde o resultado ser igual a 1 porm haver um transporte para a
coluna da esquerda que deve ser acumulado (somado) no subtraindo e, obviamente subtrado do
minuendo.
A este estouro d-se o nome de borrow.
Ex: 1000 - 0011

1 0 0 0 1 0 0 0 1 0 0 0
borrow - 1 - 1 -
0 0 1 1 0 1 0 1 1 1 0 1
1 1 0 1 0 1 0 1

Nmeros Binrios Negativos
Para representao de nmeros binrios negativos e facilitar a operao de subtrao comumente
utilizado o complemento de 2 (C2), sua obteno se baseia inicialmente no complemento de 1 (C1) como
explicado a seguir:

COMPLEMENTO DE 1 (C1) BINRIO
Troca-se cada bit do nmero pelo seu inverso ou complemento, ou seja:
Se for 0 passa a ser 1 e
Se for 1 passa a ser 0

Exemplo: Dar o complemento de 1 (C1) do nmero: 1 0 1 1 b
Invertendo-se bit a bit o nmero resultar em (C1) = 0 1 0 0 b

1.2.3) COMPLEMENTO DE 2 (C2) BINRIO
Para obt-lo, converter o nmero na notao de complemento de 1 e somar 1 ao seu resultado, ou seja:
C2 = C1 + 1

Exemplos: (4 dgitos binrios)
Decimal - 1 - 2 - 3 - 4 - 8
Binrio - 0001 - 0010 - 0011 - 0100 - 1000
Complemento de 1 - 1110 - 1101 - 1100 - 1011 - 0111
Complemento de 2 1111 1110 1101 1100 1000

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 7 de 173
Mtodo da subtrao utilizando o complemento de 2
1. Converter o nmero negativo da subtrao em complemento de 2 (C2);
2. Somar o nmero positivo com C2 resultante do nmero negativo;
3. O carry final dever ser descartado do resultado, porm seu valor indicar a finalizao da
operao:
Se o carry final for 1 o resultado positivo e a operao est encerrada.
Se o carry final for 0 o resultado negativo, portanto para obtermos valor o correto do
mdulo do resultado negativo, devemos executar seu C2.

Exemplo 1: (1110 - 0011) = ?

- 0011 = C2 = 1101

carry final = 1 1
1 1 1 0
+ 1 1 0 1
0 0 1 1

Carry final = 1, resultado da subtrao positivo, operao encerrada, descartar o carry final.

Portanto o resultado da subtrao (1110 - 0011) = 0011.

Exemplo 2: (0101 - 1100) = ?

(- 1100) = C2 = (0100)

carry final = 0 1
0 1 0 1
+ 0 1 0 0
1 0 0 1

Carry final = 0, resultado da subtrao negativo, portanto para se obter o mdulo da subtrao,
dever se executar o C2 do resultado.
(C2 do resultado 1001) = 0111

Portanto o resultado da subtrao (0101 - 1100) = - 0111.

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 8 de 173
1.2.4) DESLOCAMENTO
Multiplicao Binria pela Base
Deslocando-se os algarismos de um nmero para a sua esquerda, o resultado ser o nmero
multiplicado pela sua base (quando exceder os algarismos do nmero inicial, aumentar um algarismo a
esquerda e completar o algarismo a direita com um digito 0).

Exemplo: multiplicar o nmero (011b) por sua base 2 vezes.
A base do nmero binrio = (2d), portanto teremos:
Deslocamos os dgitos para a esquerda obtemos (110);
O resultado esta correto pois: (011b) = (3d) x (2d) = (6d) = (110).

Deslocamos os dgitos novamente para a esquerda e completamos o algarismo da direita com um digito
(0) obtemos (1100b)
Novamente o resultado esta correto, pois (110b) = (6d) x (2d) = (12d) = (1100).

Diviso Binria pela Base
De forma anloga se deslocarmos os algarismos de um nmero binrio para a direita sucessivamente, o
resultado ser a diviso do nmero por sua base.

Exemplo: Dividir o nmero 1100b por sua base 2 vezes.
A base do nmero binrio = (2d), portanto teremos:
Deslocamos os dgitos para a direita obtemos: 0110;
O resultado esta correto pois: (1100b) = (12d) / (2d) = (6d) = 0110.

Deslocamos os dgitos novamente para a direita obtemos: (0011b)
Novamente o resultado esta correto, pois (0110b) = (6d) / (2d) = (3d) = (0011).

Observao: O processo de diviso por deslocamento funciona somente com nmeros pares, pois se
dividirmos um nmero impar pela base que (2d), resultar em um nmero inteiro mais meio, que no
definido pela base binria.
Exemplo: Dividir o nmero (1101b) por sua base.
Deslocando para direita pela obtemos: (0110b)
O resultado no est correto pois (1101b) = (13d) / (2d) = (6,5d) (0110b) = (6d)
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 9 de 173
1.3) OPERAES LGICAS
1.3.1) Funo Lgica (E) ou (AND)
Esta funo executa em sua sada (S) a associao e de duas ou mais variveis booleanas em sua
entrada (Ex: A, B), ou seja somente se as todas as entradas forem 1 a sada ser 1.
Sua representao algbrica para duas variveis S = A . B, se l S = A e B ou S = A and B.

Tabela Verdade (Truth Table) Lgica de chaves Smbolo

Entradas Sada
A B S
0 0 0
1 0 0
0 1 0
1 1 1

1.3.2) Funo Lgica (OU) ou (OR)
Esta funo executa em sua sada (S) a associao ou de duas ou mais variveis booleanas em sua
entrada (Ex: A, B), ou seja, se qualquer entrada assumir o valor 1 sua sada tambm ser 1.
Sua representao algbrica para duas variveis S = A + B, se l S = A ou B ou S = A or B.

Tabela Verdade (Truth Table) Lgica de chaves Smbolo

Entradas Sada
A B S
0 0 0
1 0 1
0 1 1
1 1 1

1.3.3) Funo Lgica (NO) ou (NOT) ou (Complemento)
Esta funo executa em sua sada (S) a inverso da varivel booleana de sua entrada (Ex: A), ou
seja, se a entrada assumir o valor 1 sua sada ser 0, e vice -versa.
A representao algbrica S = A, se l S = A barrado ou S = negao de A ou S = complemento de A.

Tabela Verdade (Truth Table) Lgica de chaves Smbolo

Entrada Sada
A S
0 1
1 0

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 10 de 173
1.3.4) Funo Lgica (XOU) ou (XOR)
Esta funo executa em sua sada (S) a associao exclusiva ou de duas ou mais variveis
booleanas em sua entrada (Ex: A, B), ou seja, se uma de suas entrada assumir o valor 1 sua sada
tambm ser 1, mas se as duas assumirem o valor 1 a sada ser 0.
A representao algbrica para duas variveis S = A B, se l S = A exclusiva B ou S = A exclusive B.
Tabela Verdade (Truth Table) Lgica de chaves Smbolo

Entradas Sada
A B S
0 0 0
1 0 1
0 1 1
1 1 0

A funo xor utilizada para gerar PARIDADE PAR, onde este um dos mtodos para deteco de erro
em comunicao digital.
Exerccios: Obtenha o resultado lgico em hexadecimal para as seguintes operaes:
1) 10d AND 4d; 2) 3Fh OR 80h; 3) 1001b XOR 1010b; 4) 13d OR 9Ch; 5) 11000010b AND FFh;
6) 24h OR 0d; 7) 82h XOR 13h; 8) 10101010b AND 55h; 9) 5d OR 3h; 10) 10111100b AND 00001010b;
11) NOT 5Ah; 12) NOT 13d.
Respostas: 1) 0d; 2) BFh; 3) 0011b; 4) 9dh = 157d; 5) 11000010b = C2h; 6) 24h= 36d; 7) 91h;
8) 0b = 0h; 9) 7d = 7h; 10) 1000b; 11) A5h; 12) 2d.

S
A
A
B
B
E
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 11 de 173


2.1) INTRODUO
Os circuitos digitais at agora so portas lgicas que em conjunto formam lgica combinacional, onde as
sadas em qualquer instante de tempo so inteiramente dependentes das entradas presentes neste
tempo.
Embora todo sistema digital seja constitudo por circuitos combinacionais, muitos sistemas encontrados
na prtica tambm incluem elementos de memria, estes requerem que o sistema seja descrito em
termos de lgica seqencial.
Um diagrama de blocos de um circuito seqencial mostrado na figura 2.1 a seguir. Este consiste de
portas de lgica combinacional que recebem sinais binrios de entradas externas e de sadas de
elementos de memria e geram sinais de sadas externas e de entradas de elementos de memria.

Figura 2.1 - Diagrama de blocos de um circuito seqencial
Um elemento de memria um dispositivo capaz de armazenar um bit de informao. A informao
binria armazenada em elementos de memria pode ser mudada pelas sadas do circuito combinacional.
As sadas dos elementos de memria, so ligadas nas entradas dos gatilhos no circuito combinacional.
O circuito combinacional executa um processo de operao de informao especfica, parte da qual
usada para determinar o valor binrio para ser armazenado em elementos de memria. As sadas dos
elementos de memria so aplicados no circuito combinacional e fixam em parte as sadas do circuito. O
processo claramente demonstra que as sadas externas de um circuito so uma funo no somente das
entradas externas, mas tambm do estado presente de elementos de memria.
O prximo estado dos elementos de memria funo das entradas externas e estados presentes.
Assim, um circuito seqencial especificado por uma seqncia de tempo das entradas, e estados
internos. Os circuitos seqenciais podem operar sncrona ou assincronamente.
Nos sistemas assncronos, as sadas dos circuitos lgicos podem mudar de nvel lgico, sempre que o
nvel de uma ou mais deste tambm mude.
2.2) FLIP-FLOPS ou BI-ESTVEIS
Os elementos de memria so usados em circuitos de seqncia que usam clock e so chamados de
flip-flop, onde estes circuitos so clulas binrias capazes de armazenar um bit de informao. Um
circuito flip-flop tem duas sadas, uma para o valor normal e uma para o valor complementar do bit
armazenado neste.
Nos sistemas sncronos, os instantes de tempo nos quais qualquer das sadas pode ser alterada, so
determinados por um sinal denominado clock. Este sinal, via de regra, um trem de pulsos retangular ou
uma onda quadrada.
Estes circuitos tambm so chamados de bi-estvel, por possurem somente duas sadas provveis e
estveis no tempo.
CAPTULO 2 - CIRCUITOS SEQNCIAIS
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 12 de 173
2.3) LATCHES
So circuitos bi-estvel capazes de guardar um bit de informao, assim podem ser chamados de
circuitos bsicos de memria.
2.3.1) LATCH SR COM PORTAS NOR (Observao: S = Set = Levar para 1, R = Reset = Zerar)

Figura 2.2 - Latch SR com portas NOR
Tabela Verdade (Truth Table) Smbolo

Entradas Sadas
S R Q Q
0 0 Q(t-1) * Q(t-1) *
0 1 0 1
1 0 1 0
1 1 No Desejado pois Q = Q = 0
* Mantm o estado anterior das sadas
2.3.2) LATCH SR COM PORTAS NAND

Figura 2.3 - Latch SR com portas NAND
Tabela Verdade (Truth Table) Smbolo
Entradas Sadas
S R Q Q
0 0 No Desejado pois Q = Q = 1
0 1 0 1
1 0 1 0
1 1 Q(t-1) * Q(t-1) *
* Mantm o estado anterior das sadas
S Q


R Q
S Q


R Q
Observao: O smbolo se refere converso do
Latch SR Nand para a tabela do Latch considerado
como padro que o Latch OR.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 13 de 173
2.3.3) LATCH SR COM ENABLE (Observao: EN = Enable = Habilitar)

Figura 2.4 - Latch SR com Enable
Tabela Verdade (Truth Table) Smbolo

Entradas Sadas
EN S R Q Q
0 X** X** Q(t-1) * Q(t-1) *
1 0 0 Q(t-1) * Q(t-1) *
1 0 1 0 1
1 1 0 1 0
1 1 1 No Desejado pois Q = Q = 0
* Mantm o estado anterior das sadas;
** A sada independe do valor destas entradas.

2.3.4) LATCH D

Figura 2.5 - Latch D
Tabela Verdade (Truth Table) Smbolo

Entrada Sadas
D Q Q
0 0 1
1 1 0

Observao: Para implementarmos um latch D com enable basta substituir o lacth RS comum
por um com entrada enable.
S Q

C = EN

R Q
D Q


Q
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 14 de 173
2.4) FLIP- FLOPS
Os sinais de sada de umo latch variam instantaneamente com a combinao de suas entradas durante
o pulso alto na entrada, j em flip-flops as sadas variam somente durante a transio da entrada de
controle (clk) esta transio chamada disparo, trigger ou clock (sincronizador de tempo).

Figura 2.6 - Circuito Digital com uso de Flip-flop
O uso de latches em circuitos seqenciais pode causar srios problemas, uma vez que a entrada enable
permanea em nvel alto, a sada dada pela combinao instantnea das entradas que so geradas
por uma lgica combinacional das sadas do Latch.
Esta realimentao pode ocasionar oscilaes no sinal de sada e como resultado os sinais de sada do
sistema sero indeterminados. Um bom exemplo o circuito da figura 2.7.

Figura 2.7 - Circuito Digital com realimentao e sua tabela caracterstica
Existem duas maneiras de combinarmos latches para formarmos um flip-flop.
1) Combinar duas latches fazendo com que o estado das sadas s mude no nvel alto ou baixo da
entrada de clock. Tais circuitos so chamados flip-flop mestre-escravo.
2) Produzir um flip-flop que seja disparado somente a transio do sinal de clock (0 para 1) ou (1 para 0).

2.4.1) FLIP-FLOP SR MESTRE - ESCRAVO

Figura 2.8 - Flip-Flop RS Mestre-Escravo
Como mostra a figura 2.8 este flip-flop consiste de duas latches e um inversor, o latch a esquerda
chamada mestre e o da direita escravo.
Quando a entrada de clock 1 o mestre est habilitado, portanto variaes na entrada produzem
variaes na varivel intermediria Y, o escravo por sua vez est desabilitado atravs do inversor.
Quando a entrada do clock zero o processo se inverte e o mestre que est desabilitado, mantendo Y
e Y fixos, que por sua vez produziram as sadas Q e Q do escravo.
Este tipo de combinao para se produzir um flip-flop chamado flip-flop sensvel a nvel.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 15 de 173
2.4.2) FLIP-FLOP JK MESTRE-ESCRAVO
O flip-flop JK uma modificao realizada no "RS", para evitar termos o estado proibido fazendo com
que esta combinao das entradas tenha uma funo especfica, isto , o complemento da sada.

Figura 2.9 - Flip-Flop JK Mestre-Escravo
Tabela Verdade (Truth Table)
Entradas Sadas
CLK J K Q Q

Observao
0 X* X* Q(t-1) Q(t-1)
1 0 0 Q(t-1) * Q(t-1)
Mantm
Sada
1 0 1 0 1 -----------
1 1 0 1 0 -----------
1 1 1 Q(t-1) Q(t-1) Inverte
* A sada independe do valor destas entradas.
2.4.3) FLIP-FLOP EDDGE-TRIGGERED
Um flip-flop disparado na borda ignora o pulso de sincronismo, enquanto este possui um nvel constante
e dispara somente na transio do sinal de sincronismo. Os flip-flops disparados na transio positiva (0
para 1) so ditos sensveis a borda de subida (positive edge), enquanto que os trigados a transio
negativa (1 para 0) so sensveis a borda de descida (negative edge).
A figura 2.10 mostra o diagrama lgico de um flip-flop tipo D sensvel borda de subida. Pode-se
observar que este circuito tem a mesma forma do mestre-escravo, porm o latch mestre substituda por
uma tipo D e um inversor adicionado.
Com o latch mestre do tipo D este flip-flop exibe um comportamento de disparo sensvel borda ao invs
de nvel (mestre-escravo).
Quando a entrada de clock igual a zero, o latch mestre habilitado e transfere o valor da entrada D,
enquanto que o latch escravo esta desabilitada fazendo com que a sada no mude.
Quando uma transio positiva ocorre, a entrada de clock vai para 1. Isto desabilita o mestre e habilita o
latch escravo para que esta transfira para a sada do flip-flop o valor do mestre. Assim o valor da sada
do flip-flop o valor da entrada imediatamente anterior transio de subida do sinal de clock. Enquanto
a entrada de clock estiver em nvel alto sada permanece inalterada, pois o mestre est desabilitado e
finalmente a transio negativa (1 para 0) , o escravo desabilitado mantendo a sada constante.


Figura 2.10 - Diagrama lgico de um flip-flop tipo D sensvel borda de subida.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 16 de 173
2.4.4) FLIP-FLOP JK SENSVEL A BORDA DE SUBIDA



Figura 2.11 - Flip-flop tipo JK sensvel borda de subida.

2.4.5) FLIP-FLOP T
O T (toggle) flip-flop muda de estado a cada pulso de clock , pode ser construdo a partir de um flip-flop
tipo T ou flip-flop JK.


Figura 2.12 - Flip-flop tipo T .

Observao: Entradas Assncronas
Flip-flops freqentemente possuem entradas especiais para preset ou clear da sada assincronamente,
isto , independentemente da entrada de clock.
Tambm podem ser ativadas em nvel alto ou baixo dependendo do dispositivo utilizado, comercialmente
existe uma grande variedade de flip-flops com entradas diretas ativadas em nvel alto ou baixo, que
podem ser escolhidos convenientemente conforme a aplicao.

2.5) GLOSSRIO - FLIP FLOPS E REGISTRADORES
Active-Low (Ativo em baixo): A entrada ou a sada de um terminal deve possuir o sinal LOW para estar
habilitado ou ativo.
Asynchronous (Assncrono): a condio em que a sada de um dispositivo troca seu estado
instantaneamente com a mudana da entrada independente do sinal de relgio.
Clock (Relgio): Os dispositivos usam sinais digitais peridicos, que altera seu estado de 0 para 1, e de
1 para 0, constantemente (chamada na prtica de onda quadrada, mas que normalmente por no ter
simetria uma onda retangular).
Combinational Logic (Lgica Combinacional): usado por muitos componentes bsicos (AND, OR,
NOR, NAND) para formar funes lgicas mais complexas.
Complement (Complemento): Estado digital oposto, ou seja, 0 sinal 0 o complemento do 1 e vice-
versa.
Digital State (Estado digital): Nvel lgico de um circuito digital.
Disabled (Desabilitado): Condio na qual a entrada e a sada de um circuito digital no esto aptas a
aceitar ou transmitir estados digitais.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 17 de 173
Edge Triggered (disparo pela borda): O dispositivo digital s estar habilitado a aceitar entradas ou
alterar sadas somente na borda positiva ou negativa do sinal de controle ou de relgio.
Enabled (Habilitado): A condio na qual o circuito est apto a receber ou transmitir estados digitais.
Flip Flop: Circuito capaz de armazenar nvel lgico 0 ou 1 baseado em nveis lgicos seqenciais.
Truth Table (Tabela verdade): Indica as combinaes mais importantes de entrada e sada dos estados
de um dispositivo.
Latch: Capacidade de armazenar um particular estado digital. O circuito armazena o nvel lgico mesmo
depois de alterada a entrada.
Level Triggeres (Nvel do idisparador): veja Pulse Triggered.
Master-Slave (Mestre-Escravo): Dispositivo de controle constitudo de duas sees, seo designada
Mestre que recebe os dados enquanto o relgio alto (HIGH), e a seo designada Escravo que recebe
os dados do Mestre quando o relgio vai a baixo (LOW).
Negative Edge (Borda negativa): Quando a borda do relgio ou o pulso do trigger transita de HIGH para
LOW.
Noise (Rudo): Qualquer flutuao na tenso geradora momento de chaveamento, cargas eletrostticas
podem causam irregularidades nos nveis das tenses: HIGH e LOW de um sinal digital. Pode provocar
erros nas leituras dos nveis lgicos.
Octal (ctuplo): Um grupo de oito. Um flip flop octal constitudo de 8 flip flops em um encapsulamento.
Positive Edge (Borda positiva): Quando a borda do relgio ou pulso de trigger transita de LOW para
HIGH.
Pulse Triggered (Pulso disparador): O termo se d ao dispositivo digital que pode aceitar pulsos de
entrada durante os sinais de controle ou de relgio.
Register (Registrador): Grupo de flip flops ou latches que so usados para armazenar palavras binrias
e so controlados por um relgio ou sinal de controle comum.
Reset (Zerar): A condio que produz o estado digital LOW.
Sequential Logic (Lgica seqencial): Circuito digital que envolve o uso de seqncias d pulso de
tempo em conjunto com dispositivos de armazenamento como flip flops e latches e CIs funcionais como
contadores ou registradores de deslocamento.
Set: A condio que produz o estado digital HIGH.
Setup Time (Tempo de ajuste): Tempo durao da borda ativa do pulso de trigger (sinal de controle),
necessrio para estabilizar o sinal de entrada do dispositivo digital.
Store Register (Registro de armazenamento): Dois ou mais circuitos de armazenamento de dados
(como flip flops ou latches) usados em conjunto para armazenar bits de informaes.
Strobe Gates (Portas de controle): Um componente de controle usado para habilitar ou desabilitar
entradas ou sadas de um dispositivo digital particular.
Synchronous (Sncrono): A condio na qual a sada de um dispositivo operar somente em
sincronismo com um pulso especfico ou sinal de trigger - HIGH ou LOW.
Toggle (Troca): Em um flip flop, toggle quando o nvel lgico da sada se inverte.
Transition (Transio): Instante da transio do estado digital HIGH para LOW ou LOW para HIGH.
Transparent Latch (Latch transparente): Dispositivo assncrono no qual as sadas armazenaro os
estados mais recentes das entradas. A sada imediatamente segue os estados das entradas sem
esperar a chegada do pulso de trigger e mantm os estados mesmo depois das entradas serem
removidas ou desabilitadas.
Trigger (Disparo): O sinal de controle de entrada de um dispositivo digital usado para especificar o
instante em que o dispositivo aceita as entradas ou muda as sadas.

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 18 de 173
2.6) APLICAES - USO DO FLIP- FLOP OCTAL TIPO D COM MICROCONTROLADOR
Muitos dos latches e flip-flops bsicos esto disponveis em CIs octais. Nesta configurao, esto oito
latches ou flip flops em um simples encapsulamento.
Se todos os oitos latches ou flip flops so controlados por um relgio comum, isto chamado de
registrador de 8 bits. Um exemplo de registrador de 8 bits a base de flip flops o CMOS 74HCT273 de
alta velocidade (disponvel nas famlias TTL LS e S). O 74273 contm 8 flip flops do tipo D, todos
controlados por um relgio comum (Cp) trigados pela borda. Na borda positiva do Cp, os 8 bits de dados
de D0 a D7 so controlados nos 8 flip flops do tipo D e a sada de Q0 a Q7. O 74273 possui um reset
mestre (Mr) ativo em baixo (LOW), o qual proporciona um reset assncrono para todos os flip flops.
Uma aplicao do 74273 D flip flop mostrada a seguir. usado o registrador update e hold. A cada
10s ele recebe um pulso de relgio do microcontrolador 68HC11 da Motorola. Os dados esto em D0 -
D7 e a cada borda positiva do relgio so dirigidos para os registradores e sadas Q0 - Q7.


Figura 2.13 - Termmetro digital microprocessado

O sensor de temperatura analgico usado para fornecer uma tenso de sada proporcional
temperatura em graus centgrados. O microcontrolador 68HC11 tem a capacidade de ler valores de
tenso analgica e converter em valor digital equivalente.
O software do microcontrolador converte a palavra digital em cdigo BCD de sada para o mostrador.
A sada BCD do 68HC11 est em constante atualizao de acordo com as flutuaes da temperatura.
Uma maneira de estabilizar essas flutuaes dos dados o uso de um registrador controlado, como o
74HCT273. O registrador s envia os dados para a sada a cada 10s, facilitando assim a leitura.

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 19 de 173
2.7) REGISTRADORES
Grupo de flip-flop que tem por funo armazenar bits, ou seja, se 1 flip-flop armazena 1 bit, n flip-flops
armazenaro n bits
Registradores de Deslocamentos Sncronos
Funo: Deslocamento da informao contida para a esquerda ou para a direita.
Aplicaes: Transmisso Serial; Converso srie paralela; Multiplicao e Diviso por 2.

Figura 2.14 - Diagrama Lgico de um registrador de deslocamento universal.
Funo de Entrada dos Flip flops:
DA0 = ILSL + X0P + A1SR
DA1 = A0SL + X1P + A2SR
DA2 = A1SL + X2P + A3SR
DA3 = A2SL + X3P + IRSR
Descrio:
Registradores so necessrios em sistemas digitais para armazenar temporariamente um grupo de bits.
Bits de dados (1s e/ou 0s) necessitam em sistemas digitais serem temporariamente copiados, movidos
ou deslocados de uma ou mais posies para a direita ou para a esquerda. Um registrador de
deslocamento facilita a manipulao desses bits de dados.
Muitos registradores de deslocamento podem lidar com movimento paralelo de bits, assim como
movimento serial, e podem ser usados para a converso paralela e serial paralela.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 20 de 173
Aplicaes de Registradores de Deslocamento
Converso paralela para serial;
Registrador em anel ou recirculante ;
Converso serial para paralela;
Contador em anel e Contador Johnson Shiff.
Exemplo: O Registrador de deslocamento 74164 8 bits entrada serial, sada paralela, possui duas
entradas seriais (DSa e DSp), lidas em sincronismo com a borda positiva do clock (CP). Cada borda do
pulso positivo deslocar os bits de dados uma posio para a direita. O MR ativo em LOW, isto , ele
zera todos os flip-flops quando possui pulso LOW.

Figura 2.15 - Diagrama de bloco do registrador 74164.

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 21 de 173


As memrias so circuitos eletrnicos capazes de reter informaes sob a forma digital, podem reter 1
bit e neste caso especial podem ser constitudos, por exemplo, de um Flip-Flop ou armazenar vrios bits
formando palavras ou dados.
Se este dado possuir 8 bits chamado BYTE, se possuir 16 bits chamado WORD mas tambm pode
conter quaisquer outras quantidades de bits.
Uma memria possui lugar para armazenar vrios dados, a estes lugares so chamados de Endereos.

3.1) TIPOS DE MEMRIAS
RAM (Random Access Memory) memria de acesso aleatrio, permite leitura e escrita de dados nos
diferentes endereos.
ROM (Read Only Memory) memria somente de leitura, permite apenas que seu contedo seja lido.
Estas memrias so programadas de fbrica e no podem ter seus contedos modificados.
PROM (Programable Rom) memria ROM programvel. So circuitos de memria que podem ser
programados apenas uma vez e depois desta programao no mais possvel escrever na memria,
apenas ler esta memria.
EPROM (Erase Prom) memrias ROM que podem ser programados e apagados com luz ultra violeta.
EEPROM ou E
2
PROM (Eletric Eprom) memrias EPROM que tambm podem ser apagadas
eletricamente.
RAM (SRAM) Em uma memria do tipo RAM, uma clula bsica capaz de armazenar apenas um bit,
que nada mais que o Flip-Flop do tipo D ou um Latch.
Observao: A memria RAM retm dados somente enquanto estiver alimentada. As demais retm
dados mesmo aps a falta de energia.

3.2) ARQUITETURA INTERNA DE MEMRIAS

Figura 3.1 - Latch (FLip-Flop D) com clock (gate) sensvel ao nvel.

Na figura 3.2, o sinal de clock necessrio para escrever na memria, o dado de entrada (D) e o dado de
sada (Q). Para ler e escrever numa memria seriam necessrios muitos pinos, porm s possvel ler
ou escrever nunca ler e escrever simultaneamente, para isto ser possvel e diminuir pela metade o
nmero de pinos de uma clula de memria foi desenvolvido com o esquema a seguir.

Figura 3.2 - Latch (FLip-Flop D) com clock (gate) sensvel ao nvel e buffer tri-state.

O terminal central do buffer o controle, se ativo est funcionando, caso contrrio est em tri-state.
CAPTULO 3 - MEMRIAS
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 22 de 173
O terminal /RD) WR ( Ler / Escrever controla a funo do pino D0:
Se estiver em 1 D0 sada (em nvel alto - Ler o dado)
Se estiver em 0 D0 entrada (nvel baixo - Escrever o dado).
Para projetar memrias de vrios bits e vrios endereos duas podem ser as estratgias de
arranjos dos latchs de memria, em linha ou em matriz.

3.2.1) EM LINHA

Figura 3.3 - Memria de duas posies (endereos) por dois bits (dados).

Na figura 3.3 um decodificador responsvel por selecionar apenas uma linha com clulas de memria
(C). Nesta linha cada clula responsvel por um bit do dado armazenado. Se desejarmos mais bits por
dado, basta adicionar mais colunas ao desenho acima, se desejarmos mais posies de memria, basta
adicionar mais linhas.
Este arranjo entretanto necessita de uma quantidade muito grande de portas lgicas para o decodificador
quando o nmero de endereos aumenta, por exemplo em 256 posies, seriam necessrios 256 portas
AND no decodificador e por isto os projetistas desenvolveram uma arquitetura de endereos em matriz.
3.2.2) EM MATRIZ

Figura 3.4 - Memria de quatro posies por dois bits.

A vantagem da utilizao de circuitos em matriz est no menor nmero de componentes gastos para
fazer o mesmo circuito do arranjo em linha.
Por exemplo, em 256 posies de memria, seriam necessrios dois decodificadores de 16 portas AND
(16 x 16 = 256). medida que nmero total de endereos da memria vai aumentando, aumenta
tambm a vantagem da utilizao arranjo em matriz.
No arranjo em matriz, esboado na figura 3.4, cada interseo de linha e coluna proveniente dos
decodificadores utilizada para controlar o tri-state de cada clula de memria. No arranjo em linha o tri-
state controlado por apenas um bit, no arranjo em matriz cada tri-state controlado por dois bits. Neste
arranjo, se desejarmos mais bits em cada posio de memria, basta ligar mais clulas de memria em
paralelo em cada interseco linha e coluna. Para aumentar o nmero de endereos basta aumentar o
nmero de linhas ou de colunas provenientes dos decodificadores.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 23 de 173
Em esquemas, uma memria representada por um retngulo com os pinos de dados, endereos e
controles devidamente assinalados. A nomenclatura usual denota os pinos de endereos pela letra A e
um sub ndice que denota o bit correspondente. Para dados utiliza-se a letra D tambm com um
subndice correspondente ao bit em questo. Para os sinais de controle os nomes so mais variados
porm muito comum encontrar CS (chip select) para o controle do tri-state e /R) W ( /Read) Write ( para
indicar a leitura ou a escrita nesta memria.


Figura 3.5 - Smbolo para uma memria genrica de (2
M+1
)

endereos por (n+1) bits de dados.

O terminal Select Chip ) CS ( usado para ligar vrias memrias em paralelo (para aumentar a
capacidade total de endereos). Internamente cada pino do chip de memria ligado a uma chave
analgica e que no ) CS ( estiver ativo, todas as chaves esto ligadas e o chip est ligado no circuito. Se
) CS ( estiver desativado, ento todas as entradas e sadas estaro desligadas ou seja em tri-state,
permitindo que outras memrias sejam ligadas no circuito.
Para aumentar a capacidade de uma memria, em termos de bits ou de posies, podemos associ-la
com outras memrias.

3.3) ASSOCIAO DE MEMRIAS
A associao de memrias tem o intuito de aumentar sua capacidade.

3.3.1) PARA AUMENTAR O NMERO DE SADAS
Utilizam-se os mesmos endereos (A
0
- A
n
), e os controles ) CS ( e /R) W ( em paralelo as memrias,
assim teremos suas atuaes simultneas, portanto com este processo teremos o aumento de sadas.


Figura 3.6 - Duas memrias de 16 endereos e 4 bits, formamos uma memria de 16 endereos e 8 bits.

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 24 de 173
3.3.2) PARA AUMENTAR O NMERO DE ENDEREOS
Utilizam-se neste caso o terminal de controle ) CS ( para especificar qual das memrias estar em
funcionamento, colocando todos os terminais restantes em paralelo, inclusive os terminais de barramento
de entrada/sada (I/O). A memria ativada pelo ) CS ( , estar com seus terminais de (I/O) ativados e
impondo-se ao barramento (D
0
-D
n
), e a memrias desativadas estaro com seus terminais de (I/O) em
tri-state.

Figura 3.7 - Duas memrias de 16 x 8 formamos a memria de 32 x 8, com o endereo A4 ligado ao ) CS ( .

Observao: A associao mais comumente utilizada para memrias a Associao Mista, ou seja,
com aumento do nmero de sadas e de endereos ao mesmo tempo.

3.4) CONSTRUO DE BANCOS DE MEMRIAS

3.4.1) BANCOS DE MEMRIAS
Freqentemente quando lidamos com sistemas microprocessados torna-se de especial relevncia o
conhecimento a respeito de bancos de memria e faixas de endereamento.

Exemplo: Memria 2764 (EPROM de uso geral): 27 = Prefixo
64 = 64 Kbits

Como a memria possui 64 Kbits e est organizada em palavras de 8 bits, ela possui, na verdade,
64Kbits / 8 bits = 8Kbytes.
A afirmao acima nos diz que existem 8K = 2
n
endereos distintos.

Sendo assim, a memria possui 2
n
= 8192 bytes, n = 13 pinos de endereamento. E atravs desses
pinos de endereamento que informamos memria a localizao exata da informao que ser lida ou
escrita na memria. Esses pinos so nomeados de A
0
at A
12
.

Essa memria possui o seguinte mapeamento de endereos:
Barramento de Endereamento
A
12
A
11
A
10
A
9
A
8
A
7
A
6
A
5
A
4
A
3
A
2
A
1
A
0

HEXADECIMAL
0 0 0 0 0 0 0 0 0 0 0 0 0 0000
0 0 0 0 0 0 0 0 0 0 0 0 1 0001
0 0 0 0 0 0 0 0 0 0 0 1 0 0002
. .
. .
. .
1 1 1 1 1 1 1 1 1 1 1 1 1 1FFF

Em cada um desses endereos cabe uma palavra de 8 bits (byte).
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 25 de 173
Essa memria pode ser esquematizada como na figura 3.8.

Figura 3.8 - Direo dos terminais da memria 2764

Exerccio: Construa o mapeamento das memrias : 27256 (EPROM) e 6016 (RAM).

3.4.2) MAPEANDO VRIAS MEMRIAS
Quando um sistema possui mais memrias compartilhando o mesmo barramento de dados, torna-se
necessrio fazer um mapeamento tal que as memrias no se sobreponham, ou seja, que nunca
acontea de duas ou mais estarem ativas simultaneamente.
Exemplo:
Deseja-se construir um sistema que possua uma EPROM 2716 e uma RAM 6064.
EPROM 2716 RAM 6064
16 Kbits / 8 2 Kbytes
2
n
= 2048 n = 11
(A
0
at A
10
)
64 Kbits / 8 8 Kbytes
2
n
= 8192 n = 13
(A
0
at A
12
)
Temos n
mximo
= 13 (RAM), utilizaremos para o mapeamento n = 14 para no haver conflito no acesso.
Tabela do mapeamento de memria
A
13
A
12
A
11
A
10
A
9
A
8
A
7
A
6
A
5
A
4
A
3
A
2
A
1

A
0
HEXADECIMAL
0 X X 0 0 0 0 0 0 0 0 0 0 0 0000 ou 0800 ou
1000 ou 1800

.
. . EPROM
. .
0 X X 1 1 1 1 1 1 1 1 1 1 1 07FF ou 0FFF ou
17FF ou 1FFF

1 0 0 0 0 0 0 0 0 0 0 0 0 0 2000
. .
. . RAM
. .
1 1 1 1 1 1 1 1 1 1 1 1 1 1 3FFF
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 26 de 173
Observe que a EPROM no ir utilizar A
11
e A
12
, sendo esses valores irrelevantes para a formao do
endereo. Desse modo, pode-se acessar toda a EPROM usando endereos entre 0000h e 07FFh, ou
entre 0800h e 0FFFh, ou entre 1000h e 17FFh, ou finalmente entre 1800h e 1FFh. Todas essas 4 faixas
de endereamento acessam a EPROM e so redundantes.

























Figura 3.9 - Circuito para o mapeamento da RAM 6064 e EPROM 2716.
Exerccios:
1. No exemplo anterior, inverta o posicionamento, ou seja a RAM antes da EPROM.
2. Projete um sistema que possua o seguinte mapeamento:
0000h a 3FFFh EPROM 1
7000h a 7FFFh EPROM 2
8000h a FFFFh RAM

3.5) CONSTRUO DE MEMRIAS
3.5.1) ROM
As ROMs so constitudas sob uma matriz como a mostrada na figura 3.10.

Figura 3.10 - Clula bsica da Memria ROM.
Nesta situao, a tenso de alimentao (VCC) levada para o terminal (D0) atravs do diodo. e a
tenso de terra at o terminal (D1) pois no h outra ligao em (D1) alm desta atravs do resistor.
A
0
D
0

EPROM
D
7
A
10



CS RD
A
0
D
0

RAM
D
7
A
10
A
11

A
12

CS RD WR
A
13
A
12
A
11
A
10
A
0

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 27 de 173

Figura 3.11 - Memrias ROM com vrios endereos.
O mapa (com contedos e endereos) desta memria est representado na tabela a seguir.

Endereo Contedo
0 5
1 0
2 F
3 A

3.5.2) PROM
Na construo de memrias PROM so colocados diodos em todas as intersees e em srie com eles
so colocados fusveis. Cada fusvel pode ser queimado colocando um 0 no bit correspondente no
endereo selecionado.
Uma vez programadas as PROMs no mais podero ser reprogramadas pois os fusveis queimados no
podem ser restitudos.

Observaes:
Tanto a ROM como a PROM podem ser colocadas em tri-state (como a RAM) por meio de um pino
de chip select. Pinos de leitura e escrita no existem pois os dados s podem ser lidos.
No caso da PROM um sinal de 15V utilizado para queimar os fusveis desejados, programando a
memria.

3.5.3) EPROM
Para uso nas EPROMs componentes especiais sensveis luz ultravioleta foram desenvolvidos,
permitindo que os dados gravados nesta PROM sejam apagados sobre a incidncia desta luz, tornando
possvel reescrever novos dados. Para que a funo de apagamento de dados seja viabilizada, existe
nesta memria uma janela de cristal transparente sobre os componentes para que a luz ultravioleta
recebida. Com o tempo se esta janela de cristal ficar aberta e exposta a luz os dados podem se apagar,
por este motivo quando esta memria estiver com seus dados gravados, deve-se fechar a janela com
algum material opaco.

3.5.4) EEPROM (E
2
PROM)
O desenvolvimento de circuitos de tornou este tipo memria a caracterstica de ser apagada com um
pulso eltrico da ordem de 10 volts. Isto uma grande vantagem sobre as EPROMs pois o processo de
apagar a memria rpido (com luz ultravioleta demora vrios minutos) e no requer componentes
especiais como lmpada de ultravioleta. Atravs desta inovao foi possvel a retirada das janelas de
cristal que encareciam as memrias EPROMs.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 28 de 173
3.5.5) DRAM
As memrias DRAMs (dimanic RAM) so menores, mais baratas e mais rpidas que as SRAMs
(memrias RAM estticas construdas atravs da incorporao de um flip-flop para cada bit), pois 1 bit
pode ser armazenado em um nico capacitor, atravs do acionamento de um nico transistor (figura
3.12).
Devido a corrente parasita dos capacitores que compe sua construo, as DRAMs necessitam ser
dinmica, ou seja, necessrio atualizar os dados contidos nestas memrias periodicamente, este
procedimento conhecido como REFRESH. Devido ao baixo custo destas memrias, as DRAMs se
popularizaram rapidamente

Figura 3.12 - Clula da memria DRAM.











Legendas da Figura
ADD - Address (Endereo)
RAS - Row Address Strobe (Habilitao do endereo de linha)
CAS - Column Address Strobe (Habilitao do endereo de coluna)
WE - Write Enable (Habilitao de Escrita)
Data In - Data Input (Dados de entrada)
Data Out - Data Output (Dados de sada)
Figura 3.13 - Esquema interno de uma 41256 (DRAM de 256K x 1) e os sinais necessrio para controle.

Ciclo de Refresh
A operao de refresh depende muito da memria, na 41256 ela deve acontecer a cada 4 ms (no
mximo) e deve ser executado endereando-se metade das linhas da matriz de memria (neste caso
256 linhas em 4 ms = 15,6 ms/linha).
Como podemos ver pela figura 3.13, s possui 9 terminais de endereo para os 256 Kbits de memria,
mas isto resolvido pelo sistema de endereo por linhas e colunas (RAS e CAS se encarregam de
indicar se o endereo do barramento de linhas ou de colunas).
Um esboo de circuito para controlar estas memrias pode ser visto na figura 3.14, mas alguns circuitos
integrados so desenvolvidos exclusivamente para este trabalho. O esquema abaixo utiliza a 4164 que
possui 64 Kbits e 8 linhas de endereo.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 29 de 173

Figura 3.14 - Circuito de controle para a memria DRAM 4164.
Observao: Com relao ao circuito da figura 3.14, note que o endereo deve ser de 16 bits
multiplexado em palavras de 8 bits.

3.5.6) PLAS ou PLDs
So Array Lgico Programvel e pode conter milhares de componentes internos, algumas variantes
existem e a programao pode ser feita na fbrica com mascaras especiais ou com elementos fusveis
ou com fios.
So componentes capazes de gerar lgicas complexas com um nico chip. Estes componentes tambm
precisam ser programados funcionando de forma similar as PROM.
Atualmente existem infinidades de componentes deste tipo, capazes inclusive de conter flip-flops,
contadores e outros componentes mais complexos. Alguns destes circuitos possuem internamente vrios
circuitos independentes e completos que podem ser interligados de vrias formas.

Todas as entradas de A0 a A4 so interligadas em todas as entradas das portas AND e todas as sadas das portas
AND so interligadas nas entradas das portas OR

As funes de OUT
0
at OUT
N
- so escritas na forma de SOP.
Figura 3.15 - Exemplo simples de um circuito capaz de gerar qualquer lgica de 4 bits.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 30 de 173


4.1) CONVERSOR DIGITAL/ANALGICO (D/A)
A tarefa de um conversor D/A a de transformar entradas digitais em sada analgica. Um nmero
binrio introduzido nas entradas esquerda com uma tenso de sada correspondente direita. A
tabela-verdade detalha um conjunto de possveis entradas e sadas do conversor D/A.

Figura 4.1 - Funo do conversor D/A .

Tabela Verdade


Consideremos a tabela-verdade para o conversor D/A. Se cada uma das entradas for BAIXA, a tenso
de sada (Vout) ser 0 V conforme definido na coluna (fila 1) da tabela. A (fila 2) mostra apenas a entrada
A (1s) sendo ativada por um nvel ALTO. Com a entrada como LLLH (0001), a sada do conversor D/A
1 V. A (fila 3) mostra apenas a entrada B ativada (0010). Isto produz uma sada de 2 V. A (fila 5)
mostra apenas a entrada C ativada (0100), isto produz uma sada de 4 V. A (fila 9) mostra apenas a
entrada D (1000) ativada, produzindo uma sada de 8 V do conversor D/A. Notar que as entradas (D, C,
B, A ) so ponderadas. A ponderao relativa de cada entrada dada como 8 para a entrada D, 4 para a
entrada C, 2 para a entrada B e 1 para a entrada A na figura 4.1.
O conversor D/A consiste em duas partes funcionais. O conversor dividido numa rede de resistores e
num amplificador de soma. A rede de resistores pondera adequadamente as entradas 1s, 2s, 4s e 8s,
enquanto o amplificador de soma escala a tenso de sada de acordo com a tabela verdade.
2s
CAPTULO 4 - CONVERSORES A/D E D/A
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 31 de 173

Figura 4.2 - Diagrama em blocos de um conversor D/A.

Tipicamente usa-se um amplificador operacional como o amplificador de soma num conversor D/A (figura
4.3).
O conversor D/A est dividido em dois circuitos, a rede de resistores e o amplificador somador. A tenso
(Vin) de entrada aplicada atravs das chaves de entrada (D, C, B, A). O resistor R4 (MSB) o resistor
de valor mais baixo. O resistor R3 o dobro da resistncia de R4. Tambm o resistor R2 o dobro da
resistncia R3, e assim por diante.
Observao: O ganho de tenso (Av = Vsada/Ventrada) do amplificador operacional montado na figura
4.3 dado pela relao (Rf/Rn), assim sendo, Av = Rf/Rn.


Figura 4.3 - Conversor bsico digital-analgico.

A converso de nmeros binrios (valores digitais) para nmero analgico (valor analgico) realizada
por circuitos lineares capazes de somar tenses ou correntes com pesos proporcionais aos pesos dos
bits que produziram esta corrente ou tenso. Sero abordadas duas tcnicas muito empregadas:
Correntes ponderadas e rede R-2R. Alguns CIs realizam a converso D/A fazendo uso destas tcnicas.
Estes CIs ainda oferecem recursos como: trabalhar com aritmtica com sinal (nmeros binrios positivos
negativos), em complemento de dois e ajuste de ganhos (escalas de tenso de sada).
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 32 de 173
4.1.1) CORRENTES PONDERADAS



Figura 4.4 - Circuito de um conversor A/D por correntes ponderadas.


O circuito das chaves, no exemplo anterior, poderia ser substitudo diretamente pelas entradas digitais e
neste caso VCC corresponderia ao nvel lgico 1 destes circuitos digitais.
Entretanto como sabemos a sada digital zero (0) ou um (1) no corresponde a tenses com valores
exatos como +5V ou +0V. Existe uma faixa de valores possveis para 1 lgico e 0 lgico que podem
vir a produzir tenses analgicas diferente da desejada.
Para evitar este tipo de problema podemos usar transistores funcionando como chave (aberto ou
saturado) para comutar uma tenso fixa a cada entrada do circuito somador como mostrado no exemplo
a seguir.


Figura 4.5 - Circuito de um conversor A/D por correntes ponderadas utilizando transistores como chave.

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 33 de 173
4.1.2) REDES R-2R


Figura 4.6 - Circuito de um conversor A/Dcom redes R - 2R.
Para resolver este problema, basta usar o Teorema de Thevenin e o Teorema da Superposio.

Onde V a tenso VCC ou VREF (dos exemplos anteriores) e n
i
indica se o bit i esta ou no ligado:

No primeiro mtodo (correntes ponderadas) de converso apresentada, o valor dos resistores deve ser
muito diferente, no caso de um resistor R = 10 e um conversor de 12 bits, precisaremos usar resistores
de valores 4096 vezes maiores ou menores:

Isto faz com que as correntes tambm tenham esta diferena ou seja, um erro de alguns porcentos na
maior corrente pode produzir um erro bem grande no valor final da converso.
No segundo mtodo (rede R-2R) so necessrios resistores de valores casados, para que tambm no
haja erros significativos no valor da tenso analgica de sada. Isto pode ser contornado com o uso de
resistores integrados.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 34 de 173
4.2) CONVERSOR ANALGICO/DIGITAL (A/D)
O conversor analgico-digital (A/D) inverte o processo do conversor D/A. Uma tenso analgica
desconhecida introduzida neste conversor e fornece uma sada binria correspondente. A sada
binria ser proporcional entrada analgica. Na figura 4.7 mostra um conversor que tem uma tenso
de entrada analgica na faixa de 0 a 3 V. A sada binria ser ento lida em forma binria de 0000 a
1111.
Observao: Notar que o conversor A/D tambm tem uma entrada de relgio (clock).

Figura 4.7 - Diagrama de blocos de um conversor A/D de 4 bits.

A tabela-verdade detalha a operao do conversor A/D. Notar que o lado de entrada da tabela mostra as
tenses de entrada analgicas, enquanto o lado de sada fornece a correspondente leitura binria.
Tabela Verdade do Conversor A/D


O conversor A/D um contador crescente que entra em seqncia para cima de acordo com a tabela
verdade at que a tenso correta seja alcanada. Se a tenso de entrada do conversor A/D descrito na
tabela verdade for 2,95 V, a unidade atravessar 15 ciclos at que a contagem do binrio 1111 seja
alcanada e exibida. A anlise da operao do conversor A/D consome tempo no entanto o circuito
opera muito rapidamente baseado na freqncia do clock de entrada. A freqncia do clock num
conversor A/D pode exceder 1 MHz.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 35 de 173

Figura 4.8 - Diagrama esquemtico de um conversor A/D em rampa de 4 bits.

O conversor A/D ilustrado na figura 4.8 um dos vrios tipos usados. O contador e o conversor D/A
formam uma tenso que aumenta gradualmente (de forma semelhante a uma rampa) que realimentada
ao circuito comparador. Um tipo de unidade muito rpida o de aproximaes sucessivas. Estes so
bastante comuns mas so mais complexos do que os conversores do tipo rampa.
Conversores A/D so usados em qualquer lugar em que uma tenso de entrada analgica deve ser
transformada em forma binria ou digital. Muitos processos industriais usam uma interface deste tipo.
Um exemplo comum do uso do conversor A/D o voltmetro digital. O conversor A/D transforma a tenso
de entrada analgica em binrio. O binrio decodificado, e uma leitura decimal digital de sada
prontamente obtida.

Diversos circuitos para realizar a converso A/D esto disponveis. Destes conversores, apenas um
deles realiza a converso diretamente. Este conversor conhecido por Conversor Flash e muito
rpido. As outras formas de converso utilizam circuitos realimentados onde o valor digital
(correspondente ao valor analgico) obtido pela comparao do valor analgico com o valor
digitalmente estimado para ele. Estes circuitos so muito baratos, por outro lado so mais lentos visto
que o valor digital da sada deve ser adivinhado e isto leva tempo. Deste outro tipo de conversor
podemos citar aqueles por aproximao aritmtica, delta e geomtrica ou sucessiva.

4.2.1) CONVERSOR FLASH

Se V
in
> V
Ref i
a sada de todos os comparadores com i inferiores e o prprio comparador ndice i tem sua sada
em nvel baixo.
Figura 4.9 - Diagrama do Conversor Flash com A.O.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 36 de 173
Tabela do Conversor Flash


Poderamos ter invertido as entradas dos operacionais bastando para isso trocar a lgica do codificador
com Prioridade.
As caractersticas principais deste conversor so:
Muito rpido.
Custo elevado.
Nmero reduzido de bits.

4.3) CIRCUITOS REALIMENTADOS


Figura 4.10 - Diagrama de blocos do conversor realimentado.

4.3.1) CONVERSOR POR APROXIMAO ARITMTICA.


Figura 4.11 - Diagrama de blocos do conversor por aproximao aritmtica.

Quando o sinal iniciar solicita uma converso, o bloco controlador amostra o sinal de entrada, zera o
contador, testa a sada do comparador. Se A>B incrementa contador at que A B. Neste ponto o bloco
controlador carrega o valor do contador para sada.
As caractersticas deste conversor so:
Tempo mdio de converso:
2
2

pulsos de clock onde o nmero de bits do conversor.


1
2

=

conv
T
Lento.
Barato.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 37 de 173
4.3.2) POR RASTREIO OU APROXIMAO DELTA.


Figura 4.12 - Diagrama de blocos do conversor por rastreio ou aproximao delta.
A diferena deste circuito para o anterior que neste caso o contador no zerado no incio da
converso, o valor inicial para a estimativa da tenso analgica , ento, o valor anterior da converso.
Isto diminui (ou pelo menos deveria) o tempo mdio de converso haja visto que os valores da tenso
no devem mudar muito.
A caractersticas que o diferencia do conversor por aproximao aritmtica o tempo, resultando em:
Tempo mdio de converso =
) 2 (
2

onde o nmero de bits do conversor.

4.3.3) POR APROXIMAO GEOMTRICA OU SUCESSIVA


Figura 4.13 - Diagrama de blocos do conversor por aproximao geomtrica ou sucessiva .

Quando o sinal Iniciar solicita uma converso, o bloco controlador amostra o sinal de entrada seta o
F.F. mais significativo, se o valor analgico for maior ou igual ao obtido por esta aproximao, o F.F.
seguinte setado caso contrrio , este F.F. (o mais significativo) Zerado e o seguinte Setado. Este
processo continua at a converso estar completa.
Quando isto ocorre o bloco controlador carrega o registrador com o valor digital correspondente a
tenso de entrada analgica e o sinal de fim de converso gerado.
Em outras palavras, o que este conversor faz diminuir o nmero sempre ao meio para estimar o valor
da tenso de entrada, ao invs de ir incrementando um contador de 1 em 1 at acertar.
As caractersticas deste conversor so:
Tempo mdio de converso igual a (onde o nmero de bits da A/D).
Dentre os mtodos realimentados, este o mais rpido.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 38 de 173
Os conversores A/Ds apresentados at aqui so usados basicamente para processar digitalmente sinais
analgicos. Neste caso, inmeras amostragens so realizadas sucessivamente para que se possa
acompanhar o sinal analgico. Em sistemas desta natureza, existem basicamente duas abordagens:
As converses so realizadas o mais rapidamente possvel, uma aps a outra;
As converses so realizadas a intervalos de tempo regulares, a uma freqncia fixa.

Para trabalhar matematicamente com estes sinais, a segunda forma preferida porm deve-se ter o
cuidado de fazer a freqncia do sinal (freqncia de Niquisty) ser metade da freqncia de
amostragem. Quando amostramos sinais analgicos, devemos fazer a freqncia de amostragem maior
que duas vezes a maior freqncia continua no sinal amostrado.
Deve ser lembrada tambm nestas situaes a importncia do Sample & Hold. O Sample & Hold
importante para que o valor analgico se mantenha constante durante o tempo da converso, isto
produz, valores confiveis na sada do A/D e valores correspondentes a tenso de entrada no incio da
converso.
Sero vistos a seguir outros conversores mais lentos que esto disponveis para outras aplicaes como
multmetros digitais, balanas eletrnicas, medidas de tempo, freqncia, velocidade e distncia.

4.3.4) Dupla Rampa. (Usado em Multmetros)


Figura 4.14 - Diagrama de blocos do conversor de dupla rampa e sua rampa gerada .

Numa primeira etapa este conversor integra a tenso desconhecida da entrada, por um tempo fixo e
conhecido at que o bit mais elevado do contador troca posio da chave na entrada do circuito. Logo
a seguir, feita uma integrao de uma tenso conhecida num tempo desconhecido. Assim temos duas
equaes e duas incgnitas. Podemos equacionar este conversor da seguinte forma:
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 39 de 173


As caractersticas deste conversor so:
Lento
Preciso

4.4) GLOSSRIO
DUTY CYCLE: (Razo Cclica): A razo entre a durao de tempo em que a onda peridica HIGH pelo
perodo total da onda.
FLOAT (Flutuao): A condio na qual a entrada ou a sada em um circuito no HIGH tampouco LOW
devido ao fato de no estar conectado diretamente a um nvel de tenso high ou low.
HOLD TIME (Tempo de espera): A durao de tempo, depois da borda do clock estar ativa, que deve ser
respeitado at que os dados estejam seguros para o seu reconhecimento.
HYSTETESIS (Histerese): Em digitais, especialmente nos CIs Schmitt triggers, Histerese a diferena
de tenso entre o nvel positivo de chaveamento e o nvel negativo de chaveamento.
JITTER (Tremor): Termo usado em eletrnica digital para descrever formas de onda que possuem algum
grau de rudo eletrnico, causando rudo na subida e queda entre e durante a transmisso do nvel.
POWER-UP (Energizar): Termo usado para descrever o evento ou estado inicial quando se liga um CI
ou sistema digital.
PULL DOWN RESISTOR: Resistor com uma terminao ligada a LOW e a outra conectada na entrada
ou sada de uma linha, tal que, quando a linha est flutuando a tenso nesta linha ser instantaneamente
colocada no estado LOW.
PULL UP RESISTOR: Resistor com uma terminao ligada a HIGH e a outra conectada na entrada ou
sada de uma linha, tal que, quando a linha est flutuando a tenso nesta linha ser instantaneamente
colocada no estado HIGH.
RACE CONDITION (Condio de mudana): A condio na qual o nvel digital (1 ou 0) est mudando de
estado no mesmo instante em que a borda de clock de um dispositivo sncrono, faz com que o nvel do
sinal de entrada neste tempo seja indeterminado.
SPST SWITCH (Chave SPST): Abreviao de plo simples, polo throw. Uma chave SPST usada para
fazer ou interromper o contato com uma linha eltrica simples.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 40 de 173
BUFFER: Em geral chamamos de buffer o circuito que tem por objetivo o armazenamento temporrio de
informaes (pequena memria de alguns bits ou Bytes).
DRIVER (Conduzir): Amplificador de corrente. Usado quando temos que interligar equipamentos a uma
distncia relativamente grande, ou ampliar a capacidade de fornecimento na sada de uma porta.
FIRMWARE: Programa associado a um hardware para a execuo de funes especficas. Ex:
programa gravado em eprom e memria BIOS.
TRI-STATE (Terceiro estado): Nome dado quando o sistema est fisicamente ligado, porm no interfere
no sistema devido alta resistncia apresentada (seu valor no 0 e tampouco 1, como se estivesse
desconectado do circuito).
LATCH: Componente eletrnico que tem a funo de trava de informaes. O latch funciona como
uma porta com comando, quando ativada pelo comando deixa passar a informao presente em suas
entradas para suas sadas, quando inativa pelo comando faz com que a informao na sada no se
altere independente das alteraes na entrada.
MAPEAMENTO REDUNDANTE: Cada endereo decodificado no nico. O decodificador projetado
para separar apenas os dispositivos entre si. Este tipo apresenta hardware menos complexo.
MAPEAMENTO NO REDUNDANTE: Cada endereo decodificado nico. Constri-se o decodificador
utilizando o menor espao de memria. Este tipo de decodificao necessita de um hardware bastante
complexo.
CHIP SELECT (Seleo do integrado): Este pino est presente na grande maioria dos dispositivos
associados a microprocessadores.
Como todos os dispositivos (EPROM, RAM, I/O) esto ligados via de dados (D0 ... D7), os mesmos
devem estar sempre em alta impedncia para evitar que enquanto um bit esteja em 0, outro esteja em
1, ocasionando um conflito e at mesmo danificando o sistema.
Normalmente todos os dispositivos esto com o CS em 1, e somente ir a 0 aquele dispositivo que
est sendo acionado e apenas durante o tempo necessrio.
Estes tempos e esta seleo so efetuados por circuitos lgicos conhecidos como
DECODIFICADORES DE ENDEREO.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 41 de 173



5.1) REVISO HISTRICA
A rpida evoluo da eletrnica particularmente na segunda metade do sculo XX, provocou uma
mudana profunda no homem moderno. Os pases ficam cada vez mais prximos, graas inicialmente ao
rdio, depois televiso e hoje em dia com os satlites, pode-se instantaneamente ver qualquer lugar do
planeta. Pudemos ver o homem pisando pela primeira vez na Lua e tambm imagens recm enviadas de
Marte, Jpiter, Saturno e Pluto.
Alm dos meios de comunicao, recordemos os avanos da medicina, meteorologia, transportes,
cincia pura e aplicada, prospeco de petrleo e tambm o controle e melhoria do meio ambiente.
Pelo lado da eletrnica afirma-se que um grande agente deste progresso foi o computador, que provocou
uma realimentao positiva nas pesquisas. O computador permitiu pesquisas mais rpidas e precisas;
com isto muitas cincias se beneficiaram inclusive a tecnologia eletrnica que passou a fabricar circuitos
mais rpidos e eficientes. Com isso podem-se construir computadores mais eficientes que por sua vez
melhoraram ainda mais a eletrnica e assim sucessivamente.
Desde as simples calculadoras de vlvulas programadas por fios da dcada do 40 at os
supercomputadores dos dias de hoje foi percorrido um caminho muito grande. No meio deste caminho no
incio da dcada do 70, com o avano dos LSI vimos surgir os microprocessadores e os computadores
pessoais.

5.1.1) DATAS IMPORTANTES NO DESENVOLVIMENTO DOS COMPUTADORES:
1948 - John Barden, Walter Bratain e William Shockley inventam o Transistor no BELL LABS.
1959 - TEXAS INSTRUMENTS cria o primeiro Circuito Integrado (CI) onde em um mesmo substrato
de cristal eram integrados vrios transistores.
1964 - DIGITAL comea a vender o PDP-8, o primeiro computador com preo acessvel aos
laboratrios.
1968 - Surge a INTEL.
1971 - INTEL fabrica o 4004 o primeiro microprocessador que tinha uma arquitetura de 4 bits. Surge
a dia de integrar todo o circuito de controle em um nico CI que passou a chamar-se
microprocessador.
1974 - INTEL desenvolve e produz o primeiro microprocessador de 8 bits, o 8080. Neste mesmo ano
Kernighan e Ritchie formalizam a linguagem C.
1975 - ZILOG comea a vender o Z80 e a MOS TECHNOLOGY comea a vender o MC6501
(US$20,00) e o MC6502 (US$ 25,00). Nesta poca um 8080 custava US$ 150.
1976 - INTEL produz o primeiro microcontrolador o 8048 e o 8748. Neste mesmo ano a INTEL iniciou
o projeto do 8086. A TEXAS INSTRUMENTS produz o TMS 9000 primeiro microprocessador de 16
bits. APPLE COMPUTER tambm surge neste ano.
1977 APPLE Computer produz o APPLE II (US$1.298,00) com processador Motorola 6502 (8 bits).
1978 INTEL comea a produzir o 8086 e tambm alguns derivativos do 8048, o 8041 e o 8741.
1979 INTEL distribui o 8088.
CAPTULO 5 - MICROPROCESSADORES
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 42 de 173
1980 INTEL inicia o que seria a famlia de microcontroladores de maior sucesso os 8051 e 8751.
Neste mesmo ano tambm produz o 8087. A APPLE COMPUTER produz o APPLE III, que estava
destinado ao fracasso.
1981 IBM passa a dedicar-se aos sistemas de pequeno porte com o IBM PC que consistia da CPU
8088, 64KB RAM, 40 KB ROM, floppy 5,25" (US$3.005,00).
1982 INTEL inicia a venda dos 80186, 80188 e 80286. Tambm comea a vender o primeiro
microcontrolador de 16 bits o 8096 (famlia MCS-96).
1983 - Com os 80C51 e 80C49 a INTEL comea a distribuir microcontroladores CHMOS de menor
consumo de energia. A APPLE COMPUTER produz o LISA, tambm destinado ao fracasso. A AT&T
comea a distribuir o UNIX System V. A IBM anuncia o PC XT (US$ 4.995,00) e o PC Jr.
(US$1.269,00).
1984 - Surge o IBM PC AT com 80286, 256 KB RAM, floppy de 1,2 MB (US$ 5.469,00). A APPLE
COMPUTER produz o que viria a ser um grande sucesso: o MACINTOSH (US$ 2.495,00).
1985 INTEL produz o 80386DX (16 MHz, 6 MIPS).
1986 COMPAQ fabrica o primeiro computador 386, o COMPAQ DESKPRO 386.
1988 INTEL fabrica o 80386SX (16 MHz, 2,5 MIPS).
1989 INTEL fabrica o 80486DX (25 MHz, 20 MIPS).
1991 INTEL fabrica o 80486SX (20 MHz, 16,5 MIPS).
1992 INTEL fabrica o 80486DX2 (50 MHz, 40 MIPS).
1993 INTEL fabrica o PENTIUM (60 MHz, 112 MIPS).

5.1.2) O DESENVOLVIMENTO DOS MICROPROCESSADORES E DOS MICROCONTROLADORES,
FABRICANTES:
INTEL
4004 8008 8080 8085 8086 (8088) 80286 80386 486 P5 PII PIII PIV
MOTOROLA
6502 6509 68000 68010 68020 68030 68040 68060 PowerPC
ZILOG
Z80 Z800 Z8000
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 43 de 173
5.2) ARQUITETURAS DE MICROPROCESSADORES

5.2.1) ARQUITETURA C.I.S.C. VERSUS R.I.S.C.
A partir do 4004, com 46 instrues comeava a escalada dos microprocessadores (sero, daqui para
frente referidos apenas como P) rumo a P's mais complexos e com maior nmero de instrues. O
8008 possui 48 instrues. O 8080, 78 instrues. O 8085, aproximadamente 150 instrues, o Z80,
mais de 500, o 8086/8088 j possui mais de 700 instrues e o 80386, mais de 1500 instrues.
Isso nos mostra que com o aumento do nmero de instrues tambm crescia o nmero e a
complexidade dos circuitos internos do P. Alguns P de arquitetura CISC atuais possuem um
gigantesco volume de transistores incorporados. Os Ps 80x86 da Intel utilizados nos PCs so um
exemplo tpico de processadores CISC. H algum tempo a preocupao nos projetos de P's passou a
ser a velocidade de processamento e no a sua complexidade. Por isso foram criados Ps com conjunto
reduzido de instrues (menos de 250 instrues) mas com alta velocidade de processamento (RISC).
CISC = Complex Instruction Set Code
RISC = Reduced Instruction Set Code

O ciclo de projeto de um P CISC muito longo e difcil. O volume de testes para certificao do seu
funcionamento muito grande e a preocupao com a otimizao do circuito para ganhar velocidade s
vem depois do pleno estabelecimento do novo. Em contrapartida Ps RISC tem um ciclo de projeto bem
mais curto. Alm disso o enfoque dado elevao das taxas de "clock" e uso de barramentos "largos"
(64 bits ou 128 bits). Em geral o desempenho de Ps RISC costuma ser melhor que Ps CISC.
Outro aspecto importante o tamanho dos programas, imagine um programa que faa uma
movimentao de dados de 1.000 bytes de uma parte da memria para outra. Em um P CISC esse
programa curto, podemos supor algo em tomo de 5 ou 6 bytes, isso porque utiliza instrues
complexas. Em um P RISC a mesma tarefa pode ser desempenhada por um programa maior, algo em
torno de 10 a 15 bytes. Esse P possui instrues muito simples e certamente precisaria de vrias
instrues para uma tarefa feita por uma nica instruo complexa. Isso nos permite concluir que os
programas de P RISC so maiores.

5.2.2) ARQUITETURAS HARVARD VERSUS VON NEUMANN
Na arquitetura Harvard h dois barramentos de endereos independentes e dois de dados tambm
independentes. Enquanto um desses barramentos serve para a leitura de instrues de um programa, o
outro serve para a leitura e escrita de dados. Com isso possvel operar simultaneamente uma instruo
e um byte de dados, isso garante maior velocidade de processamento. Atualmente os processadores de
sinais digitais (DSP) utilizam essa arquitetura, so processadores especializados no processamento
dos sinais em tempo real.


Figura 5.1 - Arquitetura Harvard.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 44 de 173
Na arquitetura Von Neumann h apenas um barramento de dados e um de endereos, neste caso as
instrues estariam em uma faixa de endereos que ative a memria que possui as instrues, e os
dados esto em outra faixa de endereos que ative outra memria onde se pode ler e escrever os dados.
Por exemplo qualquer endereo entre 0000h e 1FFFh ativa a memria de programas e entre 8000h e
FFFFh ativa a memria de dados. Nessa arquitetura s possvel o acesso a uma memria de cada vez.
Comparando ambas conclui-se que Harvard mais veloz mas exige mais de um barramento, Von
Neumann utiliza apenas um barramento mas no pode efetuar acessos simultneos s memrias.
Alguns processadores possuem uma arquitetura mista. Os 8051 possuem apenas um barramento mas
utiliza sinais de requisio de leitura de memria independente, uma para programa outro para dados.

Figura 5.2 - Arquitetura Von Neumann.

5.3) FLUXO DE DADOS EM BARRAMENTOS
O diagrama esquemtico da figura 5.3 exemplifica o funcionamento de um barramento.


Figura 5.3 - Barramento com registradores A, B, 1, 2 e Somador.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 45 de 173
Para realizar a transferncia simples de dados do registrador RA para o registrador RB, fazemos o sinal
RA
OUT
= 1 para conectar a sada do registrador RA ao barramento. Com isso temos certeza que os bits
presentes em RA so levados a todo o barramento. Para completar a transferncia aplicamos um pulso
de CLOCK na entrada RB
in
.
At mesmo nas operaes matemticas e lgicas so usadas transferncias.

No sistema podemos perceber que o fluxo dos dados dos registradores comandado exclusivamente
pelos "sinais de controle". O conjunto de todos os sinais de controle de um sistema compe o que
chamamos MICROINSTRUO. A seqncia correta das microinstrues pode realizar diversas
tarefas dentro do sistema digital.
Imaginemos que o sistema deva somar RA com RB e armazenar o resultado em RA.

Um barramento como uma avenida de sinais que interconectam todos os registradores de um
sistema digital. Para isso importante que um registrador tenha uma conexo bidirecional com o
barramento podendo ler e escrever bits nele.
Imaginemos um registrador simples de 4 bits e como poderia ter uma ligao bidirecional ao barramento:



Figura 5.4 - Registrador bidirecional conectado ao barramento

Os dado podem ser transportados de um registrador par outro obedecendo aos sinais de controle R
IN
e
R
OUT
.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 46 de 173
5.4) ARQUITETURA INTERNA DO MICROPROCESSADOR
Embora cada P tenha suas peculiaridades, a grande maioria deles guarda grandes semelhanas
quanto ao seu modo geral de funcionamento. A figura 5.5 ilustra a arquitetura bsica de um
processador.



Figura 5.5 - Arquitetura interna de um microprocessador genrico.

5.4.1) GLOSRIO DO MICROPROCESSADOR
Registrador de Propsito Geral
So registradores nomeados de Reg. A at D. O nmero desses registradores varia de P para P.
No 8085 so 8 registradores de 8 bits, no Z80 so 16 registradores de 8 bits, no 8031 so 8
registradores de 8 bits, no MCS 6502 so 3 registradores de 8 bits, etc.

Unidade Lgica Aritmtica (ULA)
Essa unidade possui operaes AND, OR, XOR bit a bit, incrementador e decrementador, somador,
subtrator, em alguns Ps existem multiplicador e divisor, tudo integrado em uma nica unidade.
Portanto todas as operaes lgicas e aritmticas do P passam obrigatoriamente por esta unidade.

Registrador Temporrio
Serve apenas para armazenar um dos operandos da ULA.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 47 de 173
Acumulador
Trata-se de um registrador especial dedicado s operaes envolvendo a ULA. Este registrador
um dos operandos envolvidos nas operaes da ULA e tambm o registrador que guarda o
resultado dessa operao. Assim como o registrador de propsito geral admite transferncia
bidirecional.

Program Counter (PC)
Neste registrador o P guarda o endereo de memria onde est lendo as instrues do programa.
O P usa esse contedo para informar a memria o endereo onde est a instruo, faz a leitura
dessa instruo e guarda a instruo lida no REGISTRADOR DE INSTRUO. Logo aps ter lido a
instruo, o contedo do registrador PC automaticamente incrementado para que o P possa ler a
prxima instruo.

Registrador de Instruo
nesse registrador que o P guarda a instruo lida da memria para que possa ser decodificada e
executada.

Decodificador de Instruo e Unidade de Controle
Quando a instruo lida da memria ela no passa de um byte qualquer lido da memria. Como
saber qual a instruo que corresponde a esse byte e como tomar as devidas previdncias (micro-
instrues) para fazer o que a instruo est mandando? Cada registrador precisa ser conduzido
pelos seus sinais de controle R
IN
e R
OUT
. No s os registradores mas todo o sistema precisa ser
comandado pelos sinais de controle para que o sistema possa funcionar. Esses sinais de controle
precisam obedecer a uma seqncia adequada para que no ocorram conflitos. A instruo lida
passa por uma unidade com um nmero imenso de portas lgicas que geram os sinais de controle
de todo o sistema. Pode-se dizer que essa unidade realmente o crebro de todo o sistema.

Unidade de Deslocamento
Essa unidade contm um registrador de deslocamento srie bidirecional e capaz de realizar um
deslocamento dos bits esquerda ou direita ou ento no realizar deslocamento nenhum.


Figura 5.6 - Unidade de Deslocamento.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 48 de 173
5.5) SINAIS DE CONTROLE ENTRE P E MEMRIA
Para que o P possa se comunicar com as memrias so necessrios alguns sinais de controle:

Endereos (A
0
...A
n
) Esse conjunto de sinais serve para localizar a informao dentro da memria.
Dados (D
0
... D
n
) Tratam-se dos bits que conduziro o byte lido da memria para P ou do P para
ser escrito na memria (somente a RAM permite escrita).
RD (Read) Sinal enviado pelo P requisitando que a memria coloque no barramento de dados
(D
0
...D
n
) o byte previamente endereado. O P l esse byte e logo aps desativa o sinal RD. Na
grande maioria dos sistemas digitais esse sinal ativo em nvel baixo ( RD).
WR (Write) Sinal enviado pelo P requisitando que a memria armazene o byte presente no
barramento de dados <D
0
...D
n
) no endereo presente no barramento de endereos (Ao...A
n
) (o byte e
o endereo j devem estar preparados antes da ativao deste sinal). Assim como RD normalmente
ativo em nvel baixo (WR ).

5.5.1) EXEMPLO DE LEITURA
Supondo que uma dada regio da memria contenha os bytes relacionados na tabela:

... ...
1017 1F
1018 61
1019 75
101A C0
... ...
Trecho de memria com
contedo qualquer

Figura 5.7 - Exemplo de leitura de dados da memria.

1) O P coloca o endereo no barramento de endereos (ex. 1019H). Note que a memria usa somente
A
0
at A
12
e que A
13
causa a ativao da memria.
2) O P requisita que a memria coloque no barramento o byte apontado no barramento de endereo.
Para isso faz RD = 0.
3) O P l o barramento de dados (ex.: 75H) e logo a seguir desativa a requisio de leitura: RD = 1.
4) Como o endereo j no mais necessrio o P libera o barramento de endereos.

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 49 de 173
5.5.2) EXEMPLO DE ESCRITA (Para a escrita o processo semelhante)



Figura 5.8 - Exemplo de escrita de dados da memria.

1) O P coloca o endereo no barramento de endereo (ex: 1019H).
2) O P coloca a informao que deseja escrever na memria no barramento de dados. Para isso faz
WR = 0.
3) O P l o barramento de dados (ex: 75H) e logo a seguir desativa a requisio de escrita WR = 1.
4) Como o endereo j no mais necessrio o P libera o barramento de endereos.

A exceo dos sinais de dados (D
0
...D
7
) todos os demais sinais so sempre gerados pelo P, portanto
estes sinais so passivos na memria. Mesmo os sinais de dados so passivos durante o processo de
escrita.

5.6) MICROCONTROLADORES (C)
5.6.1) POR QU MICROCONTROLADORES ?
Com o barateamento dos CIs e o surgimento de microprocessadores (CPUs) mais poderosos, comeou-
se a usar as CPUs mais simples para implementar tarefas dedicadas tais como controle de impressora,
plotter, reguladores de velocidade, acionadores de motores de passo, controladores de elevadores, etc.
Contudo qualquer controle implicar em muitos circuitos que muitas vezes encarece o custo do
controlador. Tipicamente temos:

Tabela de Necessidades versus Componentes
Necessidade Componentes
Controle CPU
Programa de controle ROM/PROM/EPROM/E
2
PROM
Pilha e dados RAM
Perifricos e I/O Porta Paralela
Comunicao Porta Serial
Sinais analgicos A/D e D/A
Temporizao Timers/contadores
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 50 de 173


Figura 5.9 - Exemplo tpico de um microprocessador aplicado em controle.

As aplicaes tinham o custo dependente do preo da CPU e dos perifricos (ROM, RAM, Portas, A/D,
D/A, etc) e tambm da quantidade de conexes e do tamanho da placa. Para reduzir o custo comeou a
surgir idia de colocar todos estes perifricos dentro do chip da CPU.
Isso baratearia e diminuiria o tamanho do circuito impresso alm de aumentar a confiabilidade. Tambm
uma CPU dedicada a um determinado controle no precisa ser muito rpida nem tampouco ter um
conjunto de instrues extenso e poderoso. No so necessrias instrues para trabalhar com ponto
flutuante, com strings ou vetores e tambm os mecanismos de endereamento devem ser simples. Ou
seja, pode-se simplificar a CPU, assim surgem os microcontroladores que so simples, baratos e
eficientes.

5.6.2) MICROCONTROLADOR TPICO
Os microcontroladores apresentam uma srie de recursos incorporados dentro de um nico integrado.
Estes recursos aumentam com a evoluo da eletrnica. Isto permite o desenvolvimento de projetos
cada vez mais simples.



Figura 5.10 - Arquitetura bsica de um microcontrolador.

Os microcontroladores so especficos para controle, no tem grande capacidade de processamento e
por isso nunca haver um computador pessoal cuja CPU seja um microcontrolador.
Eles podem estar presentes em um PC mas apenas para controlar perifricos.
Usa-se o nome de Microcontrolador para designar dispositivos de uso genrico, mas existem vrios
microcontroladores que tm aplicaes especficas como por exemplo o controlador de teclado
80C51SL-BG e o controlador de comunicaes universal 82C152.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 51 de 173
H diversos fabricantes de microcontroladores. Os mais conhecidos so:
INTEL 8048, 8049, 8051, 8052, 8096.
ZILOG Z8.
MOTOROLA 6801, 6804, 6805, 68HC11.
NATIONAL COP400, COP800, NS8050.

5.6.3) FAMLIAS DA INTEL
A INTEL possui trs famlias de controladores:
8 bits: MCS-48 (obsoleta) e MCS-51
16 bits: MCS-96
Hoje em dia os manuais mostram uma nova famlia a MCS-80/85. Agora os antigos 8080 e 8085 esto
sendo classificados como controladores, isto porque so muito simples quando comparados com um 386
ou um 486. Cada famlia possui um ncleo bsico (arquitetura e instrues) a partir do qual se derivam
vrios produtos:
MCS-48 8048, 8748, 8049, 8749, 8035,8039,8050,8040,etc.
MCS-51 8031, 8051, 8751, 8032, 8052, 8752, 8054, 8754, 8058, 8758, 8351FA, 8051FA,
8751FA, 8051GB, 8751GB, 8051SL-BG, 83152, etc.
MCS-96 8096, 8098, 80196, 83196, 87196, 80198, 83198, 87198, 80193, 83193, 87193, etc.

So 3 os principais fabricantes do MCS-51:
I N T E L
P H I L I P S
A M D

5.7) FAMLIAS DE MICROCONTROLADORES
A famlia MCS-5 no antiga e limitada como a MCS-48 nem to cara como a MCS-96, por isso mesmo
atualmente a famlia de controladores de maior emprego. adequada para a grande maioria de
aplicaes a nvel universitrio.


5.7.1) FAMLIA MCS-48
A famlia MCS-51 originou-se a partir da MCS-48, esta foi primeira famlia de controladores lanada no
mercado pela INTEL, suas limitaes tecnolgicas da poca (1976) impuseram uma srie de restries
mas para a poca foi um grande produto. Uma de suas maiores aplicaes foram os teclados dos
computadores de 16 bits IBM PC (lanados em 1981).

Recursos do 8048
Interrupes em 1 nvel somente;
Single Step, 1K de ROM interna (o 8748 tinha uma EPROM de 1K);
Memria de Programa Externa de at 4 KB (PC = 12 bits com o bit mais significativo alterado pela
instruo SEL, chaveando os 2 bancos de 2K);
Aceita outros perifricos (8155,8255,8355,8243,8279);
96 instrues, 90% de 1 byte.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 52 de 173

Figura 5.11 - Diagrama em blocos do 8048.

5.7.2) FAMLIA MCS-51
O xito da famlia MCS-48 e os avanos da tecnologia dos circuitos integrados levaram a INTEL a lanar
no mercado a famlia MCS-51 em 1980. O microcontrolador 8051 o membro original da famlia e
tambm o ncleo para toda a famlia MCS-51.


Figura 5.12 - Diagrama em blocos do 8051.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 53 de 173
Recursos do 8051:
5 Interrupes (2 externas, 2 dos timers/counters e 1 da porta serial);
64 KB de Memria de Programa (PC=16 bits);
64 KB de Memria de Dados;
111 Instrues: 1 ciclo 64 58%
2 ciclos 45 40%
4 ciclos 2 2%

1 byte 49 44%
2 bytes 46 41%
3 bytes 16 15%

98% de 1 ou 2 ciclos velocidade
85% de 1 ou 2 bytes compacto

5.8) FAMLIA DE MICROPROCESSADORES 8051
Lanado no mercado em 1980, esse Microcontrolador ainda um dos mais utilizados em projetos de
sistemas digitais em todo o mundo. Por ter sido to utilizado, seu bom funcionamento esta mais do que
comprovado e por ter produo em larga escala, seu preo bem baixo (em torno de US$2,00).

Basicamente a famlia dos microcontroladores 8051 composta por:

8031 Microcontrolador de 8 bits com RAM de trabalho interna de 256 bytes;
8051 8031 + PROM interna de 4Kbytes (para os programas);
8751 803 1+ EPROM interna de 4Kbytes;
8951 8031 + E
2
PROM interna de 4Kbytes

Com o sucesso desses microcontroladores, logo surgiram variantes com algumas modificaes:

80C31 Construdo com tecnologia CMOS;
80HC31 High Speed CMOS (80C51, 87HC51; 87HC51; 89C51; 89HC51);
8032 Possui 1 timer a mais que o 8031 e possui Watch Dog.
8052 8032 com 8Kbytes de PROM;
8051XA Verso 16 bits do 803 1 com vrias modificaes na estrutura interna.

Observao: O maior fabricante de processadores dessa famlia na atualidade a Phillips
Semiconductors.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 54 de 173
5.8.1) TERMINAIS DO 8051
O C 8051 possui 4 portas de 8 bits: P0, P1, P2 e P3 (figura 5.13). Essas portas podem ter seus bits
acessados individualmente ou acessados em grupo de 8 bits formando um byte.

Figura 5.13 - Terminais bsicos da famlia 8051.

A porta P3 possui sinais especiais : RD, WR para comunicao com memrias externas, T0 e T1 so
entradas para os timers, INT0 e INT1 so entradas de interrupo e TXD (Transmit) e RXD (Receive)
para a comunicao serial. Caso se tenha certeza que um destes sinais nunca ser utilizado seu
respectivo bit pode ser usado pelo projetista para outro fim (normalmente evita-se o seu uso).

5.8.2) AS MEMRIAS DE UM SISTEMA 8051
A famlia 8051 basicamente tem as seguintes memrias:
Memria RAM interna de dados cuja capacidade de 128 bytes ou 256 bytes.
Memria EEPROM interna (depende do C) de programa com capacidade de 4 Kbytes. Essa
Memria somente est disponvel se o sinal EA = 1.
Memria EEPROM externa de programa. Essa memria somente est disponvel se o sinal EA = 0.
Memria RAM de dados externa.

A memria de programa ou interna ou externa, no ambas.

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 55 de 173


Figura 5.14 - Esquema de memrias da famlia de microcontroladores 8051.

A CPU, que controla todo o sistema busca instrues na memria de programas que pode ser interna ou
externa.
Durante o processamento pode gravar e ler dados da memria RAM interna ou fazer uso de uma RAM
externa se necessitar de mais capacidade de armazenamento (normalmente a RAM interna suficiente).

5.8.3) MEMRIA EXTERNA
O 8051 no segue a Arquitetura de Von Newman mas a Arquitetura de Harward, portanto pode ter
programas e dados em memrias distintas.

So chamadas de Memrias Externas:
64 KB Memria de dados (RD e WR)
64 KB Memria de programa (PSEN Program Store Enable)




Figura 5.15 - Memrias externas do 8051.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 56 de 173


Os 4 KB de ROM interna podem ser usados ou no, de acordo com o estado do pino EA (External
Access Enable):
Se EA=0 64 KB de programa externo;
Se EA=1 4 KB de ROM interna mais 60 KB de programa externa.

Pinos importantes para interface com Memrias externas:
RD Leitura na memria de dados externa;
WR Escrita na memria de dados externa;
PSEN Leitura na memria de programa;
P0 Multiplexado com endereos (A
0
- A
7
) e dados (D
0
- D
7
);
P2 Endereos A
8
- A
15
;
ALE Address Latch Enable. Sinal para demultiplexar P0;
EA External Access Enable. Especifica o uso de memria de programa externa.

Para executar um programa a partir de uma memria externa bastam algumas conexes simples:

Figura 5.16 - Microcontrolador com Memria de Programa externa.

Deve-se notar que a memria de programa s pode ser lida. So sempre emitidos endereos de 16 bits,
por isso as portas P0 e P2 so sacrificadas quando se usa memria de programa externa.
Um acesso memria de dados externa tem uma configurao muito semelhante:
Deve-se notar o uso de dois bits da porta P3. Se todo o programa est na ROM interna porta P2 no
totalmente sacrificada, somente so usados os bits necessrios para emitir os endereos.
Exemplo:
RAM externa de 2 KB 8 bits de P0
3 bits de P2
Sobram 5 pinos da porta P2.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 57 de 173

Figura 5.17 - Microcontrolador com Memria de Dados externa.

OBSERVAO:
No caso explicado onde so usados somente 3 bits de P2, um acesso memria de dados no pode ser
efetuado com a instruo MOVX A,@DPTR.
Deve ser trocada por:
MOV P2,# ? ? ? ? ? A10 A9 A8 ;especificar MSB do endereo
MOV R0,# A7 A6 A5 A4 A3 A2 A1 A0 ;especificar LSB do endereo
MOVX A,@R0 ;efetuar a leitura

A figura 5.18 mostra a utilizao de memrias de programa e dados. Como os sinais PSEN e (RD e WR)
so mutuamente exclusivos foi possvel usar um mesmo decodificador. As portas P0, P2 e os dois bits
da porta P3 foram sacrificados. Os buffers foram omitidos para simplificar o desenho.


Figura 5.18 - O 8051 com 64 KB de Programa e 64 KB de Dados externos.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 58 de 173
possvel implementar uma Arquitetura de Von Newmann usando o 8031, neste caso h um limite de
64KB de RAM para programa e dados. A figura 5.19 ilustra o circuito.


Figura 5.19 - Microcontrolador 8051 com arquitetura de Von Newman: uma s Memria de Programa e Dados.

5.8.4) MEMRIA INTERNA (RAM INTERNA)
Uma das grandes vantagens do 8051 oferecer uma memria de dados interna com um mnimo de
128bytes. Essa memria permite um rpido acesso aos dados e em muitas aplicaes pode eliminar a
necessidade da RAM externa, diminuindo portanto o custo do circuito controlador. Alm da velocidade
existem reas de RAM interna que so acessveis bit a bit, o que muito til para operaes booleanas.
O espao de endereamento reservado para acessar a RAM interna de 8 bits o que proporciona um
mximo de 256 bytes. Mas com um pequeno artifcio possvel colocar mais 128 bytes, resultando num
total de 384 bytes na RAM interna (assim o 8052). Alm disso na RAM interna existem 4 bancos de 8
registros (R0, R1, ... , R7) que podem ser utilizados pelo usurio.

Figura 5.20 - RAM interna do MCS-51.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 59 de 173
A pilha sempre funciona na RAM interna e a consome muito, por isso nos 8052 o recurso de colocar a
pilha nos 128 bytes endereados indiretamente (128 UPPER) muito atraente.

Exemplo: seja o caso onde no h RAM externa e se queiram utilizar os 4 bancos, os 16 bytes
endereveis bit a bit e mais 10 variveis de 1 byte, isso deixa 70 bytes para a pilha. Se forem usadas
interrupes para cada uma so guardados: PC (2 bytes), PSW, Acc e B ==> 5 bytes.
Podem acontecer at 2 interrupes simultneas, o que consome at 10 bytes, logo h 60 bytes
disponveis para a pilha. Se para cada CALL so guardados PC, PSW, Acc e B (5 bytes), h
disponibilidade de at 12 CALL agrupados.
Se a pilha for trabalhar nos 128 UPPER, subtraindo os 10 bytes para as interrupes tm-se 118 bytes, o
que resulta em 23 CALL agrupados (23 x 5 =115 bytes) e ainda sobram 80 bytes para as variveis nos
128 LOWER.
Os bancos de registros so timos para guardar o contexto principalmente no caso de interrupes,
estes so trocados com uma s instruo.
Por exemplo, poder se usar:
BK3 interrupo porta serial
BK2 interrupo INT1
BK1 interrupo INT0
BK0 trabalho

S pode haver um banco selecionado de cada vez, mas todos os registros podem ser endereados
atravs do endereo de seu byte.



Figura 5.21 - Endereo dos registros.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 60 de 173
5.8.5) SFR - SPECIAL FUNCTION REGISTERS
Dos 256 bytes da RAM interna que so endereados diretamente, 128 (80H FFH) so reservados para
os Registros de Funes Especiais (SFR). O 8051 apresenta um conjunto mnimo mas pode haver mais
SFR em outros membros da MCS-51.
Os SFR no devem ser confundidos com o chamado "128 UPPER", que uma rea de 128 bytes (80H
FFH) que s endereada indiretamente e s existe no 8052.

Na figura 5.22 apresentada a lista com os SFRs do 8051 e seus endereos.

Figura 5.22 - Lista dos registros SFR.

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 61 de 173
5.8.5.1) BREVE DESCRIO DE CADA REGISTRO:
Acc Acumulador
B Usado durante as operaes de multiplicao e diviso, nos demais casos pode ser usado como
auxiliar.
PSW Program Status Word ou Registro de Flags de Estado

PSW.7 CY Carry Flag
PSW.6 Ac Carry auxiliar (operao com BCD Binary Coded Decimal)
PSW.5 F0 Flag 0, uso geral
PSW.4 RS1 Selecionador de Banco (Range Selector), bit 1
PSW.3 RS0 Selecionador de Banco (Range Selector), bit 0

PSW.2 OV Overflow
PSW.1 - Flag definvel pelo usurio
PSW.0 P Paridade (mpar):
P = 1 quantidade mpar de 1s
P = 0 quantidade par de 1s

SP Ponteiro da Pilha (Stack Pointer), incrementado antes de PUSH e CALL
DPTR Ponteiro para memria de dados externa (Data Pointer).
um registro de 16 bits formado por DPH e DPL

P0, P1, P2, P3 -- Latchs das portas paralelas
IP Prioridade das interrupes (Interrupt Priority)
IE Habilitao das interrupes (Interrupt Enable)
TMOD Modo de operao dos Timers/Counters (Timer/Counter Mode)
TCON Controle dos Timers/Counters (Timer/Counter Control)
SCON Controle da porta serial (Serial Control)
SBUF Dois registros, um para leitura e outro para escrita (Serial Buffer)
Leitura Receber o dado da porta serial
Escrita Enviar o dado para a porta serial
PCON Controle de energia (Power Control); coloca no modo "Power Down" ou "Idle"
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 62 de 173
5.8.5.2) MAPA DA RAM INTERNA
Aqui apresentado um mapa completo da RAM Interna da MCS-51. Os endereos dos bytes vo de 0H
at FFH. Existem dois grupos de bytes:
128 LOWER -- de 00H at 7FH.
SFR -- de 80H at FFH.

Observaes:
1) Os registros ou endereos em negrito so endereveis bit a bit.
2) Usam-se as letras "BK" para abreviar a palavra "banco".
3) As clulas marcadas com "-" so inexistentes.
4) A seqncia de endereos da direita para a esquerda e de baixo para cima.

Figura 5.23 - Mapa completo da RAM interna.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 63 de 173
5.8.5.3) MAPA DOS BITS
Na figura 5.24 apresentado um mapa com todos os bits do MCS-51. So 256 bits e portanto ocupam
32 bytes. Esto marcados o endereo dos bits, o nome e o byte ao qual pertencem. Existem duas
classes de bits, os que pertencem ao 128 LOWER e tm os endereos de 00H a 7FH e os que
pertencem aos SFR e tm os endereos de 80H at FFH. Alguns bits no existem ou sero utilizados em
futuras verses e esto marcados com "-".
Como sero abordados mais adiante os bits podem ser endereados de at 4 formas diferentes. Como
exemplo, uma instruo para habilitar a recepo serial (setar o bit REN), poderia ser:

1) SETB REN
2) SETB SCON.4
3) SETB 98H.4
4) SETB 9CH

Figura 5.24 - Mapa completo dos bits do 8051.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 64 de 173
5.9) DETALHAMENTO DOS TERMINAIS DO 8051

5.9.1) INTRODUO
O encapsulamento dos microcontroladores varia muito, de acordo com as funes desempenhadas.
Basicamente so usados 3 tipos de encapsulamento :
DIP Dual in Pack;
QFP Quad Flat Pack;
PLCC Leadless Chip Carrier.

Os 8051 e 8052 esto disponveis em 40 DIP, 44 PLCC e 44 QFP, alguns exemplos:
8031 (mais simples) DIP40
8051GB (AD + timer, etc) 100 QFP
8051SL (Keyboard Controller) 100 QFP
83152 (Universal Com. Contr.) DIP48 E PLCC68

5.9.2) DESCRIO DOS TERMINAIS 8051 AH, DIP40 HMOS (figura 5.25)

(1- 8) P1 Porta 1
Admite 4 cargas LS TTL.
(9) RST Reset
Com o oscilador funcionando, deve ser mantido um nvel alto durante 24 perodos.
(10-17) P3 Porta 3
Compartilhada com uma srie de recursos Admite 4 cargas LS TTL.
P3.0 RXD, entrada serial
P3.1 TXD, sada serial
P3.2 *INT0, interrupo externa 0
P3.3 *INT1, interrupo externa 1
P3.4 T0, entrada para o timer 0 (contador neste caso)
P3.5 T1, entrada para o timer 1 (contador neste caso)
P3.6 *WR, escrita na memria de dados externa
P3.7 *RD, leitura na memria de dados externa
(18) XTAL2 Sada do amplificador inversor do oscilador interno
Se for usado clock externo, serve como entrada para o mesmo (HMOS) ou no conectado
(CHMOS).
(19) XTAL1 Entrada do amplificador inversor do oscilador interno
Deve ser conectado ao terra se for usado um clock externo (HMOS) ou ao clock externo (CHMOS).
(20) Vss Terra
Terminal negativo da alimentao
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 65 de 173
(21-28) P2 Porta 2 (A8...A15)
Alm de porta paralela, est multiplexada com o byte mais significativo (MSB) dos endereos, admite
4 cargas LS TTL.
(29) *PSEN Program Store Enable
Pulso de leitura para a Memria de Programa Externa. Quando o programa est sendo executado na
memria de programa externa ele aparece como 1/6 da freqncia de clock. Quando h acesso
memria de dados externa, 2 PSEN so perdidos.
(30) ALE/PROG Address Latch Enable
Pulso para acionar o latch que captura o LSB do endereo (com sua borda ascendente). Ele
emitido razo de 1/6 da freqncia do oscilador e pode ser usado para acionar entradas externas.
Um ALE omitido durante o acesso Memria de Dados Externa. Tambm usada na gravao da
ROM interna.
(31) *EA/VPP External Access Enable
Informa CPU se o programa est na Memria de Programa Externa ou na ROM Interna. Tambm
usado para gravao da ROM Interna.
*EA = 1 (Vcc) (0000H - 0FFFH) ROM Interna
(1000H - FFFFH) Memria de Programa Externa
*EA = 0 (Vss) (0000H - FFFFH) Memria de Programa Externa
(32-39) P0 Porta 0 (AD0...AD7).
Alm de porta paralela, est multiplexada com o byte menos significativo (LSB) dos endereos e dos
dados. Admite 8 cargas LS TTL.
(40) Vcc Alimentao de +5V
Consumo: Icc = 125 mA, com todas as sadas desconectadas.


Figura 5.25 - Terminais do 8051.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 66 de 173
5.9.2.1) POSSVEIS LIGAES DOS TERMINAIS XTAL1 E XTAL2 (figura 5.26)
Cristal (a tolerncia do valor dos capacitores 10 pF)


Figura 5.26 - Interligao do cristal oscilador aos terminais Xtal1 e Xtal2 do 8051.

Oscilador Externo


Figura 5.27 - Interligao de oscilador externo aos terminais Xtal1 e Xtal2 do 8051.

5.9.3) DIAGRAMAS DE TEMPO
Os diagramas de tempo foram simplificados em beneficio da compreenso, eles no mostraro os
tempos de subida e descida dos pulsos e os retardos de propagao entre o CLK e os demais sinais,
esses detalhes devem ser consultados no "datasheet" da CPU a ser usada.



Figura 5.28 - Diagrama de tempos simplificado do 8051, Memria Externa.
PC Program Counter
PCL LSB do Program Counter
PCH HSB do Program Counter
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 67 de 173
Cada perodo de Clock recebe o nome de Fase (Phase). Cada estado composto por 2 perodos de
Clock ou 2 fases, denominadas P1 e P2. Observar que EST1=EST4, EST2=EST5, etc. O Program
Counter (PC) composto por dois registros de 8 bits: PC = PCH + PCL.
As freqncias de ALE e *PSEN so iguais a 1/6 da freqncia do cristal, mas o "Duty Cycle (DC)
diferente para cada uma. ALE tem o DC=33% (1/3) enquanto que *PSEN tem o DC=50% (1/2):

f (ALE) = f (*PSEN) = f (XTAL) / 6
DC (ALE) = 33% 33% alto e 67% baixo
DC (*PSEN) = 50% 50% alto e 50% baixo



Figura 5.29 - Leitura na Memria de Dados Externa.




Figura 5.30 - Escrita na Memria de Dados Externa.

A leitura e a escrita na Memria de Dados Externa (figuras 5.29 e 5.30 respectivamente) usam o dobro
de tempo quando so comparadas com um acesso memria de programa (notar que f (ALE) no tem f
(XTAL) / 6 pela ausncia de um pulso de ALE e que no existe *PSEN), perde-se um pulso de ALE e
dois pulsos de *PSEN, ento:
f (ALE) = f (*PSEN) = f (XTAL) / 6
Mas quando h acessos Memria de Dados Externa se perdem 1 pulso de ALE e 2 pulsos de *PSEN.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 68 de 173
Nos acessos Memria de Dados Externa usado um endereo de 16 bits, esse endereo pode ser
formado por um registro ponteiro de dados de 16 bits, DPTR (DPTR = DPH + DPL) ou por R0 ou R1 e o
contedo do SFR P2.
MSB LSB
DPTR DPH e DPL
P2 e Ri SFR P2 e R0 ou R1

Exemplos:

Leitura Escrita
Com DPTR MOVX A,@DPTR ou MOVX @DPTR,A
Com P2 e Ri MOVX A,@Ri ou MOVX @Ri,A (onde i=0 ou i=1)

Notar que quando se usa DPTR para enderear a memria externa, os 16 bits dos endereos so
emitidos por P0 e P2 mas ao se usar Ri, os 16 bits so formados pelo contedo de Ri (LSB) e o que
estava no SFR P2, ou seja, no se altera o contedo de P2.



Figura 5.31 - Operao das portas.

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 69 de 173
5.9.4) RESET
A entrada de Reset o pino RST que possui um Schmitt Triger na entrada. O Reset realizado quando
este pino se mantm em nvel alto pelo menos por 2 ciclos de mquina (24 clocks) enquanto o oscilador
estiver funcionando. A CPU responde gerando um reset interno de acordo com a temporizao que
indicada na figura 5.32.



Figura 5.32 - Temporizao do RESET.

A entrada RST assncrona e amostrada durante a fase 2 (P2) do estado 5 (E5), aps o RST ser
amostrado como alto ainda se mantm atividade nos pinos durante 19 perodos de clock, os pinos s
cessaro a atividade 19 a 31 perodos de clock depois de RST ser ativada.
Aps o RST, os pinos ALE e PSEN vo para alto, depois de RST = 0 (desativada) so necessrios 1 a 2
perodos de clock para que ALE e PSEN comecem, por isso outros dispositivos externos no podem ser
sincronizados com o tempo interno do Reset do 8051.
A RAM Interna no afetada pelo reset, aps o RESET a CPU inicializada com os seguintes dados:

SP = 7 ESTADO DOS REGISTROS
SBUF = ? APS O RESET
P0,P1,P2,P3 = FFH
OUTROS SFR = 0

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 70 de 173
Uma maneira fcil de realizar o "Power on Reset" e o "Reset Manual" mostrada na figura 5.33.



Figura 5.33 - Circuito para RESET do 8051 (HMOS).

O esquema da figura 5.33 vlido para HMOS, nas famlias CHMOS o resistor 8,2K pode ser omitido
pois h um "pull-down" interno, alm disso o capacitor deve ser reduzido a 1 F.
Funcionamento: Quando energizado o circuito (RC) assegura no pino RST um nvel alto durante uma
quantidade de tempo que depende dos valores de R e C, para ter um "Power On Reset" seguro
necessrio que o pino RESET seja mantido em alto durante o tempo necessrio para que o oscilador
inicie e a isto se adicionam os 24 perodos de clock para o RESET efetivo.

Tempos que sero computados no power up:
Vcc se estabiliza 10ms
Partida do oscilador 1ms (10MHz)
10ms (1MHz)
Com este circuito de Reset Vcc cai rapidamente a 0, com isto a tenso do pino RST pode cair
momentaneamente abaixo de 0 mas no causa danos, com a chave em paralelo com um capacitor
pode-se gerar o RESET manual. Para que se possa projetar um RESET eficiente e preciso necessrio
analisar o circuito RC de primeira ordem (figura 5.34).


Figura 5.34 - Anlise do circuito para RESET do 8051.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 71 de 173
Da anlise do circuito se pode escrever a equao:



Quando se calcula um circuito de RESET qual RC me garante que o RESET fique ativado por um tempo
maior que o especificado ?
Para a resposta so necessrias a tenso de comutao do Schmitt-Trigger do 8051 e qual o modelo
eltrico da entrada RESET, ou seja, quanto de corrente consome. Essas informaes no so facilmente
encontradas nos Data Sheets.

Exemplo: Com o 8051 usando cristal de 1 MHz:
10 ms estabilizar Vcc;
10 ms partida do oscilador;
24 s necessrios para o Reset (24 perodos de clock).

Somando todos os tempos obtemos: 20024 s
Portanto o tempo do Reset = 20,024 ms aproximadamente 20 ms

Supondo que o Schmitt Trigger comute a 3,5V na transio de alto para baixo (os valores abaixo de 3,5V
na entrada geram 0 na sada) e usando os valores de R e C da figura 5.35 pode-se calcular:

ln 3,5 - ln 5 = - t / R .C t = 8,2.10
3
. 10.10
-6
. ln 3,5 - ln 5 t = 29 ms > 20 ms
Assim podemos concluir que os valores da figura 5.33 podem ser utilizados.
Um circuito alternativo que apesar do maior gasto de componentes permite o conhecimento da tenso do
Schmitt Trigger, saber seu consumo e calcular precisamente o circuito de RESET. Neste circuito o diodo
utilizado para garantir uma rpida descarga do capacitor quando se desliga a fonte de alimentao.



Figura 5.35 - Circuito de RESET com Schmitt-Trigger TTL.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 72 de 173
5.10) DVIDAS FREQENTES SOBRE OS TERMINAIS DE SADA
Aonde vo os 8 bits de barramento de dados?
A porta P0 contm 8 bits usados no barramento de dados.

Aonde vo os 16 bits do barramento de endereos?
So usadas as portas P0 e P2 que formam, juntos os 16 bits usados no barramento de endereos.

Mas como pode P0 ser o barramento de dados e parte do barramento de endereos ao mesmo
tempo?
O C 8051 resolve isso atravs de um sinal especial; ALE (Adress Latch Enable).
Quando P0 contm bits de endereo, gerado um pulso na sada de controle ALE. Quando P0 contm
bits de dados, esse pulso no gerado. Quando conectamos os 8 bits de P0 as entradas de um latch
(ex: 74LS373) e conectamos o sinal ALE a entrada de CLOCK do latch, podemos nos assegurar que
somente bits de endereo sero armazenados no latch.

A porta P1 no possui nenhuma funo associada e pode ser utilizada pelo projetista. Costuma-se
usar individualmente os bits dessa porta, podem-se acionar lmpadas

rels, chaves, outros circuitos
integrados, gerar sinalizaes ou receber sinais.

Quando o C est executando um programa (software) que se encontra em uma memria EPROM
externa, ele busca os bytes de instruo dessa EPROM fazendo uso das portas P0 e P2 para se
comunicar com a memria mais os sinais de controle ALE e PSEN .
O sinal PSEN funciona como um sinal de requisio de leitura (uma espcie de READ ou RD) s
que usado somente para leitura de instrues.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 73 de 173


6.1) INTRODUO
Todos os membros da famlia MCS-51 executam o mesmo conjunto de instrues, as instrues so
otimizadas para aplicaes de controle de 8 bits, elas permitem um rpido endereamento da RAM
interna facilitando operaes byte a byte em estruturas de dados pequenas.
O conjunto de instrues tambm oferece um grande suporte para manipulaes e operaes de
variveis de um bit, facilitando os sistemas lgicos que necessitam de operaes booleanas.
A seguir sero mostradas todas as instrues da famlia MCS-51, a descrio mais detalhada dessas
instrues deve-se consultar o manual do MCS-51
Para entendimento supe-se que o leitor tenha uma pequena experincia em programao.
Para ajudar os programadores os programas montadores para o MCS-51 tm os endereos dos SFR e
dos bits previamente declarados, como se em todo programa j existissem as pseudo-instrues:

Acc EQU 0E0H
B EQU 0F0H
PSW EQU 0D0H
etc.

Para a exposio das instrues utilizarem-se as seguintes abreviaturas:
Rn Qualquer registro R0, R1, ...,R7
direto, dir Endereo da RAM interna (8 bits)
@Ri @R0 ou @R1, usado para endereamento indireto
#data, #dt Constante de 8 bits (byte)
#data16, #dt16 Constante de 16 bits
adr16 Endereo de 16 bits (enderea 64 KB)
adr11 Endereo de 11 bits (enderea 2 KB)
rel Deslocamento relativo (complemento a 2: -128 a +127)
bit Endereo de um bit da RAM interna
A Acumulador (registro)
Acc Endereo do acumulador.

6.2) MODOS DE ENDEREAMENTO
De acordo com o "Data Sheet" do MCS-51 existem 6 modos de endereamento com a seguinte
nomenclatura :
Imediato
Direto
Indireto
Registrador
Registrador Especfico
Indexado
CAPTULO 6 - CONJUNTO DE INSTRUES DO 8051
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 74 de 173
Imediato O valor da constante colocado no OPCODE.

MOV A, #100 , Carrega 100 no acumulador (Acc =100), o byte 100 um dado imediato, deve-
se notar a presena do sinal # que indica operao imediata.

Direto O operando especifica um endereo de 8 bits da RAM interna.

MOV A, 20 ; Transfere para o acumulador o contedo do endereo 20 da RAM Interna, todo
endereamento direto usa a RAM Interna.

Indireto Aqui se especifica um registro onde est o endereo do operando,
somente pode ser usado para endereamento indireto: R0, R1 ou DPTR.

MOV A, @R0 ; Coloca no acumulador o contedo do endereo que est em R0

Registro No cdigo de operao da instruo existe um campo de 3 bits (2
3
= 8
registradores, de R0 a R7) onde especificado o registro a ser utilizado.
Esta forma eficiente e evita utilizar um byte adicional para indicar o
registro.

MOV A,R0 ; Coloca no acumulador o contedo de R0. uma instruo de um s byte.

Registro Especifico Algumas operaes so especificas para certos registros, por
exemplo, algumas instrues sempre operam com o Acc ou o DPTR
e no necessitam de espao no OPCODE para especificar isto.

MOVX A,@DPTR ; Esta uma instruo para leitura da Memria de Dados Externa, coloca
no acumulador o contedo do endereo da RAM Externa que est no
DPTR. Como sempre so usados o Acc e o DPTR, no necessrio
especific-los, o que faz com que a instruo empregue apenas 1 byte.

Indexado O endereo do operando formado pela soma de um endereo base com
um registro de indexao, somente a Memria de Programa pode ser
endereada deste modo.

MOVC A,@A+DPTR
A ndice,
DPTR endereo base.

A soma do DPTR com o acumulador forma um endereo da Memria de
Programa e o contedo deste endereo transferido para o acumulador. Essa
instruo tima para "look up table".

Observao: tambm existe um desvio indexado.

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 75 de 173
6.3) SOBRE AS INSTRUES
Em cada instruo so apresentados o nmero de bytes do OPCOD e o nmero de ciclos de mquina
(MC = 12 clocks) necessrios para sua execuo.

Existem 111 instrues na famlia MCS-51, elas esto distribudas da seguinte forma:

Aritmticas 24 22%
Lgicas 25 23%
Transferncia de dados 28 25%
Booleanas 17 15%
Desvios 17 15%

6.4) INSTRUES ARITMTICAS

6.4.1) SOMA DE 8 BITS
O acumulador um dos operandos e tambm armazena o resultado. Existem 4 instrues de soma:


6.4.2) SOMA DE 8 BITS COM CARRY
O acumulador um dos operandos e tambm armazena o resultado. So 4 instrues de soma com
carry:


6.4.3) SUBTRAO DE 8 BITS COM BORROW:
O acumulador um dos operandos e tambm recebe o resultado. Deve-se lembrar que a subtrao
sempre usa o borrow. So 4 instrues de subtrao com borrow:


Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 76 de 173
6.4.4) INCREMENTO DE 8 BITS:
Existem 4 instrues para incremento de 8 bits :



6.4.5) DECREMENTO DE 8 BITS:
H 4 instrues de decremento de 8 bits e muito se assemelham s instrues de incremento:



6.4.6) INCREMENTO DE 16 BITS:
Existe apenas um incremento de 16 bits (no h decrementos de 16 bits) :



6.4.7) MULTIPLICAO E DIVISO DE 8 BITS:
Na multiplicao e na diviso sempre so usados os registros A e B. Estas so as instrues que
necessitam mais tempo de execuo.



6.4.8) AJUSTE DECIMAL:
Esta instruo existe para permitir operaes com representao BCD. O ajuste valido apenas para as
somas (ADD e ADDC). Existe uma nica instruo:



Observao: A instruo (DA A) no pode simplesmente converter um nmero hexadecimal no
Acumulador para BCD nem se aplica subtrao.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 77 de 173
Exemplo: A = 56 H (0101 0110B) representando 56 decimal
R3 = 67 H (0110 0111B) representando 67 decimal
Carry = 1

ADDC A, R3 A = 0BEH e C (carry) e AC (auxiliar carry) iguais a 0
DAA A = 24H (= 0010 0100B) e Carry=1

Algoritmo de ajuste da soma pela instruo DAA:
1. Se os bits 3 - 0 de A forem maiores que 9 ou se AC = 1 6 somado a A para gerar o dgito
BCD menos significativo. Esta soma interna pode ligar o carry se o carry da nibble menos
significativa propagar por toda a nibble mais significativa mas no apagar o carry.
2. Se o carry est agora em 1 ou se os bits 7 - 4 excederem 9, esta nibble incrementada de 6 para
produzir o dgito BCD mais significativo. O carry indicar se a soma maior do que 99.
O OV (overflow) no afetado.

Na realidade, soma-se 00H, 06H, 60H ou 66H conforme o valor inicial de A e PSW.

Observao: Nmeros BCD podem ser incrementados somando 01H ou decrementados somando 99H
e usando o ajuste decimal DA A.

Exemplo: Se A = 30H (representando 30 decimal), as instrues
ADD A,#99H
DA A
resultaro em A = 29H (representando 29 decimal) e C (Carry) = 1 pois 30 + 29 = 129

6.5) INSTRUES LGICAS
As instrues lgicas so as que realizam as operaes de AND, OR e XOR. Deve-se notar que essas
instrues so muito semelhantes, o resultado da operao no obrigatoriamente deve ser colocado no
acumulador, tambm se pode indicar um endereo para receber o resultado.

6.5.1) AND DE 8 BITS
Usa-se o smbolo ANL (Logical AND) para representar esta instruo. Existem 6 instrues reunidas em
dois grupos de acordo com o destino do resultado:



Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 78 de 173
6.5.2) OR DE 8 BITS
Emprega-se o smbolo ORL (Logical OR) para representar esta instruo. Existem 6 instrues reunidas
em dois grupos de acordo com o destino do resultado:




6.5.3) XOR DE 8 BITS
Emprega-se o smbolo XRL (Logical Exclusive OR) para representar esta instruo. Existem 6 instrues
reunidas em dois grupos de acordo com o destino do resultado:



6.5.4. OPERAES LGICAS COM O ACUMULADOR:
Pode-se inicializar, complementar ou rodar o acumulador. As rotaes podem se realizar para a direita
ou para a esquerda utilizando ou no o bit de carry. Tambm se pode trocar de posio as nibbles do
acumulador (uma nibble formada por 4 bits, ou seja, um byte possui 2 nibbles). Todas estas instrues
so classificadas como de registro especfico pois sempre operam com o acumulador (no utilizam bytes
de opcode para especificar isto). As instrues so:

CLR A inicializa com zero o acumulador;
CPL A complementa de 1 o acumulador (inverte os bits);
RL A roda o acumulador esquerda;
RLC A roda o acumulador esquerda com carry;
RR A roda o acumulador direita;
RRC A roda o acumulador direita com carry;
SWAP A intercambiar as nibbles do acumulador.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 79 de 173





Figura 6.1 - Grfico das rotaes e do swap.


6.6) INSTRUES DE TRANSFERNCIA DE DADOS
Existem 3 tipos de instrues de transferncia de dados:

As que trabalham com a RAM Interna (22);
As que trabalham com a Memria de Dados Externa (4) e
As que trabalham com a Memria de Programa (2).


Em geral as transferncias de dados operam na RAM Interna, a menos que se indique o contrrio.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 80 de 173
6.6.1) TRANSFERNCIA DE DADOS
Todas as operaes se realizam na RAM Interna. Existem quase todas as transferncias que se possa
imaginar.


Pode-se pensar que existem todas as combinaes possveis entre A, Rn, direto, @Ri e #data, mas
existem algumas excees:

Todas as combinaes possveis:


Instrues que no existem:

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 81 de 173
6.6.2) PERMUTAO DE BYTES
Toda permutao opera na RAM Interna. Estas instrues so muito teis pois permitem a troca de
contedo entre dois registros sem a necessidade de usar um outro auxiliar. Existem 3 permutaes e
todas usam o acumulador como um dos operandos.





6.6.3) PERMUTAO DE NIBBLES
Existe s uma instruo e esta opera com a RAM Interna. Nesta instruo sempre se usa o acumulador
e um operando (por endereamento indireto). til para trabalhar com BCD e em converses de
hexadecimal para cdigo ASCII.




Figura 6.2 - Grfico da permutao de nibbles.


6.6.4) OPERAES COM A PILHA
A pilha opera exclusivamente com a RAM Interna. Existem apenas duas instrues de pilha e trabalham
com endereamento direto, sempre usam dois bytes para o opcode e no se pode usar a instruo
PUSH A, mas sim PUSH Acc. Deve-se lembrar que Acc o label para o endereo do acumulador. Na
instruo PUSH primeiro incrementa-se o ponteiro (SP) e em seguida escreve-se a informao.
Exemplo: se SP = 7, PUSH Acc colocar o contedo do acumulador no endereo 8. A instruo POP
trabalha ao contrrio.




Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 82 de 173
6.6.5) TRANSFERNCIAS DE DADOS COM A MEMRIA DE DADOS EXTERNA
Existem instrues para leitura e escrita as quais sempre usam o acumulador como fonte ou destino do
dado. possvel fazer dois acessos, um com endereamento de 16 bits usando o DPTR e outro com
endereamento de 8 bits usando @Ri (@R0 ou @R1). Deve-se lembrar que quando se usa
endereamento de 8 bits o contedo de P2 permanece inalterado e representa os 8 bits mais
significativos do endereo. A instruo usada MOVX, onde X indica que se trabalhar com Memria de
Dados Externa.


6.6.6) LEITURA DA MEMRIA DE PROGRAMA
Quando se trabalha com Memria de Programa separada da Memria de Dados Externa, a Memria de
Programa s pode ser lida (sinal *PSEN). Existem duas instrues para realizar esta operao e tambm
so as nicas que usam endereamento indexado. So muito convenientes para construo de tabelas
de consulta. O mnemnico empregado muda para MOVC onde o C indica Memria de Cdigos.



6.7) INSTRUES BOOLEANAS
So chamadas de instrues booleanas as que trabalham com bits. Todas essas instrues operam com
um s bit por vez e o CARRY (C) funciona como se fosse o acumulador, ou seja, um dos operandos e
normalmente armazena o resultado. Os bits so endereados diretamente mas quando se usa o CARRY
este endereado implicitamente. Existem tambm desvios baseados no estado dos bits, estes so
relativos posio atual do PC e se pode saltar 127 bytes adiante ou 128 bytes para trs.

6.7.1) ZERAR/ SETAR /COMPLEMENTAR UM BIT
Para carregar zero: usa-se a instruo CLR
Para carregar um: usa-se a instruo SETB
Para complementar: usa-se a instruo CPL


Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 83 de 173
6.7.2) AND/OR BOOLEANO
H dois AND e dois OR, nestas instrues o carry (C) trabalha como o acumulador, quer dizer, um dos
operandos e tambm recebe o resultado.
Exemplo: ANL C,bit C = C AND bit.
Empregam-se os mnemnicos ANL para Logical AND e ORL para Logical OR. Nas instrues em que
um operando "/bit", indica que a operao se realiza com o complemento deste bit. Essas operaes
so muito convenientes quando se implementam operaes booleanas.



6.7.3) MOVIMENTO DE BITS
So duas as instrues para movimento de bits e sempre envolvem o CARRY.



6.7.4) DESVIOS BASEADOS EM BITS
So 5 as instrues de desvio: duas se baseiam no CARRY e as outras trs operam com qualquer bit.
Os mnemnicos JB e JC so usados para desviar se o bit est ativado (em um) e JNB e JNC para
desviar se o bit est desativado (em zero). Existe o mnemnico JBC que desvia se o bit est ativado e
depois complementa este bit.



Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 84 de 173
6.8) INSTRUES DE DESVIO
Nas instrues de desvio esto includas as chamadas de sub-rotinas (CALL) e os desvios (JMP), estes
podem ser realizados com 11 ou 16 bits. Tambm esto includos os desvios condicionais (JZ, JNZ,
CJNE), os loops (DJNZ) e as instrues de retorno (RET, RETI).

6.8.1) CHAMADAS DE SUB-ROTINAS:
So duas as instrues de chamada de sub-rotinas:
A instruo LCALL, que usa um endereo de 16 bits e por isso permite acesso a qualquer posio nos
64 KB de programa;
E a instruo ACALL que usa apenas 11 bits, ou seja, permite acesso dentro de um bloco de 2 KB da
memria de programa, os 11 bits menos significativos do PC so trocados pelos bits especificados na
instruo. A vantagem que ACALL necessita apenas de 2 bytes para o opcode enquanto que LCALL
precisa de 3 bytes.



6.8.2) RETORNO DE SUB-ROTINAS
So 2 as instrues de retorno de sub-rotinas:
A instruo RET o retorno usual;
A instruo RETI usada para retorno das sub-rotinas que atendem as interrupes indicando o fim de
uma rotina de interrupo.



6.8.3) DESVIOS
So quatro as instrues de desvios. H dois desvios que so idnticos s chamadas de sub-rotinas e
que tambm permitem saltar numa faixa de 2 KB (AJMP) ou de 64 KB (LJMP). Os outros dois desvios
so relativos.



Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 85 de 173
6.8.4) DESVIOS CONDICIONAIS
H dois desvios que so feitos com os valores do acumulador:
A instruo JZ que salta se o contedo do acumulador zero;
E a Instruo JNZ que salta se o contedo do acumulador no zero.
Deve-se notar que no existe o flag zero (como nos Z80 e 8085), a deciso para o desvio feita com o
contedo atual do acumulador. H outras 4 instrues que usam o mnemnico CJNE que significa
"compare dois elementos e desvie se forem diferentes". Todos estes desvios so relativos e por isso tm
um alcance de 127 bytes para adiante e 128 bytes para trs.



6.8.5) LOOPS
As instrues de loops so do tipo "decremente e desvie se for diferente de zero" (DJNZ). H duas
instrues as quais so muito teis para a repetio de determinadas partes do programa. Utilizam como
contador um registro ou um byte da RAM Interna e por isso tm um limite de at 256 repeties. Como
so baseadas em desvios relativos tm um alcance de 127 bytes para adiante e de 128 bytes para trs.



6.8.6) NO OPERAO
H uma instruo que no faz nada consumindo apenas ciclos da CPU. muito til para reservar
espaos na memria de programa quando se trabalha com EPROM.



Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 86 de 173
6.9. INSTRUES E FLAGS
Para a perfeita utilizao das instrues necessrio conhecer como estas alteram os flags, em seguida
apresenta-se uma pequena tabela com um resumo dessas informaes. Na tabela, 0 (zero) indica que o
flag apagado, 1 (um) indica que ativado, X (don't care) significa que o flag ser ativado ou apagado
de acordo com o resultado da instruo e "-" indica que o flag no alterado.



Figura 6.3 - Comportamento dos flags.

6.10) OBSERVAES SOBRE ENDEREAMENTO E USO DAS INSTRUES

6.10.1) BANCOS DE REGISTROS
Existem quatro bancos selecionados por RS1 e RS0, estes bancos podem ser acessados como registros
com endereamento direto ou com endereamento indireto.

BANCO 0 BANCO 1 BANCO 2 BANCO 3
R0 R1...R7 R0 R1...R7 R0 R1...R7 R0 R1...R7
Endereo 00 01 07 08 09 15 16 17 23 24 25 31

Supondo que o banco 1 esteja selecionado as instrues seguintes do como resultado a mesma
operao mas algumas consomem menos bytes que outras.

MOV A,R1 1 Byte 1MC (A,Rn)
MOV A,9 2 Bytes 1MC (A,direto)
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 87 de 173
Tambm se pode fazer uma seqncia para endereamento indireto:

MOV R0,#9 2 Bytes 1MC
MOV A,@R0 1 Byte 1MC
Total 3 Bytes 2MC

Os registros de outros bancos so acessados empregando endereamento direto ou indireto :

MOV A,23 2 bytes 1 MC (23 e/ou R7 do banco 2)

Aqui so apresentadas algumas instrues interessantes para realizar transferncias entre registros
(supe-se que o banco 3 esteja selecionado) :

MOV R1,R6 (no existe)
MOV R1,30 (equivale a MOV R1,R6)
MOV 25,R6 (equivale a MOV R1,R6)
MOV R1,R1 (no existe)
MOV R1,25 (equivale a MOV R1,R1)
MOV 25,R1 (equivale a MOV R1,R1)

6.10.2) REGISTROS ESPECIAIS (SFR)
Deve-se notar que todos os SFR exceto o Acumulador so acessados empregando endereamento
direto. Para que exista compatibilidade com o 8052 no se permite endereamento indireto para os SFR.
No 8052 quando se usa endereamento indireto com endereos maiores que 07FH, acessa-se a regio
chamada 128 UPPER. As duas instrues a seguir do o mesmo resultado, na verdade so idnticas e
geram o mesmo opcode.

MOV B,#10 2 bytes 1 MC
MOV 0F0H,#10 2 bytes 1 MC

O "B" que se usa aqui na verdade um label para o endereo 0F0H da RAM Interna. Todos os
programas montadores que trabalham com a famlia MCS-51 trazem os endereos dos SFR j definidos,
quer dizer, como se existissem as seguintes declaraes:

B EQU 0F0H
Acc EQU 0E0H
PSW EQU 0D0H
...
SP EQU 081H
P0 EQU 080H

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 88 de 173
Deve-se ter cuidado com o acumulador pois existem dois smbolos para o mesmo: A e Acc:

A Para as instrues com registro especifico;
Acc Para usar acumulador por endereamento direto.

Esses dois smbolos permitem construir instrues interessantes que se no forem levadas em conta
podem consumir muita memria.
Exemplos :
MOV R7,A 1 byte 1 MC (MOV Rn,A)
MOV R7,Acc 2 bytes 1 MC (MOV Rn,direto)
MOV A,Acc 2 bytes 1 MC (MOV A,direto)
MOV A,B 2 bytes 1 MC (MOV A,direto)
MOV Acc,B 3 bytes 2 MC (MOV direto,direto)

6.11) CDIGOS DE OPERAO (OPCODE)
As instrues da famlia MCS-51 para que possam ser executadas pelo microcontrolador devem ser
traduzidas em cdigos de operao (opcode). So estes opcodes que a CPU compreende e executa, a
cada instruo associado somente um opcode.

6.11.1) TABELAS DE INSTRUES
As tabelas das prximas pginas mostram a distribuio dos opcodes da famlia MCS-51. As tabelas
devem ser vistas por colunas, notar que o opcode "A5" no tem instruo.

Pgina 89 de 173

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 90 de 173

Pgina 92 de 173

6.11.2) INSTRUES EM ORDEM ALFABTICA COM OPCODES
A seguir sero apresentadas todas a instrues em ordem alfabtica. Esta lista para a construo dos
opcodes. As tabelas tambm apresentam essas mesmas informaes mas aqui elas esto mais
detalhadas.

Observao: Ser adotada a notao a seguir.
n = 0,1,2,3,4,5,6,7
i = 0,1
data = Palavra de 8 bits (byte)
data16 = Palavra de 16 bits
adr16 = Um endereo de 16 bits (Memria Externa)
adr11 = Um endereo de 11 bits (Memria Externa)
direct ou dir = Um endereo da RAM Interna (8 bits)
rel = Um deslocamento relativo
MSB = Byte mais significativo de uma palavra de 16 bits
LSB = Byte menos significativo de uma palavra de 16 bits

1) ACALL adr11
2) ADD A,Rn 28+n
3) ADD A,direct 25 direct
4) ADD A,@Ri 26+i
5) ADD A,#data 24 data
6) ADDC A,Rn 38+n
7) ADDC A,direct 35 direct
8) ADDC A,@Ri 36+i
9) ADDC A,#data 34 data
10) AJMP adr11
11) ANL A,Rn 58+n
12) ANL A,direct 55 direct
13) ANL A,@Ri 56+i
14) ANL A,#data 54 data
15) ANL direct,A 52 direct
16) ANL direct,#data 53 direct data
17) ANL C,bit 82 bit
18) ANL A,/bit B0 bit
19) CJNE A,direct,rel B5 direct relativo
20) CJNE A,#data,rel B4 data direct
21) CJNE Rn,#data,rel B8+n data relativo
22) CJNE @Ri,#data,rel B6+i data relativo
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 93 de 173
23) CLR A E4
24) CLR bit C2 bit
25) CLR C C3
26) CPL A F4
27) CPL bit B2 bit
28) CPL C B3
29) DA A D4
30) DEC A 14
31) DEC Rn 18+n
32) DEC direct 15 direct
33) DEC @Ri 16+i
34) DIV AB 84
35) DJNZ Rn,rel D8+n relativo
36) DJNZ direct,rel D5 direct relativo
37) INC A 04
38) INC Rn 08+n
39) INC direct 05 direct
40) INC @Ri 06+i
41) INC DPTR A3
42) JB bit,rel 20 bit relativo
43) JBC bit,rel 10 bit relativo
44) JC rel 40 relativo
45) JMP @A+DPTR 73
46) JNB bit,rel 30 bit relativo
47) JNC rel 50 relativo
48) JNZ rel 70 relativo
49) JZ rel 60 relativo
50) LCALL adr16 12 MSB(adr16) LSB(adr16)
51) LJMP adr16 02 MSB(adr16) LSB(adr16)
52) MOV A,Rn E8+n
53) MOV A,direct E5 direct
54) MOV A,@Ri E6+i
55) MOV A,#data 74 data
56) MOV Rn,A F8+n
57) MOV Rn,direct A8+n direct
58) MOV Rn,#data 78+n data
59) MOV direct,A F5 direct
60) MOV direct,Rn 88+n direct
61) MOV direct,direct 85 dir (fonte) dir (destino)
62) MOV direct,@Ri 86+i direct
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 94 de 173
63) MOV direct,#data 75 direct data
64) MOV @Ri,A F6+i
65) MOV @Ri,direct A6+i direct
66) MOV @Ri,#data 76+i data
67) MOV bit,C 92 bit
68) MOV C,bit A2 bit
69) MOV DPTR,#data16 90 MSB(data16) LSB(data16)
70) MOVC A,@A+DPTR 93
71) MOVC A,@A+PC 83
72) MOVX A,@Ri E2+i
73) MOVX A,@DPTR E0
74) MOVX @Ri,A F2+i
75) MOVX DPTR,A F0
76) MUL AB A4
77) NOP 00
78) ORL A,Rn 48+n
79) ORL A,direct 45 direct
80) ORL A,@Ri 46+i
81) ORL A,#data 44 data
82) ORL direct,A 42 direct
83) ORL direct,#data 44 data
84) ORL C,bit 72 bit
85) ORL C,/bit A0 bit
86) POP direct D0 direct
87) PUS direct C0 direct
88) RET 22
89) RETI 32
90) RL A 23
91) RLC A 33
92) RR A 03
93) RRC A 13
94) SETB bit D2 bit
95) SETB C D3
96) SJMP rel 80 relative
97) SUBB A,Rn 98+n
98) SUBB A,direct 95 direct
99) SUBB A,@Ri 96+i
100) SUBB A,#data 94 data
101) SWAP A C4
102) XCH A,Rn C8+n
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 95 de 173
103) XCH A,direct C5 direct
104) XCH A,@Ri C6+i
105) XCHD A,@Ri D6+i
106) XRL A,Rn 68+i
107) XRL A,direct 65 direct
108) XRL A,@Ri 66+i
109) XRL A,#data 64 data
110) XRL direct,A 62 direct
111) XRL direct,#data 63 direct data

6.12) JUMP E CALL
Segundo o modo de formao do endereo pode-se identificar 3 tipos de JUMPs e dois tipos de
CALLs.

Os 3 JUMPs so: Relativo, Absoluto e Longo;
Os 2 CALLs so: Absoluto e Longo.

Neste item sero esclarecidas estas instrues para evitar erros que so muito freqentes quando se
comea a trabalhar com a famlia MCS-51.

6.12.1) JUMPS RELATIVOS
Existem dois tipos de JUMPs Relativos os Incondicionais e os Condicionais.
Os condicionais realizam um desvio de acordo com o estado de um registro de um flag ou de um bit,
enquanto o incondicional sempre realiza o desvio.

Exemplo:
JUMP incondicional: SJMP rel
JUMP condicional: JNC rel

Nos JUMPs relativos especificam-se quantos bytes (deslocamento) se deseja desviar para frente ou para
trs, este deslocamento codificado em complemento a 2. Como h apenas um byte para este
deslocamento pode-se saltar 127 bytes para frente ou 128 bytes para trs.

Exemplos com JUMPs relativos
Os programas por simplicidade sempre iniciaro no endereo 200H. Ao lado de cada instruo estaro
os opcodes.

Exemplo 1: DESVIO CONDICIONAL PARA FRENTE

ORG 200H
ADD A,#30H
JC LABEL
ADD A,#20H
DA A
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 96 de 173
LABEL MOV B,A
O programa apresenta um desvio condicional para frente. A seguir tem-se este mesmo programa com os
endereos de memria e seu contedo.

Endereo Contedo Instruo Deslocamento
200 24 ADD A,#30H -4
201 30 -3
202 40 JC LABEL -2
203 03 -1
204 24 ADD A,#20H +0
205 20 +1
206 D4 DA A +2
207(LABEL) F5 MOV B,A +3
208 F0 +4

Quando a instruo "JC LABEL" est sendo executada, o Program Counter (PC) j est apontando para
a instruo seguinte, por isso o deslocamento +0 est na instruo "ADD A,#20H".

Exemplo 2: DESVIO CONDICIONAL PARA TRS

ORG 200H
INC A
LABEL MOV A,B
ADD A,#20H
DA A
JC LABEL
MOV R0,A

O programa apresenta um desvio condicional para trs e a seguir podem-se observar os endereos de
memria e seu contedo.
Endereo Contedo Instruo Deslocamento
200 04 INC A -8 (F8)
201(LABEL) E5 MOV A,B -7 (F9)
202 F0 -6 (FA)
203 24 ADD A,#20H 5 (FB)
204 20 -4 (FC)
205 D4 DA A -3 (FD)
206 40 JC LABEL -2 (FE)
207 F9 -1 (FF)
208 F8 MOV R0,A +0
209 75 MOV B,#50H +1
20A F0 +2
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 97 de 173
20 B50 +3
6.12.2) JUMPS E CALLS ABSOLUTOS
Os JUMPs e CALLs absolutos so sempre incondicionais, neste tipo de instruo apenas se trocam
alguns bits do PC pelos bits especificados na instruo (so trocados os 11 bits menos significativos do
PC), isto significa que os JUMPs e CALLs esto limitados a um alcance de 2KB, quer dizer, como se a
memria estivesse dividida em pginas de 2 KB e se pudesse saltar dentro dos limites de cada pgina.
Estas instrues permitem JUMPs e CALLs que consomem poucos bytes. Deve-se ter cuidado ao
escrever os opcodes.

Exemplo 3 : DESVIO ABSOLUTO

ORG 200H
ADD A,#30H
JNC LABEL
AJMP LB1
LABEL ADD A,#20H
...
ORG 765H
LB1 DA A
...
O programa acima apresenta um desvio condicional para frente e abaixo se tem o programa com os
endereos de memria e seu contedo.
endereo contedo instruo deslocamento
200 24 ADD A,#30H -4
201 30 -3
202 50 JNC LABEL -2
203 02 -1
204 E0 AJMP LB1 +0
205 65 +1
206(LABEL) 24 ADD A,#20H +2
207 20 +3
...
765(LB1) 04 DA A --

Observao:
AJMP LB1 A10 A9 A8 0 0 0 0 0 A7 A6 A5 A4 A3 A2 A1 A0
E0 65 1 1 1 0 0 0 0 0 0 1 1 0 0 1 0 1

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 98 de 173
Exemplo 4 : CALL ABSOLUTO
ORG 400H
ADD A,#30H
JNC LABEL
ACALL LB1
LABEL ADD A,#20H
...
ORG 234H
LB1 DA A
...

O programa semelhante ao anterior mas o AJMP foi trocado por um ACALL. Notar que a instruo
ACALL est chamando uma rotina que est atrs, mas dentro do bloco de 2 KB.

Endereo Contedo Instruo Deslocamento
400 24 ADD A,#30H -4
401 30 -3
402 50 JNC LABEL -2
403 02 -1
404 50 ACALL LB1 +0
405 34 +1
406(LABEL) 24 ADD A,#20H +2
407 20 +3
...
234(LB1) D4 DA A --

Observao:
ACALL LB1 A10 A9 A8 1 0 0 0 0 A7 A6 A5 A4 A3 A2 A1 A0
50 34 0 1 0 1 0 0 0 0 0 0 1 1 0 1 0 0

Exemplo 5 : DESVIO ABSOLUTO (COM ERRO)
ORG 700H
ADD A,#30H
JNC LABEL
AJMP LB1
LABEL ADD A,#20H
...
ORG 900H
LB1 DA A
...
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 99 de 173
Este programa vai apresentar um erro do tipo "illegal range" devido ao fato que o AJUMP est no
primeiro bloco de 2 KB (0 at 7FF) e o label est no segundo bloco (800 at FFF).

Exemplo 6 : DESVIO ABSOLUTO (COM ERRO)
ORG 7FFH
AJMP LB1
...
ORG 700H
LB1 DA A
...

Aparentemente no h erro pois o AJMP e o label esto no mesmo bloco de 2 KB. Na verdade h um
erro porque quando se inicia a execuo de uma instruo o PC j est apontando para a instruo
seguinte, ou seja, quando a CPU inicia a execuo do AJMP o PC est em 801H (AJMP usa dois bytes).
O PC e o label esto em dois blocos (de 2 KB) distintos. Os programas montadores devem ser
suficientemente inteligentes para detectar este tipo de erro.

6.13) EXEMPLOS
A seguir apresentada uma seqncia de exemplos que vo ilustrar a utilizao das instrues do MCS-
51. Supe-se que a CPU o 8031 que os programas sero usados como sub-rotinas e que sempre
iniciam no endereo 200H. Nos primeiros exemplos sero apresentadas tambm as listagens em
hexadecimal dos opcodes.

Exemplo 1 - SUBROTINA SUM
R7 = R1 + R0. Colocar em R7 o resultado da soma de R0 e R1.

ORG 200H
SUM: MOV A,R0
ADD A,R1
MOV R7,A
RET

Listagem em hexadecimal com os opcodes:

200 E8 MOV A,R0
201 29 ADD A,R1
202 FF MOV R7,A
203 22 RET

Deve-se ter cuidado para que a soma (R0+R1) no seja maior que 256. A melhor soluo ter uma sub-
rotina geral e por isso o resultado armazenado em 2 registros: R7 (MSB) R6 (LSB). O resultado ser
maior que 256 quando existir um carry.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 100 de 173
A seguir est a nova subrotina SUM (R7 R6 = R1 + R0).

ORG 200H
SUM: MOV A,R0
ADD A,R1
MOV R6,A ;R6 guarda o LSB
CLR A ;zera o acumulador
ADDC A,#0 ;acrescenta o carry
MOV R7,A ;R7 guarda o MSB
RET

Listagem em hexadecimal com os opcodes:
200 E8 MOV A,R0
201 29 ADD A,R1
202 FE MOV R6,A
203 E4 CLR A
204 34 ADDC A,#0
205 00
206 FF MOV R7,A
207 22 RET

A instruo "ADDC A,#0" pode ser substituda pela instruo "RLC A", com a vantagem de se
economizar um byte, isto est na listagem hexadecimal a seguir.
Listagem em hexadecimal com os opcodes:
200 E8 MOV A,R0
201 29 ADD A,R1
202 FE MOV R6,A
203 E4 CLR A
204 33 RLC A
205 FF MOV R7,A
206 22 RET

Exemplo 2 - SUBROTINA SUB
R7 = R1 - R0. Colocar em R7 o resultado da subtrao de R1 e R0.
ORG 200H
SUB: MOV A,R1
CLR C ;zera o carry (necessario na subtracao)
SUBB A,R0
MOV R7,A
RET
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 101 de 173
Listagem em hexadecimal com os opcodes:
200 E9 MOV A,R1
201 C3 CLR C
202 98 SUBB A,R0
203 FF MOV R7,A
204 22 RET

Um cuidado que se deve ter ao usar a instruo SUBB o de zerar o carry pois o SUBB sempre o utiliza.

Exemplo 3 - SUBROTINA MUL
R7 R6 = R1 * R0.
Colocar em R7 (MSB) e em R6 (LSB) o produto de R0 e R1
ORG 200H
MUL: MOV A,R0
MOV B,R1
MUL AB
MOV R6,A ;guarda o LSB
MOV R7,B ;guarda o MSB
RET

Listagem em hexadecimal com os opcodes:
200 E8 MOV A,R0
201 89 MOV B,R1
202 F0
203 A4 MUL AB
204 FE MOV R6,A
205 AF MOV R7,A
206 F0 MOV R7,B
207 22 RET

Eemplo 4 - SUBROTINA DIV
R7(quoc.) R6(resto) R1/R0. Dividir R1 por R0 e guardar o resultado em: R7(quociente) e R6(resto)
ORG 200H
DIV: MOV A,R1 ;dividendo em A
MOV B,R0 ;divisor em B
DIV AB
MOV R7,A ;guarda o quociente
MOV R6,B ;guarda o resto
RET

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 102 de 173
Listagem em hexadecimal com os opcodes:
200 E9 MOV A,R1
201 88 MOV B,R0
202 F0
203 84 DIV AB
204 FF MOV R7,A
205 AE MOV R6,B
206 F0
207 22 RET

Exemplo 5 - SUBROTINA DIV_7
Verificar se o byte que est em R3 mltiplo de 7 e , se for, ativar o bit 0 da porta P1.

ORG 200H
DIV_7: MOV A,R3
MOV B,#7
DIV AB ;dividir por 7
MOV A,B ;coloca o resto em A
JZ LB ;ha resto ?
CLR P1.0 ;zera bit P1.0
RET
LB: SETB P1.0 ;seta bit P1.0
RET

Listagem em hexadecimal com os opcodes:
200 EB MOV A,R3
201 75 MOV B,#7
202 F0
203 07
204 84 DIV AB
205 E5 MOV A,B
206 F0
207 60 JZ LB
208 03
209 C2 CLR P1.0
20A 90
20B 22 RET
20C (LB) D2 SETB P1.0
20D 90
20E 22 RET
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 103 de 173
H uma outra soluo que ocupa um byte a menos, inicia-se com a hiptese de que o nmero no
divisvel por 7 (zerar P1.0) e em seguida se realiza o teste, caso o numero for divisvel inverte-se P1.0,
economiza-se um RET.
200 C2 CLR P1.0
201 90
202 EB MOV A,R3
203 75 MOV B,#7
204 90
205 07
206 84 DIV AB
207 E5 MOV A,B
208 F0
209 70 JNZ LB
20A 02
20B(LB) B2 CPL P1.0
20C 90
20D 22 RET

Exemplo 6 - SUBROTINA INICIALIZAR
Inicializar com zero toda a RAM interna, ou seja, os endereos de 0 a 127.
ORG 200H
ZERAR: CLR RS1 ;seleciona banco 0
CLR RS0 ;seleciona banco 0
CLR A
MOV R0,#127 ;maior endereo
LB: MOV @R0,A
DJNZ R0,LB
RET

Listagem em hexadecimal com os opcodes:
200 C2 CLR RS1
201 D4
202 C2 CLR RS0
203 D3
204 E4 CLR A
205 78 MOV R0,#127
206 7F
207(LB) F6 MOV @R0,A
208 D8 DJNZ R0,LB
209 FD
20A 22 RET
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 104 de 173
Exemplo 7 - SUBROTINA MUL16
R7 R6 R5 R4 = (R3 R2)*(R1 R0). Em R1 e R0 existe um
nmero de 16 bits e em R3 e R2 existe um outro. Multiplicar
estes dois nmeros de 16 bits e guardar o resultado em R7,
R6, R5 e R4.
A soluo muito simples pois esta multiplicao pode ser
vista como 4 multiplicaes de 8 bits. A equao a seguir
ilustra este efeito.
(2
8
.R3 + R2) * (2
8
.R1 + R0) = 2
16
(R3.R1)+ 2
8
(R3.R0+
R2.R1)+ (R2.R0)

Figura 6.4 - Explicao da rotina de multiplicao.
MUL16: MOV A,R2
MOV B,R0
MUL AB ;R2*R0
MOV R4,A ;R4 contem LSB(R2*R0)
MOV R5,B ;R5 contem MSB(R2*R0)
MOV A,R3
MOV B,R0
MUL AB ;R3*R0
ADD A,R5 ;A contem LSB(R3*R0)+MSB(R2*R0)
MOV R5,A ;coloca em R5 o valor de A
CLR A ;zera A
ADDC A,B ;A contem Carry + 0 + MSB(R3*R0)
MOV R6,A ;coloca em R6 o valor de A
MOV A,R2 ;
MOV B,R1 ;
MUL AB ;R2*R1
ADD A,R5 ;A contem LSB(R2*R1)+LSB(R3*R0)+MSB(R2*R0)
MOV R5,A ;coloca em R5 o valor de A
MOV A,B ;A contem MSB(R2*R1)
ADDC A,R6 ;A contem Carry+MSB(R3*R0)+MSB(R2*R1)
MOV R6,A ;coloca em R6 o valor de A
MOV A,R3 ;;
MOV B,R1 ;;
MUL AB ;R3*R1
ADD A,R6 ;A contem LSB(R3*R1)+MSB(R2*R1)+MSB(R3*R0)
MOV R6,A ;coloca em R6 o valor de A
CLR A ;zera A
ADDC A,B ;A contem Carry + 0 + MSB(R3*R1)
MOV R7,A ;coloca em R7 o valor de A
RET
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 105 de 173
Exemplo 8 - SUBROTINA SUMBCD
Em R1 e R0 existem 2 nmeros BCD que devero ser somados e o resultado deve ser armazenado em
R7 e R6.
SUMBCD: MOV A,R1
ADD A,R0 ;A contem R0 + R1
DA A ;ajuste decimal depois de uma soma BCD
MOV R6,A ;coloca em R6
CLR A ;zera A
ADDC A,#0 ;A contem 0 + Carry + 0
MOV R7,A ;coloca em R7
RET

Exemplo 9 - SUBROTINA SUBBCD
Em R1 e R0 encontra-se um nmero em BCD de quatro dgitos. Subtrair 86 deste nmero e colocar o
resultado em R7 e R6.
Como o "decimal adjust" (DA A) s funciona em somas, ser necessrio realizar a subtrao utilizando
complemento a 10. Deve-se notar que 99 funciona como -1 e que 98 como -2. O complemento a 10 de
86 9914.


SUBBCD: MOV A,R0
ADD A,#14H ;R0 + LSB de -86
DA A ;ajuste decimal da soma
MOV R6,A ;coloca em R6
MOV A,R1
ADDC A,#99 ;R1 + MSB de -86
DA A ;ajuste decimal da soma
MOV R7,A ;coloca em R7
RET
Exemplo 10 - SUBROTINA BINBCD
Converter um nmero binrio para BCD.
Existem vrios casos de acordo com o valor do nmero a ser convertido:
caso a: 0 a 99 (2 algarismos BCD)
caso b: 0 a 255 (1 byte)
caso c: 0 a 999 (3 algarismos BCD)
caso d: 0 a 9999 (4 algarismos BCD)
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 106 de 173
Caso a
Em R4 existe um nmero de 0 a 99. Convert-lo para BCD e colocar o resultado em R6. Ao dividir o
nmero por 10 a unidade termina em Acc e a dezena em B.

BINBCD_99: MOV A,R4
MOV B,#10
DIV AB ;A=0X B=0Y
SWAP A ;A=X0 B=0Y
ADD A,B ;A=XY B=0Y
MOV R6,A ;coloca em R6 o valor de A
RET

Caso b
Em R4 existe um nmero de 0 a 255. Convert-lo para BCD e colocar o resultado em R7 e R6. Divide-se
o nmero por 100 para separar a centena e depois se usa a soluo do caso a.

BINBCD_255: MOV A,R4
MOV B,#100
DIV AB ;separar centena (divide por 100)
MOV R7,A ;R7 guarda o quociente (digito BCD mais sigf.)
MOV A,B ;igual a BINBCD_99
MOV B,#10
DIV AB
SWAP A
ADD A,B
MOV R6,A
RET

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 107 de 173
Caso c
Em R5 e R4 existe um nmero de 0 a 999. Convert-lo para BCD e colocar o resultado em R7 e R6. A
soluo usada aqui a de somar 256 em R7 e R6 e decrementar R5 at que este seja 0, depois se usa
uma rotina idntica BINBCD_255.
BINBCD_999: CLR A ;zera A
MOV R7,A ;poe zero em R7 e R6 para
MOV R6,A ;receber os resultados
MOV A,R5
JZ LB1 ;se R5=0 (0<= num <=255), seguir adiante
;
LB2: MOV A,R6
ADD A,#56H ;somar 256 BCD e decrementar
DA A ;R5 ate que este chegue
MOV R6,A ;a zero
MOV A,R7
ADDC A,#2
DA A
MOV R7,A
DJNZ R5,LB2 ;decrementar R5
;
LB1: MOV A,R4 ;parecido com BINBCD_255 (0<= num <=255)
MOV B,#100
DIV AB
ADD A,R7
DA A
MOV R7,A
MOV A,B
MOV B,#10
DIV AB
SWAP A
ADD A,B
ADD A,R6
DA A
MOV R6,A
MOV A,R7 ;ha posibilidade de que se
ADDC A,#0 ;necessite passar um carry adiante
DA A
MOV R7,A
RET
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 108 de 173
Caso d
Em R5 e R4 existe um nmero do 0 a 9999. Convert-lo para BCD e colocar seu resultado em R7 e R6.
A soluo adotada no Caso c sugere um loop para zerar R5. Mas para nmeros muito grandes esse loop
pode ser excessivo em termos de tempo e por isso a melhor soluo seria usar divises por 1000, 100 e
10. O problema agora ser como realizar divises de 2 nmeros de 16 bits usando a diviso de 8 bits
que se tem disponvel.
Uma maneira de solucionar este problema converter o LSB para BCD e depois converter o MSB para
BCD, multiplic-lo por 256 e somar com o anterior. Uma multiplicao por 256 fcil: multiplique por 200
(multiplique por 2 e desloque 2 posies BCD para a esquerda), multiplique por 50 (multiplique por 5 e
desloque 1), multiplique por 6 e finalmente some os trs resultados.

Com esta soluo pode-se pensar em um caso e mais geral:
Caso e
Em R4 e R3 existe um nmero binrio de 16 bits (0 a 9999). Convert-lo para BCD e colocar seu
resultado em R7, R6 e R5. Na soluo sero utilizadas algumas subrotinas auxiliares. Converte um byte
do ACC para BCD e coloca o resultado em AUXH e AUXL.

BCD8: MOV B,#100 ;parecido com BINBCD_255
DIV AB
MOV AUXH,A
MOV A,B
MOV B,#10
DIV A,B
SWAP A
ADD A,B
MOV AUXL,A
RET
Recebe um nmero BCD em R2 e R1 e o incrementa o nmero de vezes especificado em R0 (R0>0).

ROT_INC: MOV R1AUX,R1
MOV R2AUX,R2
DEC R0
R_INC: MOV A,R1AUX
ADD A,R1
DA A
MOV R1,A
MOV A,R2AUX
ADDC A,R2
DA A
MOV R2,A
DJNZ R0,R_INC
RET
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 109 de 173
Somar dois nmeros BCD, um nmero est em R2 e R1, enquanto o outro est indicado pelo ponteiro
R0. O resultado deve ser guardado no endereo apontado por R0.
[@(R0+1) e @R0] [@(R0+1) e @R0] + [R2 e R1]

SOMA: MOV A,@R0
ADD A,R1 ;soma os LSBs
DA A ;ajuste decimal da soma
MOV @R0,A ;guarda a soma em @R0
INC R0 ;vai para proximo endereco
MOV A,@R0
ADDC A,R2 ;soma os MSBs com Carry
DA A ;ajuste decimal da soma
MOV @R0,A ;guarda o MSB da soma
RET
Aqui est a subrotina principal:

(R7, R6, R5) BCD (R4, R3)

BCD16: MOV A,R3 ;coloca em A o LSB
ACALL BCD8 ;converte o LSB p/ BCD e coloca
; ;o resultado em AUXH e AUXL
MOV R5,AUXL ;o LSB em BCD vai para R5 e R6
MOV R6,AUXH
MOV A,R4 ;coloca em A o MSB
ACALL BCD8 ;converte o LSB p/ BCD e coloca
; ;o resultado em AUXH e AUXL
MOV R2,AUXH ;o MSB em BCD vai para R1 e R2
MOV R1,AUXL
MOV R0,#6
ACALL ROT_INC ;Calcula BCD(MSB)*6
MOV R0,#5 ;Para que a soma seja colocada em R5 e R6
ACALL SOMA ;(R6,R5) <- (R6,R5) + 6*BCD(MSB)
CLR A ;zera A
RLC A ;houve carry? (por seguranca)
MOV R7,A ;coloca carry em R7
;
MOV R2,AUXH ;AUXH e AUXL ainda guardam o BCD(MSB)
MOV R1,AUXL
MOV R0,#5
ACALL ROT_INC ;Calcula BCD(MSB)*5
; ; A R2 R1 deslocar
MOV A,R2 ; 0X 0X YZ uma
MOV R0,#1
XCHD A,@R0 ; 0Z 0X YX posicao BCD
SWAP A ; Z0 0X YX para a
XCH A,R1 ; YX 0X Z0 esquerda
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 110 de 173
SWAP A ; XY 0X Z0 (multipl. por 10)
XCH A,R2 ; 0X XY Z0
MOV R0,#5 ;Para que a soma seja colocada em R5 e R6
ACALL SOMA ;(R6,R5) <- (R6,R5)+ 6*BCD(MSB)+50*BCD(MSB)
MOV A,R7
ADDC A,#0 ;acrescenta o carry a R7
DA A
MOV R7,A
;
MOV R2,AUXH ;AUXH e AUXL ainda guardam o BCD(MSB)
MOV R1,AUXL
MOV R0,#2
ACALL ROT_INC ;Calcula BCD(MSB)*2
MOV R0,#6 ;Para que a soma seja colocada em R6 e R7
ACALL SOMA
RET

Note que podem ser introduzidas algumas melhorias nas subrotinas de multiplicao: a multiplicao por
2 se resume a uma soma.
2n = n + n
5n = 2n + 2n + n
6n = 5n + n

Deve-se notar que existem muitas outras rotinas para converter BIN para BCD.

Exemplo 11 - SUBROTINA NIB_ASC
Converter uma nibble que est no Acc para seu correspondente ASCII

Exemplos: 0110 (6) 36H
1010 (A) 41H

A soluo simples:
Se n < 10 somar 30H
Se n 10 somar 37H
NIB_ASC: PUSH Acc ;coloca o conteudo de A na pilha
CLR C ;zera Carry
SUBB A,#10 ;A-10 se CY=1 => A<10
POP Acc ; se CY=0 => A>=10
JNC NIB_ASC1 ;
ADD A,#30H ;de 30 a 39 (algarismos)
RET
NIB_ASC1: ADD A,#37H ;de 41 a 46 (letras)
RET

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 111 de 173
Exemplo 12 - SUBROTINA HEX_ASC
Converter o byte que est em Acc em seus 2 correspondentes ASCII, guardando o mais significativo em
Acc e o menos significativo em b.

Exemplo: Acc = 0110 1010 Acc = 36H e B = 41H

HEX_ASC: MOV B,A ;coloca em B uma copia de A
ANL A,#0FH ;zera nibble mais sigf. de A
ACALL NIB_ASC
XCH A,B ;troca os valores de A e B
ANL A,#0F0H ;zera a nibble menos sigf. de A
SWAP A ;troca as nibbles de A
ACALL NIB_ASC
RET

Exemplo 13 - SUBROTINA ASC_HEX
Converter os 2 caracteres ASCII que se encontram em Acc (mais significativo) e B (menos significativo)
em seu binrio correspondente

Exemplo: Acc = 43H e B = 38H => Acc =1100 1000
C 8

ASC_HEX: ACALL ASCNIB
SWAP A ;troca as nibbles em A
XCH A,B ;troca valores entre A e B
ACALL ASCNIB
ADD A,B ;coloca as 2 nibbles em A
RET

Subrotina auxiliar, recebe um caracter ASCII no Acc e retorna sua nibble correspondente.

ASCNIB: CLR C ;zera Carry
SUBB A,#30H ;A - 30H se CY = 1 A<30 (ERRO)
JC ERRO ; se CY = 0 A 30
PUSH Acc ;guarda A - 30H na pilha
SUBB A,#10 ;A - 10 se CY = 1 A < 10
JNC ASCNIB1 ; se CY = 0 A 10
POP Acc ;restaura o valor A - 30H
RET
;
ASCNIB1: SUBB A,#6 ;A - 6 se CY = 1 A < 6
POP Acc ; se CY = 0 A 6
JNC ERRO
SUBB A,#6 ;Notar que CY = 1 (ou seja, A - 37H)
RET
;
ERRO: CPL P1.7 ;indica erro
SJMP ERRO ;fica em loop
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 112 de 173
Exemplo 14 - SUGESTO
Uma soluo para divises quando o dividendo fixo e tem mais de um byte: seja o caso em que
necessrio dividir um nmero N por 836; no se pode fazer diretamente N / 836 mas 836
aproximadamente 65536 / 78 e ento se usa o seguinte truque: (N*78) / 65536, ou seja, multiplica-se por
78 e se deixam de fora os dois ltimos bytes.
No caso de converso de binrio para BCD de um nmero de 0 at 9999 necessrio dividi-lo por 1000.
Esta diviso pode ser feita atravs de uma multiplicao seguida de uma diviso por um nmero que
seja uma potncia de dois. Deve-se lembrar que dividir um nmero por 2 corresponde a 1 shift right, por
4 corresponde a 2 shift right, por 8 corresponde a 3 shift right, ...
A diviso por 1000 pode ser feita usando vrios valores de N e n; a tabela a seguir ilustra o erro
cometido.
1000 = N / n


Um bom exerccio desenvolver uma rotina para converter de binrio para BCD usando este truque para
a diviso por 1000. Verificar tambm a preciso (devem-se usar valores de N e n que resultem em delta
%< 0 e para obter o resto, multiplica-se o resultado por 1000 e subtrai-se do original).
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 113 de 173


A famlia MCS-51 oferece 4 portas paralelas denominadas P0, P1, P2 e P3 e para cada porta existe um
SFR. De acordo com a configurao do hardware, uma ou mais portas estaro totalmente ou
parcialmente disponveis.

7.1) REGISTROS ENVOLVIDOS
Os 4 registros, P0, P1, P2 e P3 so na realidade os latches das portas e no os pinos da CPU, algumas
instrues operam com o contedo destes latches e outras com os valores dos pinos.

As portas paralelas so utilizadas pela CPU para efetuar vrias tarefas:
P0 byte inferior de endereos e dados BUS
P2 byte superior de endereos

P3 0 RXD - entrada serial
1 TXD - sada serial
2 *INT0 - interrupo externa 0
3 *INT1 - interrupo externa 1
4 T0 - entrada externa para o contador 0
5 T1 - entrada externa para o contador 1
6 *WR - strobe para escrita na memria de dados externa
7 *RD - strobe para leitura da memria de dados externa

Durante uma operao de escrita ou leitura de memria de dados, por exemplo os dados das portas P0
e P2 so removidos e por eles se emitem os endereos e dados. Terminadas as operaes o contedo
do latch reaparece nos pinos da CPU.
Existem detalhes sobre a utilizao de cada porta como entrada ou sada mas de uma forma geral pode-
se dizer que:
Sada: Basta escrever 0 ou 1 na porta que o nvel lgico aparece nos pinos corretos.
Entrada: todos as portas (exceto P0) possuem um pull-up interno, quando se escreve 1 em um bit da
porta diz-se que este bit est programado como entrada pois dispositivos externos podem colocar
(forar) este 1 em 0. Assim para ter uma porta como entrada escreve-se 1 e depois com a leitura ser
lido 1 ou 0 de acordo com o nvel que externamente est aplicado no pino, devido a esta
caracterstica as portas so chamadas quasi-bidirecionais.

7.2) DESCRIO DO FUNCIONAMENTO
Cada porta paralela constituda por trs partes:
Um registro latch (SFR P0,P1,P2,P3)
Um driver de sada
Um buffer de entrada
Os drivers de sada de P0 e P2 e o buffer de entrada de P0 so usados para acessar a memria externa
de programa ou de dados.
CAPTULO 7 - PORTAS PARALELAS
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 114 de 173
7.2.1) PORTA P1
O latch de um bit da porta P1, um bit do SFR P1 representado por um flip-flop D (figura 7.1), no qual se
escreve um valor do bus interno atravs de um pulso Write to Latch gerado pela CPU. A sada do latch
colocada no bus interno atravs de um sinal Read Latch gerado pela CPU. O nvel do pino da porta
colocado no bus interno atravs do sinal Read Pin, tambm gerado pela CPU.


Figura 7.1 - Esquema para um bit da porta P1.

Algumas instrues que lem o estado da porta operam com Read Latch enquanto outras operam com
Read Pin.
Quando escreve na porta:
0 *Q=1 FET ON sada = 0
1 *Q=0 FET OFF sada = 1 (pull-up)
Para ser usado como entrada o latch da porta deve estar em 1, isso desconecta o driver FET da sada.
Assim o pino da porta vai para um nvel alto levado pelo pull-up. Esse pino poder ser levado para o
nvel baixo por qualquer elemento externo, devido ao pull-up interno essa porta denominada "quasi-
bidirecional". Quando est configurado para entrada, este vai para 1 e se externamente levado para
baixo ento fornece corrente. Se a porta estivesse em alta impedncia quando configurado como
entrada, ento seria classificado como "bidirecional verdadeiro".


Figura 7.2 - Pino do microcontrolador sendo levado a 0 por uma sada TTL.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 115 de 173
7.2.2) PORTA P3
Pela porta P3 (figura 7.3) tm-se diversas funes alternativas: *RD, *WR, T0, T1, TXD, RXD, *INT0,
*INT1.


Figura 7.3 - Esquema para um bit da porta P3.

Quando "Alternate Output Function - AOF = 1, tem-se na sada a porta P3, assim se AOF = 1 e for
escrito:
0 Q = 0 G = 1 FET ON sada = 0
1 Q = 1 G = 0 FET OFF sada = 1 (pull-up)

Quando o latch de P3 contm 1, a sada pode ser controlada pelo sinal "Alternate Output Function -
AOF, Se o latch de P3 est em 0, o pino da porta estar em zero e as diversas funes alternativas no
estaro disponveis. P3 tambm uma porta quasi-bidirecional.

7.2.3) PORTA P2
Por esta porta tambm sai o byte mais significativo dos endereos (figura 7.4).


Figura 7.4 - Esquema para um bit da porta P2.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 116 de 173
O funcionamento muito semelhante aos casos anteriores.
Se o CONTROL = 0 e for escrito:

0 Q = 0 M = 0 G = 1 FET ON sada = 0
1 Q = 1 M = 1 G = 0 FET OFF sada = 1 (pull-up)

Se o CONTROL = 1, ADDRESS controla o nvel no pino:

ADDR = 0 M = 0 G = 1 FET ON sada = 0
ADDR = 1 M = 1 G = 0 FET OFF sada = 1 (pull-up)

De acordo com o nvel lgico do sinal de CONTROL permite-se a sada ao latch de P2 ou ao byte alto de
endereo.

7.2.4) PORTA P0
Esta porta a mais complexa pois atende a trs funes (figura 7.5):
Bus de dados da CPU
Byte menos significativo dos endereos
Porta paralela (bidirecional verdadeira)


Figura 7.5 - Esquema para um bit da porta P0.

A porta P0 difere das demais por ser utilizada para transportar dados durante as operaes com a
memria e portanto necessita ser bidirecional verdadeira. Se ela est sendo utilizada como porta paralela
ento CONTROL = 0. Com isso G1 = 0 e F1 est sempre cortado (no existe pull-up).
Se CONTROL = 0 e for escrito:

0 *Q = 1 G2 = 1 F2 ON sada = 0
1 *Q =0 G2 = 0 F2 OFF a sada flutua (no h pull-up).

Note que quando se escreve 1 a porta pode ser utilizada como uma entrada de alta impedncia. Para
transform-la em uma porta quase-bidirecional basta colocar externamente resistores de pull-up.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 117 de 173
Quando a porta utilizada para enviar endereos ou dados CONTROL =1 e a sada depende de
ADDRESS / DATA (ADR/DT):

ADR/DT = 0 G1 = 0 F1 OFF e G2 = 1 F2 ON sada = 0
ADR/DT = 1 G1 = 1 F1 ON e G2 = 0 F2 OFF sada = 1

Observao: Nunca pode se ter: F1 ON e F2 ON curto-circuito.

Para que a porta possa ser usada na leitura de memria necessria alta impedncia, nesse caso
CONTROL = 0 e se fora uma escrita com 1 no latch de P0.

Se CONTROL = 0 G1 = 0 F1 OFF
Se Q = 1 *Q = 0 G2 = 0 F2 OFF
Se F1 e F2 esto em OFF alta impedncia.

A leitura da memria feita com o sinal READ PIN.

7.3) ESCRITA NAS PORTAS
Na execuo de qualquer instruo que altere o latch de uma porta, o novo valor chega ao latch durante
S6P2 que o final do ciclo de instruo. Entretanto os latches so na realidade enviados at os buffers
de sada durante a fase P2 de qualquer perodo de clock (durante P1 se mantm o mesmo valor). Assim
o novo valor aparecer no pino durante P1 do prximo ciclo (que S1P1).
Se for necessria uma mudana de 0 para 1 nas portas P1, P2 e P3, o PULL-UP dever entregar
bastante corrente para que essa transio seja rpida. Nas transies de 0 para 1 durante S1P1 e S1P2,
entra em atividade um PULL-UP adicional que pode fornecer 100 vezes mais corrente que o PULL-UP
normal. Note que os PULL-UP so FETs e no transistores bipolares.
O PULL-UP normal um FET (depletion-mode) com a porta (G) conectada fonte (S). Quando est
conectado ao terra, circula por ele uma corrente de 0,25 mA.



Figura 7.6 - O FET (depletion mode) usado como PULL-UP para as portas paralelas. (HMOS)

Na figura 7.7 est o PULL-UP adicional que acelera as transies de 0 para 1, quando A = B = 0 a sada
S vai para 1 e com isto o transistor entra no circuito fornecendo at 30 mA.


Figura 7.7 - Controle para o FET (enhanced mode). (HMOS)
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 118 de 173
Na figura 7.8 est o esquema completo da sada da porta paralela.


Figura 7.8 - Acionamento do FET (enhanced mode) nas transies de 0--1. (HMOS)

Note que se *Q vai de 1 0, durante dois perodos de clock a sada (S) da porta NOR ser 1, permitindo
que o enhancement mode FET entre em paralelo com o FET (pull-up) normal, fornecendo maior
capacidade de corrente. Este esquema utilizado em HMOS, nas famlias CHMOS o esquema varia um
pouco mas a idia a mesma.
Os buffers de sada das portas P1, P2 e P3 podem acionar at 4 cargas LS TTL, eles podem ser
acionados (trabalhando como entrada) por circuitos TTL e NMOS. Como possuem pull-up interno essas
portas tambm podem ser acionadas por TTL de coletor aberto mas as transies de 0 1 no sero
rpidas porque o pull-up tem baixa capacidade de corrente.
A porta P0 pode acionar at 8 LS TTL (modo BUS), quando opera como porta paralela, necessrio
pull-up externo para acionar outras entradas. Algumas instrues de leitura utilizam o dado armazenado
no latch enquanto outras usam o estado do pino. As instrues que usam o dado do latch so aquelas
que lem o valor (possivelmente) o alteram e o escrevem de novo (read-modify-write). Quando o destino
do operando uma porta ou um bit da porta utilizado o dado do latch e no o valor do pino.
A seguir est uma lista destas instrues que operam com o dado do latch:

Instruo Exemplo
ANL ANL P1,A
ORL ORL P2,A
XRL XRL P3,A
JBC JBC P1.1,LB (pula se bit=1 e zera o bit)
CPL CPL P3.0
INC INC P2
DEC DEC P2
DJNZ DJNZ P3,label
MOV PX.Y,C MOV P1.0,C
CLR PX.Y CLR P1.2
SETB PX.Y SETB P1.3
Pode parecer que as 3 ltimas instrues no so do tipo "read-modify-write", na realidade lido todo o
byte da porta, o bit considerado alterado e o novo byte devolvido para a porta.
Uma razo para usar o dado do latch e no o valor do pino evitar um equvoco na interpretao do
nvel de tenso do pino, como por exemplo quando um bit de uma porta est sendo usado para acionar a
base de um transistor.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 119 de 173

Funcionamento:
Quando P1.0 = 1 LED aceso
Quando P1.0 = 0 LED apagado



Figura 7.9 - Bit 0 da porta 1 sendo usado para acender um led atravs de um transistor.

Sem dvida quando P1.0 = 1 a tenso no pino vai estar em 0,7 V, o que um 0 lgico em nvel TTL.
Espera-se que a instruo CPL P1.0 inverta o estado do led. Supondo que o led esteja aceso (P1.0=1)
se a CPU usa o valor do pino ela vai obter 0 e isto far P1.0 =1, quer dizer no vai mudar o estado do
led, o melhor usar o dado do latch que est em 1.

7.4) EXERCCIOS
Todos as exerccios e exemplos esto baseados no circuito de prticas.
7.4.1) PISCA1 E PISCA2
Acender os 3 leds em seqncia. No esquecer de colocar um retardo. O led se acende quando se pe
nvel alto em um bit da porta.


;PISCA1.ASM

;
RTD EQU 60000 ;65536>RTD>256
VERMELHO EQU P1.0
AMARELO EQU P1.1
VERDE EQU P1.2
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
ORG RESET
INIC MOV P1,#0 ;APAGA OS LEDS
AQUI SETB VERMELHO
LCALL RETARD
CLR VERMELHO
SETB AMARELO
LCALL RETARD
CLR AMARELO
SETB VERDE
LCALL RETARD
CLR VERDE
SJMP AQUI
;
;ROTINA PARA GERAR UM RETARDO
RETARD MOV R7,# HIGH RTD
L1 MOV R6,# LOW RTD
L2 DJNZ R6,L2
DJNZ R7,L1
RET
END
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 120 de 173
Acender os 3 leds em seqncia, no esquecer de colocar um retardo. O led se acende quando se pe
nvel alto em um bit da porta.
Uma outra soluo muito mais simples pode ser utilizada. Como no so usados os demais pinos da
porta P1 pode-se escrever qualquer coisa neles. Usam-se ento o Acc e o CY para obter um total de 9
bits e atravs de rotaes conseguem-se gerar os cdigos para acender os leds em seqncia (a figura
7.10 ilustra a idia).


Figura 7.10 - Uso do Acc e CY para acender leds em seqncia.

Se Acc e CY so inicializados com estes valores, basta uma rotao com CY (RLC A) para mudar o led
que deve ficar aceso. A cada rotao escreve-se o contedo de Acc em P1.

;PISCA2.ASM ;
RTD EQU 60000 ;65536>RTD>256
VERMELHO EQU P1.0
AMARELO EQU P1.1
VERDE EQU P1.2
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
ORG RESET
INIC MOV A, #01001001B ; 01 001 001
CLR C
AQUI MOV P1, A
ACALL RETARD
RLC A
SJMP AQU
;
;ROTINA PARA GERAR UM RETARDO
RETARD MOV R7, # HIGH RTD L1
MOV R6, # LOW RTD
L2 DJNZ R6, L2
DJNZ
R7,L1
RET
END
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 121 de 173
7.4.2) CHAVE1, CHAVE2 E CHAVE3
Usando os trs leds como um contador de trs bits, construir um programa que conte os acionamentos
da chave SW2 (a contagem ser observada nos trs leds). Note que a chave no necessita de pull-up
porque usa o pull-up interno da porta. A figura 7.11 ilustra as conexes.



Figura 7.11 - Conexes de leds e chave no circuito de prticas.

a) No primeiro programa ser usada uma soluo simples que tem o problema de bouncing.

;CHAVE1.ASM
;
SW2 EQU P1.3
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
ORG RESET
INIC CLR A ;ZERAR CONTADOR
MOV P1, A ;APAGAR LEDS
SETB SW2 ;PROGRAMAR P1.3 COMO ENTRADA
AQUI1 JB SW2, AQUI1 ;AGUARDAR ACIONAMENTO
INC A
MOV P1,A ;DAR SADA AO CONTADOR
SETB SW2 ;GARANTIR P1.3 COMO ENTRADA
AQUI2 JNB SW2,AQUI2 ;AGUARDAR LIBERAR CHAVE
SJMP AQUI1
END

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 122 de 173
b) No segundo programa apresentada uma soluo para eliminar o bouncing utilizando retardos. Ao
detectar uma transio na chave o programa aguarda um tempo para que se extinga o bouncing. O
tempo que se deve aguardar determinado de forma emprica.

; CHAVE2.ASM
;
; NESTE PROGRAMA SE PRETENDE ELIMINAR O BOUNCING COM RETARDOS
; O VALOR DO RETARDO PARTICULAR PARA CADA CIRCUITO
; (DEPENDE DO TAMANHO DOS CABOS, QUALIDADE DA CHAVE, ETC)
; RECOMENDA-SE: DETERMINAR EMPIRICAMENTE O MELHOR RETARDO PARA CADA CIRCUITO
;
RTD EQU 500 ;RTD>256
SW2 EQU P1.3
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
ORG RESET
INIC CLR A ;ZERAR CONTADOR
MOV P1,A ;APAGAR LEDS
SETB SW2 ;PROGRAMAR P1.3 COMO ENTRADA
AQUI1 JB SW2,AQUI1 ;AGUARDAR ACIONAMENTO
INC A MOV P1,A ;DAR SADA AO
CONTADOR
SETB SW2 ;GARANTIR P1.3 COMO ENTRADA
ACALL RTD ;ELIMINAR BOUNCING
AQUI2 JNB SW2,AQUI2 ;AGUARDAR LIBERAR CHAVE
ACALL RTD ;ELIMINAR BOUNCING
SJMP AQUI1
;
; ROTINA PARA GERAR UM RETARDO
RETARD MOV R7,# HIGH RTD
L1 MOV R6,# LOW RTD
L2 DJNZ R6,L2
DJNZ R7,L1
RET
END

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 123 de 173
c) A soluo de aguardar um tempo depois de detetar uma transio na chave funciona bem mas
oferece duas principais desvantagens. A primeira que se aguarda um intervalo de tempo fixo, ou seja,
se a chave de baixa qualidade trocada por uma de melhor qualidade e que possua pouco bouncing
tem-se que mudar o programa. A segunda desvantagem sua vulnerabilidade a rudos pois estes
podem provocar acionamentos indevidos. O programa chave 3 apesar de ser simples soluciona estes
problemas. Usam-se duas rotinas que detectam transies de 01 e de 1 0; o que se especifica
quanto tempo chave deve estar em 0 ou em 1 para que se considere o acionamento vlido (para que
se considere o fim do bouncing).

; CHAVE3.ASM
;
; SOLUCAO MAIS EFICIENTE PARA ELIMINAR O BOUNCING COM
RETARDOS
; USAM-SE ROTINAS QUE AGUARDAM A ESTABILIZACAO DA CHAVE
; HA UMA PARA AS TRANSIES DE 0 PARA 1 E OUTRA DE 1 PARA 0
; ESTA TECNICA SE ADAPTA MELHOR AS VARIACOES ENTRE OS
CIRCUITOS
;
RTD EQU 100
SW2 EQU P1.3
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
ORG RESET
INIC CLR A ;ZERAR CONTADOR
MOV P1,A ;APAGAR LEDS
SETB SW2 ;PROGRAMAR P1.3 COMO ENTRADA
AQUI ACALL RBT_1_0 ;TRANSICAO LIMPA DE 1 PARA 0
INC A
MOV P1,A ;DAR SADA AO CONTADOR
ACALL RBT_0_1 ;TRANSICAO LIMPA DE 0 PARA 1
SJMP AQUI
;
;ELIMINAR BOUNCING NAS TRANSIES DE 0 PARA 1
RBT_0_1 MOV R7,#RTD
LB1 JNB SW2,RBT_0_1
DJNZ R7,LB1
RET
;
;ELIMINAR BOUNCING NAS TRANSIES DE 1 PARA 0
RBT_1_0 MOV R7,#RTD
LB2 JB SW2,RBT_1_0
DJNZ R7,LB2
RET
END

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 124 de 173


8.1) INTRODUO
O 8051 apresenta 5 tipos de interrupes:
2 externas
2 timers
1 serial
Alguns outros membros da famlia MCS-51 podem apresentar outras interrupes, por exemplo o 8052
tem uma interrupo adicional dedicada ao timer 2.

8.2) REGISTROS ENVOLVIDOS
Os registros dedicados s interrupes permitem um controle total sobre as mesmas. Cada interrupo
pode ser habilitada ou desabilitada individualmente, tambm possvel desabilitar todas as interrupes
de uma s vez. O registro IE (Interrupt Enable) controla a habilitao das interrupes e ilustrado na
figura 8.1.



Figura 8.1 - Registro IE - habilitao de interrupes.

Cada interrupo pode ter dois nveis de prioridade:
Prioridade alta ou
Prioridade baixa.

Uma interrupo de alta prioridade pode interromper uma de baixa prioridade mas no acontece o
contrrio. Uma interrupo no pode interromper uma outra de mesma prioridade, se forem recebidas
interrupes de diferentes prioridades, a de alta prioridade atendida primeiro, se forem recebidas duas
interrupes de igual prioridade determina-se por uma seqncia interna de polling (consulta) qual ser
atendida primeiro, assim dentro de um mesmo nvel de prioridade existe uma seqncia de atendimento
(a seqncia do polling). O contedo do registro IP define as prioridades e ilustrado na figura 8.2.

CAPTULO 8 - INTERRUPES
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 125 de 173

Figura 8.2 - Registro TCON - diversas funes para interrupes e timers.

As duas interrupes externas (INT0 e INT1) podem ser acionadas por nvel ou por borda de descida ().
Isto definido atravs de dois bits do registro TCON. Este registro tambm tem outra finalidade pois
cada interrupo indica sua ativao usando um bit do registro TCON.


Figura 8.3 - Registro TCON - diversas funes para interrupes e timers.

TF1 Flag de transbordamento (overflow) do contador/temporizador 1, ativado por hardware quando h
transbordamento no contador do timer 1 (timer/counter 1). apagado por hardware quando o
processador desviado para a rotina de atendimento da interrupo.
TR1 Bit de partida/parada (run/stop) do contador/temporizador 1.
TF0 Flag de transbordamento (overflow) do contador/temporizador 0, ativado por hardware quando h
transbordamento no contador do timer 0 (timer/counter 0). apagado por hardware quando o
processador desviado para a rotina de atendimento da interrupo.
TR0 Bit de partida/parada (run/stop) do contador/temporizador 0.
IE1 Flag da interrupo externa 1. ativado (colocado em um) por hardware quando se detecta uma
interrupo externa 1. apagado (colocado em zero) por hardware (s no modo borda) quando o
processador desviado para a rotina de atendimento da interrupo.
IT1 indica se a interrupo externa 1 opera por borda ou por nvel:
1 borda de descida ();
0 nvel baixo.
IE0 Flag da interrupo externa 0. ativado (colocado um) por hardware quando se detecta uma
interrupo externa 0. apagado (colocado em zero) por hardware (s em modo borda) quando o
processador desviado para a rotina de atendimento da interrupo.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 126 de 173
IT0 Indica se a interrupo externa 0 opera por borda ou por nvel:
1 borda de descida ();
0 nvel baixo.

O flag de interrupo da porta serial est em outro registro (SCON).




Figura 8.4 - Esquema das interrupes na famlia MCS-51.

Todos os bits que geram interrupo podem ser ativados por software com os mesmos resultados como
se tivessem sido ativados por hardware. Isto quer dizer que uma interrupo pode ser ativada por
software e tambm que as interrupes pendentes podem ser canceladas.

Cada interrupo vetorizada em um endereo pr-definido:

RESET 00H
Externa 0 IE0 03H
Timer 0 TF0 0BH
Externa 1 IE1 13H
Timer 1 TF1 1BH
Serial RI+TI 23H (o + indica OU)

No endereo de vetorizao das interrupes h pouco espao, o suficiente para colocar umas poucas
instrues, portanto normal colocar nestes endereos um desvio (jump) para um outro local onde est
a rotina que atende interrupo.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 127 de 173
8.3) MANEJO DE INTERRUPES
Os flags das interrupes so amostrados na segunda fase do quinto estado (S5P2) de cada ciclo de
mquina. As amostras so submetidas a polling (consulta) durante o prximo ciclo de mquina.
A figura 8.5 ilustra a seqncia para atendimento de uma interrupo.
Se um dos flags (de interrupo) est ativo durante S5P2, o prximo ciclo de polling vai detectar e
identificar a interrupo a ser atendida e ser gerada uma instruo LCALL sempre que no seja
bloqueada por:
Uma interrupo de prioridade igual ou mais alta que a que est sendo atendida;
No tenha finalizado a instruo que se est processando no ciclo de polling corrente;
A instruo em progresso um RETI ou uma escrita em IP ou IE.



Figura 8.5 - Seqncia para atendimento a uma interrupo.

Na figura 8.5 ilustrada a resposta mais rpida a uma interrupo. Neste caso CM2 o final de uma
instruo e no um RETI nem uma escrita em IP ou IE. Quando CM2 uma instruo RETI ou uma
escrita em IP ou IE uma instruo a mais ser executada antes que a interrupo seja vetorizada.
A seqncia de polling se repete a cada ciclo de mquina e os valores processados so aqueles que
estaro presentes no instante S5P2 do ciclo de mquina anterior. Deve-se observar que se um flag de
interrupo foi ativado mas no pde ser atendido (por uma das condies de bloqueio) e apagado
antes da condio de bloqueio ser removida, a interrupo no ser atendida. Quer dizer o fato de um
flag de interrupo estar ativo e no ser atendido no ser gravado.
O processador reconhece um pedido de interrupo atravs da execuo de um LCALL gerado por
hardware. Normalmente o flag que gerou o pedido zerado por hardware, exceto para:
TI, RI da porta serial,
IE0, IE1 quando ativado por nvel

A instruo RETI usada para finalizar uma rotina de atendimento a interrupes, uma instruo RET
funciona mas o sistema de controle de interrupes no sabe que a rotina terminou, ou seja, sero
bloqueadas todas as demais interrupes de prioridade igual ou inferior.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 128 de 173
8.4) INTERRUPES EXTERNAS
As duas interrupes externas (0 e 1) podem ser programadas para funcionar por nvel (ITX=0) ou por
borda de descida () (ITX=1). Os pinos das interrupes so amostrados em cada ciclo de mquina (1
ciclo de mquina=12 perodos de clock), assim uma interrupo externa deve permanecer constante por
pelo menos 12 perodos de clock, caso contrrio ela pode ser ignorada.
Quando a interrupo opera por borda de descida () o pino deve permanecer em alto por pelo menos 12
perodos de clock e depois em baixo por pelo menos 12 perodos de clock, isto garante a ativao do flag
de interrupo. Os flags de interrupes externas (IEX0 ou IEX1) sero automaticamente zerados pela
CPU quando uma rotina de servio chamada.
Quando a interrupo opera por nvel o pino deve permanecer ativado (em baixo) at que a interrupo
seja atendida, depois disso o pedido deve ser removido antes que a rotina de servio de interrupo
termine caso contrrio uma nova interrupo ser gerada.
O tempo de latncia de uma interrupo depende entre outras coisas das condies de bloqueio j
vistas. No caso destas condies de bloqueio existirem, leva-se entre 5 a 9 ciclos de mquina.



Figura 8.6 - Latncia para as interrupes.

Como os flags de interrupo serial e dos temporizadores/contadores so ativados em S5P2, o que foi
estudado vlido para qualquer interrupo.
Caso seja necessrio pode-se usar um esquema como o da figura 8.7 para expandir as interrupes
externas:

Figura 8.7 - Expandindo as interrupes externas.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 129 de 173
8.5) PASSO A PASSO
A estrutura de interrupo do MCS-51 permite de forma muito simples uma implementao para a
execuo de programas passo a passo (single step). Uma interrupo no ser atendida quando uma
interrupo de igual prioridade esteja sendo atendida e quando esta interrupo termina com um RETI
obrigatoriamente uma instruo ser executada antes que se aceite a nova interrupo.
Uma interrupo no ser novamente atendida antes de terminar sua rotina. Essa rotina deve terminar
com RETI e depois dessa instruo uma outra dever ser executada antes de ser atendida a interrupo.
Imagine um sistema onde a interrupo 1 est programada para trabalhar por nvel e que a entrada INT1
esteja conectada a terra, ou seja, a interrupo est sempre sendo invocada. Se for adicionada a esse
sistema uma rotina principal e uma rotina de servio para a interrupo 1, cria-se o ambiente para
executar passo a passo o programa principal. Cada vez que voltar da rotina de interrupo (com um
RETI), ser executada uma nica instruo do programa principal e em seguida desviar novamente
para a rotina de interrupo. Pode-se usar uma chave para marcar o instante de retorno da rotina de
interrupo. O exerccio 8.6.4 ilustra a utilizao do recurso de passo a passo. Uma possibilidade mais
complexa mas sem bouncing na chave mostrada na figura 8.8:

Figura 8.8 - Retirada do boucing via hardware.
8.6) EXERCCIOS
8.6.1) LED_INT1, LED_INT2 E LED_INT3
No circuito de prticas existe um pushbutton (SW3) para a interrupo 1 que ser usado para fazer
acender os leds (vermelho, amarelo e verde) em seqncia. Cada vez que a chave for acionada uma
interrupo ser gerada e a rotina de atendimento interrupo dever trocar o led aceso.

;LED_INT1.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
ORG RESET
AJMP INICIO
;
ORG EXTI1
AJMP EXT1
;
ORG 50H
INICIO MOV A, #01001001B
CLR C
MOV P1,A
SETB EX1 ;HABILITAR INT. EXT. 1
SETB EA ;HABILITAR FLAG GERAL
SJMP $ ;LOOP INFINITO
;
;ROTINA PARA ATENDER A INTERRUPCAO EXTERNA 1
EXT1 RLC A ;ACENDER LEDS EM SEQUENCIA
MOV P1, A
RETI
END
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 130 de 173
Nota-se um problema, os 3 leds se acendem quando a chave acionada e s um led fica aceso quando
se libera a chave mas nunca se sabe qual. Este problema acontece porque a rotina de interrupo
muito mais rpida que a chave. Ao retornar da interrupo a chave ainda est acionada e uma nova
interrupo gerada. Para solucionar isso pode-se monitorar o sinal INT1 (P3.3) e s permitir o retorno
depois de que a chave esteja liberada (vai para um).
Para ilustrar esta soluo o programa LED_INT2.ASM foi implementado. O programa idntico ao
anterior exceto por uma instruo antes do retorno da interrupo.

;LED_INT2.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
SW3 EQU P3.3
;
ORG RESET AJMP INICIO
;
ORG EXTI1
AJMP EXT1
;
ORG 50H
INICIO MOV A, #01001001B
CLR C
MOV P1,A
SETB EX1 ;HABILITAR INT. EXT. 1
SETB EA ;HABILITAR FLAG GERAL
SJMP $ ;LOOP INFINITO
;
;ROTINA PARA ATENDER A INTERRUPCAO EXTERNA 1
EXT1 RLC A ;ACENDER LEDS EM SEQUENCIA
MOV P1, A
AQUI JNB SW3,AQUI ;AGUARDAR LIBERAR SW2
CLR IE1
RETI
END

Na verdade o que se fez foi obrigar que a interrupo que est programada para operar por nvel opere
por borda (aguarda-se a liberao da chave). O que acontece quando se usa o primeiro programa mas
com a interrupo trabalhando por borda () ? Supe-se que os leds devero acender na seqncia
correta.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 131 de 173

;LED_INT3.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
ORG RESET
AJMP INICIO
;
ORG EXTI1
AJMP EXT1
;
ORG 50H
INICIO MOV A, #01001001B
CLR C
MOV P1,A
SETB IT1 ;EXT 1 OPERA POR BORDA
SETB EX1 ;HABILITAR INT. EXT. 1
SETB EA ;HABILITAR FLAG GERAL
SJMP $ ;LOOP INFINITO
;
;ROTINA PARA ATENDER A INTERRUPCAO EXTERNA 1 EXT1
RLC A ;ACENDER LEDS EM SEQUENCIA
MOV P1,A
RETI
END


Talvez se note um acionamento indevido ao liberar a chave porque a chave ruidosa e ao ser liberada
aparece o bouncing (seqncias de zeros e uns). Uma soluo definitiva usar a rotina de eliminao de
bouncing para controlar a transio de 1 para 0.


8.6.2) PASSO_EXE.ASM
Escrever um programa que faa acender os leds em seqncia (vermelho, amarelo e verde). Executar
esse programa com um controle passo a passo usando a interrupo 1. A soluo muito simples, no
programa principal estar somente uma seqncia de instrues que acende os leds segundo a ordem
especificada (sem retardo). A interrupo externa 1 estar programada para operar por nvel. A rotina de
interrupo aguarda que a chave SW3 seja acionada (v a zero), quando isto ocorre retorna-se da rotina
de interrupo. Ao regressar a entrada INT1 estar em zero (pela chave SW3) e uma nova interrupo
gerada. Ou seja, a cada acionamento da chave SW3 executada uma instruo do programa principal.
A primeira interrupo para que o programa entre em controle passo a passo provocada por software
ao ativar o bit IE1.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 132 de 173
;PASSO_EXE.ASM
;
; PROGRAMA PARA ILUSTRAR A EXECUCAO PASSO A PASSO
; SERA USADA A CHAVE SW3 PARA EXECUTAR PASSO A PASSO O LOOP
PRINCIPAL
; CADA VEZ QUE SE ACIONA SW3, UMA INSTRUCAO EXECUTADA
;
RTD EQU 100
SW3 EQU P3.3
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
ORG RESET
AJMP INIC
;
ORG EXTI1
AJMP EXT1
;
ORG 50H
INIC MOV A, #01001001B ;CODIGO PARA ACENDER
CLR C ;LEDS EM SEQUENCIA
MOV P1, A
SETB EX1 ;HABILITAR INT 1
SETB EA ;HABILITAR GERAL
SETB IE1 ;PROVOCAR INT 1
NOP ;AQUI O PROG INTERROMPE
PRINCIPAL RLC A ;RODAR CODIGO
MOV P1, A ;ACENDER LEDS
SJMP PRINCIPAL ;RETORNAR
;
ORG 100H
EXT1 ACALL RBT_0_1 ;TRANSICAO DE 0 A 1
ACALL RBT_1_0 ;TRANSICAO DE 1 A 0
RETI
;
;ELIMINAR BOUNCING NAS TRANSICOES DE 0 PARA 1
RBT_0_1 MOV R7, #RTD
LB1 JNB SW3, RBT_0_1
DJNZ R7, LB1
RET
;
;ELIMINAR BOUNCING NAS TRANSICOES DE 1 PARA 0
RBT_1_0 MOV R7, #RTD
LB2 JB SW3, RBT_1_0
DJNZ R7,LB2
RET
END

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 133 de 173


9.1) INTRODUO
O 8051 tem dois registros contadores de 16 bits denominados TIMER 0 e TIMER 1, dedicados s
funes de contagem e temporizao (counter/timer-contador/temporizador). H uma importante
distino entre os conceitos de contador e temporizador.
Quando opera como temporizador o registro incrementado a cada ciclo de mquina (usa como base o
cristal da CPU), o sinal de contagem aparece com 1/12 da freqncia do clock.
Quando opera como contador o registro incrementado de acordo com o sinal que se coloca nas
entradas T1 e T0, ou seja, o contador opera a cada transio de 1 para 0 (borda de descida ) na
entrada T0 ou T1.
Deve-se ter um cuidado quando em operaes em modo contador, j se sabe que as entradas so
amostradas durante S5P2 de cada ciclo de mquina. Quando em um ciclo de mquina a entrada
detectada em 1 e depois em 0, no prximo ciclo o contador incrementado.
O incremento acontece em S3P1 do ciclo seguinte ao que foi detectada a transio. Para garantir que o
nvel correto tenha sido amostrado necessrio que o sinal de entrada (o sinal que vai acionar os
contadores) permanea pelo menos um ciclo de mquina em nvel alto e pelo menos outro ciclo de
mquina em nvel baixo, quer dizer, a mxima freqncia que responder o contador de 1/24 da
freqncia de clock. O sinal de entrada pode ter qualquer "duty cycle" desde que se respeite a restrio
antes mencionada.

9.2) REGISTROS ENVOLVIDOS
Dois registros SFR so utilizados para controlar as funes e operaes do temporizador/contador, em
TMOD especifica-se o modo de operao e em TCON controla-se a operao. A figura 9.1 ilustra o
registro TMOD e a figura 9.2 ilustra o registro TCON.


Figura 9.1 - Descrio do registro TMOD.

GATE Especifica como ser feito o controle
Se GATE = 1 conta somente se TR1=1 e INT1=high, (idem para TR0 e INT0);
Se GATE = 0 conta somente se TR1=1 (controle somente por software).
(GATE especifica se INT1 ser usado para controlar o funcionamento do
contador/temporizador pode ser usado para medir a largura de pulsos externos ligados a
INT0 ou INT1)
CAPTULO 9 - TEMPORIZADORES / CONTADORES

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 134 de 173
C/*T Seleciona modo contador ou temporizador
Se C/*T = 1 modo contador (conta usando a entrada T1);
Se C/*T = 0 modo temporizador (conta a cada ciclo de mquina).

M1 M0 seleciona o modo de operao
0 0 THi temporizador/contador de 8 bits e TLi um pre-scaler de 5 bits;
0 1 THi e TLi formam um temporizador/contador de 16 bits;
1 0 contador/temporizador de 8 bits com auto-recarga (TLi conta e THi valor para recarga);
1 1 TL0 contador/temporizador de 8 bits (usando TR0, *INT0 e TF0);
TH0 contador/temporizador de 8 bits (usando TR1, *INT1 e TF1);
TH1 e TL1 parado (mas pode operar em outros modos).


Figura 9.2 - Descrio do registro TCON.

TF1 Flag de transbordamento (overflow) do contador/temporizador 1. Ativado por hardware quando h
transbordamento no timer 1. apagado por hardware quando o processamento desviado para
a rotina de interrupo.
TR1 Bit de partida/parada (run/stop) do contador/temporizador 1.
TF0 Flag de transbordamento (overflow) do contador/temporizador 0. Ativado por hardware quando h
transbordamento no timer 0. apagado por hardware quando o processamento desviado para
a rotina de interrupo.
TR0 Bit de partida/parada (run/stop) do contador/temporizador 0.
IE1 Flag da interrupo externa 1. Ativada por hardware quando detectada uma interrupo.
Apagado por hardware (somente se for modo borda) quando a interrupo processada, ou seja,
quando se desvia para a rotina de interrupo.
IT1 Indica se a interrupo externa 1 opera por borda ou por nvel:
1 borda de descida ();
0 nvel baixo.
E0 Flag da interrupo externa 0. Ativada por hardware quando detectada uma interrupo.
Apagado por hardware (somente se for modo borda) quando a interrupo processada, ou seja,
quando se desvia para a rotina de interrupo.
IT0 indica se a interrupo externa 0 opera por borda ou por nvel:
1 borda de descida ();
0 nvel baixo.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 135 de 173
9.3) MODOS DE OPERAO
Os dois contadores/temporizadores (timer1 e timer0) podem trabalhar em 4 modos de operao que so
selecionados empregando os bits M1 e M0 do registro TMOD. Os modos 0, 1 e 2 so iguais para os 2
contadores/temporizadores mas o modo 3 diferente.

9.3.1) MODO 0
Este modo idntico para os dois contadores/temporizadores. Neste modo tem-se um contador de 8 bits
com um divisor (pre-scaler) de 5 bits. Resulta ento em um contador/temporizador de 13 bits compatvel
com o que havia no MCS-48. Os 13 bits so formados pelos 8 bits do registro THi e pelos 5 bits menos
significativos do registro TLi. Os outros 3 bits do TLi so indeterminados. O transbordamento (overflow)
gerador quando a contagem faz a transio de 1FFFH para 0000, neste instante ativa-se o bit de
overflow (TF1 ou TF0).

O controle da contagem simples:
Se GATE = 0, TR1 controla o contador/temporizador (controle por software)
Se GATE = 1, TR1 e INT1 controlam o contador/temporizador (permite tambm um controle externo
por hardware)

A figura 9.3 apresenta um diagrama em blocos do contador/temporizador 1 operando em modo 0. A
mesma figura vlida para o contador/temporizador 0.


Figura 9.3 - Diagrama em blocos para o TIMER 1 em MODO 0.

9.3.2) MODO 1
Este modo de operao o mais simples e por isto muito utilizado. idntico ao modo 0 mas os
contadores so de 16 bits. A figura 9.4 ilustra o diagrama em blocos para este modo que idntico para
os dois timers.


Figura 9.4 - Diagrama em blocos para o TIMER 1 em MODO 1.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 136 de 173
9.3.3) MODO 2
Neste modo tem-se um contador/temporizador de 8 bits (TLi) com registro de recarga (THi) para quando
ocorre o transbordamento. Neste modo os dois contadores/temporizadores operam de forma idntica. O
transbordamento (overflow) no somente ativa TFi como tambm recarrega TLi com o valor guardado
em THi (este permanece inalterado). O valor de recarga deve ser fornecido por software.



Figura 9.5 - Diagrama em blocos para o TIMER 1 em MODO 2.

9.3.4) MODO 3
Este o nico modo onde os contadores/temporizadores tm um comportamento diferente. Neste modo
o contador/temporizador 1 simplesmente suspende a contagem ( como se estivesse com TR1=0),
enquanto o contador/temporizador 0 se divide em dois contadores de 8 bits:

TH0 contador/temporizador de 8 bits usando C/*T, GATE, TR0, *INT0 e TF0;
TL0 contador/temporizador de 8 bits usando TR1 e TF1 (provoca a interrupo do timer 1).

como se existem 2 contadores/temporizadores de 8 bits (TH0 e TL0) e outro de 16 bits (timer 1). O
timer 1 entretanto pode ser usado para operar em qualquer outro modo (0, 1 ou 2) e usa-se o modo 3
para det-lo. No h problemas porque os modos so independentes, tambm se pode usar o timer 1
(em modo 2) para gerar o "baud rate" da porta serial.



Figura 9.6 - Diagrama em blocos para o TIMER 0 em MODO 3.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 137 de 173
9.4) EXERCCIOS
9.4.1) LED_10HZ
Acender os leds vermelho, amarelo e verde a uma freqncia de 10 Hz. Para solucionar esse exerccio
necessrio gerar um retardo equivalente ao perodo de 10 Hz. A figura 9.7 ilustra o clculo do valor do
contador para gerar esse retardo.

Figura 9.7 - Clculo de N para gerar uma determinada freqncia F.

Se F = 10 Hz e CLOCK = 3,575611 Hz, ento N = 29797. Como este um contador que conta para cima
temos que subtrair este valor de 65536. Com isto N = 65536 - 29797 = 35739 ou 8B9BH. Na realidade a
freqncia gerada no ser exatamente 10 Hz mas de um valor muito prximo:
F = 3,575611 / 12 * 29797 = 9,99 Hz
RESOLUO
Ser utilizado o timer 0 no modo 1; a cada interrupo a rotina acende um novo led e recarrega o timer.
Valor a ser programado em TMOD Valor a ser programado em IE





;LED_10HZ.ASM
;
DEFSEG PROG, CLASS = CODE, START = 0
SEG PROG
;
DEZ_HZ EQU 35739
;
ORG RESET
AJMP INIC
;
ORG TIMER0 AJMP TIM0
;
ORG 50H
INIC MOV TL0, #LOW DEZ_HZ
MOV TH0, #HIGH DEZ_HZ
MOV TMOD, #1 ;TIMER 0 EM MODO 1 MOV IE, #82H
MOV P1, #0 ;APAGAR TODOS OS LEDS
MOV A, #01001001B
CLR C
SETB TR0
SJMP $
;
ORG 100H
TIM0 MOV TL0, #LOW DEZ_HZ ;REINICALIZAR
MOV TH0, #HIGH DEZ_HZ ;O CONTADOR
RLC A
MOV P1, A
RETI
END
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 138 de 173
Notar que na rotina de interrupo est a recarga dos temporizadores que feita com a instruo "MOV
direto,#data" mas que consome 2 ciclos de mquina, ou seja, que h um retardo que se acumula. Para
evitar ou corrigir isso se pode adicionar ao contador o retardo da instruo, mais preciso usar "MOV
TL0,# LOW (DEZ_HZ+2).
Quando existem vrias interrupes no se sabe com certeza quando uma interrupo do temporizador
pode ser aceita, isso implica um erro maior que se acumula. H uma soluo simples porque depois do
transbordamento o temporizador segue contando e esta contagem exatamente o tempo que atrasou o
servio da interrupo, basta usar esse valor na recarga. As instrues a seguir ilustram a idia.

MOV A, #LOW (DEZ_HZ+2)
ADD A,TL0 ;1 ciclo
MOV TL0,A ;1 ciclo
MOV TH0, #HIGH (DEZ_HZ+2)

9.4.2) LED_1HZ
Acender os leds vermelho, amarelo e verde a uma freqncia de 1 Hz. A soluo idntica ao exerccio
anterior, mas vai surgir uma dificuldade ao calcular os valores de recarga:
CLOCK = 3575611 Hz e F = 1 Hz
N = 3575611 / 12*1 = 297968
Como se pode ver o valor de recarga muito grande (297968 > 65536) e impede a utilizao do
temporizador. Uma boa sada utilizar o esquema do exerccio anterior (com 10 Hz) e adicionar por
software um divisor por 10.

;LED_1HZ.ASM
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
DEZ_HZ EQU 32203
DIVISOR EQU 10
;
ORG RESET
AJMP INIC
;
ORG TIMER0
AJMP TIM0
;
ORG 50H
INIC MOV TL0, #LOW DEZ_HZ
MOV TH0, #HIGH DEZ_HZ
MOV R7, #DIVISOR ;PREPARAR DIVISAO POR 10
MOV TMOD, #1 ;TIMER 0 EM MODO 1
MOV IE, #82H
MOV P1, #0 ;APAGAR TODOS OS LEDS
MOV A, #01001001B
CLR C
SETB TR0
SJMP $
;
ORG 100H
TIM0 MOV TL0, #LOW DEZ_HZ ;REINICALIZAR
MOV TH0, #HIGH DEZ_HZ ;O CONTADOR
DJNZ R7,FIM ;DIVIDIR POR 10
MOV R7, #DIVISOR
RLC A
MOV P1,A
FIM RETI
END
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 139 de 173
9.4.3) ONDA1
Gerar atravs de P1.7 uma onda com o seguinte formato conforme figura 9.8:

Figura 9.8 - Sinal a ser gerado pela sada P1.7.
Usando N = (t*CLOCK) / 12, calcula-se o valor de recarga para o temporizador. Sero programados dois
retardos alternadamente de forma a gerar o sinal pedido.
Para t = 1 ms N = 298 65536 - 298 = 65238
Para t = 40 s N = 12 65536 - 12 = 65524

;ONDA1.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
SAIDA EQU P1.7
R_1MS EQU 65238 ;RETARDO DE 1 MILISEG
R_40MICRO EQU 65524 ;RETARDO DE 40 MICROSEG
;
ORG RESET
AJMP INICIO
;
ORG TIMER0
AJMP TIM0
;
ORG 50H
INICIO MOV TL0,#LOW R_1MS
MOV TH0,#HIGH R_1MS
MOV TMOD,#1 ;TIMER 0 EM MODO 1
MOV IE,#82H ;EA=1 E ET0=1
CLR SAIDA
SETB TR0 ;PARTIDA DO TIMER 0
SJMP $ ;LOOP INFINITO
;
TIM0 JB SAIDA,LB1 ;2 CICLOS
MOV TH0,#LOW (R_40MICRO+4) ;2 CICLOS
MOV TL0,#HIGH (R_40MICRO+4) ;2 CICLOS
SETB SAIDA ;1 CICLO
RETI ;2 CICLOS
LB1 MOV TH0,#LOW (R_1MS+4)
MOV TL0,#HIGH (R_1MS+4)
CLR SAIDA
RETI
END
Notar que a rotina que atualiza o temporizador para gerar o retardo de 40 s consome 9 ciclos de
mquina, quer dizer, consome 30,2 s. Pode parecer que se o tempo de 40 s fosse mudado para 25 s
no haveria soluo.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 140 de 173
9.4.4) ONDA2
Gerar atravs de P1.7 uma onda com o seguinte formato:

Figura 9.9 - Sinal a ser gerado pela sada P1.7.

Usando N = (t *CLOCK) / 12, calcula-se o valor de recarga para o temporizador. O segredo ser
trabalhar com o temporizador em modo 2 (os dois valores de recarga so menores que 256) e a rotina de
interrupo apenas muda o valor da recarga (que est em TH0).
Para t = 600 seg N = 179 256 -179 = 77
Para t = 25 seg N = 7 256 - 7 = 249

;ONDA2.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
SAIDA EQU P1.7
R_600MICRO EQU 77 ;RETARDO DE 600 MICROSEG
R_25MICRO EQU 249 ;RETARDO DE 25 MICROSEG
;
ORG RESET
AJMP INICIO
;
ORG TIMER0
AJMP TIM0
;
ORG 50H
INICIO MOV TL0,#R_600MICRO ;PRIMEIRA CONTAGEM
MOV TH0,#R_25MICRO ;CONTAGEM SEGUINTE
MOV TMOD,#2 ;TIMER 0 EM MODO 2
MOV IE,#82H ;EA=1 E ET0=1
CLR SAIDA
SETB TR0 ;PARTIDA DO TIMER 0
SJMP $ ;LOOP INFINITO
;
TIM0 JB SAIDA,LB1 ;2 CICLOS
MOV TH0,#R_25MICRO ;2 CICLOS
SETB SAIDA ;1 CICLOS
RETI ;2 CICLOS
LB1 MOV TH0,#R_600MICRO
CLR SAIDA
RETI
END

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 141 de 173
9.4.5) LEDS1
Acender os leds vermelho, amarelo e verde em seqncia, mudando a cada 10 pulsos em T1. Ser
usado o contador / temporizador 1 como contador e programado para operar em modo 2, com um valor
de recarga igual a 246 (256-10). O acumulador e carry sero usados para acender os leds na seqncia
correta.

Valor a ser programado em TMOD (contador 1, modo 2) Valor a ser programado em IE.


;LEDS1.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
CONTA_10 EQU 246
;
ORG RESET
AJMP INICIO
;
ORG TIMER1
AJMP TIM1
;
ORG 50H
INICIO MOV A,#01001001B
CLR C
MOV P1,A
MOV TL1,#CONTA_10 ;CARREGAR CONTADOR
MOV TH1,#CONTA_10 ;VALOR DE RECARGA
MOV TMOD,#60H ;CONTADOR 1, MODO 2
MOV IE,#88H ;EA=1, ET1=1
SETB TR1 ;LIGAR CONTADOR
SJMP $ ;LOOP INFINITO
;
TIM1 RLC A
MOV P1,A
RETI
END
A chave SW3 aciona diretamente a entrada T1, mas h bouncing e por isso sero notadas mudanas
nos leds antes de 10 acionamentos. Para esse caso especfico o bouncing dever ser eliminado por
hardware.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 142 de 173


10.1) INTRODUO
A porta serial existente na famlia MCS-51 "full duplex", quer dizer pode transmitir e receber dados
simultaneamente. Tem um buffer que permite receber um segundo byte antes que o byte previamente
recebido tenha sido retirado (lido) do registro de recepo. Mas se o primeiro byte no tiver sido lido no
tempo em que o segundo byte se completa um dos dois ser perdido.

10.2) REGISTROS ENVOLVIDOS
A porta serial possui um registrador chamado SBUF, o mesmo que se usa para enviar ou receber dados
pela porta serial. Na realidade o nome SBUF se refere a dois registros, um somente para leitura por onde
se recebem os dados que chegam pela porta serial e outro somente para escrita por onde se transmitem
dados pela porta serial.
O modo de operao da porta serial controlado pelo registro SCON, que ilustrado na figura 10.1 A
figura 10.2 apresenta um resumo dos modos de operao.


Figura 10.1 - Descrio do registro SCON.



Figura 10.2 - Modos de operao da porta serial.

SM2 Comunicao multiprocessador (habilitada com SM2 = 1):
SM2 = 1 e em modo 1 interrupo (RI = 1) com o bit de parada (stop bit) igual a 1
SM2 = 1 e em modo 2 ou 3 interrupo (RI = 1) se for recebido RB8 = 1.
REN Habilita a recepo serial (Reception Enable)
TB8 Oitavo bit a ser transmitido nos modos 2 e 3.
RB8 Oitavo bit recebido nos modos 2 e 3.
CAPTULO 10 - PORTA SERIAL
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 143 de 173
TI Flag de interrupo por trmino de transmisso pela porta serial:
MODO 0 Ativado no final do oitavo bit
DEMAIS Ativado no comeo do bit de parada
RI Flag de interrupo por recepo pela porta serial
MODO 0 ativado no final do oitavo bit
DEMAIS ativado na metade do bit de parada
Observao: Os flags TI e RI no so apagados por hardware e por isso a rotina de interrupo deve
faz-lo, ou seja, estes flags devem ser zerados por software.
O registro PCON tambm toma parte na gerao do baud rate da porta serial. Este registro ilustrado na
figura 10.3.


Figura 10.3 - Descrio do registro PCON.

10.3) MODOS DE OPERAO
Existem quatro modos de operao da porta serial, cada um com uma finalidade. Ser apresentado um
resumo de cada modo.

10.3.1) MODO 0 (SNCRONO, 8 BITS)
Neste modo os dados entram e saem pelo pino RXD. O pino TXD fornece o clock para o deslocamento
(shift). So transmitidos e recebidos dados de 8 bits (LSB primeiro). O baud rate de 1/12 da freqncia
do clock (igual a 1 ciclo de mquina).


Figura 10.4 - Esquema da porta serial em modo 0.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 144 de 173
Este modo pode ser usado para expandir as portas de I/O do microcontrolador usando um esquema
como o da figura 10.5:


Figura 10.5 - Esquema para expanso da porta de I/O.

10.3.2) MODO 1 (ASSNCRONO, 8 BITS)
No Modo 1 so operados 10 bits com um baud rate programvel. Recebe-se pelo pino RXD e transmite-
se pelo pino TXD. A figura 10.6 ilustra o frame de bits serial. O bit de partida (START)
sempre zero e o bit de parada (STOP) sempre um na transmisso. Na recepo o bit de parada
colocado no bit RB8.



Figura 10.6 - Frame de bits gerado pela porta serial em modo 1.

Neste modo o baud rate gerado pelo contador/temporizador 1. A cada 16 (SMOD=1) ou 32 (SMOD=0)
transbordamentos (overflows) enviado um pulso para o circuito serial. A figura 10.7 ilustra o esquema
do gerador do baud rate e tambm apresenta algumas frmulas para o clculo do valor a ser
programado no contador/temporizador.


Figura 10.7 - Esquema para a gerao do baud rate (BR) no modo 1.

Usando o contador/temporizador 1 programa-se qualquer baud rate. Na grande maioria dos casos tem-
se o baud rate e buscado o valor N a ser programado no contador/temporizador 1 (o mais cmodo
usar o modo 2 - auto recarga). Um problema que sempre existe o erro gerado pela aproximao do
valor a ser programado no contador/temporizador. Isto provoca a gerao de baud rates ligeiramente
diferentes.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 145 de 173
Exemplo: Usando um cristal de 3,575611 MHz, qual o valor a ser programado no timer 1 para operar a
9600 bauds (usar SMOD=0) ?
N = 3575611 / (384*9600) = 0,9699 (aproximadamente 1)
Usando timer 1 no modo 2 tem-se: 256 - 1 = 255 (TH1=TL1=255).

Observao: a transferncia do dado recebido para o registro SBUF (e RB8, que guarda o stop bit) e a
ativao do flag RI somente acontecer se:
RI = 0 e (SM2= 0 ou o bit de parada =1).

10.3.3) MODO 2 (ASSNCRONO, 9 BITS, BAUD RATE FIXO)
Este modo opera com 11 bits e o baud rate pode ser de 1/32 ou 1/64 do clock. O bit TB8/RB8 serve para
transmitir a paridade ou gerar um segundo bit de parada (TB8=1). O frame de bits usado neste modo
ilustrado na figura 10.8.


Figura 10.8 - Frame de bits gerado pela porta serial no modo 2.

O nico controle que se tem sobre o baud rate atravs do uso do bit SMOD. Se SMOD=0, trabalha-se
com BR=clock/32 e se SMOD=1, trabalha-se com BR=clock/64. A figura 10.9 ilustra o esquema para
gerao do baud rate no modo 2.


Figura 10.9 - Esquema para a gerao do baud rate (BR) no modo 2.
Na transmisso o bit 8 copiado do bit TB8. Na recepo o bit 8 copiado para o bit RB8. Os bits TB8 e
RB8 esto no registro SCON.
O dado recebido somente carregado no SBUF (e RB8) se:
RI = 0 e (SM2 = 0 ou bit 9 (stop bit) = 1).

10.3.4) MODO 3 (ASSNCRONO, 9BITS, BAUD RATE VARIVEL)
idntico ao modo 2 exceto que a gerao do baud rate idntico ao modo1. A figura 10.10 ilustra o
frame de bits e a gerao do baud rate.



Figura 10.10 - Frame de bits e gerao do baud rate para a porta serial no modo 3.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 146 de 173
10.4) CUIDADOS COM A PORTA SERIAL
Nos quatro modos a transmisso se inicia quando escrito um byte em SBUF. A recepo habilitada
quando REN=1 (no MODO 0 exige-se tambm RI=0). No se esquea de que somente existe uma nica
interrupo dedicada porta serial, portanto ela gerada por duas condies:
Trmino da transmisso de um byte -- flag TI
Trmino da recepo de um byte -- flag RI

Deve-se testar os flags RI e TI para determinar se a interrupo foi por transmisso ou por recepo. Os
flags RI e TI devem ser apagados por software.
Um outro cuidado muito importante com a gerao do baud rate. Muitas vezes no se consegue a
comunicao serial devido impreciso do baud rate. Portanto o problema a seguir proposto:

Programar o contador/temporizador 1 para gerar 9600 bauds para a porta serial operando em modo 3,
sendo que o cristal de 4 MHz.
Soluo: N = 4000000/(384*9600) = 1,085 (SMOD=0).

Na soluo calculou-se que N = 1,085 mas somente podem ser programados nmeros inteiros, assim
caso se aproxime para 1, o baud rate gerado ser de BR = 4000000 / 384 = 10416,7. Ser que ir
funcionar bem com esse baud rate ?
Para responder esta pergunta necessrio compreender o que acontece com a transmisso serial. Esta
transmisso assncrona, quer dizer, pode iniciar em qualquer instante, o inicio caracterizado pela
presena de um bit de partida (START). Uma vez iniciada deve-se garantir a durao de cada bit. Para
cada byte transmitido um bit de partida, os bits de dados e um ou dois bits de parada. O que se deve
buscar garantir que no haja um erro muito grande neste frame de bits. A figura 10.11 ilustra o caso da
porta serial operando em modo 3.



Figura 10.11 - Erros provocados por diferenas no baud rate.

A fase mais critica a recepo do ltimo bit porque poder apresentar uma defasagem muito grande
(rotuladas de E1 e E2 na figura 10.11). No se pode especificar um valor limite para esses erros, pois
diversos fatores particulares para cada caso precisam ser levados em considerao.
Como um valor prtico e que funciona na grande maioria dos casos arbitra-se que o valor do erro, para o
ltimo bit deve ser menor que 40% da durao de um bit (usando BR exato).

BRp baud rate programado
BR baud rate exato
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 147 de 173
A equao pode ser simplificada para :



Como pode ser verificado, com um cristal de 4 MHz no se conseguir transmitir a 9600 pois o erro do
baud rate ser muito grande.



10.5. COMUNICAO ENTRE VRIOS 8051


Figura 10.12 - Comunicao entre vrios 8051

Os modos 2 e 3 permitem interligar vrios 8051, sendo um mestre e vrios escravos.
Nestes modos temos:
1 start bit;
8 bits de dados;
Um nono bit que vai para o bit RB8 (na recepo) ou pode ser escolhido 0 ou 1 na transmisso
escrevendo-se em TB8;
1 stop bit
Note que se SM2 = 1 e RB8 = 1, a interrupo da serial ser atendida.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 148 de 173
O algoritmo de comunicao consiste em:
1) No incio, todos os escravos esto com SM2 = 1
2) Quando o mestre quiser enviar dados para algum escravo ele escrever 1 em seu bit TB8 e ento
enviar serialmente o endereo do escravo desejado e como teremos todos os bits RB8 em 1, todos
escravos sero interrompidos para verificar se seu o endereo enviado.
3) O escravo selecionado zerar o seu bit SM2 e estar preparado para receber os dados, os quais tero
agora o nono bit (RB8) em 0.
4) Os demais escravos permanecero com SM2 em 1 e dessa forma no sero mais interrompidos pois
os dados tm RB8 = 0.
5) Em resumo o mestre envia endereos com o nono bit em 1e os dados com o nono bit em 0, portanto
se o mestre desejar se comunicar com outro escravo basta enviar o novo endereo com o nono bit em
1.

10.6) COMUNICAO SERIAL ENTRE O 8051 E O PC
Devido diferena de tenso entre os nveis TTL e os usados no padro RS-232C (PC), necessrio
usar circuitos conversores para interfacear o microcontrolador com a porta serial do PC.
A converso pode ser feita atravs de circuitos transistorizados discretos ou atravs de circuitos
integrados como o 1488 (conversor de TTL para RS-232C) e o 1489 (conversor de RS-232C para TTL).
Nas figuras 10.13, 10.14 e 10.15, esto os esquemas dos dois integrados e o esquema bsico de
interligao entre o 8051 e a serial do PC.


Figura 10.13 - Esquema do CI 1488. Figura 10.14 - Esquema do CI 1489.



Figura 10.15 - Esquema bsico de interligao entre o 8051 e a serial do PC.
1488
1489
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 149 de 173
10.7) EXERCCIOS
10.7.1) TX_SER
Usando um loop infinito, transmitir pela porta serial todos os caracteres ASCII de "0" a "Z". Usar 9600
bauds, 8 bits de dados, 1 bit de partida e 2 bits de parada.
Para este caso o modo 3 o mais adequado e TB8 = 1 ser usado para gerar um bit de parada. A
transmisso ser feita por interrupo, quer dizer a cada byte transmitido haver uma interrupo. O
contador / temporizador 1 ser programado para modo 2 (auto-recarga).


Figura 10.16 - Inicializao de os registros para o exerccio 10.7.1

Clculo do divisor formado pelo contador/temporizador 1:
N = 3575611 / (384 * 9600) = 0,9699 1. (TH1 = TL1 = 256 - 1 = 255).

;TX_SER.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
BR_9600 EQU 255
;
ORG RESET
AJMP INIC
;
ORG SINT
AJMP SERIAL
;
ORG 50H
INIC MOV TMOD,#20H ;TIMER 1 EM MODO 2
MOV TH1,#BR_9600 ;PROGRAMAR BAUD RATE
MOV TL1,#BR_9600
SETB TR1 ;INICIAR TIMER 1
MOV SCON,#0C8H ;MODO 3 COM TB8=1
MOV IE,#90H ;HAB INTERRUP SERIAL
MOV A,#"0" ;PRIMERO ASCII
SETB TI ;TX PRIMEIRO ASCII
SJMP $ ;LOOP INFINITO
;
ORG 100H
SERIAL CLR TI ;APAGAR FLAG
MOV SBUF,A ;TRANSMITIR
INC A
CJNE ,#"Z"+1,SER1 ;FOI O ULTIMO ?
MOV A,#"0" ;REINICIALIZAR
SER1 ACALL RETARDO ;ATRASAR TRANSMISSAO
RETI
;
RETARDO MOV R7,#0
AQUI DJNZ R7,AQUI
RET
END
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 150 de 173
10.7.2) RX_SER
O circuito dever responder aos seguintes comandos que chegam pela porta serial:

1 acender todos os leds 0 -- apagar todos os leds
R acender led vermelho r -- apagar led vermelho
A acender led amarelo a -- apagar led amarelo
V acender led verde v -- apagar led verde

Estes comandos vo chegar pela porta serial usando o formato: 1 bit de partida, 8 bits de dados, 2 bits
de parada, com um baud rate de 9600.

;RX_SER.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
BR_9600 EQU 255
LED_VERMELHO EQU P1.0
LED_AMAR EQU P1.1
LED_VERDE EQU P1.2
CHEGOU EQU 32.0
;
ORG RESET
AJMP INIC
;
ORG SINT
AJMP SERIAL
;
ORG 50H
INIC MOV TMOD,#20H ;TIMER 1 EM MODO 2
MOV TH1,#BR_9600 ;PROGRAMAR BAUD RATE
MOV TL1,#BR_9600
SETB TR1 ;INICIAR TIMER 1
MOV SCON,#0D0H ;MODO 3 COM REN=1
MOV IE,#90H ;HAB INTERRUP SERIAL
CLR CHEGOU ;APAGAR FLAG
ESPERA JNB CHEGOU,ESPERA ;AGUARDAR UM COMANDO
CLR CHEGOU
;
CJNE ,#"0",LB1
CLR LED_VERMELHO ;CHEGOU 0
CLR LED_AMAR
CLR LED_VERDE
SJMP ESPERA
;
LB1 CJNE A,#"1",LB2
SETB LED_VERMELHO ;CHEGOU 1
SETB LED_AMAR
SETB LED_VERDE
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 151 de 173
SJMP ESPERA
;
LB2 CJNE A,#"R",LB3
SETB LED_VERMELHO ;CHEGOU R
SJMP ESPERA
LB3 CJNE A,#"r",LB4
CLR LED_VERMELHO ;CHEGOU r
SJMP ESPERA
;
LB4 CJNE A,#"A",LB5
SETB LED_AMAR ;CHEGOU A
SJMP ESPERA
LB5 CJNE A,#"a",LB6
CLR LED_AMAR ;CHEGOU a
SJMP ESPERA
;
LB6 CJNE A,#"V",LB7
SETB LED_VERDE ;CHEGOU V
SJMP ESPERA
LB7 CLR LED_AMAR ;CHEGOU v
SJMP ESPERA
;
SERIAL CLR RI ;APAGAR FLAG DE INTERRUP
MOV A,SBUF ;COLOCAR DADO NO Acc
SETB CHEGOU
RETI
END
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 152 de 173


11.1) INTRODUO
Para aplicaes onde o consumo de potncia crtico, as verses CHMOS oferecem modos de reduo
de potncia como recurso padro. H dois modos bsicos para economia de energia (reduo de
consumo):
Modo Idle
Modo Power Down
A figura 11.1 apresenta um diagrama de blocos onde se pode ver o funcionamento e a distino entre os
dois modos de economia de energia.



Figura 11.1 - Controle executado pelos flags (*PD e *IDL) que habilitam a economia de energia.

No MODO IDLE (IDL=1) o oscilador continua a trabalhar para trs funes, mas removido do resto da
CPU. As trs funes que operam em modo Idle so:
Interrupes
Timers
Porta serial
No MODO POWER DOWN (PD=1) o oscilador paralisado e com isto toda CPU fica congelada.
Esses dois modos so ativados pelo registrador PCON, que descrito na figura 11.2.



Figura 11.2 - Descrio do registro PCON.

Nas verses HMOS o registrador PCON s contm o bit SMOD, os demais no devem ser utilizados.
CAPTULO 11 - ECONOMIA DE ENERGIA E GRAVAO
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 153 de 173
11.2) MODO IDLE
A instruo que ativa o bit IDL a ltima a ser executada antes que a CPU entre no modo Idle. Neste
modo s funciona a interrupo, os timers e a porta serial. A CPU fica congelada sem o clock. O
consumo cerca de 85% do consumo normal.
Todo o status preservado:
SP, PC, PSW, Acc e todos os registradores;
Os pinos das portas mantm os mesmos estados;
ALE = PSEN = High.

H duas maneiras de terminar o modo Idle:
Por uma interrupo que esteja habilitada;
Por reset.
Se uma interrupo termina o modo Idle, a instruo a ser executada depois do RETI a que vem em
seguida que ativou o bit IDL. Na figura 11.3, h um esquema que ilustra este funcionamento.



Figura 11.3 - Retorno do modo Idle atravs de uma interrupo.

Os Flags GF0 e GF1 podem ser usados para dar indicao se a interrupo aconteceu no modo normal
ou no modo Idle. A rotina que ativa o bit IDL deve antes ativar um dos dois flags (GF0 ou GF1) para
indicar que a CPU entrou no modo Idle.
O Reset a outra forma de terminar o modo Idle. Como o oscilador est funcionando, so necessrios
apenas 24 perodos de clock. O Reset coloca em zero o bit IDL de forma assncrona e a CPU reassume
a execuo a partir da instruo que ativou o IDL. Podem acontecer 2 a 3 ciclos de mquina antes que a
CPU retome o controle.
O hardware interno inibe o acesso RAM interna durante o perodo de modo Idle mas no os acessos
aos pinos das portas. Para evitar erros, a instruo que vem em seguida ativao do IDL no deve
escrever nas portas ou na memria externa.

11.3) MODO POWER DOWN
A instruo que ativa o bit PD a ltima a ser executada antes que a CPU entre no modo Power Down.
Nesse modo o oscilador fica parado e assim todas as funes se congelam mas o contedo da RAM
interna e dos SFR so mantidos. O consumo de aproximadamente 10A.
Em modo power down so mantidos:
RAM interna e SFR
Pinos das portas
ALE = PSEN = LOW

A nica maneira de sair do Power Down por Reset que vai alterar o contedo dos SFR mas no
alterar o contedo da RAM interna. Assim os valores importantes devero estar armazenados na RAM
interna. Esse Reset deve esperar a partida do oscilador (pelo menos 10 ms).
O programa recomear do incio (RESET), ao contrrio do modo IDLE.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 154 de 173
Em Power Down pode-se baixar o Vcc at 2V, alguns cuidados devem ser observados:
No baixar o Vcc antes do Power Down
Levantar o Vcc antes de sair do Power Down.

Uma possvel utilizao do modo power down pode ser realizada usando um sensor que capte a reduo
de Vcc (p.ex. 4,75V) e ative uma interrupo externa com prioridade alta para entrar no modo power
down.

11.4) PROGRAMAO DA EPROM (8751)
Algumas verses da famlia MCS-51 possuem uma EPROM interna. A tabela a seguir relaciona algumas
destas CPUs.

Tabela da EPROM Interna para algumas verses do MCS-51


A CPU 8751H programada com 21 V, usando 50 ms para cada byte, o que d cerca de 4 minutos, ou
seja, (4K * 50 ms = 200 s). As CPUs 87C51 e 8752BH usam um modo de programao chamado de
"Quick Pulse" que feito com 12,75 volts e 25 pulsos de 100 s para cada byte, resultando em um
menor tempo de programao.
Durante a programao existem 3 configuraes usadas:
Programao
Verificao
Programao do bit de segurana

A figura 11.4 ilustra a habilitao desses modos.



Figura 11.4 - Habilitao dos diversos modos de programao (X don't care)

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 155 de 173
11.4.1) PROGRAMAO
Para a programao necessrio que o oscilador esteja funcionando com uma freqncia de 4 a 6 MHz.
A figura 11.5 ilustra a operao em modo programao.



Figura 11.5 - CPU 8751 em modo programao.

Normalmente EA mantido em nvel alto (VIH) at antes do pulso em ALE, um pouco antes deste pulso
coloca-se EA = VPP e em seguida envia-se o pulso ALE, depois dos 50 ms faz-se EA = VIH.

11.4.2. VERIFICAO
Se o bit de segurana no for programado a memria EPROM pode ser lida com finalidades de
verificao, isto pode ser feito depois da programao de cada byte, a nica alterao que P2.7
colocado em nvel baixo para habilitar o buffer de sada por P0. Como P0 no possui pull up interno, um
pull up externo de 10 K dever ser colocado em cada linha de dados. A figura 11.6 ilustra a operao
do 8751 em modo verificao.



Figura 11.6 - CPU 8751 em modo verificao.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 156 de 173
11.4.3) BIT DE SEGURANA
O bit de segurana uma trava que quando programada impede a leitura da EPROM interna. Tambm
impede que a CPU execute programas a partir de uma memria externa. Ao apagar a EPROM se apaga
tambm o bit de segurana. A figura 11.7 ilustra a operao da CPU em modo programao do bit de
segurana.



Figura 11.7 - CPU 8751 em modo programao do bit de segurana.

Outros membros da famlia oferecem tcnicas mais sofisticadas de segurana. Por exemplo o 8751BH
oferece um array de 32 bytes onde se pode colocar chaves de criptografia. A cada endereo de EPROM
que lido os 5 bits de endereo so usados para acessar um dos 32 bytes e com ele feito um *XOR
(NXOR). Se estes 32 bytes esto apagados (em 1), a operao NXOR no produz nenhuma alterao.

11.4.4) APAGAMENTO (8751)
O apagamento da memria EPROM do 8751 feito por luz ultravioleta de alta densidade (2537
Angstrons e 15 Watts/cm2) durante 20 a 30 minutos a uma distncia de 2,5 cm. A EPROM ficar com
todos os bits em 1 aps o processo.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 157 de 173


12.1) INTRODUO
Neste captulo descreve-se o projeto e a operao da Placa de Testes. A finalidade da placa permitir
flexibilidade no ensino de microcontroladores. O esquema possibilita a utilizao de um computador para
assemblar e linkar os programas e depois envi-os por porta serial Placa de Testes para que sejam
executados.

Figura 12.1 - Conexo da Placa de Testes com o IBM PC.

Para teste com microcontroladores, em uma pequena placa so montados o microcontrolador, chaves
para se interagir, leds para sinalizar alguns resultados e uma memria EPROM onde se gravam os
programas. Isto tem uma sria desvantagem, apagar e gravar a EPROM cada vez que se muda o
programa. Para cada correo que se faz repete-se o processo de apagar e gravar. Alm de ser um
processo lento, significa que se deve ter disponibilidade de um gravador de EPROM.
Com a Placa de Testes no se pretende utilizar a EPROM pois os programas sero transmitidos atravs
da porta serial do PC, escritos na memria de programa do 8031 e executados. A velocidade aumenta
bastante pois os erros podem ser rapidamente corrigidos no PC e em seguida transmitidos para a placa.
A placa tem dois modos de operao:
Modo Boot Serial;
Modo Execuo.
Para o funcionamento correto existem duas memrias, uma EPROM e uma RAM esttica (SRAM).
Quando a placa est em modo Boot Serial, a EPROM trabalha como memria de programa e a memria
esttica trabalha como memria de dados. Na EPROM est um programa muito simples que tem como
funo receber o programa que chega pela porta serial e escrev-lo na RAM esttica. Ao terminar a
transmisso do programa, o usurio pe a placa em modo Execuo e com isto a RAM esttica que era
memria de dados se transforma em memria de programa e a EPROM desabilitada, com isto o
programa recm transmitido executado. Se for preciso transmitir um novo programa, simplesmente
basta colocar a placa em modo Boot Serial e transmitir o novo programa. H um programa escrito em C
(TAR_PRU.C) que ajuda na comunicao com a Placa de Testes.
Para que o circuito seja completo foram colocados recursos para gravar e ler os membros da famlia
MCS-51 que tm EPROM interna: 8751H, 8751BH, 87C51, 87C51FA, 8752BH e outros modelos. H
recursos para gravao usando o modo standard (pulsos de 50 ms) como tambm usando o modo
"quick pulse programming" (pulsos de 100 s).
A seguir h uma descrio detalhada de cada item da placa de testes. Os esquemas esto no final deste
captulo e tm os nomes:
Esquema da CPU (cpu.sht)
Esquema da MEMRIA (memo.sht)
Esquema da SERIAL (serial.sht)
Esquema do GRAVADOR (grav.sht)
A seguir so apresentados seus quatro esquemas da placa de teste:
CAPTULO 12 - PROJETO DA PLACA DE TESTES
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 158 de 173



Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 159 de 173


Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 160 de 173


Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 161 de 173


Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 162 de 173
12.2) ESQUEMA DA CPU (CPU.SHT)
Este esquema o de maior hierarquia. Aqui est a CPU e tambm os blocos que representam os demais
esquemas: MEMRIAS, INTERF-SERIAL e GRAVADOR. A seguir h uma descrio completa de todos
os itens que compem est placa:
O CRISTAL utilizado de 3,575611 MHz e basta conect-lo aos pinos (X1 e X2) do oscilador da
CPU. Utilizou-se este cristal porque j estava disponvel e tambm porque esta freqncia permite
que a porta serial opere a 9600 bauds com boa preciso. Este cristal muito comum no Brasil pois
utilizado em todas as televises para gerar a freqncia da portadora de cor do sistema PAL-M. Um
cristal muito comum no Equador o de 3,58 MHz, que a freqncia da portadora de cor do sistema
NTSC e que tambm pode ser utilizado na Placa de Testes. Um cristal ideal para a gerao de um
baud rate preciso um de 3,6864 MHz; um cristal de 11,0592 tambm interessante pois permite um
baud rate preciso alm de permitir um clock maior para a CPU. Os dois capacitores C2 e C3 esto
colocados por recomendao do fabricante da CPU e o motivo da utilizao garantir que o cristal
oscile na freqncia apropriada durante a energizao do circuito.
O circuito de RESET j descrito, notar que o resistor R2 de 47 K e que junto com o capacitor de
10 F, deve garantir um tempo mais que suficiente para o reset da CPU. O diodo D1 permite uma
rpida descarga do capacitor C1 quando se desliga o circuito. Tambm possvel um reset manual
atravs do pushbutton SW1 e o resistor R1 de 82 usado para impedir a descarga abrupta do
capacitor C1. Deve-se tomar cuidado com os resistores R1 e R2 pois quando o pushbutton SW1
acionado (para provocar reset) esses dois resistores formam um divisor resistivo que define o valor
da tenso na entrada do Schimit Trigger 74LS14. Se R1 no for muito pequeno quando comparado
com R2 tenso na entrada do 74LS14 poder ser interpretada como "1 lgico" e a CPU no ser
resetada. Neste circuito quando se aciona SW1 a tenso do divisor de: (5 * 82) / (47000 + 82) = 9
mV (muito prxima de zero). A figura 12.2 ilustra o circuito de reset e os dispositivos conectados a
este sinal. Nesta figura pode-se ver o LED6 (amarelo e quadrado) que indica quando o reset manual
est acionado, um inversor (74LS14) foi usado para que o led se acenda quando a chave for
pressionada. Tambm se pode notar que o sinal de reset utilizado pelo 8031 e pelo 8255. Alm
disto este sinal tambm aciona um flip flop tipo D que est conectado em modo "toggled", ou seja, a
cada reset o flip flop muda de estado. Este circuito ser explicado quando for abordado o item do
boot serial.

Figura 12.2 - Esquema do circuito de "power on" reset.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 163 de 173
Existem TRS LEDS SINALIZADORES (LED2, LED3 e LED4) que servem de sada aos programas
dos usurios. Estes leds so acionados por 3 bits da porta P1 (P1.0, P1.1 e P1.2). Para evitar a
conexo dos leds diretamente aos pinos da CPU (na verdade no h grandes problemas nisto) e
tambm para que se acendam quando se escrever 1 nos bits da porta P1, foram usados inversores
74LS14 (que estavam sobrando). A figura 12.3 ilustra em detalhes a conexo dos leds com os bits da
porta P1.


Figura 12.3 - Conexo dos leds de sinalizao.
Os DOIS PUSHBUTTONS (SW2 e SW3) permitem que os usurios interajam com a CPU. Pode-se
escrever programas que respondam ao acionamento desses pushbuttons. Notar que os pushbuttons
no possuem resistores de "pull up" porque aproveitam o pull up interno que h na porta P1. Para
que se possa ler o estado do pushbutton SW2 necessrio programar 1 no bit P1.3, enquanto que
para trabalhar com o pushbutton SW3 necessrio programar 1 em *INT1(P3.3) e em T1(P3.5).
Quando a chave est aberta, l-se 1 e quando acionada, lido 0. Deve-se notar que no h nenhum
recurso por hardware para reduzir o bouncing. O pushbutton SW3 pode provocar interrupes e
tambm acionar a entrada do contador/temporizador 1. A figura 12.4 ilustra as conexes dos
pushbuttons com a CPU.


Figura 12.4 - Conexo dos pushbuttons com a CPU.

A CHAVE PASSO A PASSO (SW4) est conectada atravs de um inversor entrada de interrupo
0. H um led quadrado de cor vermelha que se acende quando a chave est aberta. Quando a chave
est fechada, na sada do inversor h um nvel alto e com isto no se ativa a interrupo, mas
quando a chave est aberta (LED5 aceso) a sada do inversor vai para um nvel baixo acionando a
interrupo 0. Esta interrupo 0 (ou qualquer outra interrupo) pode ser aproveitada para controlar
a execuo de programa no modo passo a passo. A figura 12.5 ilustra a conexo da chave passo a
passo.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 164 de 173

Figura 12.5 - Chave para o modo passo a passo.

Como ltimo item do esquema da CPU est a Demultiplexao do barramento de endereos. Esta
tarefa realizada por um 74LS373, que congela em sua sada os endereos que estavam presentes
na entrada quando ALE fez a transio de alto para baixo (). O barramento de endereos
totalmente demultiplexado e entregue aos demais dispositivos, enquanto o barramento de dados
multiplexado. Desde que os dispositivos leiam ou escrevam dados no momento correto, no h
nenhum problema em usar o barramento de dados multiplexado (deve-se tomar cuidado com a carga
que este barramento pode suportar).


Figura 12.6 - Separao dos barramentos de endereos e de dados.

12.3) ESQUEMA DA MEMRIA
Para a memria da placa foi utilizada uma EPROM (2732) e uma memria esttica (SRAM-6116). A
primeira idia que a EPROM trabalhe como memria de programa (*PSEN) e a SRAM trabalhe como
memria de dados (*RD e *WR). Isto significaria gravar os programas na EPROM e a cada novo
programa seria necessrio apagar e regravar a EPROM. Para evitar este trabalho h dois modos em que
a placa pode operar:
MODO BOOT A EPROM funciona como memria de programa e a SRAM como memria de
dados. Na EPROM est um programa muito simples que recebe dados pela porta serial e os escreve
na SRAM (envia-se o programa pela porta serial).
MODO EXECUO A EPROM desabilitada e a SRAM trabalha como memria de programa,
executando o programa recm transmitido.

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 165 de 173
A especificao do modo de operao controlada por um flip-flop (U8A) conectado em modo toggled.
A cada acionamento do RESET este flip-flop muda de um modo para outro. A operao simples:
1. Coloca-se a placa em modo BOOT (aciona-se o RESET at que o led verde quadrado esteja aceso).
Com isto a EPROM ser a memria de programa e a SRAM ser a memria de dados.
2. Transmite-se o programa a ser executado pela porta serial. O programa da EPROM responsvel
por receber o que chega pela porta serial (o programa em formato INTEL.HEX) e escrever na
SRAM.
3. Aciona-se o RESET e com isto o flip-flop U8A muda de estado, ou seja, a placa colocada em modo
EXECUO. Neste modo a EPROM desabilitada e a SRAM tomada como memria de
programa, executando o que a est escrito.
4. Se for necessrio enviar um novo programa, basta acionar o RESET e a placa vai novamente para o
modo BOOT.
A tabela a seguir ilustra o comportamento das memrias segundo o sinal de BOOT.

Tabela do sinal BOOT controlando a EPROM e a SRAM.


Na figura 12.7 esto as memrias, o circuito responsvel por torn-las memria de programa ou dados
(U6A, U6B, U6C, U7A) e o flip-flop de BOOT acionado pelo sinal de RESET. A EPROM somente estar
operante quando BOOT=1 (*BOOT = 0) porque este sinal vai diretamente para o *CE deste CI, se
BOOT=0 a EPROM est desabilitada. Quando BOOT = 1, a entrada *WE da SRAM acionada pelo sinal
de *WR e a entrada *OE acionada por *RD, quando BOOT = 0, a entrada *WE est em 1 (no h como
escrever) e a entrada *OE acionada por *PSEN, ou seja, trabalha como memria de programa. Notar
que no flip-flop h um circuito (R9 e C4) que garante o preset, ou seja, que sempre se inicie em 1
(BOOT=1, pronto para receber um programa). O fato de existir este circuito de preset necessitou que se
aumentasse o tempo do RESET da CPU pois a CPU s deve funcionar depois que o sinal BOOT esteja
totalmente estabilizado.
A tabela a seguir ilustra como est o pino *CE da EPROM e os pinos *WE e *OE da SRAM.

Tabela do BOOT controlando os pinos de leitura e escrita da SRAM e da EPROM.

EPROM SRAM
BOOT *CE *WE *OE
0 *PSEN *WR *RD
1 1 1 *PSEN




Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 166 de 173


Figura 12.7 - Circuito de memria controlado pelo sinal BOOT.

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 167 de 173
12.4) ESQUEMA DA SERIAL
O microcontrolador 8031 oferece uma porta serial bidirecional que ser utilizada para enviar os
programas que sero executados pela placa de testes. Pelo pino TXD a CPU transmite os dados e pelo
pino RXD os dados so recebidos. O conector serial de 9 pinos dos PCs transmite pelo pino 2 (PC_RX)
e recebe pelo pino 3 (PC_TX). A soluo parece ser simples pois bastaria conectar as entradas com as
sadas. O problema que no conector serial dos PCs os sinais esto com os nveis de tenso do padro
RS 232 (+/- 12 V) e nos pinos da CPU tm-se nveis TTL. Os conversores RS 232/TTL necessitam de
fontes de alimentao de +12 V e -12 V; os mais consagrados so: 1488 e 1489.
Pareceria que para poder operar com a porta serial conectada ao PC deveramos ligar a Placa de Testes
a duas fontes extras (+12 V e - 12 V). Mas com isto a placa se tornaria grande porque seriam
necessrios dois transformadores extras. Mas o que se busca uma placa simples que permita receber
programas do PC e no uma porta serial perfeita.
Converter para TTL os sinais RS 232 gerados por um PC fcil com a utilizao de um transistor. A
figura 12.8 ilustra um circuito que converte RS 232 em TTL. Se a entrada PC_TX est em +12 V o
transistor se satura e a sada RXD vai a zero, por outro lado, se a entrada PC_TX est em -12 V o
transistor estar cortado e devido ao resistor de pull up (R14) a sada vai para VCC. O diodo D12
aumenta a velocidade de transistor quando este faz a transio da saturao para o corte.



Figura 12.8 - Conversor de RS 232 para TTL.

H algumas tolerncias na porta serial do PC as quais podero ser aproveitadas para simplificar o
conversor TTL/RS 232. O primeiro tpico que a porta serial do PC interpreta como tenso positiva
qualquer valor entre +3 V e +12 V. Com isto podemos utilizar os +5 V da placa em substituio fonte de
+12 V. O mesmo valido para as tenses negativas, ou seja, a porta serial do PC interpreta como
tenso negativa qualquer valor entre -12 V e -3 V. A figura 12.9 ilustra estas faixas de tenso.


Figura 12.9 - Faixas de tenso toleradas pela porta serial do PC.

Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 168 de 173
Se houvesse uma fonte de -12 V disponvel a converso de TTL para RS 232 seria muito simples. A
figura 12.10 ilustra o emprego de um transistor para converter os nveis. Quando o sinal TXD do 8031
est em 1 o transistor estar cortado e a sada PC_RX vai para -12 V, quando o sinal TXD est em zero
o transistor se satura e a sada PC_RX vai para + 5 V.



Figura 12.10 - Circuito para converter nveis TTL para nveis RS 232.

O problema agora onde conseguir uma fonte de -12 V ? H um truque que se pode usar, uma sada
RS 232 quando inativa est com uma tenso negativa (usualmente -12 V), ou seja, o sinal PC_TX
quando no usado estar apresentando uma tenso de -12 V. Esta mesma sada quando comea a
transmitir apresenta pulsos de +12 V e de -12 V. Se for usado um circuito capaz de separar as tenses
negativas, ser obtida uma fonte que pode substituir a fonte de -12 V. A figura 12.11 ilustra este circuito,
notar que o diodo D11 conectado a PC_TX separa as tenses negativas que so armazenadas no
capacitor C10. Quando h tenses positivas esse diodo estar cortado. O diodo D10 est em paralelo
com o capacitor para garantir que as tenses nunca cheguem a um valor positivo. Um circuito deste tipo
consegue fornecer uma tenso prxima de - 6 V mas que suficiente para que o conversor TTL/RS 232
funcione.



Figura 12.11 - Conversor TTL/RS 232 com a fonte negativa.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 169 de 173
Agora possvel fazer as converses RS 232 e TTL que so necessrias para que a porta serial opere.
Cabe lembrar que este conversor muito limitado e que funciona apenas a distncias pequenas. Deve-
se testar quando for empregado a distncias maiores e com velocidades mais altas. O esquema
completo da interface serial (serial.sht) est no item 12.11.
Para complementar o presente texto apresentado a seguir uma tabela com as funes dos pinos para
os conectores de 9 pinos e 25 pinos.

Tabela da descrio dos sinais dos conectores seriais.


Para economizar espao na placa, usa-se um adaptador como fonte de alimentao. O adaptador
responsvel por gerar uma tenso retificada mas no regulada na faixa de 7,5 a 10 V.
O regulador da placa (LM7805) responsvel por gerar os 5 volts regulados. Normalmente os
adaptadores so de m qualidade e geram uma tenso que depende da corrente, quanto mais corrente
se necessita menor a tenso. Para evitar uma dissipao de potncia muito grande sobre o regulador,
recomenda-se testar com diversas tenses iniciando por uma bem baixa como por exemplo 3V. Os
capacitores C17 e C18 so usados para garantir a regulao.
Para a fonte de alimentao de 25 V que usada somente quando se grava a EPROM das CPUs, usa-
se uma fonte externa que deve fornecer 25 V. O capacitor C19 usado por segurana para garantir a
regulao. Se for usada uma boa fonte esse capacitor no ser necessrio. A figura 12.12 ilustra as duas
fontes de alimentao.

Figura 12.12 - Fontes de alimentao de 5 V e 25 V.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 170 de 173
12.5) ESQUEMA DO GRAVADOR
Para o gravador de EPROM se buscou um projeto que permitisse gravar todas as CPUs 8751 e 8752.
Portanto foi feita uma anlise de que sinais seriam necessrios para cada pino. A tabela a seguir
apresenta todos os pinos e os sinais necessrios. Pode concluir que o pino *EA/VPP o mais difcil pois
de acordo com a CPU deve fornecer 3 nveis de tenso, 21V, 12,75V, 5 V. Pelo pino ALE/*PROG
enviam-se pulsos de 50 ms para a gravao standard ou pulsos de 100 s para a gravao usando
"quick pulse programming".

Tabela dos sinais necessrios para gravar os diferentes tipos de microcontroladores com EPROM.


A parte mais difcil deste gravador a gerao das tenses de programao (5V, 12,75V e 21V). Alm
disso deve-se ter um controle digital sobre essas tenses. A soluo obtida com o uso do LM317
(regulador ajustvel) que tem a capacidade de manejar tenses de 1,2 V at 37 V. A figura 12.13 ilustra
o emprego deste CI.


Figura 12.13 - Uma sugesto de emprego do LM317.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 171 de 173
Quando em operao o LM317 apresenta uma tenso nominal de referncia de 1,25V entre a sada e o
pino de ajuste. Essa tenso de referncia gerada atravs do resistor R1 e como a tenso constante,
a corrente I2 flui pelo resistor R2 gerando a tenso de sada Vout. A corrente Iadj representa um erro e o
dispositivo est preparado para minimiz-la, esta corrente tem um valor tpico de 100 A. O
equacionamento muito simples e feito a seguir:



O que se pretende descobrir que valores de R2 se devem ter para as tenses de 5V, 12,75V e 21V. O
equacionamento a seguir apresenta uma expresso genrica para R2.



Quando so usados os valores tpicos do fabricante (lista abaixo), tem-se:



A tabela dos valores de resistncia necessrios para gerar as tenses de interesse.


A maneira mais simples de gerar essas 3 tenses conectar ao LM317 esses trs valores de resistores
e controlar seu caminho para terra com transistores. Pode-se usar buffers no inversores com coletor
aberto. A figura 12.14 ilustra este circuito. Deve-se notar que o resistor responsvel pelos 21V est
permanentemente conectado ao terra, ou seja, quando se desabilita os dois transistores a sada vai a
21V. preciso saber os valores de resistores que em paralelo com o resistor de R16, permitam gerar as
outras tenses. Na verdade o calculo simples:
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 172 de 173
Para 12 V [1/3416 + 1/R18 = 1/1989] R18 = 4,761 K;
Para 5 V [1/3416 + 1/R17 = 1/649] R17 = 800.

Para permitir um ajuste preciso das tenses usam-se potencimetros para cada resistor.
claro que primeiro se ajusta o potencimetro dos 21V e em seguida os outros dois.



Figura 12.14 - Gerao das tenses de 21V, 12,75V e 5V.

No item 12.2 est o esquema completo do gravador de EPROM (GRAV.SHT). O 8255 responsvel
pela conexo com os dados da EPROM, a gerao dos endereos e alguns sinais de controle, o 8255
(PC7) vai tambm gerar o pulso de programao. O 74LS373 alm de alguns sinais de controle tambm
controla o regulador LM317 gerando as diversas tenses. A porta P0 no tem pull up interno e portanto
tornam-se necessrios os resistores de 10 K para realizar o pull up externo. O bit P1.7 quando em zero
permite que se escreva no 8255 e o bit P1.6 quando em zero permite que se escreva no 75LS373. Logo
depois do RESET, P1.7 e P1.6 estaro em nvel 1, quer dizer os dois CIs (8255 e 373) estaro
desabilitados. Nunca se deve operar com os dois CIs habilitados ao mesmo tempo pois uma escrita vai
escrever nos dois simultaneamente.
Microcontroladores Industriais Professor Ulisses Galvo Romo
Pgina 173 de 173


Almoyna, Julio Martnez. "Dicionrio de Portugus-Espanhol", Ed Porto, Portugal.
Becker, Idel "Dicionrio Espanhol-Portugus e Portugus-Espanhol", dcima segunda edio,
Ed. Nobel, So Paulo, SP, 1992.
Braga, Nilton. "RS-232 Tcnicas de Interface", terceira tiragem, Ed. EBRAS, Rio de Janeiro, RJ,
1990.
Kernighan, Brian W. & Ritchie, Dennis M., "The C Programming Language", second edition, Ed.
Prentice Hall - Software Series,Englewood Cliffs, New Jersey, 1988.
Manual da INTEL., "8 Bit Embedded Controller Handbook".
Purdum, Jack., "C Programmer's Toolkit", Ed. QUE Corporation, Carmel, Indiana, 1989.
Silva Jr, Vidal P., Aplicaes prticas do microcontrolador 8051, 9a ed., Ed. rica, So Paulo,
1998.
Nicolosi, Denys E. C., Microcontrolador 8051 detalhado, Ed. rica, So Paulo, 2000.
KLEITZ, W., Digital Electronic - A Practical Approach, Editora Prentice Hal, Upper
Saddle River, New Jersey, 1996.
Data sheet Flip Flop 54/7476, LS76
GAJSKI, Daniel D., Principles of Digital Design, New Jersey: Prentice Hall, 1997 (ISBN 0-13-
301144-5)
MANO, M. Morris; Computer Engineering: Hardware Design. New Jersey: Prentice Hall, 1988
(ISBN 0-13-162926-3)
BROWN, Stephen; VRANESIC, Zvonko, Fundamentals of Digital Logic whit VHDL Design,
McGraw-Hill Higher Education ) a McGraw-Hill Company), 2000.
(http://www.mhhe.com/engcs/eletrical/brownvranesic)

BIBLIOGRAFIA

Potrebbero piacerti anche