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).
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).
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
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
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
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:
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.
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:
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:
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.
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.
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 --
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.
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.
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:
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.
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.
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)