1
Faculdade de Ciˆ encia e Tecnologia Engenharia de El´ etrica Disciplina: Microprocessadores e Microcontroladores Professor: Vitor Le˜ ao Filardi
Apostila de Programa¸c˜ ao em 8051
2
Sum´ ario 1 Primeira Unidade 1.1 Explica¸ca˜o Intuitiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Princ´ıpios B´asicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 Conceitos B´asicos da Computa¸ca˜o . . . . . . . . . . . . . . . . . . . . . . . 1.2.2 Blocos B´asicos de microcomputadores . . . . . . . . . . . . . . . . . . . . . 1.3 Arquitetura do Microprocessador/Microcontrolador . . . . . . . . . . . . . . . . . . 1.4 A CPU Internamente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5 O Microcontrolador 8051 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.1 Mem´oria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.2 Circuito de Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.3 O Gerador de Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.4 Interrup¸ca˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.5 Registro de Controle das Interrup¸co˜es . . . . . . . . . . . . . . . . . . . . . 1.5.6 Tempo para Atendimento das Interrup¸co˜es . . . . . . . . . . . . . . . . . . 1.5.7 Ajuste das Interrup¸co˜es Externas para serem Ativas em N´ıvel ou Transi¸ca˜o 1.5.8 Hardware para expandir as possibilidade de Interrup¸ca˜o Externa . . . . . . 1.5.9 Exerc´ıcios Resolvidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.10 Conjunto de Instru¸co˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Segunda Unidade 2.1 Ciclos de M´aquina . . . . . . . . . . . . . . . . . . . . . . . 2.2 Portas de I/O . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Princ´ıpio de Funcionamento e Utiliza¸ca˜o . . . . . . . 2.2.2 Caracter´ısticas Gerais e de Tempo dos Ports . . . . 2.2.3 Uso das Portas de I/O para a Expans˜ao da Mem´oria 2.2.4 Sele¸ca˜o de Programa Externo ou Interno . . . . . . . 2.2.5 Uso dos Pinos da Porta 3 como fun¸co˜es Alternativas 2.2.6 Capacidade de Corrente nos Pinos de I/O . . . . . . 2.3 Modos de Endere¸camento das Instru¸co˜es . . . . . . . . . . . 2.3.1 Endere¸camento por Registrador . . . . . . . . . . . . 2.3.2 Endere¸camento Direto . . . . . . . . . . . . . . . . . 2.3.3 Endere¸camento Indireto . . . . . . . . . . . . . . . . 2.3.4 Endere¸camento Imediato . . . . . . . . . . . . . . . 2.3.5 Endere¸camento Relativo . . . . . . . . . . . . . . . . 2.3.6 Endere¸camento Absoluto . . . . . . . . . . . . . . . 2.3.7 Endere¸camento Longo . . . . . . . . . . . . . . . . . 2.3.8 Endere¸camento Indexado . . . . . . . . . . . . . . . 2.4 Temporizadores e Contadores . . . . . . . . . . . . . . . . . 2.4.1 Introdu¸ca˜o . . . . . . . . . . . . . . . . . . . . . . . 2.4.2 Registros Envolvidos . . . . . . . . . . . . . . . . . . 2.4.3 Modos de opera¸ca˜o . . . . . . . . . . . . . . . . . . . 2.4.4 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . 3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . de Dados e Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
7 7 8 8 9 12 13 14 15 21 24 25 29 32 32 33 34 36
. . . . . . . . . . . . . . . . . . . . . .
41 41 42 42 45 46 47 47 48 48 48 48 49 50 50 51 51 51 52 52 52 55 58
´ SUMARIO
4 3 Terceira Unidade 3.1 Comunica¸ca˜o Serial . . . . . . . . . . . . . . . . 3.1.1 Introdu¸ca˜o . . . . . . . . . . . . . . . . 3.1.2 Registros Envolvidos . . . . . . . . . . . 3.1.3 Modos de Opera¸ca˜o . . . . . . . . . . . 3.1.4 Cuidados com a Porta Serial . . . . . . 3.1.5 Comunica¸ca˜o entre v´arios 8051 . . . . . 3.1.6 Comunica¸ca˜o serial entre o 8051 e o PC 3.1.7 Exerc´ıcios . . . . . . . . . . . . . . . . . 3.2 Programa¸ca˜o em Assembly . . . . . . . . . . . 3.2.1 Introdu¸ca˜o te´orica . . . . . . . . . . . . 3.2.2 Estrat´egias de elabora¸ca˜o de programas 3.2.3 Fluxogramas . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
65 65 65 65 67 70 72 73 74 76 76 77 78
Referˆ encias Bibliogr´ aficas GIMENEZ, S. P. Microcontroladores 8051. [S.l.]: Editora Pearson Education do Brasil, 2002. ´ NICOLOSI, D. E. C. Microcontrolador 8051 Detalhado. [S.l.]: Editora Erica, 2000. ´ SILVA, V. P. da. Aplica¸co ˜es Pr´ aticas do Microcontrolador 8051. [S.l.]: Editora Erica, 1998.
5
Cap´ıtulo 1
Primeira Unidade O que ´ e Microcontrolador 1.1
Explica¸ c˜ ao Intuitiva
Vamos fazer de conta que somos meros aprendizes de cozinheiros, o chefe de cozinha teve que sair e chega um pedido de uma torta de chocolate do gerente da casa. O primeiro passo que nos vamos dar ´e em dire¸ca˜o ao livro de receitas onde dever´a ter impresso a rotina de como fazer uma ”Torta de Chocolate” Tudo bem at´e aqui. E agora como vamos acessar a receita da torta? De que se comp˜oe uma receita? Pois bem, vamos procurar a p´agina que cont´em o t´ıtulo ”Torta de Chocolate”, encontra-se ent˜ao a receita que ´e equivalente a um ”software” de constru¸ca˜o da torta, que est´a gravada em um p´ agina ”ABC” do livro de receitas. Notemos que, na p´agina, apenas lemos; n˜ao escrevemos nada l´a, ou seja, em trocado de mi´ udo ser´a a nossa futura ”ROM” - Read Only Memory - e p´agina o nosso endere¸ co, pois toda vez quisermos tal informa¸ca˜o basta acessar tal endere¸co e obtˆe-l´a. Poder´ıamos ainda necessitar de uma cobertura para a torta caso fossemos mostrar servi¸co para o chefe da casa, vejamos que no livro de receita exista em uma outra p´agina a rotina ”Cobertura para Tortas” e que esta por sua vez estava seperada por servir para mais de um tipo de torta, e poder´ıamos partir para a sua execu¸ ca ˜o e depois retornar a torta, o que ´e chamado tamb´em como subrotina de um programa. Agora se fossemos complicar um pouco mais a nossa receita e fossemos fazer uma receita e meia da torta? Precisar´ıamos de uma folha de rascunho (a mem´oria ”RAM”) para ajustarmos a receita,uma vez que na receita da torta n˜ao devo anotar nada nela. Esta mem´oria tempor´aria, ser´a utilizada para c´alculos, e depois podemos nos desfazer do seu conte´ udo, ou seja, jogar no lixo. Vejamos como ficaria esta estrutura intuitiva na figura abaixo. Quais s˜ao as diferen¸cas sutis e importantes entre o microprocessador e o cozinheiro e suas anota¸co˜es? Bem, ´e que o microprocessador, por ser uma m´ aquina limitada, n˜ao atende ao rico vocabul´ario do ser humano cozinheiro que, al´em de rico, ´e sofisticado, impreciso e de m´ ultipla interpreta¸ca˜o, que s´o uma m´aquina inteligente como o homem entede ( vejamos o exemplo: para o homem as seguintes palavras s˜ao equivalentes: fazer = realizar = trabalhar. Para o microprocessador, o vocabul´ario ´e bem reduzido e espec´ıfico; n˜ao existem adjetivos, sinˆonimos, etec...). Ent˜ao vimos que o microprocessador entende apenas algumas instru¸co˜es b´asicas e se nos quisermos que ele fa¸ca alguma coisa precisamos estudar e compreender precisamente a sua linguagem e limitar-
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
Folha de Rascunho
Leio Escrevo C o z i n h e i r o
Ingredientes + Utensilios
Livro de Receitas
HARDWARE
SOFTWARE
READ WRITE
Perifericos: Teclado,mouse Etc....
(Linguagem Complexa)
So Leio
RAM (Dados) M i c r o p r o c.
ROM (Programa de Linguagem Especifica
So Leio
HARDWARE
SOFTWARE
Figura 1.1: Analogia da estrutura Intuitiva se a ela para fazer a m´aquina trabalhar. Este ´e o ASSEMBLER do microprocessador, que ´e o seu conjunto de instru¸co˜es.
1.2 1.2.1
Princ´ıpios B´ asicos Conceitos B´ asicos da Computa¸ c˜ ao
Antes de iniciarmos o estudo de microcomputadores, vamos nos familiarizar com os termos t´ecnicos e saber o seu significado individualmente. 1.Bit: abrevia¸ca˜o de d´ıgito bin´ario (binary digit), que corresponde ao valor zero l´ogico(0) ou ao valor um l´ogico(1). Podemos fazer uma analogia ao sistema num´erico como sendo uma unidade de um valor qualquer. 2.Byte: representa¸ca˜o num´erica composta de 8 bits. Pode representar n´ umeros de 00h(=0 10 ) a FFh(=25510 ). Essa representa¸ca˜o ´e vastamente utilizada na representa¸ca˜o das instru¸co˜es que o microcontrolador ´e capaz de executar. Novamente fazendo analogia, teremos o similaridade como as dezenas, centenas etc..., lembrando que em eletrˆonica digital corresponde como sendo uma palavra. 3.Registradores: conjunto de flip-flop, geralmente do tipo D que s˜ao interligados em paralelo entre si. Eles s˜ao respons´aveis pelo armazenamento de uma informa¸ca˜o que pode ter 8, 16, 32, 64 ou 128 bits, dependendo de quantos flip-flops do tipo D est˜ao interligados entre si. Os registradores apresentam caracter´ısticas vol´ateis e , quando eles s˜ao desenergizados, perdem suas informa¸co˜es.
P´agina 8
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
4.Microcomputador: equipamento compacto cujo objetivo principal ´e simular eletronicamente o sistema chamado ser humano. Suas principais vantagens s˜ao: grande velocidade do processamento das informa¸co˜es e alta confiabilidade nas atividades executadas. Ele ´e composto por trˆes blocos b´asicos: Unidade Central e de Processamento, Unidade de Mem´oria e Unidade de entrada e sa´ıda de informa¸co˜es. 5.Instru¸ ca ˜o: define uma u ´ nica a¸ca˜o (tarefa) que o microcomputador pode executar por vez. As a¸co˜es das instru¸co˜es podem corresponder a opera¸co˜es de leitura e escrita nos conte´ udos dos registradores ou nas posi¸co˜es de mem´orias, a opera¸ca˜o l´ogica e aritm´eticas, etc. 6.Equipamento Inteligente: equipamento com microprocessador ou com microcontrolador. Tamb´em chamada de eletrˆonica embarcada 7.Programa ou software: definido por um conjunto de instru¸co˜es arranjadas de maneira organizada por um programador, com o objetivo de informar ao microcomputador o que ele deve executar, ou seja, o programa informa ao microcomputador quais as tarefas que devem ser executadas ao longo do tempo. Existem v´arias classifica¸co˜es de programas: os programas de sistema operacional( linux, DOS, windows e etc.), os utilit´arios( Anti-virus,scandisk e etc.) e os aplicativos (WORD, EXCEL, Kile e etc.) 8.Firmware: programa (software) que est´a exclusivamente armazenado em uma mem´oria n˜aovol´atil(ROM/PROM/EPROM/E2PROM) de um equipamento inteligente. No m´ınimo o firmware tem a finalidade principal de programar a forma de opera¸ca˜o do hardware (n´ umero de portas de entrada e sa´ıda, forma de comunica¸ca˜o serial, forma de opera¸ca˜o dos timers/contadores etc.) e de definir suas condi¸co˜es iniciais de opera¸ca˜o. 9.Hardware: s˜ao as partes eletrˆonicas que comp˜oem um microcomputador, como a mother board (placa m˜ae que cont´em pelo menos o microprocessador ou o microcontrolador de um microcomputador), a placa de v´ıdeo de um microcomputador etc. 10.Microprocessador ou Unidade Central de Processamento(CPU):mais conhecido como CPU. Fazendo analogia com o sistema ser humano, o microprocessador, ou CPU, de um microcomputador corresponde ao c´erebro de um ser humana. Fisicamente ´e um dispositivo semicondutor (circuito integrado,CI) constitu´ıdo por milh˜oes de transistores que implementam uma variedade de circuitos (registradores, m´aquinas seq¨ uenciais, circuitos l´ogicos e etc.). Ele ´e respons´avel pela busca de um programa na mem´oria e por sua execu¸ca˜o. 11.Microcontrolador: dispositivo semicondutor em forma de CI, que integra todas as partes b´asicas de um microcomputador - microprocessador(CPU), mem´orias n˜ao-vol´ateis (ROM /PROM /EPROM /E2PROM), mem´orias vol´ateis(RAM, SRAM, DRAM, Flash RAM), portas de entrada e sa´ıdas (portas de comunica¸ca˜o paralela e/ou serial, conversores anal´ogicos/digitais,conversores digitais/anal´ogicos etc.). Ele ´e conhecido como ummicrocomputador implementado em um u ´ nico CI.
1.2.2
Blocos B´ asicos de microcomputadores
Qualquer computador, seja ele microcomputadores, computadores de m´edio porte ou ainda computadores de grande porte, s˜ao constitu´ıdos por trˆes blocos b´asicos: a unidade central de processamento (CPU), a unidade de mem´oria (na qual s˜ao armazenados os programas e as informa¸co˜es) e a unidade de entrada e sa´ıda (dispositivos que fazem a comunica¸ca˜o com o mundo externo). P´agina 9
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
CPU A CPU ´e respons´avel pela inteligˆencia da m´aquina, ou seja, ´e ela que tem a capacidade de tomar ´ ela que decis˜oes (a¸co˜es) no sistema microcomputadorizado, por meio da execu¸ca˜o de um programa. E executa o programa armazenado na mem´oria do microcomputador, que foi projetado por um programador. Ao executar um programa, ela ´e respons´avel pela obten¸ca˜o das informa¸co˜es a serem analisadas por meio de dispositivos de entrada (teclado, canal de comunica¸ca˜o serial etc.), pelo processamento (interpreta¸ca˜o, manipula¸ca˜o, ordena¸ca˜o, modifica¸ca˜o, c´alculos l´ogicos ou matem´aticos etc.) das informa¸co˜es e pela resposta (a¸ca˜o) do sistema microcomputadorizado a uma determinada situa¸ca˜o de controle para a qual ele foi projetado a fim de controlar, por meio de um dispositivo de sa´ıda (escrita na mem´oria de v´ıdeo, transmiss˜ao de dados para outro microcomputador, acionamento de um rel´e, acionamento de um bip,etc.). Assim, por exemplo, um microcomputador projetado para funcionar como um caixa eletrˆonico de banco deve fazer as seguintes opera¸co˜es: leitura das informa¸co˜es contidas no cart˜ao magn´etico (obten¸ca˜o de informa¸co˜es), decodifica¸ca˜o da senha digitada no teclado pelo usu´ario, busca de saldo banc´ario nos bancos de dados do banco (processamento), disponibiliza¸ca˜o do saldo banc´ario no monitor de v´ıdeo e a impress˜ao em papel do referido saldo banc´ario (resposta do sistema por meio da a¸ca˜o de gerar informa¸co˜es no monitor de v´ıdeo e tamb´em pela impress˜ao em papel das informa¸co˜es organizadas solicitadas pelo usu´ario). De maneira simplificada, pode-se dizer que a unidade de processamento central (microprocessador) apresenta duas fun¸co˜es b´asicas: a)Leitura (busca) e interpreta¸ ca ˜o do programa alocado na mem´ oria, instru¸ ca ˜o por instru¸ ca ˜o: como o programa fica alocado na mem´oria do microcomputador, e n˜ao dentro do microprocessador/CPU, em primeiro lugar, o microprocessador precisa buscar as instru¸co˜es, uma por uma, na mem´oria. Isso ´e feito por meio da opera¸ca˜o de leitura de um byte na mem´oria que corresponde a uma determinada instru¸ca˜o e depois ´e realizada a interpreta¸ca˜o da instru¸ca˜o lida (decodifica¸ca˜o), pois o microprocessador tem uma determinada quantidade de instru¸co˜es que ele ´e capaz de executar. Dessa maneira, ele precisa verificar qual dessas instru¸co˜es deve ser executada. Assim, ao finalizar essa etapa, o microprocessador/CPU sabe o que deve fazer. O pr´oximo passo ´e a execu¸ca˜o da instru¸ca˜o. b)Execu¸ ca ˜o do programa, instru¸ ca ˜o por instru¸ ca ˜o: a palavra execu¸ca˜o de uma instru¸ca˜o pode significar a transferˆencia de dados dos registradores internos do microprocessador/CPU para a mem´oria ou para os dispositivos de entrada e sa´ıda, e vice-versa. Pode tamb´em significar a execu¸ca˜o de opera¸co˜es l´ogicas e aritm´eticas etc. Esse processo de buscar, interpretar e executar instru¸ca˜o por instru¸ca˜o ´e uma atividade cont´ınua do microprocessador e, dessa forma, um programa ´e processado por inteiro. A unidade de processamento central (microprocessador) ´e constitu´ıda por trˆes partes principais: a unidade l´ ogica e aritm´etica, os registradores internos e o bloco de temporiza¸ca ˜o e controle. a)Unidade L´ ogica e Aritm´ etica (ULA): muitas vezes, tamb´em ´e chamada de ALU (Arithmetic Logic Unit). Ela ´e respons´avel, principalmente, pela execu¸ca˜o das instru¸co˜es correspondentes a`s opera¸co˜es aritm´eticas e l´ogicas. Al´em disso, uma caracter´ıstica muit´ıssimo importante que deve ser destacada, referente a` ULA, ´e que, ao executar uma instru¸ca˜o de uma opera¸ca˜o aritm´etica ou l´ogica, ela tamb´em define a condi¸ca˜o num´erica do resultado por meio de alguns bits sinalizadores, chamados de flags de sinaliza¸ca˜o, tornando-os iguais a um (setando-os) ou tornando-os iguais a zero (resetando-os), e pela utiliza¸ca˜o de outras instru¸co˜es que s˜ao ca- pazes de testar esses flags de sinaliza¸ca˜o. Isso faz com que o sistema microcomputadorizado possa gerenciar uma determinada situa¸ca˜o de projeto ou desempenhar uma determinada tarefa bem-definida. b)Registradores internos: s˜ao compostos por m registradores de n bits interligados em paralelo entre si. Os valores m e n dependem das caracter´ısticas de cada microprocessador/microcontrolador P´agina 10
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
(p. ex.: 32 registrado- res de 8 bits etc.). Como s˜ao formados por flip-flops, ´e poss´ıvel realizar opera¸co˜es de leitura e escrita de informa¸co˜es. Quando a CPU ´e ”desenergizada”por apresentar caracter´ısticas vol´ateis, essas informa¸co˜es s˜ao perdidas. Geralmente, eles s˜ao capazes de armazenar: •um byte se forem constitu´ıdos por registradores de 8 bits; •um duplo byte ou address ou word, se forem constitu´ıdos por registradores de 16 bits; •um duplo address ou duplo word, se forem constitu´ıdos por registradores de 32 bits etc. Um microcomputador ´e chamado de microcomputador de 8 bits se ele for capaz de processar informa¸co˜es de oito em oito bits por vez (opera¸co˜es de movimenta¸ca˜o de informa¸co˜es e opera¸co˜es aritm´eticas e l´ogicas). Analogamente, para os microcomputadores de 16 e 32 bits, quanto maior for a quantidade de bits processados em paralelo por vez, maior ser´a sua capacidade de processamento. A unidade utilizada para medir a capacidade de processamento ´e o Mips (milh˜oes de informa¸co˜es por segundo). c)Bloco de temporiza¸ ca ˜o e controle: respons´avel pelo controle do fluxo de informa¸co˜es do micro´ esse bloco que processador para as unidades de mem´oria e para as unidades de entrada e sa´ıda. E define os sinais de controle de temporiza¸ca˜o para o sincronismo do fluxo de informa¸co˜es no sistema microcomputadorizado (p. ex.: libera¸ca˜o de informa¸co˜es da ULA para os registradores, mem´oria e unidades de entrada e sa´ıda etc.) por meio da defini¸ca˜o dos sinais de leitura (read), de escrita (write), de inicializa¸ca˜o do sistema (reset), de libera¸ca˜o dos barramentos de dados e endere¸cos, entre outros.
Unidades de Mem´ orias As unidades de mem´orias s˜ao divididas em duas partes: mem´oria de armazenamento de programa e mem´oria de armazenamento de informa¸co˜es (dados, bytes, bits etc.). a)Mem´ oria de armazenamento de programa: todo microcomputador deve ter uma a´rea de mem´oria na qual ser´a armazenado o programa que definir´a as tarefas que o microcomputador / CPU deve executar. Esse programa define a fun¸ca˜o de um microcomputador e tamb´em diz ao microcomputador, instru¸ca˜o por instru¸ca˜o, o que ele deve fazer ao longo do tempo. Esse programa deve ser implementado por um programador t´ecnico, conhecedor do hardware do sistema microcomputadorizado e das instru¸co˜es do microprocessador. O microcomputador n˜ao funcionar´a se n˜ao existir um programa armazenado em sua mem´oria de programa. Assim, uma vez energizado o microcomputador, esse programa ser´a buscado e executado pelo microprocessador. Esse programa define a caracter´ıstica funcional do microcomputador (p. ex.: operar como um forno de microondas, como uma m´aquina de lavar roupas ou como uma inje¸ca˜o eletrˆonica de autom´ovel etc.). Esse programa n˜ao pode ser perdido na ausˆencia de energia el´etrica, pois isso acarretaria a perda da funcionalidade desse microcomputador, para a qual foi projetado. Assim, o tipo de mem´oria em que esse programa deve ser armazenado ´e a mem´oria n˜ao-vol´atil. b)Mem´ oria de armazenamento de informa¸ co ˜es: todo microcomputador deve ter uma a´rea de armazenamento de informa¸co˜es. Essa mem´oria deve permitir a escrita e a leitura de informa¸co˜es. Para entender melhor, considere um microcomputador controlando uma determinada atividade. Caso existam informa¸co˜es definidas pelo mundo externo por meio de chaves, sensores, teclados etc., elas devem ser lidas e armazenadas na mem´oria, para depois serem lidas novamente e analisadas (tratadas) pelo microprocessador por meio de um programa. Como exemplo, considere o acionamento das teclas do teclado de um microcomputador, ou seja, uma vez acionada uma tecla, a CPU dever´a ler a informa¸ca˜o que foi gerada pelo hardware associado a essa tecla e executar o armaz namento dessa informa¸ca˜o na mem´oria. Depois, dever´a fazer a leitura dessa informa¸ca˜o, a fim de analis´a-la (interpret´a- la), para verificar qual tecla foi acionada. Al´em disso, a informa¸ca˜o dever´a ser mostrada no monitor de v´ıdeo. Repare que foram necess´arias, nesse exemplo, v´arias opera¸co˜es P´agina 11
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
de leitura e escrita na mem´oria, para a realiza¸ca˜o dessa tarefa. Assim, ´e preciso utilizar uma mem´oria que tenha a caracter´ıstica de realizar leitura e escrita de informa¸co˜es. Portanto, deve-se utilizar mem´orias RAM (Random Access Memory). Lembre-se de que essas mem´orias apresentam a caracter´ıstica de se- rem vol´ateis. Portanto, sempre que o microcomputador for desenergizado, as informa¸co˜es contidas nesse tipo de dispositivo ser˜ao perdidas.
Unidade de Entrada e Sa´ıda Unidade de entrada e sa´ıda (E/S): tamb´em chamada pela abrevia¸ca˜o de I/O (Input/Output), ´e respons´avel pelo interfaceamento das informa¸co˜es entre o microcomputador e o mundo externo. Geralmente s˜ao circuitos integrados (CIs) capazes de ler e armazenar as informa¸co˜es vindas do mundo externo, por exemplo, informa¸co˜es origin´arias do teclado, do canal de comunica¸ca˜o serial de um microcomputador etc.; e que tamb´em podem definir informa¸co˜es do microcomputador para o mundo externo, por exemplo, o acionamento de bips, alto-falantes, leds indicadores, displays, interfaces de comunica¸ca˜o seriais e paralelas etc.
1.3
Arquitetura do Microprocessador/Microcontrolador
Como vimos at´e aqui o microprocessador ´e um elemento eletrˆonico, desenvolvido para executar tarefas espec´ıficas, que dependem de uma linguagem pr´opria para cada fam´ılia de microprocessadores/microcontroladores. Quando falo em fam´ılias estou me referindo ao tipo de linguagem que o meu microprocessador/microcontrolador ser´a capaz de interpretar, isto quer dizer que a linguagem a qual irei utilizar no programa est´a diretamente relacionada ao modelo do meu microprocessador/microcontrolador. Podemos ter no mesmo circuito diversos tipos de fam´ılias diferentes que trabalham entre si sem problemas, desde de que se respeite o programa individual de cada um, por exemplo: o nosso celular n˜ao conecta no computador, um palm idem, s˜ao todos eles pertencentes a diversas fam´ılias, mas que interagem entre si. Assim, ao programarmos a ROM com os c´odigos compat´ıveis com a linguagem ou fam´ılia pertencentes ao microprocessador, ele ser´a capaz de executar as tarefas por esse c´odigo designadas. Cabe ao projetista entender perfeitamente o conjunto de instru¸co˜es da m´aquina (o t˜ao famoso ASSEMBLER) e a sua estrutura fisica, e de interfaces, tamb´em conhecida como hardware. Vejamos como os trˆes blocos visto at´e aqui se comunicam entre si para dar funcionalidade ao microprocessador. As vias de comunica¸ca˜o entre os blocos b´asicos s˜ao chamadas de barramentos ou do inglˆes bus. Cada barramento ´e constitu´ıdo por um n´ umero de vias (trilhas de cobre), nas quais fluem informa¸co˜es em paralelo. S˜ao trˆes os barramentos existentes: o barramento de endere¸cos, de temporiza¸ca˜o e controle e o de dados. 1.Barramento de endere¸ cos: A CPU utiliza esse barramento para definir os endere¸cos das posi¸co˜es de mem´oria de programa em que ela ir´a buscar as instru¸co˜es a serem executadas e tamb´em para definir os endere¸cos de mem´oria de dados ou dos dispositivos de entrada e saida para a troca de informa¸co˜es. Esse barramento ´e unidirecional. 2.Barramento de temporiza¸ ca ˜o e controle: A CPU utiliza esse barramento para definir os sinais de temporiza¸ca˜o e controle para gerenciar o tempo e a dire¸ca˜o do fluxo de informa¸co˜es nas opera¸co˜es de leitura e escrita nos dispositivos (unidades de mem´oria ou unidades de entrada e saida). Esse barramento ´e unidirecional. 3.Barramento de dados: A CPU utiliza esse barramento para receber as informa¸co˜es vindas da mem´oria ou dos dispositivos de entrada e saida ou ent˜ao definir as informa¸co˜es para a mem´oria ou para os dispositivos de entrada e sa´ıda. Esse barramento ´e bidirecional. Vale ressaltar que P´agina 12
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
nem todos os microprocessadores/microcontroladores n˜ao trocam informa¸co˜es diretamente com os dispositivos de entrada e saida. ´ o elemento que gera o ”marcapasso”da CPU, que permite que o microprocessador 4.Oscilador: E realize as suas tarefas internas e externas de maneira sincronizada e com velocidade predeterminada. ´ o elemento que faz a CPU iniciar suas rotinas internas e realizar tamb´em a primeira 5.Reset: E leitura de instru¸ca˜o no endere¸co 0000h. 6.Interrup¸ co ˜es: S˜ao pinos de acesso externo que permitem interromper o microprocessador, que ent˜ao interrompe suas tarefas atuais e atende aquelas planejadas pela interrup¸ca˜o solicitada.
Oscilador
Mem´oria
Microprocessador
E/S ou
Reset
Nao−Volatil (ROM)
Unidade Cental de Processamento
ou I/O
Volatil (RAM)
Interupcao
BUS Dados BUS de Temp. Controle Bus Endereco
Figura 1.2: Arquitetura b´asica de um microprocessador
Como o computador s´o interpreta c´odigos bin´arios, n˜ao existe a necessidade que n´os programadores converse no mesmo n´ıvel, podemos utilizar os outros tipos de codifica¸ca˜o Octal, Hexadecimal, Decimal e por Nomes Simb´ olicos, que representam uma instru¸ca˜o, como por exemplo: ”add”= ”Soma”= C´odigo Hexa 24 ou 00100100 em bin´ario (no exemplo, add=add A,#valor), para o microprocessador 8051. A CPU s´o entende d´ıgitos bin´arios, mas n´os a memorizarmos por ”add”, que ´e mais f´acil de se lembrar. Assim atrav´es de um software (interpretador) ir´a transformar este ”add”em 00100100, quando gravamos a ROM.
1.4
A CPU Internamente
Veremos algumas de suas funcionalidades mais importantes a)Registradores: S˜ao equivalentes a uma RAM, s´o que interna a` CPU. Servem para armazenamento tempor´ario de informa¸co˜es de utilidade interna e externa a` CPU. Existem registradores com fun¸ca˜o definida: por exemplo, aquele que ´e imagem ou espelho de uma porta de ”I/O”. O sinal na porta ¨ de I/O pode ser lido diretamente no registrador equivalente; por exemplo, a porta PO”tem um registrador imagem de ”PO”, cujo conte´ udo ´e o reflexo do que h´a na entrada f´ısica dessa porta. Existem registradores de Fun¸ca˜o Geral, que podem ser acessados pelas instru¸co˜es do Mp (microprocessador) e ainda podem ser conhecidos por nomes (registradores R0, R1 etc.) ou sem nomes (registradores 20h, 21h, etc.). P´agina 13
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
´ o indicador de endere¸co de mem´oria exb)Contador de Programa (Program Counter ou PC): E terna. Ele serve para endere¸car a pr´oxima instru¸ca˜o a ser lida pelo Mp, a fim de que ela ”saiba”onde estava e para onde deve ir (ler nova instru¸ca˜o no pr´oximo endere¸co). ´ o local para onde se dirige o c)Registradores de Instru¸ ca ˜o (Instruction Register ou IR): E c´odigo da instru¸ca˜o que foi retirada da ROM por meio do endere¸co dado pelo PC no ciclo de busca (fetch) da instru¸ca˜o da mem´oria. O IR ´e necess´ario para que, depois da busca, um decodificador possa decodificar, ”abrir”a instru¸ca˜o e envi´a-la a` unidade de processamento (ALU-Aritmetic Logic Unit), a fim de que, neste local, ela seja ”executada”. ´ o local em que a instru¸ca˜o ´e decodificada, e d)Unidade de Decodifica¸ ca ˜o (Decode Unit): E tamb´em s˜ao gerados os controles que, junto com a Unidade de Controle, permitem executar a instru¸ca˜o na ALU. ´ o local em que s˜ao realizadas e)Unidade L´ ogica e Aritm´ etica (ALU-Arithmetic Logic Unit): E ´ as opera¸co˜es de: l´ogica, aritm´etica e decis˜ao/compara¸ca˜o. E o ”c´erebro”da m´aquina. ´ um registrador principal e muito ”popular”, pois v´arias inf)Acumulador (Accumulator): E stru¸co˜es se referem a ele para operar. ´ o local em que se processa o controle do fluxo das g)Unidade de Controle (Control Unit): E informa¸co˜es a fim de realizar a instru¸ca˜o recebida. Exemplo de Funcionamento: Suponha que o Mp foi ler uma instru¸ca˜o na ROM. Os seguintes passos ser˜ao dados: 1.O endere¸co de PC ´e posto na via de endere¸co (que ´e o endere¸co desta pr´oxima instru¸ca˜o a ser lida). 2.O sinal de controle da ROM, ´e ativado (pois vamos ler a ROM e n˜ao a RAM). 3.A instru¸ca˜o ´e lida da ROM, no endere¸co dado pelo PC (no caso, o endere¸co ”n”), e ´e lida pela via de dados. Estes trˆes itens correspondem ao ciclo de busca ou fetch. 4.A instru¸ca˜o ´e carregada e armazenada no IR (Registrador de Instru¸co˜es). 5.O PC ´e incrementado para ler a pr´oxima instru¸ca˜o (apontar´a para ”n+1”). 6.Inicia-se outro ciclo, o de execu¸ca˜o interna da instru¸ca˜o, auxiliado pela Unidade de Controle e pelos registradores, decodificado pela Unidade de Decodifica¸ca˜o e executado pela ALU.
1.5
O Microcontrolador 8051
O 8051 ´e um microcontrolador r´apido com clock t´ıpico de 12 MHz sendo que existem vers˜oes de at´e 30 MHz, fornecidas por diversos fabricantes, e suas caracter´ısticas de hardware e software permitem us´a-lo como um poderoso controlador, sobretudo em sistemas para l´ogica seq¨ uencial e combinat´oria. Entre as suas caracter´ısticas de hardware, podemos destacar: 1)2 Kbytes de mem´oria de programa (Flash) 2)128 Bytes de mem´oria RAM 3)Duas portas de I/O de 8 bits 4)Comparador de tens˜ao on-chip 5)Controlador de interrup¸ca˜o de 6 entradas com estrutura Nesting* 6)Canal serial UART Full-Duplex program´avel P´agina 14
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
7)Dois contadores/temporizadores de 16 bits 8)Modos Power-Down e Power-Idle [*] ”Nesting”´e o nome que se d´a ao processo pelo qual uma interrup¸ca˜o pode interromper outra que j´a estiver sendo atendida, desde que tenha maior prioridade. Entre as caracter´ısticas de software podemos destacar a capacidade de executar complexas opera¸co˜es aritm´eticas e l´ogicas (multiplica¸ca˜o, divis˜ao, permuta, e deslocamento de bits,. . . ), trabalhar com bancos de registradores nominais e inclusive trabalhar com 128 bits individualmente endere¸ca´veis na RAM. H´a um tempo n˜ao muito distante, para realizar um projeto utilizando microcontroladores com todas estas funcionalidades, era necess´ario agrupar diversas pastilhas com as fun¸co˜es descritas anteriormente. Isto tornava prot´otipo fisicamente maior, aumentaria o consumo de energia, diminuindo a autonomia das baterias e inviabilizando a sua portabilidade que hoje s˜ao fundamentais para os sistemas embarcados. Para compreendermos melhor o 8051 torna-se necess´ario conhecer a estrutura interna do microcontrolador e estudarmos cada uma delas detalhadamente. Para isso nos dividiremos da seguinte forma: 1)Mem´oria 2)Circuito de Reset 3)Gerador de Clock 4)Controlador de Interrup¸ca˜o 5)Conjunto de Instru¸co˜es Com esta divis˜ao ficar´a mais claro definirmos todas as instru¸co˜es realizadas pelo 8051 e, o funcionamento dos demais componentes associados ao microcontrolador.
1.5.1
Mem´ oria
Vejamos, o diagrama de blocos do 89C2051 na figura 1.3. Neste diagrama de blocos, temos uma no¸ca˜o geral dos elementos internos ao 8051 e de suas liga¸co˜es com o mundo externo. A mem´oria de programa do 8051 ´e do tipo Flash ROM (E2PROM), podendo sofrer um ciclo de escrita/apagamento de 1000 vezes. Este tipo de mem´oria de programa torna as tarefas de teste e depura¸ca˜o dos programas bastante agrad´aveis, pois a antiga etapa de apagar a mem´oria em luz ultravioleta n˜ao se faz mais necess´aria. O segmento de programa da mem´oria se inicia no endere¸co 0000h e pode ocupar todos os 2048 bytes da mem´oria, a ATMEL oferece tamb´em outros modelos de microcontroladores com uma ROM interna maior para que possamos utilizar programas maiores. A mem´oria RAM se divide conforme a figura 1.4 Os registradores de fun¸co˜es especiais incluem loca¸co˜es referentes a`s portas de I/O, ponteiros do sistema, registros de interrup¸ca˜o, registros da porta serial, dos temporizadores e registros aritm´eticos. A CPU trata os registros de fun¸co˜es especiais da mesma forma que trata a RAM, podendo ali efetuar altera¸co˜es e, o mais importante, endere¸car algumas dessas posi¸co˜es como bit. Esta facilidade de endere¸car bits ´e muito interessante, pois facilita a vida do programador. Vamos supor que temos de zerar o quinto bit de uma certa posi¸ca˜o de mem´oria. O m´etodo tradicional consiste em fazer uma opera¸ca˜o AND entre o conte´ udo da mem´oria especificada e o numero bin´ario 11011111, P´agina 15
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
Figura 1.3: Organiza¸ca˜o Interna do 8051 pois 1 AND X resulta X, logo n˜ao alteramos os bits 7, 6, 4, 3, 2, 1 e 0. Mas temos que 0 AND X resulta 0, e desta forma zeramos o quinto bit. Quando o sistema trabalha com bits, basta dar uma instru¸ca˜o do tipo ”zere o bit 5 na posi¸ca˜o N”e teremos efetuado a opera¸ca˜o, sem nos preocuparmos com os demais bits. A parte baixa da mem´oria RAM interna (daqui a diante chamaremos apenas de RAM) est´a dividida em por¸co˜es distintas, que incluem 4 bancos de registradores de 8 bytes cada, uma por¸ca˜o de 16 bytes cujos bits s˜ao individualmente endere¸ca´veis pela CPU e o restante da mem´oria, que somente pode ser endere¸cado byte a byte. Os bancos de registradores s˜ao simples posi¸co˜es de mem´oria RAM que permitem seu endere¸camento pelo nome dado a cada registro, al´em de seu endere¸camento pela posi¸ca˜o de mem´oria.
P´agina 16
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
Figura 1.4: Organiza¸ca˜o da RAM Interna do 8051 A vantagem dos bancos de registradores est´a em seu uso pelo sistema, como ´ındice para endere¸camento e pela facilidade de lembran¸ca de seu nome, al´em de serem amplamente utilizados por compiladores de linguagem de alto n´ıvel. Por exemplo, ´e mais f´acil lembrar que um certo dado est´a no registro R2 do que lembrar que o mesmo est´a na posi¸ca˜o 02 de mem´oria (Supondo Banco 0).
P´agina 17
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
A sele¸ca˜o de um certo banco de registradores se d´a pelo valor dos bits RS1 e RS0 conforme a tabela a seguir: Posi¸ca˜o de Mem´oria 1F 1E 1D 1C 1B 1A 19 18 17 16 15 14 13 12 11 10 0F 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00
Nome do Registrador R7 R6 R5 R4 R3 R2 R1 R0 R7 R6 R5 R4 R3 R2 R1 R0 R7 R6 R5 R4 R3 R2 R1 R0 R7 R6 R5 R4 R3 R2 R1 R0
Bit RS1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit RS0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
BANCO
3
2
1
0
Tabela 1.1: Tabela de registradores do banco de mem´oria Conforme visto anteriormente, temos 16 bytes na RAM cujos bits s˜ao individualmente endere¸ca´veis pela CPU, conforme podemos ver pela tabela abaixo, dispostos da seguinte forma.
P´agina 18
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
7F 77 6F 67 5F 57 4F 47 3F 37 2F 27 1F 17 0F 07
Endere¸cos 7E 7D 76 75 6E 6D 66 65 5E 5D 56 55 4E 4D 46 45 3E 3D 36 35 2E 2D 26 25 1E 1D 16 15 0E 0D 06 05
Individuais dos 7C 7B 7A 74 73 72 6C 6B 6A 64 63 62 5C 5B 5A 54 53 52 4C 4B 4A 44 43 42 3C 3B 3A 34 33 32 2C 2B 2A 24 23 22 1C 1B 1A 14 13 12 0C 0B 0A 04 03 02
bits 79 71 69 61 59 51 49 41 39 31 29 21 19 11 09 01
78 70 68 60 58 50 48 40 38 30 28 20 18 10 08 00
Endere¸cos dos bytes 2F 2E 2D 2C 2B 2A 29 28 27 26 25 24 23 22 21 20
Tabela 1.2: Endere¸cos de Mem´oria endere¸cavel por byte e bit Temos tamb´em alguns registros de fun¸co˜es especiais que tˆem seus bits endere¸ca´veis, sendo que alguns deles tˆem, inclusive, um nome mnemˆonico, para maior facilidade de desenvolvimento de software em compiladores. Antes de estudarmos o mapa de mem´oria dos registros de fun¸co˜es especiais, vamos estudar cada um deles em separado para melhor compreens˜ao do funcionamento interno do 89C2051. Em seguida ao nome de cada registro, temos seu endere¸co em hexadecimal na RAM: P1 (90) - Porta P1 P3 (B0) - Porta P3 S˜ao posi¸co˜es da RAM que contˆem os dados das portas de I/O do micro, caso as mesmas sejam usadas como tal. Uma escrita num desses registros altera automaticamente o conte´ udo presente na sa´ıda do chip, e uma leitura dos mesmos coloca o estado presente nos pinos (ou nos latchs de sa´ıda, conforme veremos adiante) dentro da posi¸ca˜o desejada. Essa opera¸ca˜o ´e poss´ıvel devido aos buffers e latchs de cada porta, que s´o s˜ao ativos na leitura ou escrita das mesmas.
P´agina 19
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
SP (81) - Stack Pointer ´ um registrador de 8 bits que cont´em o endere¸co de topo de uma ”pilha”realizada com os registradores, E em que se acumulam endere¸cos de retorno, quando se trabalha com sub-rotinas e interrup¸co˜es. Vocˆe pode EMPURRAR (PUSH) dados para a pilha (STACK) ou TIRAR (POP) dados da pilha (STACK). A instru¸ca˜o PUSH incrementa o SP ”antes”de escrever os dados e a instru¸ca˜o POP lˆe o dado da pilha e ”depois decrementa”o SP. A pilha ´e formada inicialmente dentro da RAM interna quando se tem o RESET da m´aquina, e neste caso o SP ´e carregado com valor 07h. Isto ´e, qualquer dado a ser armazenado na pilha causar´a primeiro o incremento do SP, isto ´e, ir´a para 08h, e depois ser´a gravado o dado na pilha nesta posi¸ca˜o 08h. Isto ´e, ela estar´a ocupando a posi¸ca˜o 08h da RAM que ´e o registrador R0 do banco 1! Se vocˆe quiser utilizar esse banco e os outros seguintes, ´e melhor, logo de ´ınicio, carregar o SP com outro valor de ponteiro, a partir do qual ele ir´a formar a pilha.
TH1 (8D) - Timer High 1 TL1 (8B) - Timer Low 1 TH0 (8C) - Timer High 0 TL0 (8A) - Timer Low 0 S˜ao os registros de dados dos temporizadores/contadores (1 e 0 respectivamente). Contem os valores contados, no caso de usarmos as fun¸co˜es desse importante perif´erico do 89C2051.
TCON (88) - Timer Control Register TMOD (89) - Timer Mode Register ´ nestes regRegistradores de controle e de modo de opera¸ca˜o dos temporizadores/contadores. E istros que efetuamos a programa¸ca˜o de como queremos que esses perif´ericos trabalhem. Vale lembrar que o 89C2051 possui dois temporizadores/contadores internos.
PCON (87) - Power Control Este registro permite-nos adaptar o chip para situa¸co˜es em que n˜ao h´a processamento, mas n˜ao desejamos perder o conte´ udo das mem´orias internas do chip, como pode ocorrer numa falha da alimenta¸ca˜o, assim podemos controlar o consumo de energia do sistema.
SCON (98) - Serial Port Control Register SBUF (99) - Serial Buffer No SCON, colocamos os bits que nos permitir˜ao trabalhar com a porta de comunica¸ca˜o serial conforme desejamos, e o SBUF ´e o registro no qual a porta armazenar´a o dado recebido, ou escrevemos o dado a ser transmitido.
IE (A8) - Interrupt Priority IP (B8) - Interrupt Enable Estes registros permitem-nos escolher qual ou quais interrup¸co˜es ser˜ao habilitadas (ou desabilitadas) e qual a prioridade (maior ou menor) de cada uma. P´agina 20
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
PSW (D0) - Program Status Word O Program Status Word cont´em bits que indicam quais as ocorrˆencias da ALU na ultima opera¸ca˜o l´ogica e aritm´etica, alem de indicar qual banco de registradores foi acessado pela ultima vez. Equivale aos Flags dos microprocessadores de 8bits. ACC (E0) - Accumulator B (F0) Equivalem ao acumulador e ao registro B dos microprocessadores de 8 bits. O interessante aqui ´e que, inclusive os registros da CPU s˜ao acess´ıveis como simples posi¸co˜es de mem´oria.
DPH (83) - Data Pointer High DPL (82) - Data Pointer Low Estes dois registros de 8 bits podem ser referenciados como um registro de 16 bits, chamado DPTR -Data Pointer. Este registro ´e usado quando desejamos fazer endere¸camento indireto para a leitura de constantes armazenadas na mem´oria de programa, para ler ou escrever vari´aveis na mem´oria externa de dados e para desvio para mem´oria de programa de at´e 64 Kbytes. N˜ao s˜ao todos os registros de fun¸co˜es especiais que tem seus bits individualmente endere¸ca´veis. Temos na tabela abaixo, os registros e seus bits com seus respectivos endere¸cos. Assim como nos registros endere¸ca´veis (que s˜ao bytes), alguns destes bits tamb´em tem um nome mnemˆonico. Este componente possui um poderoso conjunto de instru¸co˜es que permite usar diversos modos de endere¸camento, admitindo desvios e leitura/escrita em toda a mem´oria. No momento oportuno, veremos como ´e acessada uma posi¸ca˜o de mem´oria, e tamb´em como a CPU faz para acessar fisicamente essas posi¸co˜es.
1.5.2
Circuito de Reset
´ atrav´es desta fun¸ca˜o Agora, estudaremos como se processa a opera¸ca˜o de RESET no 89C2051. E que o chip se prepara para trabalhar, seja ao ligarmos a alimenta¸ca˜o do sistema, ou for¸cosamente. Embora o RESET n˜ao seja propriamente uma interrup¸ca˜o, muitas vezes ´e assim chamado devido a` semelhan¸ca de suas a¸co˜es, j´a que o RESET interrompe o processamento e reinicializa o sistema. O RESET no 89C2051 ´e ativo quando o pino 1 (RST/VPP) permanecer em n´ıvel alto por dois ou mais ciclos de maquina. Neste caso, a CPU executa o que chamamos de reset interno, que consiste em preencher seus registros internos com os valores predeterminados, a saber:
a)O PC, o acumulador, o registro B, os flags, o DPTR e todos os registros dos temporizadores/contadores s˜ao ZERADOS. b)No SP ´e colocado o valor 07h. c)As portas P1 e P3 ter˜ao o valor FFh P´agina 21
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
E7 F7 97 B7
E6 F6 96 B6
Endere¸cos Individuais dos bits E5 E4 E3 E2 F5 F4 F3 F2 95 94 93 92 B5 B4 B3 B2
EA
ES
ET1 1 AB
EX1
AF
AC
PX1
BC
PT1 1 BB
PS
AA
BA
E1 F1 91 B1
E0 F0 90 B0
Registradores ACC B P1 P3
ET0 0 A9
EX0 0 A8
IE
PT0 0 B9
PX0 0 B8
IP
P D0
PSW
CY D7
AC D6
FD D5
RS1 D4
RS0 D3
OV D2
SM1 9F
SM2 9E
SM3 9D
REN 9C
TB8 9B
RB8 9A
T1 99
R1 98
SCON
TF1 8F
TR1 8E
TF0 8D
TR0 8C
IE1 8B
IT1 8A
IE0 89
IT0 88
TCON
Tabela 1.3: Mnemˆonicos de cada bit d)O SBUF estar´a com conte´ udo indeterminado e o registro de controle da porta serial SCON ser´a zerado. e)O registro PCON ter´a apenas seu bit mais significativo zerado. f)Os registros de controle de interrup¸ca˜o (IE e IP) ter˜ao ambos o valor bin´ario XXX00000, onde X = irrelevante (pode ser 0 ou 1).
A RAM interna n˜ao ´e afetada pelo reset for¸cado, sendo que ao ligar (power-up), o seu valor ´e aleat´orio, mas pode ser lido por software. Geralmente, ao ligarmos o sistema, desejamos que o mesmo execute uma seq¨ uˆencia de fun¸co˜es de inicializa¸ca˜o, dividida em dois blocos, inicializa¸ca˜o do sistema b´asico, que sempre ocorre no RESET, e a inicializa¸ca˜o do sistema montado, que prepara o equipamento para a opera¸ca˜o para o qual foi projetado, por exemplo, ajustando os contadores, as portas entre outros. Embora estas fun¸co˜es sejam executadas pelo software que come¸ca a rodar ap´os o RESET, no endere¸co 0000h da mem´oria de programa, costumamos cham´a-lo de rotina de inicializa¸ca˜o. O 89C2051 pode ser automaticamente resetado ao ligar a fonte, pela coloca¸ca˜o de um resistor de 8,2 kΩ entre seu pino seu pino de RESET e o terra, e pela coloca¸ca˜o de um capacitor (preferencialmente de tˆantalo) de 10 µF entre o pino e o +Vcc, o que garante que este pino estar´a em n´ıvel alto por mais de 2 ciclos de maquina ap´os a liga¸ca˜o da alimenta¸ca˜o, pois o capacitor comporta-se como um curto-circuito, provocando uma circula¸ca˜o de corrente pelo resistor, que ter´a uma tens˜ao inicial da ordem de +Vcc. Ap´os algum tempo, o capacitor ”estar´a carregado”e n˜ao circular´a mais corrente na resistˆencia, e desta forma a diferen¸ca de potencial sobre a mesma ser´a nula, garantindo que o pino RST/VPP esteja P´agina 22
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
Figura 1.5: Mapa de Registradores e Valores de Reset do 8051 no n´ıvel 0. Na eventualidade de necessitarmos provocar o reset (reset for¸cado), basta ent˜ao colocarmos uma chave de contato momentˆaneo NA (push-botton NA) em paralelo com o capacitor, e ao pressiona-la e solt´a-la teremos provocado uma nova opera¸ca˜o de reset. Na entrada, o chip possui um Schmidt Trigger para garantir rejei¸ca˜o a ru´ıdo, sendo que a sa´ıda do mesmo ´e amostrada a cada ciclo de maquina pelo hardware, para ver a ocorrˆencia de reset. Durante o reset, o n´ıvel l´ogico dos pinos ´e indeterminado, indo a n´ıvel l´ogico 1 ?ap´os? a execu¸ca˜o da rotina interna de reset, de tal forma que devemos prever esta situa¸ca˜o no projeto do hardware, para evitar acionamento indesej´avel de qualquer perif´erico externo.
P´agina 23
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
Figura 1.6: Circuito de reset
1.5.3
O Gerador de Clock
Temos duas possibilidades para excitar o sistema: clock externo ou clock interno. O uso do clock externo ajuda a economizar componentes quando do uso do sistema junto de outros que j´a possuam um sinal TTL que possa ser aproveitado, como por exemplo, para trabalho junto a contadores e outros equipamentos seq¨ uenciais r´apidos. Sua implementa¸ca˜o ´e simples, bastando desconectar o pino 4 (XTAL2) (deixar em aberto), e injetar o sinal externo no pino 5 (XTAL1), que desta forma ir´a diretamente para o sistema de controle e temporiza¸ca˜o do chip (conforme a figura 1.7).
Figura 1.7: Clock Externo para o 8051 Se utilizarmos o clock gerado pelo oscilador interno, deveremos intercalar aos pinos XTAL1 e XTAL2 um cristal ou um filtro cerˆamico (o cristal e o mais indicado) na freq¨ uˆencia desejada, e dois capacitores de realimenta¸ca˜o conforme a figura 1.8 Os valores recomendados dos capacitores s˜ao os seguintes: 40 pF +/- 10 pF para filtro ressonante de cerˆamica. 30 pF +/- 10 pF para cristal oscilador. Em qualquer caso, a freq¨ uˆencia de oscila¸ca˜o m´ınima ´e de 3.5 MHz, ´e a m´axima pode ser de 24 MHz conforme o modelo utilizado. Existem atualmente vers˜oes de outros fabricantes que trabalham com freq¨ uˆencia de 30 MHz e superiores, sendo que o seu custo tamb´em ´e relativamente superior. P´agina 24
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
Figura 1.8: Oscilador Interno Quanto ao layout do circuito deve-se destacar o fato de que as liga¸co˜es devem ser mantidas as mais curtas poss´ıveis, para evitar capacitˆancias parasitas que venham a interferir no funcionamento do circuito, assim como uma boa malha de terra deve ser providenciada em toda a placa.
Figura 1.9: Layout Recomendado para o Oscilador Interno
1.5.4
Interrup¸ c˜ ao
A interrup¸ca˜o ´e, provavelmente, uma das mais importantes ferramentas nos sistemas de controle microprocessados, pois ´e o processo pelo qual a execu¸ca˜o de um programa ´e interrompida (ou n˜ao), de acordo com as necessidades de eventos externos ou internos. Temos dessa forma, que existem trˆes fontes de interrup¸ca˜o: a interrup¸ca˜o por Software (instru¸ca˜o), a pedida por perif´erico externo e a interrup¸ca˜o pedida por perif´erico interno (timer/counter, porta serial, etc. . .). A interrup¸ca˜o ´e um sinal, gerado de uma das trˆes formas acima descritas, que pede para a CPU parar o processamento corrente e efetuar outro, referente a` interrup¸ca˜o solicitada, desde que a mesma esteja habilitada e possa ser aceita. A vantagem da interrup¸ca˜o est´a na simplifica¸ca˜o do Hardware, pois n˜ao precisamos fazer com que nosso sistema fique monitorando o funcionamento de certos dispositivos perif´ericos. Por exemplo, nos computadores did´aticos simples, e mesmo em alguns sistemas industriais, o teclado ´e um perif´erico que ´e lido constantemente pelo monitor do sistema, para verificar se alguma tecla foi ou n˜ao apertada. P´agina 25
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
J´a nos computadores da linha IBM-PC, isso n˜ao ocorre, pois o teclado ´e um perif´erico inteligente, que possui um microcontrolador interno que, caso uma tecla seja pressionada, pede uma interrup¸ca˜o ao microprocessador para poder enviar o c´odigo da tecla pressionada para o mesmo. Muitas vezes as entradas de interrup¸ca˜o s˜ao as principais entradas do sistema. Para o perfeito entendimento das interrup¸co˜es, devemos antes relembrar os seguintes conceitos: a)Mascaramento ´ a possibilidade de impedirmos, geralmente por Software, que uma certa interrup¸ca˜o seja atendida. E Existem sistemas que possuem interrup¸co˜es n˜ao-mascar´aveis, ou seja, jamais podem ser desabilitadas por Software. b)Prioridades No caso do sistema poder atender mais de uma interrup¸ca˜o, devemos ter uma tabela de seq¨ uˆencia de prioridades, para que o microprocessador saiba como agir, no caso de duas ou mais interrup¸co˜es chegarem simultaneamente. c)Interrup¸ca˜o Vetorada e N˜ao Vetorada As interrup¸co˜es vetoradas s˜ao aquelas que possuem o vetor de interrup¸ca˜o (endere¸co de in´ıcio da ´ o caso do 8051, onde cada vetor de ininterrup¸ca˜o) fixo, e n˜ao pode ser mudado pelo usu´ario. E terrup¸ca˜o j´a est´a definido pelo fabricante. As interrup¸co˜es n˜ao vetoradas s˜ao aquelas nas quais os endere¸cos de desvios do programa s˜ao escolhidos pelo programador, como ´e o caso do COP 68705.U3 da Motorola, por exemplo. d)Tipo de Ativa¸ca˜o das Interrup¸co˜es Existem trˆes maneiras pelas quais um sistema pode reconhecer um sinal l´ogico: •Pelo n´ıvel (alto ou baixo). •Pela borda de subida ou de descida. •Pela soma de borda (subida ou descida) e um n´ıvel correspondente.
Estudo das Interup¸ co ˜es no 8051 0 8051 pode ser interrompido de 5 maneiras: 1)Pela interrup¸ca˜o externa INTO\; 2)Pela interrup¸ca˜o externa INT1\; 3)Pelo timer/counter interno TIMER0; 4)Pelo timer/counter interno TIMER1; 5)Pelo canal de comunica¸ca˜o serial. O canal serial e as interrup¸co˜es externas usam alguns pinos da porta trˆes, conforme a seguir: 1.Porta 3, pino 0 = Receptor de dados seriais (RX); P´agina 26
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
2.Porta 3, pino 1 = Transmissor de dados seriais (TX); 3.Porta 3, pino 2 = Entrada da interrup¸ca˜o externa INTO\;. 4.Porta 3, pino 3 = Entrada da interrup¸ca˜o externa INT1\. ˜ OBSERVAC ¸ AO: Dessa forma, se usarmos algumas dessas interrup¸co˜es, devemos tratar a porta trˆes como porta de I/O apenas bit endere¸ca´vel. No 8051, cada interrup¸ca˜o pode ser individualmente habilitada ou n˜ao, e podemos tamb´em desabilitar todas de uma s´o vez. As interrup¸co˜es podem ter apenas dois n´ıveis de prioridade, e dessa forma, se duas ou mais ocorrerem ao mesmo tempo (algo ”praticamente”imposs´ıvel), a de maior prioridade ser´a atendida primeiro. Caso uma interrup¸ca˜o de prioridade 0 (menor) esteja em andamento, uma interrup¸ca˜o de prioridade 1 (maior) interromper´a aquela e ser´a atendida. Ao seu fim, a CPU retorna ao atendimento da interrup¸ca˜o de n´ıvel 0 que foi interrompida. Este Microcontrolador possui ainda um processo de prioridade interno, para o caso de duas interrup¸co˜es de mesma prioridade estarem aguardando atendimento. Neste caso, esta ´e a ordem de atendimento das interrup¸co˜es (IP): 1)Interrup¸ca˜o Externa 0 −→ Maior prioridade Timer 0 2)Interrup¸ca˜o Externa 1 Timer 1 Se a interrup¸ca˜o que chegar for de n´ıvel igual ou menor da que j´a est´a sendo atendida, ficar´a aguardando o fim desta para ser servida. Quando atende uma interrup¸ca˜o, 0 8051 salva no Stack o valor do PC, ”mas n˜ao salva o acumulador e o registro Program Status Word (PSW)”. Os mesmos devem ser salvos e devolvidos pela rotina de interrup¸ca˜o, se assim for necess´ario, assim como qualquer outro registro importante.
Endere¸ cos de Desvio Neste Microcontrolador, cada interrup¸ca˜o ´e desviada para um certo endere¸co fixo, no qual come¸ca a nossa rotina de interrup¸ca˜o. S˜ao os seguintes os endere¸cos de desvio: 1.INT0\ −→ 03h 2.Timer/Counter 0 −→ 0Bh 3.INT1\ −→ 13h 4.Timer/Counter 1 −→ 1Bh Como vimos, o Reset inicia em 00h, e desta forma, por exemplo, se usarmos todas as interrup¸co˜es teremos que usar os trˆes Bytes dispon´ıveis para o reset, num desvio incondicional para outra parte da mem´oria, onde realmente teria in´ıcio o programa. P´agina 27
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
As interrup¸co˜es INT0\, Timer/counter 0, INT1\ e Timer/counter 1 possuem apenas 8 Bytes dispon´ıveis antes de sobrepor se com a pr´oxima, e desta forma, provavelmente, deveremos efetuar um desvio para outra parte da mem´oria, sendo a u ´ nica exce¸ca˜o a interrup¸ca˜o do canal serial, que por ser au ´ ltima n˜ao se sobrep˜oe a nenhuma outra. Temos na figura 1.10, um mapa parcial da mem´oria de programa com destaque para os endere¸cos de desvio de cada interrup¸ca˜o. 00h 01h 02h 03h 04h 05h 06h .. . 0Ah 0Bh 0Ch 0Dh .. . 11h 12h 13h 14h .. . 1Ah 1Bh 1Ch 1Dh .. . 22h 23h 24h 25h
←−
Inicio
←−
End. de INT0\
Diferen¸ca de 8 bits
←−
↓ End. do Timer/Counter 0
←−
End. de INT1\
←−
End. do Timer/Counter 1
←−
End. do Canal Serial
Figura 1.10: Mapa parcial da mem´oria de programa do 8051 com destaque ao in´ıcio das interup¸co˜es
P´agina 28
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
1.5.5
Registro de Controle das Interrup¸ co ˜es
O 8051 possui dois registro de 8 bits cada um, na sua mem´oria RAM mais alta (Registros de Fun¸co˜es especiais-SFR) que servem para habilita¸ca˜o ou n˜ao das interrup¸co˜es, e indica para a CPU a prioridade de cada uma delas. Sempre que uma interrup¸ca˜o ´e requisitada, um certo bit de controle dessa interrup¸ca˜o ser´a setado e assim permancer´a at´e que essa interrup¸ca˜o seja atendida. Exce¸ ca ˜o ´ e a esta regra ´ e a interrup¸ ca ˜o serial, que deve ter seu bit de controle resetado pelo Software. O primeiro de todos estes registros ´e o IE que tem por fun¸ca˜o indicar qual das interrup¸co˜es est´a ou n˜ao habilitada.Vejamos a figura 1.11 Bit 7 EA
X
X
ES
... ET1
EXT1
ET0
Bit 0 EX0
Figura 1.11: Resgistro IE EA - Enable All: Localizado no bit n´ umero 7, significa habilitar todos. Quando o em n´ıvel 0, desabilita todas as interrup¸co˜es de forma geral, independente de qualquer outro controle. Se em n´ıvel 1, permite-nos escolher qual interrup¸ca˜o em particular ser´a habilitada, em fun¸ca˜o dos bits de controle individuais a seguir. ES: Enable Serial: Localiza-se no bit 4, significa habilitar a serial, quando em n´ıvel l´ogico 1, libera a interrup¸ca˜o pedida pelo canal serial. ET1 - Enable Timer 1: Localiza-se no bit 3, significa habilitar a interrup¸ca˜o do timer 1 e quando em n´ıvel l´ogico 1, libera a interrup¸ca˜o pedida pelo Timer/Counter 1. EX1 - Enable External 1: Localiza-se no bit 2, significa habilitar a interrup¸ca˜o externa (INT1\ e quando em n´ıvel l´ogico 1, libera a interrup¸ca˜o pedida pelo dispositivo externo ligado a INT1\. ET0 - Enable Timer 0: Localiza-se no bit 1, significa habilitar a interrup¸ca˜o do timer 0 e quando em n´ıvel l´ogico 1, libera a interrup¸ca˜o pedida pelo Timer/Counter 0. EX1 - Enable External 0: Localiza-se no bit 0, significa habilitar a interrup¸ca˜o externa (INT0\ e quando em n´ıvel l´ogico 1, libera a interrup¸ca˜o pedida pelo dispositivo externo ligado a INT0\. Prioridade Natural das interrup¸ co ˜es 1.INT0\ 2.TIMER/COUNTER0 3.INT1\ 4.TIMER/COUNTER1 5.Serial Veremos agora o registro IP, nele fixaremos qual o n´ıvel de prioridade de nossas interrup¸co˜es. Vejamos o formato deste registro. PS: Priority Serial: Localiza-se no bit 4, significa prioridade serial, quando em n´ıvel l´ogico 1, indica prioridade alta a` interrup¸ca˜o gerada pelo canal serial, se a mesma estiver habilidade. Quando P´agina 29
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
Bit 7 X
X
X
PS
... PT1
PX1
PT0
Bit 0 PX0
Figura 1.12: Resgistro IP em n´ıvel 0, indica prioridade baixa. PT1 - Priority Timer 1: Localiza-se no bit 3, significa prioridade do timer 1 e quando em n´ıvel l´ogico 1, indica prioridade alta a` interrup¸ca˜o gerada pelo Timer/Counter 1, se a mesma estiver habilidade. Quando em n´ıvel 0, indica prioridade baixa. PX1 - Priority External 1: Localiza-se no bit 2, significa habilitar a interrup¸ca˜o externa (INT1\ e quando em n´ıvel l´ogico 1, indica prioridade alta a` interrup¸ca˜o externa 1, se a mesma estiver habilidade. Quando em n´ıvel 0, indica prioridade baixa. PT0 - Priority Timer 0: Localiza-se no bit 1, significa prioridade do timer 0 e quando em n´ıvel l´ogico 1, indica prioridade alta a` interrup¸ca˜o gerada pelo Timer/Counter 0, se a mesma estiver habilidade. Quando em n´ıvel 0, indica prioridade baixa. PX1 - Priority External 0: Localiza-se no bit 0, significa habilitar a interrup¸ca˜o externa (INT0\ e quando em n´ıvel l´ogico 1, indica prioridade alta a` interrup¸ca˜o externa 0, se a mesma estiver habilidade. Quando em n´ıvel 0, indica prioridade baixa.
P´agina 30
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
Veremos como ´e o registrador PSW (Program Status Word) Lembrando que neste registrador representa o status da u ´ ltima opera¸ca˜o realizada no acumulador, vejamos a seguinte figura 1.13 Bit 7 PSW.7 CY
Bit 6 PSW.6 AC
Bit 5 PSW.5 F0
Bit 4 PSW.4 RS1
Bit 3 PSW.3 RS0
Bit 2 PSW.2 OV
Bit 1 PSW.1 -
Bit 0 PSW.0 P
Figura 1.13: Resgistros bit a bit do PSW ´ um indicador de ”vai um”em opera¸co˜es aritm´eticas: vai para 1 quando uma soma CY - Carry E com A ”estoura”na sua capacidade (isto ´e, o s´etimo bit ou ACC.7 vai um para uma pr´oxima casa que n˜ao existe; seria um nono bit, que ´e um ”estouro”da conta). Vai para ”1”se existir um empr´estimo do 7 bit no caso de uma subtra¸ca˜o com o acumulador. Por exemplo: Se ACC=FFh e ap´os isto aparece a instru¸ca˜o: acc A,#01h: A soma de FFh com 01h far´a com que o resultado de A seja 00h e ”vai 1”para o carry, isto ´e,”CY”´e setado no registrador PSW. O carry ”CY”tamb´em ´e utilizado como se fosse o ”acumulador para um s´o bit”. Existem v´arias instru¸co˜es booleanas que usam o ”C”, isto ´e, o carry, como operando, em que se posiciona o resultado das opera¸co˜es. Por exemplo: anl C,ACC.0: Executa um AND booleano entre o carry e o bit ACC.0. O resultado da opera¸ca˜o fica em ”C”(ele ´e equivalente ao acumulador para opera¸ca˜o com bytes), isto ´e, o resultado volta para ele mesmo. ´ um indicador de ”vai um”entre os quatro primeiros bit do acumulador, AC - Auxiliary Carry E isto ´e, ´e o ”vai um”de um ”nible”para outro ”nible”do acumulador. Isto ´e muito u ´ til em aritm´etica BCD em que os nibbles que correspodem a 4 bits s˜ao representados por um n´ umero codificado em bin´ario, mas que representa um decimal de 0 a 9. ´ um bit registrador de uso geral, n˜ao tem nenhuma fun¸ca˜o especial e n˜ao indica nada.(literalmente Flag 0 E ”sobrou”dentro do PSW, sem fun¸ca˜o) RS1 e RS0 S˜ao dois bits que fazem mudar o banco de registradores a que se referem os nomes R0 a R7, utilizados nas instru¸co˜es que trabalham com esses registradores (por ex.: mov A,R0 = move para o ”A”o conte´ udo de ”R0”; mas qual R0? Os bits RS0 e RS1 ´e que dizem a qual R0 de qual banco est´a se referindo).Vejamos na tabela 1.4 RS1 0 0 1 1
RS0 0 1 0 1
BANCO Banco 0 Banco 1 Banco 2 Banco 3
Tabela 1.4: Sele¸ca˜o do banco de registradores pelos bit do PSW Quando se d´a o reset da m´aquina, ele aponta para o banco 0, isto ´e, as instru¸co˜es que se referirem a R0,R1,. . .R7 est˜ao se referindo ao ”Rn”do banco O. Podemos utilizar a mudan¸ca de bancos e usar os mesmos apelidos de R0 a R7 para o outro banco, ou usar o endere¸co absoluto de cada registrador. Em geral, deixa-se que o microcontrolador aponte para o banco 0 direto e os outros registradores utilizam os endere¸cos absolutos deles, s´o para n˜ao ter i trabalho de mudar toda hora de banco. Isto depende do gosto do programador.Quando se ”reseta”a m´ aquina, os bits RS1 e RS0 ficam em 00h, isto ´ e, est˜ ao se referindo ao banco 0.
P´agina 31
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
´ um bit que vai para 1 quando, ap´os um adi¸ca˜o ou subtra¸ca˜o, acontece um ”estouro”da OV E conta. Resultados maiores que +127 ou menores que -128 ”setar˜ao”o bit ”OV”. Paor exemplo: 0F +7F 8E
⇒ ⇒ e ”OV”
+15 +127 +142
Note que 8E ´e -116, que n˜ao ´e a resposta desejada +142, por isto OV ´e setado. PSW.1 N˜ao ´e um bit dispon´ıvel ao usu´ario. P - Parity Bit que ´e ”setado”em ”1”quando a paridade do conte´ udo do acumulador ´e par. Por exemplo, seja A, contendo os seguintes dados: Observa¸ ca ˜o: Paridade ´e o resultado par ou ´ımpar do somat´orio bin´ario do acumulador. A=
N de ”1s” 1001
= ´Impar 1110
−→
P=1
A=
N de ”1s” 1001
= ´Impar 1111
−→
P=0
´ u E ´ til quando se trabalha com o canal serial, pois ele muitas vezes necessita desta informa¸ca˜o. Outra maneira de saber se P ´e ”1”ou ”0”, ´e pensar que a soma dos bits ”1”do acumulador mais o ”P”tem sempre que ser par.
1.5.6
Tempo para Atendimento das Interrup¸ co ˜es
Um certo tempo decorrer´a entre o reconhecimento da interrup¸ca˜o, altera¸co˜es nos registros internos e efetivo desvio para o endere¸co. O melhor caso ocorre quando uma interrup¸ca˜o chega pouco antes dos u ´ ltimos 14 per´ıodos de clock, que correspondam ao final da instru¸ca˜o; a pr´oxima instru¸ca˜o n˜ao seja multiplica¸ca˜o ou divis˜ao; e temois mais 24 per´ıodos de clock para a chamada da sub-rotina. Estes tempos incorrem em atraso de 38 per´ıodos de clock ou 3.2 µs para um clock de 12 MHz. O pior caso ocorre se a interrup¸ca˜o chegar ap´os os 14 u ´ ltimos per´ıodos da instru¸ca˜o em vigor, e se a pr´oxima instru¸ca˜o for multiplica¸ca˜o ou divis˜ao, que consomem 48 per´ıodos de clock, que resulta num atraso de 86 per´ıodos, ou 7.2 µs para clock de 12 MHz.
1.5.7
Ajuste das Interrup¸ co ˜es Externas para serem Ativas em N´ıvel ou Transi¸ c˜ ao
Podemos ajustar as interrup¸co˜es externas para serem detectadas por transi¸ca˜o de 1 para 0, ou pelo n´ıvel 0. Os bits de controle das interrup¸co˜es externas est˜ao no registro TCON (Controle do Timer), e os que nos interessam s˜ao os quadro bits menos significativos. Bit 7
... IE1 IT1
IE0
Bit 0 IT0
Figura 1.14: Resgistro TCON com os bits relevantes a`s interrup¸co˜es IT0 - Interrup¸ ca ˜o Externa 0 (INT0\) : Localizado no bit 0 do TCON, indica qual o processo para a chamada da interrup¸ca˜o INT0\ ser´a aceita na transi¸ca˜o de 1 para 0 do n´ıvel pino, devendo permanecer em 0 por pelo menos 12 per´ıodos de clock. Se em n´ıvel 0, INT0\ ser´a aceita apenas pelo n´ıvel 0 presente no pino. P´agina 32
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
IE0 - Habilita¸ ca ˜o da Interrup¸ ca ˜o Externa 0 (INT0\): Bit para o hardware de controle da interrup¸ca˜o INT0\, localiza-se no bit 1. Este bit ´e setado pelo Hardware interno quando for detectada uma transi¸ca˜o de 1 para 0 no pino INT0\. Tem por fun¸ca˜o sinalizar internamente o pedido da ´ resetado logo que a interrup¸ca˜o seja atendida. interrup¸ca˜o. E IT1 - Interrup¸ ca ˜o Externa 1 (INT1\) : Localizado no bit 2 do TCON, indica qual o processo para a chamada da interrup¸ca˜o INT1\ ser´a aceita na transi¸ca˜o de 1 para 0 do n´ıvel pino, devendo permanecer em 0 por pelo menos 12 per´ıodos de clock. Se em n´ıvel 0, INT1\ ser´a aceita apenas pelo n´ıvel 0 presente no pino. IE1 - Habilita¸ ca ˜o da Interrup¸ ca ˜o Externa 1 (INT1\): Bit para o hardware de controle da interrup¸ca˜o INT1\, localiza-se no bit 3. Este bit ´e setado pelo Hardware interno quando for detectada uma transi¸ca˜o de 1 para 0 no pino INT1\. Tem por fun¸ca˜o sinalizar internamente o pedido da ´ resetado logo que a interrup¸ca˜o seja atendida. interrup¸ca˜o. E Como vimos, se a interrup¸ca˜o for ativa pela transi¸ca˜o, ´e a esta que a CPU dever´a detectar para atender a` interrup¸ca˜o, por isso temos que esperar um per´ıodo de 12 ciclos de clock, porque na amostragem anterior, a CPU detectou n´ıvel 1 e agora devemos esperar que a mesma detecte o n´ıvel 0. J´a na detec¸ca˜o por n´ıvel, a entrada dever´a estar em n´ıvel 0, apenas durante a amostragem que ocorre ao fim de cada instru¸ca˜o executada. O interessante ´e que neste caso, o pino pode permanecer em n´ıvel 0 durante a execu¸ca˜o da rotina de interrup¸ca˜o, mas deve estar em n´ıvel 1 ao fim desta, sen˜ao o sistema atender´a novamente a` interrup¸ca˜o, visto que na amostragem da u ´ ltima instru¸ca˜o da rotina, encontrar´a este pino em n´ıvel adequado para a interrup¸ca˜o, o que n˜ao ocorre no caso anterior, pois l´a ˜ do n´ıvel 1 para o O. a CPU deve sentir a TRANSIC ¸ AO
1.5.8
Hardware para expandir as possibilidade de Interrup¸ c˜ ao Externa
Na figura 1.15, temos uma porta AND de 8 entradas na qual todas as NOVAS 8 entradas de interrup¸ca˜o estar˜ao ligadas. Estas 8 entradas tamb´em est˜ao ligadas a um lacth, por exemplo o 74LS374. A sa´ıda desta porta ser´a ligada diretamente ao pino de interrup¸ca˜o externa INT0\, por exemplo, e tamb´em a um inversor, e da´ı ao ”gate”do lacth, e as sa´ıdas do lacth est˜ao ligadas a` porta P1. Caso ocorra uma transi¸ca˜o de 1 para 0 na porta AND, teremos sua sa´ıda indo para o n´ıvel 0 tamb´em, ocasionando o pedido de interrup¸ca˜o e ”travando”o estado dos pinos I1 a I8 no lacth.cc No momento do atendimento da interrup¸ca˜o, o valor a ser lido na porta P1 conter´a o estado dos bits que geraram a interrup¸ca˜o, e uma rotina verificar´a qual bit est´a em 0. Este bit ´e respons´avel pelo pedido de interrup¸ca˜o, e basta ao Software encarregar-se de executar a rotina apropriada.
P´agina 33
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi +Vcc
I8
7430
INT0\
I1
8051
D0 D1 D2 D3 D4 D5 D6 D7
Q0 Q1 74LS374 Q2 Q3 Q4 Q5 Q6 Q7
P1.0
P1.7
Figura 1.15: Detalhe do Hardware para expandir o n´ umero de interrup¸co˜es.
1.5.9
Exerc´ıcios Resolvidos
Quest˜ ao 1 No microcontrolador da fam´ılia 8051, programar as palavras IE (Interrupt Enable), IP (Interrupt Priority) e TCON (Timer Control) de modo a: a)INT1\ seja habilitado na m´axima prioridade. b)Timer/Counter1 seja habilitado em segunda prioridade. c)INT0\ seja habilitado na terceira prioridade. d)Serial e Timer/Counter0 n˜ao habilitadas. Passo a):Interrup¸co˜es liberadas pela palavra IE INT0,INT1 e Timer1 liberados Bit EA - Enable All ligado Timer0 e Serial desativadas EA 1
0
0
ES 0
ET1 1
EX1 1
ET0 0
EX0 1
Assim carrega-se o valor 8Dh para a palavra IE atrav´es do seguinte comando: MOV IE,8Dh Pbsso b):Prioridade programadas pela palavra IP INT1 e Timer1: alta prioridade INT0: baixa prioridade P´agina 34
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
-
-
-
PS X
PT1 1
PX1 1
PT0 X
PX0 0
Quest˜ ao 2 Obter a outra representa¸ca˜o do endere¸co do bit 5Dh? (Ver tabela 1.2) Solu¸ca˜o: •Transformar o endere¸co do bit de hexadecimal para decimal 5 ∗ 16 1 + 13 ∗ 160 = 9310 •Dividir o valor do endere¸co em decimal (93 10 ) por 8 → 93/8, obtendo o quociente q=11 10 e o resto r=510 •Transformar o quociente (q) e o resto (r) em hexadecimal: q=11 10 =Bh e r=510 =5h. •Aplicar a f´ormula: 5Dh = [20h+Bh]h.5=2Bh.5, ou seja, o endere¸co do bit 5 ´e igual a 2Bh.5. Para transformar o endere¸co de um bit da representa¸ca˜o 2Xh.Y para ZWh(2Xh.Y−→ZWh),basta seguir o procedimento: •Obter o quociente e o resto. O quociente (q) ´e obtido subtraindo 2Xh de 20h e transformando-o em decimal, e o resto ´e obtido atrav´es do n´ umero ap´os o ponto (.) de tal representa¸ca˜o. Multiplicando o quociente em decimal por 8 e somando com o resto em decimal, obt´em-se o endere¸co em decimal. O valor do endere¸co em decimal deve ser transformado para hexadecimal. Quest˜ ao 3 Obter a outra representa¸ca˜o do endere¸co do bit 2Ah.3? (Ver tabela 1.2) •Obter o quociente (q) e o resto (r): q= 2Ah - 20h = Ah e r=3h. •Transformar q e r de hexadecimal para decimal: q=Ah = 1010 e r 3h = 310 •Multiplicar o quociente por 8 e somar o resultado com o resto em decimal: 10*8+3=83 10 •Transformar o endere¸co de decimal para hexadecimal: 83 10 = 5 ∗ 161 + 3 ∗ 160 =53h Quest˜ ao 4 Defina o tipo de endere¸camento de cada uma das instru¸co˜es dadas a seguir: a)ADDC A,20h Resposta: Endere¸camento direto. b)MOV @R0,55h Resposta: Endere¸camento combinado (misto), formado pelos endere¸camentos direto e indireto ou indexados por registrador. c)MOV R7,6Ah Resposta: Endere¸camento indireto, pois R7 (Rn) ´e um registrador indexado (mnemˆonico). Quest˜ ao 6 Crie um programa que fa¸ca a opera¸ca˜o OR-Exclusivo entre o conte´ udo do acumulador (A) e a constante 33h. O resultado deve ser armazenado no conte´ udo do registrador R5 do segundo banco de registradores. Resposta: XRL A,#33h (A)←−(A)or-ex #33h MOV PSW,#08h (PSW)←−#08h=#00001000 =⇒ (RS1)=0 e (RS0)=1=⇒ define o segundo banco de registradores (B1). MOV R5,A Armazena, no conte´ udo do registrador R5 do segundo banco de registradores, o conte´ udo do acumulador A.
P´agina 35
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
1.5.10
Conjunto de Instru¸ co ˜es
Instru¸ co ˜es Aritm´ eticas Mnemˆ onico ADD A,Rn
Opcode
Fun¸ ca ˜o
SUBB A,#DADO INC A INC Rn
Soma o conte´ udo de Rn ao acumulador Soma o conte´ udo da posi¸ca˜o de mem´oria ao acumulador Soma o conte´ udo da RAM endere¸cada por Ri ao acumulador Soma o dado ao acumulador Soma o conte´ udo de Rn e o carry ao acumulador Soma o conte´ udo da posi¸ca˜o de mem´oria e o carry o acumulador Soma o conte´ udo da RAM endere¸cada por Ri e o carry ao acumulador Soma o dado e o carry ao acumulador Subtrai o conte´ udo de Rn e o Borrow do acumulador Subtrai o conte´ udo da posi¸ca˜o de mem´oria e o Borrow do acumulador Subtrai o conte´ udo da RAM endere¸cada por Ri e o Borrow do acumulador Subtrai o dado e o Borrow do acumulador Soma 1 ao acumulador Soma 1 ao conte´ udo de Rn
INC DIRETO INC @Ri
Soma 1 a´ posi¸ca˜o de mem´oria Soma 1 a´ RAM endere¸cada por Ri
DEC A DEC Rn
Subtrai 1 do acumulador Subtrai 1 do conte´ udo de Rn
DEC DIRETO DEC @Ri
Subtrai 1 da posi¸ca˜o de mem´oria Subtrai 1 da RAM endere¸cada por Ri Soma 1 ao registrador DPTR Multiplica A e B resultado: BA Divide A e B resultado: A inteiro B resto Ajuste decimal do acumulador
ADD A,Direto ADD A,@Ri ADD A,DADO ADDC A,Rn ADDC A,DIRETO ADDC A,@Ri
ADDC A,#DADO SUBB A,Rn SUBB A,DIRETO SUBB A,@Ri
INC DPTR MUL AB DIC AB DA A
Bytes
Clocks
Flags Afetados
B
1
12
CY ?
H
2
12
?
?
?
0010/011iB
1
12
?
?
?
24 0011/1 abc 35
H B
2 1
12 12
? ?
? ?
? ?
H
2
12
?
?
?
0011/011iB
1
12
?
?
?
34
H
2
12
?
?
?
1001/1 abc 95
B
1
12
?
?
?
H
2
12
?
?
?
1001/011iB
1
12
?
?
?
94
H
2
12
?
?
?
04 H 0000/1 B abc 05 H 0000/011 B i 14 H 0001/1 B abc 15 H 0001/011 B i A3 H A4 H 84 H
1 1
12 12
-
-
-
2 1
12 12
-
-
-
1 1
12 12
-
-
-
2 1
12 12
-
-
-
1 1 1
24 48 48
0 0
?
? 0
1
12
?
?
-
0010/1 abc 25
D4
P´agina 36
H
AC ?
OV ?
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
Opera¸ co ˜es L´ ogicas Mnemˆ onico
Opcode
Fun¸ ca ˜o
ANL A,Rn
”e”entre registro e acumulador
ANL A,DIRETO ANL A,@Ri
”e”entre mem´oria e acumulador ”e”entre RAM indireta e acumulador ”e”entre dado e acumulador ”e”entre acumulador e mem´oria. Resultado na mem´oria ”e”entre dado e mem´oria
ANL A,#DADO ANL DIRETO,A ANL DIRETO,#DADO ORL A,Rn ORL A,DIRETO ORL A,@Ri ORL A,#DADO ORL DIRETO,A ORL DIRETO,#DADO XRL A,Rn XRL A,Direto XRL A,@Ri XRL A,#DADO XRL DIRETO,A XRL DIRETO,#DADO CRL A CPL A RL A RL C RR A RRC A SWAP A
”ou”entre registro e acumulador ”ou”entre mem´oria e acumulador ”ou”entre RAM indireta e acumulador ”ou”entre DADO e acumulador ”ou”entre acumulador e mem´oria. Resultado na mem´oria ”ou”entre DADO e mem´oria ”ou exclusivo”entre registro e acumulador ”ou exclusivo”entre mem´oria e acumulador ”ou exclusivo”? entre RAM indireta e acumulador ”ou exclusivo”entre dado e acumulador ”ou exclusivo”entre acumulador e mem´oria. Resultado na mem´oria ”ou exclusivo”entre dado e mem´oria Faz A = 0 Inverte o estado dos bits do acumulador Desloca o acumulador a` esquerda Desloca o acumulador a` esquerda atrav´es do carry Desloca acumulador a` direita Desloca acumulador a` direta atrav´es do carry Troca os nibbles do acumulador. Equivale a 4 RR A ou 4 RL A
Bytes
Clocks
Flags Afetados
0101/1 B abc 55 H 0101/011iB
1
12
CY -
2 1
12 12
-
-
-
54 52
H H
2 2
12 12
-
-
-
53
H
3
12
-
-
-
0100/1 B abc 45 H 0100/011iB
1
12
-
-
-
2 1
12 12
-
-
-
44 42
H H
2 2
12 12
-
-
-
43
H
3
12
-
-
-
0110/1 abc 65
B
1
12
-
-
-
H
2
12
-
-
-
0110/011iB
1
12
-
-
-
64
H
2
12
-
-
-
62
H
2
12
-
-
-
63
H
3
12
-
-
-
E4 F4
H H
1 1
12 12
-
-
-
23 33
H H
1 1
12 12
?
-
-
03 13
H H
1 1
12 12
?
-
-
C4
H
1
12
-
-
-
P´agina 37
AC -
OV -
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
Opera¸ co ˜es de Transferˆ encia de Dados
Mnemˆ onico
Opcode
Fun¸ ca ˜o
MOV A,Rn
Move o registro para o acumulador
MOV A,Direto MOV A,@Ri MOV A,#DADO MOV Rn,A
Move mem´oria para o acumulador Move RAM endere¸cada por Ri ao acumulador Move o dado para o acumulador Move o acumulador para o registro
MOV Rn,Direto
Move mem´oria para o registro
MOV Rn,#DADO MOV Direto,A MOV Direto,Rn
Move o dado para o registro
MOV Direto1,Direto2 MOV Direto,@Ri MOV Direto,#DADO MOV @Ri,A MOV @Ri,Direto
Move acumulador para a mem´oria Move o registro para a mem´oria Mova o conte´ udo da mem´oria Direta2 para Direta1 Move RAM endere¸cada por Ri para a mem´oria Move o dado para a mem´oria Move o acumulador para a RAM endere¸cada por Ri Move a mem´oria para a RAM endere¸cada por Ri Move o dado para a RAM indireta
MOV @Ri,#DADO MOV Move dado de 16 bits para o DPTR DPTR,#DADO16 MOVC A, @A + Soma A + DPTR obtendo um enDPTR dere¸co de 16 bits na mem´oria de programa. Carrega acumulador com esta mem´oria MOVC A, Idem ao anterior, mas soma A + PC @A+PC MOVX A,@Ri Move RAM externa (End. 8 bits) para o acumulador MOVX A, Move RAM externa (End. 16 bits) @DPTR para o acumulador MOVX @Ri, A Move o acumulador para a RAM externa (End. 8 bits) MOVX @DPTR, Move o acumulador para a RAM exA terna (End. 16 bits)
1110/1 B abc E5 H 1110/0111B
Bytes
Clocks
Flags Afetados CY
AC
OV
1
12
-
-
-
2 1
12 12
-
-
-
H B
2 1
12 12
-
-
-
B
2
24
-
-
-
B
2
12
-
-
-
H B
2 2
12 24
-
-
-
H
3
24
-
-
-
1000/011iB
2
24
-
-
-
75
H
3
24
-
-
-
1111/011iB
1
12
-
-
-
1010/011iB
2
24
-
-
-
0111/011iB
2
12
-
-
-
90
H
3
24
-
-
-
93
H
1
24
-
-
-
83
H
1
24
-
-
-
1110/001iB
1
24
-
-
-
E0
H
1
24
-
-
-
1111/001iB
1
24
-
-
-
F0
1
24
-
-
-
74 1111/1 abc 1010/1 abc 0111/1 abc F5 1000/1 abc 85
OBS: Continua na pr´oxima p´agina . . . P´agina 38
H
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
Mnemˆ onico PUSH Direto POP Direto XCH A,Rn XCH A,Direto XCH A,@Ri XCHD A,@Ri
Opcode
Fun¸ ca ˜o Incrementa o SP e ent˜ao coloca a mem´oria no stack Retira dado do stack e coloca na mem´oria, depois decrementa SP Troca entre si o conte´ udo do acumulador e do registro Troca mem´oria com acumulador Troca RAM indireta com acumulador Troca nibble menos significativo do acumulador e da RAM indireta entre si
Bytes
Clocks
Flags Afetados
C0
H
2
24
CY -
AC -
OV -
D0
H
2
24
-
-
-
1100/1 B abc C5 H 1100/011iB
1
12
-
-
-
2 1
12 12
-
-
-
1101/011iB
1
12
-
-
-
Opcode
Bytes
Clocks
Instru¸ co ˜es para Vari´ aveis Booleanas Mnemˆ onico CLR C CLR bit SETB C SETB bit CPL C CPL bit ANL C,bit ANL C,/bit ORL C,bit ORL C,/bit MOV C,bit MOV bit,C JC rel JNC rel JB bit,rel JNB bit,rel JBC bit,rel
Fun¸ ca ˜o Zera o Carry Zera o bit endere¸cado Seta o carry Seta o bit endere¸cado Inverte o estado do carry Inverte o estado do bit endere¸cado ”e”entre o bit endere¸cado e o carry ”e”entre o complemento do bit endere¸cado e o carry ”ou”entre o bit endere¸cado e carry ”ou”entre o complemento do bit endere¸cado e o carry Move o bit endere¸cado para o carry Move o carry para o bit endere¸cado Desvia se o carry estiver setado Desvia se o carry estiver zerado Desvia se o bit endere¸cado estiver setado Desvia se o bit endere¸cado estiver zerado Desvia se o bit endere¸cado estiver setado e depois zera o bit
Flags Afetados
C3 C2 D3 D2 B3 B2 82 B0
H H H H H H H H
1 2 1 2 1 2 2 2
12 12 12 12 12 12 24 24
CY 0 1 ? ? ?
72 A0
H H
2 2
24 24
? ?
-
-
A2 92 40 50 20
H H H H H
2 2 2 2 3
12 24 24 24 24
? -
-
-
30
H
3
24
-
-
-
10
H
3
24
-
-
-
P´agina 39
AC -
OV -
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Le˜ ao Filardi
Instru¸ co ˜es de Desvio Mnemˆ onico ACALL END11 LCALL END16 RET RETI AJMP END11 LJMP END16 SJMP rel JMP @A + DPTR JZ rel JNZ rel CJNE A,Direto, rel CJNE A,#Dado,rel CJNE Rn,#Dado,rel CJNE @Ri,#Dado, rel DJNZ Rn, rel DJNZ Direto, rel NOP
Opcode
Fun¸ ca ˜o Chama sub-rotina numa faixa de 2kbytes da atual posi¸ca˜o Chama sub-rotina em qualquer posi¸ca˜o da mem´oria de programa Retorne da sub-rotina Retorne da interrup¸ca˜o Desvia para outro endere¸co numa faixa de 2kbytes da atual posi¸ca˜o Desvia para qualquer posi¸ca˜o da mem´oria de programa Desvio curto relativo Desvia para o endere¸co obtido da soma do acumulador e do DPTR Desvia se o acumulador for zero Desvia se o acumulador n˜ao for zero Compara e desvia se o acumulador for diferente da mem´oria endere¸cada Compara e desvia se o acumulador for diferente do dado Compara e desvia se o registro for diferente do dado Compara e desvia se a RAM indireta for diferente do dado Decrementa o registro e desvia se for diferente de zero Decrementa a mem´oria e desvia se for diferente de zero Nenhuma Opera¸ca˜o
Bytes
Clocks
Flags Afetados
-
-
2
24
CY -
AC -
OV -
12
H
3
24
-
-
-
22 32 -
H H -
1 1 2
24 24 24
-
-
-
02
H
3
24
-
-
-
80 73
H H
2 1
24 24
-
-
-
60 70 B5
H H H
2 2 3
24 24 24
?
-
-
B4
H
3
24
?
-
-
1011/1 B abc 1011/011iB
3
24
?
-
-
3
24
?
-
-
1101/1 abc D5
B
2
24
-
-
-
H
3
24
-
-
-
00
H
1
12
-
-
-
P´agina 40
Cap´ıtulo 2
Segunda Unidade Dispositivos do 8051 2.1
Ciclos de M´ aquina
Como vimos na unidade passada o clock ´e o rel´ogio interno do microprocessador para a execu¸ca˜o sequencial de qualquer atividade interna ou externa a` m´aquina, ou seja, ´e o elemento que gera e controla os ciclos de trabalho da m´aquina. Cada ciclo de oscila¸ca˜o chamaremos de ”P”de pulso. A cada dois pulsos ”P”caracteriza-se um estado ”S”. Uma sequˆencia de seis estados, S1 a S6, corresponde a um ciclo de m´aquina. Todas as atividades internas e externas do microprocessador s˜ao comandadas por esses pulsos e seus seis estados. Um ciclo de m´ aquina se constitui de seis estados (S1 a S6) que, por sua vez, correspondem a doze pulsos P do ”clock”. 1 Ciclo de Maquina Estados S1
P1
S2
P2
1 Estado
P1
S3
P2
P1
S4
P2
P1
S5
P2
P1
S6
P2
2 Pulsos
P1
P2
X
Figura 2.1: Ilustra¸ca˜o de um ciclo de m´aquina do MSC8051 Por exemplo, o instante marcado como ”X”na figura ´e o ”S6P1”. Assim podemos ter um linguagem comum de defini¸ca˜o de instantes de um ciclo de m´aquina. Cada pulso P1 depende da frequˆencia do clock. Por exemplo, se o circuito oscilador for a cristal de 12MHz, teremos um ciclo de m´aquina = 12 x (Per´ıodo de Clock) = 12 x (1/12*10 6 )= 1µs.
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
2.2
Portas de I/O
Temos no 8051 quatro grupos de sa´ıdas denominados de PORTS, s˜ao eles P0,P1,P2 3 P3, comforme a vers˜aoo do 8051 utilizado. No 8051 (ROM Interna) temos todos os quatro ports dispon´ıveis; no 8031 (EPROM Externa) s´o temos os ports P1 e P3 dispon´ıveis como ”I/O”. Cada port tem oito linhas que podem ser programadas como entrada ou como sa´ıda, ou trabalhar com os perif´ericos internos.
2.2.1
Princ´ıpio de Funcionamento e Utiliza¸ c˜ ao
O uso das linha de I/O ´e simples e necessita apenas de que escrevamos o valor desejado (na caso de utiliza¸ca˜o como sa´ıda), ou efetuarmos a leitura (no caso de entrada). Se o dado presente numa porta configurada como entrada variar, a varia¸ca˜o n˜ao ser´a sentida pelo sistema, at´e que efetuemos uma nova leitura dessa entrada. Isto ocorre porque cada linha ´e, na realidade, um Buffer tri-state de um bit. J´a no caso da escrita, temos associado a esta linha um flip-flop D (latch) de um bit. Na figura 2.2, temos um esquema simplificado de um bit de I/O, que nos ajudar´a a compreender o funcionamento da porta. Os circuitos reais s˜ao ligeramente diferentes para cada uma das portas, e mais complexos do que o apresentado aqui, mas para fins dit´aticos e de entendimento este diagrama b´asico ´e suficiente. LE LATCH
VIA DE DADOS INTERNA
ESCREVE
D
CLK
Q
+
Q
PINO
LE PINO
Figura 2.2: Diagrama em blocos simplificado de um pino de I/O Quando escrevemos um bit na porta, o mesmo vai pela via interna at´e a entrada D do flip-flop, e ent˜ao um pulso de clock em CLK coloca este bit em Q, que atrav´es da eletrˆonica associada leva este n´ıvel ao pino externo. J´a no caso da leitura, algumas instru¸co˜es lˆeem o pino enquanto outras lˆeem o estado do latch, em Q. As instru¸co˜es que lˆeem o latch s˜ao aquelas que costumam ler, modificar e reescrever o bit, a saber : INC, DEC, CPL, JBC, DJNZ, ANL, ORL, XRL, MOV Px.n,C, CLR Px.n e ainda SETB Px.n, conforme vimos na unidade anterior. As demais instru¸co˜es de acesso aos ports lˆeem o estado presente nos pinos. E dai, qual a diferen¸ca ent˜ao? Vamos supor que temos a base de um transistor NPN sendo acionada pelo pino de I/O. Quando escrevemos 1 neste pino o transistor entrar´a em condu¸ca˜o, e se a CPU ler o estado deste pino para eventual confirma¸ca˜o, ler´a a tens˜ao na base do transistor e interpretar´a como n´ıvel ZERO, ent˜ao neste P´agina 42
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
caso deve ser lido o valor de latch, que estar´a corretamente indicando n´ıvel UM. Um exemplo simples de conex˜ao das linhas seria um sistema que em fun¸ca˜o de um certo bit, por exemplo o bit 5 da porta 3 (escrito como P3.5), far´a com que os leds colocados nos 8 pinos da porta 1 sejam acesos sequencialmente, conforme o estado daquele bit. Na figura 2.3, temos um diagrama simples para este exemplo, e a seguir o Software simb´olico para esta fun¸ca˜o.
P´agina 43
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi +
+
+
P1.0 P1.1
8051
P1.7
+
P3.5
Figura 2.3: Exemplo simples de utiliza¸ca˜o ´ SOFTWARE SIMBOLICO Inicio: Faz acumulador = 00000001 bin´ario Lebit: Se P3.5 = 0 ent˜ao roda acumulador a` esquerda (coloca o bit D0 em D1, e assim por diante, at´e colocar o bit D7 em D0). move acumulador para a porta 1 perde um tempo volta para ”lebit” Sen˜ao (s´o pode ser P3.5 =1) roda acumulador a` direita (coloca o bit D7 em D6, e assim por diante, at´e colocar o bit D0 em D7). move acumulador para a porta 1 perde um tempo volta para ”lebit”
P´agina 44
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
Port P0 O P0 ´e uma estrutura de port bidirecional. Um certo pino ”i”do port Po ´e tomado como ilustra¸ca˜o. O barramento interno do MC ´e utilizado para ler/escrever no latch interno, ou ler o pino f´ısico ”P0.i”em quest˜ao. Quando se utiliza uma instru¸ca˜o que ”escreve”um valor no Port P0.i, o dado se apresenta na entrada D do flip-flop. Um pulso de ”escreve”(o ”CLK”do flip-flop) ´e imposto no fli-flop, que transfere esse dados a`s sa´ıdas ”Q”e ”Q”do latch. O sinal de ”controle”atua para permitir que esse dado saia fisicamente no pino P0.i. Este sinal de controle simboliza o gerenciamento que esse port tem para apresentar o dado fisicamente a` sa´ıda. Existem instru¸co˜es que lˆeem o conte´ udo armazenado no latch. Existem instru¸co˜es que lˆeem o estado diretamente do pino. Em geral, as instru¸co˜es que ”lˆeem o latch”s˜ao do tipo ”READ-MODIFY-WRITE”, isto ´e, lˆe o conte´ udo do latch, modifica conforme a instru¸ca˜o imposta e escreve de novo no latch. S˜ao as instru¸co˜es INC, DEC, CPL, JBC, DJNZ, ANL, ORL e XRL. Quando P0 ´e usado como port, ´e como se ele fosse ”dreno aberto”, isto ´e, devemos utilizar resistores de ”Pull-Up”nesses pinos para podermos excitar devidamente o ambiente externo ao MC. Quando ele ´e usado apenas para controle de mem´oria externa, esses resistores n˜ao s˜ao necess´arios, e neste caso o port P0 ´e visto como um port ”Tri-State”. O port P0 ´e multiplexado entre ”dados”e ”endere¸cos”quando gerencia mem´oria externa e, ent˜ao, utiliza o pino ALE para captar o endere¸co em um latch externo ao MC.
Port P1 Para finalizar este item, basta dizer que as possibilidades de uso destas linha de I/O s˜ao praticamente ilimitadas, ficando a cargo do projestista desenvolver novas aplica¸co˜es para tal. Os ports 1,2 e 3 possuem pull-ups internos e s˜ao chamadas de quase bidirecionais. Esta caracter´ısticas faz com que seus pinos tenham sempre um estado definido, ou seja, 0 ou 1, de forma que mesmo quando as usamos como entrada, podemos medir seu n´ıvel como se fosse de sa´ıda. Os ports P1 e P3 podem ser configurados, pino a pino (bit a bit), ou totalmente (byte) como entrada ou sa´ıda. N˜ao se pode esquecer que o port P3 ´e ut´ılizado como meio de comunica¸ca˜o externa entre os perif´ericos ”Timers”e ”Serial”e ent˜ao os p´ınos s´o estar˜ao dispon´ıveis para I/0, dependendo de utilizar ou n˜ao os perif´ericos desse Mc. O port 0 n˜ao possui estas caracter´ısticas, e quando configurada como entrada, ter´a seu n´ıvel flutuando na ausˆencia de n´ıvel fixo no pino. Entretanto, para todos os efeitos de uso, podemos considerar as portas como simples portas de I/O bidirecionais como veremos a seguir.
2.2.2
Caracter´ısticas Gerais e de Tempo dos Ports
Instru¸ co ˜es que Alteram diretamente o Conte´ udo dos Ports ´ necess´ario ter cuidado com as instru¸co˜es do tipo ”Read-Modify-Wr`ıte”citadas neste item, quando E s˜ao manipuladas diretamente com os ports. Por exemplo, a opera¸ca˜o: orl P1,#11111110b ; vai executar a leitura do Port P1 pelo ”latch”, vai operar a instru¸ca˜o ”OR”com o dado e devolver o resultado em P1. Se a inten¸ca˜o ´e s´o realizar uma ”m´ascara”para ler o bit ”P1.0”, esta instru¸ca˜o est´a sendo mal aplicada, pois ela, al´em de realizar a m´ascara, pos valor ”1”em todos os outros bits do port P1, alterando seus valores originais! P´agina 45
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
Assim, se queremos s´o uma ”m´ascara”, devemos operar ”fora de P1”, isto ´e: mov A,Pi ;lˆe P1 e carrega em A orl A,11111110b ;faz a ”m´ascara”sem alterar P1 Esta e outras instru¸co˜es abaixo listadas correm este ”perigo”de utiliza¸ca˜o e precisamos saber exatamente o que queremos antes de aplic´a-las direto aos ports: Instru¸ca˜o e Forma B´asica INC DEC CPL JBC DJNZ ANL ORL XRL
Fun¸caˆo Exemplo INC P1 DEC P3 CPL P1 JBC P1.0,#XX DJNZ P1,#XX ANL PO,A ORL PO,A XRL P1,#XX
Tabela 2.1: Instru¸co˜es que afetam diretamente os ports quando aplicadas junto a eles.
Condi¸ co ˜es de Tempo Envolvendo os Ports Cada pino do port ´e amostrado perto da ”descida”do pulso ”ALE”no instante de leitura de in´ poss´ıvel que, se o pino, neste instante, estiver em stru¸ca˜o, entre o per´ıodo S5 do ciclo de m´aquina. E transi¸ca˜o, o Mc possa ler dado errado. Quando se ”escreve”um dado no latch do pino do port, ele j´a aparece efetivamente na sa´ıda do latch durante o per´ıodo S6P2 do u ´ ltimo ciclo de m´aquina necess´ario para finaliza¸ca˜o da referida instru¸ca˜o. Assim, s´o aparecer´a fisicamente no pino, no instante S1P1 do pr´oximo ciclo de m´aquina. Observe que s´o se pode ler com confiabilidade um dado no pino do port que fique presente por tempo acima de 1 valor de ”S”(com clock de 12 MHz teremos → per´ıodo S ¿ 1 µs ou genericamente, per´ıodo maior que 1 ciclo de m´aquina).
2.2.3
Uso das Portas de I/O para a Expans˜ ao da Mem´ oria de Dados e Programa
As portas 0 e 2 possuem como fun¸ca˜o alternativa, endere¸car mem´oria extema, para que possamos expandir a capacidade de dados e de programas no 8051. Neste caso, a porta 2 fornece a parte alta do endere¸co (A8-A15) e a porta 0 fornece, multiplexada no tempo, a parte baixa de endere¸co (AO-A7) e a via de dados (DO-D7). 0 pino 30 fornece o sinal ALE, que habilitar´a o latch de endere¸cos a segurar a parte baixa do mesmo, para que os dados possam transitar peia porta 0. Os outros sinais de controle s˜ao o PSEN\, o RD\ e o WR\. 0 sinal PSEN\ habilita a sa´ıda da mem´oria de programa (permite a (eitura na Eprom externa) de forma que ´e ativo quando a CPU deseja ler programa da mem´oria externa. Neste instante, os sina´ıs RD\ e WR\ est˜ao em n´ıvel 1. Os sinais RD\ e WR\ somente s˜ao ativos caso a CPU execute instru¸co˜es de leitura e escrita na mem´oria de dados externa (lembre-se de que as instru¸co˜es para mem´oria externa s˜ao diferentes das instr´ uc¸o˜es para mem´oria interna). Temos ent˜ao, que para leitura o pino RD\ ir´a a n´ıvel 0, mantendo ˜ GERo pino WR\ = 1, e vice-versa para escrita. LEMBRETE: OS SINAIS RD\ E WR\ S AO ´ DE PINOS DA PORTA 3 CONFORME VEREMOS NO ITEM 2.2.5 ADOS ATRAVES P´agina 46
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
2.2.4
Sele¸ c˜ ao de Programa Externo ou Interno
O pino 31 tem a fun¸ca˜o EA\ (extemal address) e quando em n´ıvel 1 diz a` CPU para procuraros primeiros 4 KBytes de programa intemamente, e o que exceder esta mem´oria ser´a procurado extemamente. Quando em n´ıvel 0, informa a` CPU que deve procurar todos os passos de programa externamente, ignorando a mem´oria interna. ˜ OBSERVAC ¸ AO: N˜ao confundir este pino com o bit EA, presente no registro IE. Esta ´e a op¸ca˜o utilizada quando se usa o 8031, que ´e um 8051 mas que n˜ao tem a ROM interna, ou quando n˜ao se deseja arcar com as despesas de encomendar grande quantidade de pe¸cas do 8051 gravadas em f´abrica. ´ DEVE FICAR CLARO QUE QUANDO SE UTILIZA MEM ORIA EXTERNA DE PROGRA˜ ˜ MAS, EM QUALQUER OPC ¸ AO NAO PODEREMOS MAIS UTILIZAR OS PINOS DAS PORTAS 0 E 2 COMO I/0. Na figura 2.4, temos um esquema de Hardware onde colocamos 8 KBytes de programa e 8 KBytes de dados externos, sendo que neste caso, temos toda a mem´oria de programa externa, utilizando 0 8031. RD\ 1 0 1 0
WR\ 1 1 0 0
Fun¸ca˜o Espera Lendo na RAM Escrevendo na RAM N˜ao ocorre
Tabela 2.2: Tabela de Acesso a` RAM.
Figura 2.4: Sele¸ca˜o Externa
2.2.5
Uso dos Pinos da Porta 3 como fun¸ co ˜es Alternativas
A porta 3, conformej´a foi visto, pode ter seus pinos usados de forma independente como pinos de fun¸co˜es especiais. Por exemplo, para a expans˜ao de mem´oria de dados vista acima, s˜ao dois pinos da porta 3 que fomecem os sinais RD\ e WR\ para controle. Quando usamos os temporizadores internos como contadores de eventos, s˜ao outros dois pinos desta porta que servem como entrada para o sinal de contagem. Se nosso projeto necessitar de interrup¸ca˜o extema, ser´a atrav´es de dois pinos desta porta que as mesmas ser˜ao sinalizadas a` CPU. E finalmente, nos dois pinos restantes, temos os que permitem a implementa¸ca˜o do canal serial. A maneira pela qual utilizamos ou n˜ao uma fun¸ca˜o especial da porta 3, ser´a vista no momento em que a estudarmos o canal serial. Com rela¸ca˜o aos pinos RD\ e WR\ s˜ao os u ´ nicos com os quais n˜ao precisamos nos preocupar, pois seu controle ´e efetuado pela CPU, e fica claro que se desejamos utilizar mem´oria de dados externa, n˜ao utilizaremos estes pinos como I/0. ˜ CASO QUALQUER UMA DAS FUNC ¸ OES ESPECIAIS ESTEJA SENDO UTI˜ LIZADA, NAO PODEREMOS MAIS ACESSAR A PORTA 3 COMO PORTA DE I/0 ´ PARA BYTE, APENAS COMO BIT ENDEREC ¸ AVEL. P´agina 47
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
2.2.6
Capacidade de Corrente nos Pinos de I/O
A porta 0, devido a`s suas caracter´ısticas de constru¸ca˜o de dreno aberto (open-drain), pode fomecer ou absorver 2 cargas TTL, e as portas 1, 2 e 3 podem absorver ou suprir uma carga TTL.
2.3
Modos de Endere¸ camento das Instru¸ co ˜es
As instru¸co˜es operam com dados que podem ser endere¸cados de v´arias formas, motivo pelo qual devemos saber muito bem os modos de endere¸camento que o microprocessador aceita. No caso da fam´ılia 8051/52, etc, disp˜oe-se dos seguintes modos:
1.Registrador 2.Direto 3.Indireto 4.Imediato 5.Relativo 6.Absoluto 7.Longo 8.Indexado
2.3.1
Endere¸ camento por Registrador
As instru¸co˜es do 8051, quando se referem a registradores internos do microcontrolador, apresentamse como oito registradores com nomes R0, R1, R2, R3, R4, R5, R6 e R7. 0 nome gen´erico destes registradores ´e Rn. Por exemplo: add A,RO: Soma o conte´ udo de ”A”com o conte´ udo de ”RO”e o resultado fica em ”A”. N˜ao se esque¸ca que, neste caso, precisamos saber antes para qual banco est´a apontado o microcontrolador (nos bits PSW.4 e PSW.3). As instru¸co˜es que trabalham com registradores, acusam-no com o nome gen´erico ◦ Rn”, em que ”n◦ ´e o registrador espec´ıfico (n = 0 a 7). Este tipo de instru¸ca˜o ´e codificado em apenas 1 byte.
OP CODE
RN
1 BYTE
2.3.2
Endere¸ camento Direto
As instru¸co˜es do 8051, que usam endere¸camento direto, referem-se aos registradores internos da RAM do microprocessador pelo seu ”mnemˆonico”(apelido) ou seu endere¸co absoluto. Por exemplo: a) mov A,P3: Move para ”A◦ o conte´ udo do registrador ”P3”, que ´e o mesmo que o port f´ısico P3. b) mov A,30h: Move para ”A”o conte´ udo do registrador. interno de endere¸co 30h. Este tipo de instru¸ca˜o ´e codificado em 2 bytes. P´agina 48
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
OP CODE
END. DIRETO
2 BYTE
2.3.3
Endere¸ camento Indireto
As instru¸co˜es do 8051, que usam endere¸camento indireto, fazem uso de um registrador, que s´o pode ser o RO ou R1, para se referir a outra posi¸ca˜o de mem´oria RAM. Por isto que ´e indireto: o registrador RO ou R1 aponta para um endere¸co, isto ´e, ele cont´em o endere¸co de outra posi¸ca˜o de mem´oria. Utiliza-se o s´ımbolo ” ◦ para indicar que a opera¸ca˜o ´e de endere¸co indireto. O nome gen´erico desse registrador indireto ´e Ri (i = 0 ou 1). Por exemplo: Supondo que temos na posi¸ca˜o ”30h”da RAM interna o valor ”05”em hexa e queremos nos referir a` posi¸ca˜o 30h indiretamente pelo registrador ”R1 ”, podemos fazer (vide figura 2.5)
RAM INT CONTEUDO Posicao de Memoria 05
30h
MOV A,@R1
A=05
CONTEUDO
R1
30
01h 00h
Figura 2.5: Ilustra¸ca˜o da opera¸ca˜o de endere¸camento indireto
•mov 30h,#05h: Carrego a pos´ı¸ca˜o da RAM interna de endere¸co ”30h”, com o valor ”05”(conte´ udo=05).
•mov R1,#30h: Carrego o registrador ”R1”com o valor ”30”(conte´ udo=30h).
•mov A,@Rl: Carrego ou movo para ”A”o conte´ udo da mem´oria apontada por R1,que ´e 30h, isto ´e, ele sabe que ´e endere¸co indireto. Logo, ele sabe que o valor ”30h”dentro de R1 ´e um endere¸co e n˜ao um conte´ udo. Assim, ele vai na posi¸ca˜o de mem´oria com endere¸co ”30h”, pega P´agina 49
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
o conte´ udo de ”30h”, que ´e ”05”, e carrega em A.Logo, A = 05 e n˜ao A = 30; entendeu?
Olhando a ilustra¸ca˜o da figura 2.5 deste item para melhor compreens˜ao e leia este texto de novo. Este tipo de instru¸ca˜o ´e codificado em 1 byte.
OP CODE
Ri
1 BYTE
2.3.4
Endere¸ camento Imediato
As instru¸co˜es do 8051, quando se referem a endere¸camento imediato, significam que o c´odigo da instru¸ca˜o j´a ´e codificado junto com uma constante, chamado ”dado imediato”. Operandos do tipo imediato s˜ao precedidos do sinal ”#”. Por exemplo: •mov A,#25: Move para A o valor 25 em decimal. •mov A,#25h: Move para A o valor 25 em hexadecimal. •mov A,#00100101b: Move para A o valor 25h em bin´ario. •mov DPTR,#1FFFh: Move para o DPTR, o endere¸co ”1FFF”em hexadecimal. As instru¸coˆes deste tipo s˜ao de 2 bytes, ou de 3 bytes quando se usa o DPTR.
OP CODE
VALOR IMEDIATO
1 BYTE
1 OU 2 BYTES
Au ´ nica exce¸ca˜o ´e a `ınstru¸ca˜o [mov DPTR,#data(16)], que ´e de 3 bytes, pois o endere¸co dela ´e de 2 bytes (16 bits).
2.3.5
Endere¸ camento Relativo
As instru¸co˜es do 8051, com endere¸camento relativo, s˜ao utilizadas com instru¸co˜es que permitem realizar um ”pulo”direto no passo cadenciado de um programa. Este endere¸co relativo (chamado ”offset”) ´e um dado de 8 b`ıts com s`ınal, `ısto ´e, realiza um salto relat`ıvo ao endere¸co que est´a no Program Counter, PC, de -128 a +127 pos`ı¸co˜es. Este endere¸co relativo ´e l`ıgado a` instru¸ca˜o por um outro byte. Antes de achar o endere¸co f`ınal de salto, o PC ´e incrementado ao endere¸co da pr´oxima instru¸ca˜o e este ´e o endere¸co ao qual se soma o endere¸co relativo: vide ilustra¸ca˜o seguinte, pois a explica¸ca˜o verbal ´e muito dif´ıcil de absorver. Vejamos o exemplo:
P´agina 50
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi CODIGO NA ROM 0100 0101 0102 0103 0104 0105 0106 0107 0108
ROM
SJMP DESVIO= Salto pequeno para ¨ DESVIO¨ Exemplo 1: 80 DESVIO = 8003h
80 03
Endereco de DESVIO=03 Codigo do comando
xx
PC (Apos o inicio da instrucao SJMP 03=8003h)
PC+3
OBS: Em geral, n˜ ao fazemos estas contas, pois o compilador, quando usamos ”labels”(nomes) como desvio, calcula tudo isto sozinho automaticamente. As instru¸co˜es deste tipo s˜ao de 2 bytes
OP CODE
2.3.6
PONTO RELATIVO
Endere¸ camento Absoluto
Instru¸co˜es do 8051, que se utilizam de endere¸co absoluto, s˜ao as ACALL e AJMP. S˜ao instru¸co˜es de 2 bytes que permitem desvio de at´e 2 Kbytes relativo, em apenas 2 bytes (endere¸co total da faixa teria que ser em 3 bytes; n˜ao ´e?).
2.3.7
Endere¸ camento Longo
As instru¸co˜es no 8051, que usam endere¸camento do tipo longo, s˜ao LCALL e LJMP. Permitem endere¸camento de 16 bits que mapeia todo o espa¸co dispon´ıvel de endere¸cos (64 Kbytes). A u ´ nica desvantagem destas instru¸ co ˜es ´ e que elas consomem 3 bytes de programa, o que s´ o ser´ a um problema quando o processo exigir tempo de execu¸ ca ˜o muito pequeno (em que 1 µs a mais ou a menos ´e vital, por exemplo). Tem o problema, tamb´em, de ser um endere¸co absoluto que n˜ao muda; logo, se vocˆe necessita executar esse programa em outra parte do espa¸co de mem´oria, deve repensar neste endere¸co absoluto, ou se utilizar sempre de ”labels”na cria¸ca˜o do programa, para que, na compila¸ca˜o, o compilador acerte os endere¸cos absolutos para vocˆe. Este tipo de instru¸ca˜o consome 3 bytes:
2.3.8
Endere¸ camento Indexado
As instru¸co˜es do 8051, que usam endere¸camento do tipo indexado, s˜ao JMP ou MOVC em uma de suas formas. S˜ao instru¸co˜es cujo endere¸co de destino depende n˜ao s´o do endere¸co inserido na ´ melhor explic´a-los com um exemplo: instru¸ca˜o, mas tamb´em do conte´ udo de ”A”naquele instante. E jmp @A+DPTR: Salta para a posi¸ca˜o dada pelo DPTR + conte´ udo de ”A”, isto ´e, o ”A”pode ser um contador de passos e o DPTR um ponteiro de faixas. Supondo que: ”DPTRH = meses do ano e ”An = dias do mˆes. Logo, o DPTR aponta para a ucabe¸ca”da tabela de cada mˆes, e em ”A”eu insiro 0 ”´ındice”do dia do mˆes desejado. Assim, se vario ”An, j´a estou alterando o dia daquele mˆes fixo, sem alterar mais o DPTR. P´agina 51
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
2.4 2.4.1
Temporizadores e Contadores Introdu¸ c˜ ao
O 8051 tem dois registros contadores de 16 bits, denominados TIMER 0 e TIMER 1, dedicados a`s fun¸co˜es de contagem e temporiza¸ca˜o (counter/timer-contador/temporizador). H´a uma importante distin¸ca˜o entre os conceitos de contador e temporizador. Quando opera como temporizador, o registro ´e incrementado a cada ciclo de m´aquina (usa como base o cristal da CPU). O sinal de contagem aparece com 1/12 da freq¨ uˆencia do clock. Quando opera como contador, o registro ´e incrementado de acordo com o sinal que se coloca nas entradas T1 e T0, ou seja, o contador opera a cada transi¸ca˜o de 1 para 0 (borda de descida ↓) na entrada T0 ou T1. Deve-se ter um cuidado quando em opera¸co˜es em modo contador: j´a se sabe que as entradas s˜ao amostradas durante S5P2 de cada ciclo de m´aquina (figura 2.1). Quando em um ciclo de m´aquina a entrada ´e detectada em 1 e depois em 0, no pr´oximo ciclo o contador ´e incrementado. O incremento acontece em S3P1 do ciclo seguinte ao que foi detectada a transi¸ca˜o. Para garantir que o n´ıvel correto tenha sido amostrado, ´e necess´ario que o sinal de entrada (o sinal que vai acionar os contadores) permane¸ca pelo menos um ciclo de m´aquina em n´ıvel alto e pelo menos outro ciclo de m´aquina em n´ıvel baixo, quer dizer, a m´axima freq¨ uˆencia que responder´a o contador ´e de 1/24 da freq¨ uˆencia de clock. O sinal de entrada pode ter qualquer ”duty cycle”, desde que se respeite a restri¸ca˜o antes mencionada.
2.4.2
Registros Envolvidos
Dois registros SFR s˜ao utilizados para controlar as fun¸co˜es e opera¸co˜es do temporizador/contador: em TMOD especifica-se o modo de opera¸ca˜o e em TCON controla-se a opera¸ca˜o. A figura 2.6 ilustra o registro TMOD e a figura 2.7 ilustra o registro TCON.
P´agina 52
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
Figura 2.6: Descri¸ca˜o do Registro TMOD GATE →
especifica como ser´a 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´a usado para controlar o funcionamento do contador/temporizador ⇒ pode ser usado para medir a largura de pulsos externos ligados a INT0 ou INT1)
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 m´aquina)
M1 0 0 1 1
M0 0 1 0 1
→ → → → → → →
seleciona o modo de opera¸ca˜o: THi ´e temporizador/contador de 8 bits e TLi ´e um pre-scaler de 5 bits, THi e TLi formam um temporizador/contador de 16 bits, contador/temporizador de 8 bits com auto-recarga (TLi conta e THi valor para recarga), 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)
P´agina 53
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
Figura 2.7: Descri¸ca˜o do Registro TCON TF1 →
TR1 → TF0 →
TR0 → IE1 →
IT1 →
E0 →
IT0 →
flag de transbordamento (overflow) do contador/temporizador 1. Ativado por hardware ´ apagado por hardware quando o processamento quando h´a transbordamento no timer 1. E ´e desviado para a rotina de interrup¸ca˜o. bit de partida/parada (run/stop) do contador/temporizador 1. flag de transbordamento (overflow) do contador/temporizador 0. Ativado por hardware ´ apagado por hardware quando o processamento quando h´a transbordamento no timer 0. E ´e desviado para a rotina de interrup¸ca˜o. bit de partida/parada (run/stop) do contador/temporizador 0. flag da interrup¸ca˜o externa 1. Ativada por hardware quando ´e detectada uma interrup¸ca˜o. Apagado por hardware (somente se for modo borda) quando a interrup¸ca˜o ´e processada, ou seja, quando se desvia para a rotina de interrup¸ca˜o. indica se a interrup¸ca˜o externa 1 opera por borda ou por n´ıvel: 1 → borda de descida (↓), 0 → n´ıvel baixo. flag da interrup¸ca˜o externa 0. Ativada por hardware quando ´e detectada uma interrup¸ca˜o. Apagado por hardware (somente se for modo borda) quando a interrup¸ca˜o ´e processada, ou seja, quando se desvia para a rotina de interrup¸ca˜o. indica se a interrup¸ca˜o externa 0 opera por borda ou por n´ıvel: 1 → borda de descida (↓), 0 → n´ıvel baixo.
P´agina 54
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
2.4.3
Modos de opera¸ c˜ ao
Os dois contadores/temporizadores (timer1 e timer0) podem trabalhar em 4 modos de opera¸ca˜o que s˜ao selecionados empregando os bits M1 e M0 do registro TMOD. Os modos 0, 1 e 2 s˜ao iguais para os 2 contadores/temporizadores mas o modo 3 ´e diferente.
Modo 0 Este modo ´e idˆentico para os dois contadores/temporizadores. Neste modo tem-se um contador de 8 bits com um divisor (pre-scaler) de 5 bits. Resulta ent˜ao em um contador/temporizador de 13 bits, compat´ıvel com o que havia no MCS-48. Os 13 bits s˜ao formados pelos 8 bits do registro THi e pelos 5 bits menos significativos do registro TLi. Os outros 3 bits do TLi s˜ao indeterminados. O transbordamento (overflow) ´e gerador quando a contagem faz a transi¸ca˜o de 1FFFH para 0000; neste instante ativa-se o bit de overflow (TF1 ou TF0). A figura 2.8 apresenta um diagrama em blocos do contador/temporizador 1 operando em modo 0. A mesma figura ´e v´alida para o contador/temporizador 0. O controle da contagem ´e simples: •se GATE = 0, TR1 controla o contador/temporizador (controle por software) •se GATE = 1, TR1 e INT1 controlam o contador/temporizador (permite tamb´em um controle externo por hardware)
Figura 2.8: Diagrama de Blocos para o TIMER 1 em MODO 0
P´agina 55
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
Modo 1 ´ idˆentico ao modo 0, mas Este modo de opera¸ca˜o ´e o mais simples e por isto ´e muito utilizado. E os contadores s˜ao de 16 bits. A figura 2.9 ilustra o diagrama em blocos para este modo, que ´e idˆentico para os dois timers.
Figura 2.9: Diagrama de Blocos para o TIMER 1 em MODO 1
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 idˆentica. O transbordamento (overflow) n˜ao somente ativa TFi como tamb´em recarrega TLi com o valor guardado em THi (este permanece inalterado). O valor de recarga deve ser fornecido por software.
Figura 2.10: Diagrama de Blocos para o TIMER 1 em MODO 2
P´agina 56
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
Modo 3 Este ´e o u ´ nico modo onde os contadores/temporizadores tˆem um comportamento diferente. Neste modo, o contador/temporizador 1 simplesmente suspende a contagem (´e 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 (ou seja, provoca a interrup¸ca˜o do timer 1). ´ como se existem 2 contadores/temporizadores de 8 bits (TH0 e TL0) e outro de 16 bits (timer 1). O E timer 1, entretanto, pode ser usado para operar em qualquer outro modo (0, 1 ou 2) e usa-se o modo 3 para detˆe-lo. N˜ao h´a problemas porque os modos s˜ao independentes. Tamb´em se pode usar o timer 1 (em modo 2) para gerar o ”baud rate”da porta serial.
Figura 2.11: Diagrama de Blocos para o TIMER 1 em MODO 3
P´agina 57
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
2.4.4
Exerc´ıcios
LED 10HZ Acender os leds vermelho, amarelo e verde a uma freq¨ uˆencia de 10 Hz. Para solucionar esse exerc´ıcio ´e necess´ario gerar um retardo equivalente ao per´ıodo de 10 Hz. A figura 2.12 ilustra o c´alculo do valor do contador para gerar esse retardo.
Figura 2.12: C´alculo de N para determinar uma frequˆencia Se F=10 Hz e CLOCK=3,575611 Hz, ent˜ao N=29797. Como este ´e um contador que conta para cima, temos que subtrair este valor de 65536. Com isto, N=65536-29797=35739 ou 8B9BH. Na realidade, a freq¨ uˆencia gerada n˜ao ser´a exatamente 10 Hz mas de um valor muito pr´oximo: F = 3,575611 / 12*29797 = 9,99 Hz Ser´a utilizado o timer 0 no modo 1; a cada interrup¸ca˜o a rotina acende um novo led e recarrega o timer. TMOD
GATE 0 IE EA 1
C/*T M1 M0 0 0 0 - - ES ET1 0 0 0 0
GATE C/*T M1 0 0 0 EX1 ET0 EX0 0 1 0
;LED_10HZ.ASM; DEFSEG PROG, CLASS=CODE, START=0 SEG PROG ; DEZ_HZ ;
EQU
35739
ORG AJMP
RESET INIC
ORG AJMP
TIMER0 TIM0
ORG
50H
;
; INIC MOV MOV MOV MOV MOV MOV CLR SETB SJMP
TL0,#LOW DEZ_HZ TH0,#HIGH DEZ_HZ TMOD,#1 ;TIMER 0 EM MODO 1 IE,#82H P1 ,#0 ;APAGAR TODOS OS LEDS A,#01001001B C TR0 $
; TIM0
ORG MOV MOV RLC MOV RETI END
100H TL0,#LOW DEZ_HZ ;REINICALIZAR TH0,#HIGH DEZ_HZ ;O CONTADOR A P1,A
P´agina 58
M0 1
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
Notar que na rotina de interrup¸ca˜o est´a a recarga dos temporizadores que ´e feita com a instru¸ca˜o ”MOV direto,#data”mas que consome 2 ciclos de m´aquina, ou seja, que h´a um retardo que se acumula. Para evitar ou corrigir isso, pode-se adicionar ao contador o retardo da instru¸ca˜o; ´e mais preciso usar ”MOV TL0,# LOW (DEZ HZ+2)”. Quando existem v´arias interrup¸co˜es, n˜ao se sabe com certeza quando uma interrup¸ca˜o do temporizador pode ser aceita; isso implica um erro maior que se acumula. H´a uma solu¸ca˜o simples porque depois do transbordamento o temporizador segue contando e esta contagem ´e exatamente o tempo que atrasou o servi¸co da interrup¸ca˜o; basta usar esse valor na recarga. As instru¸co˜es a seguir ilustram a id´eia.
MOV ADD MOV MOV
A,#LOW (DEZ_HZ+2) A,TL0 ;1 ciclo TL0,A ;1 ciclo TH0,#HIGH (DEZ_HZ+2)
P´agina 59
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
LED 1HZ Acender os leds vermelho, amarelo e verde a uma freq¨ uˆencia de 1 Hz. A solu¸ca˜o ´e idˆentica ao exerc´ıcio 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 ´e muito grande (297 968 > 65 536) e impede a utiliza¸ca˜o do temporizador. Uma boa sa´ıda ´e utilizar o esquema do exerc´ıcio 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 DIVISOR ;
EQU EQU
32203 10
ORG AJMP
RESET INIC
ORG AJMP
TIMER0 TIM0
ORG MOV MOV MOV MOV MOV MOV MOV CLR SETB SJMP
50H TL0,#LOW DEZ_HZ TH0,#HIGH DEZ_HZ R7,#DIVISOR ;PREPARAR DIVISAO POR 10 TMOD,#1 ;TIMER 0 EM MODO 1 IE,#82H P1,#0 ;APAGAR TODOS OS LEDS A,#01001001B C TR0 $
ORG MOV MOV DJNZ MOV RLC MOV RETI END
100H TL0,#LOW DEZ_HZ ;REINICALIZAR TH0,#HIGH DEZ_HZ ;O CONTADOR R7,FIM ;DIVIDIR POR 10 R7,#DIVISOR A P1,A
;
; INIC
; TIM0
FIM
P´agina 60
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
ONDA1 Gerar atrav´es de P1.7 uma onda com o seguinte formato:
Figura 2.13: Sinal a ser gerado na P1.7 Usando N = (t*CLOCK)/12, calcula-se o valor de recarga para o temporizador. Ser˜ao 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 m´aquina, quer dizer, consome 30,2 µs. Pode parecer que se o tempo de 40 µs fosse mudado para 25 µs n˜ao haveria solu¸ca˜o. P´agina 61
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
ONDA2 Gerar atrav´es de P1.7 uma onda com o seguinte formato:
Figura 2.14: Sinal a ser gerado na P1.7 Usando N = (t*CLOCK)/12, calcula-se o valor de recarga para o temporizador. O segredo ser´a trabalhar com o temporizador em modo 2 (os dois valores de recarga s˜ao menores que 256) e a rotina de interrup¸ca˜o apenas muda o valor da recarga (que est´a 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 R_600MICRO R_25MICRO ;
EQU EQU EQU
P1.7 77 249
ORG AJMP
RESET INICIO
ORG AJMP
TIMER0 TIM0
;RETARDO DE 600 MICROSEG ;RETARDO DE 25 MICROSEG
;
; INICIO
; TIM0
; LB1
ORG MOV MOV MOV MOV CLR SETB SJMP
50H TL0,#R_600MICRO TH0,#R_25MICRO TMOD,#2 IE,#82H SAIDA TR0 $
JB MOV SETB RETI
SAIDA,LB1 TH0,#R_25MICRO SAIDA
MOV CLR RETI END
TH0,#R_600MICRO SAIDA
P´agina 62
;PRIMEIRA CONTAGEM ;CONTAGEM SEGUINTE ;TIMER 0 EM MODO 2 ;EA=1 E ET0=1 ;PARTIDA DO TIMER 0 ;LOOP INFINITO ;2 ;2 ;1 ;2
CICLOS CICLOS CICLOS CICLOS
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Le˜ ao Filardi
LEDS1 Acender os leds vermelho, amarelo e verde em seq¨ uˆencia, mudando a cada 10 pulsos em T1. Ser´a 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 ser˜ao usados para acender os leds na seq¨ uˆencia correta. TMOD
IE
EA 1
GATE 0
0
0
C/*T 1
ES 0
M1 1
ET1 1
M0 0
EX1 0
GATE 0
ET0 0
C/*T 0
M1 0
M0 1
EX0 0
;LEDS1.ASM DEFSEG PROG, CLASS=CODE, START=0 SEG PROG ; CONTA_10 ;
EQU
246
ORG RESET AJMP INICIO ; ORG TIMER1 AJMP TIM1 ; INICIO:
ORG 50H MOV A,#01001001B CLR C MOV P1,A MOV TL1,#CONTA_10 MOV TH1,#CONTA_10 MOV TMOD,#60H MOV IE,#88H SETB TR1 SJMP $
;CARREGAR CONTADOR ;VALOR DE RECARGA ;CONTADOR 1, MODO 2 ;EA=1, ET1=1 ;LIGAR CONTADOR ;LOOP INFINITO
; TIM1: RLC A MOV P1,A RETI END
A chave SW3 aciona diretamente a entrada T1, mas h´a bouncing e por isso ser˜ao notadas mudan¸cas nos leds antes de 10 acionamentos. Para esse caso espec´ıfico o bouncing dever´a ser eliminado por hardware.
P´agina 63
Cap´ıtulo 3
Terceira Unidade Porta Serial 3.1 3.1.1
Comunica¸ c˜ ao Serial Introdu¸ c˜ ao
A porta serial existente na fam´ılia MCS-51 ´e ”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 recep¸ca˜o. Mas, se o primeiro byte n˜ao tiver sido lido no tempo em que o segundo byte se completa, um dos dois ser´a perdido.
3.1.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 opera¸ca˜o da porta serial ´e controlado pelo registro SCON, que ´e ilustrado na figura 3.1. A figura 3.2 apresenta um resumo dos modos de opera¸ca˜o.
Figura 3.1: Descri¸ca˜o do Registro SCON
SM0 0 0 1 1
SM1 0 1 0 1
MODO 0 1 2 3
˜ DESCRIC ¸ AO registro de deslocamento UART de 8 bits UART de 9 bits UART de 9 bits
¨ ENCIA ˆ FREQU clock/12 vari´avel clock/12 ou clock/64 vari´avel
SM2 → comunica¸ca˜o multiprocessador (habilitada com SM2=1): •SM2=1 e em modo 1 ==¿ interrup¸ca˜o (RI=1) com o bit de parada (stop bit) igual a 1. •SM2=1 e em modo 2 ou 3 ==¿ interrup¸ca˜o (RI=1) se for recebido RB8=1. REN → habilita a recep¸ca˜o serial (Reception Enable) TB8 → oitavo bit a ser transmitido nos modos 2 e 3. RB8 → oitavo bit recebido nos modos 2 e 3. TI → flag de interrup¸ca˜o por t´ermino de transmiss˜ao pela porta serial: •MODO 0 → ativado no final do oitavo bit •DEMAIS → ativado no come¸co do bit de parada RI → flag de interrup¸ca˜o por recep¸ca˜o pela porta serial: •MODO 0 → ativado no final do oitavo bit. •DEMAIS → ativado na metade do bit de parada. Observa¸ ca ˜o: Os flags TI e RI n˜ao s˜ao apagados por hardware e por isso a rotina de interrup¸ca˜o deve fazˆe-lo, ou seja, estes flags devem ser zerados por software. O registro PCON tamb´em toma parte na gera¸ca˜o do baud rate da porta serial. Este registro ´e ilustrado na figura 3.2.
Figura 3.2: Descri¸ca˜o do Registro PCON
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Le˜ ao Filardi
3.1.3
Modos de Opera¸ c˜ ao
Existem quatro modos de opera¸ca˜o da porta serial, cada um com uma finalidade. Ser´a apresentado um resumo de cada modo:
Modo 0 (s´ıncrono, 8 bits) Neste modo os dados entram e saem pelo pino RXD. O pino TXD fornece o clock para o deslocamento (shift). S˜ao transmitidos e recebidos dados de 8 bits (LSB primeiro). O baud rate ´e de 1/12 da freq¨ uˆencia do clock (igual a 1 ciclo de m´aquina).
Figura 3.3: Esquema da Porta Serial em MODO 0 Este modo pode ser utilizado para expandir as portas de I/O do microcontrolador, utilizando o esquema a seguir:
Figura 3.4: Expans˜ao das Portas de I/O
P´agina 67
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Le˜ ao Filardi
Modo 1 (ass´ıncrono, 8 bits) No Modo 1 s˜ao operados 10 bits com um baud rate program´avel. Recebe-se pelo pino RXD e transmite-se pelo pino TXD. A tabela 3.1 ilustra o frame de bits serial. O bit de partida (START) ´e sempre zero e o bit de parada (STOP) ´e sempre um na transmiss˜ao. Na recep¸ca˜o o bit de parada ´e colocado no bit RB8. START
Bit 0
Bit 1
Bit 2
Bit 3
Bit 4
Bit 5
Bit 6
Bit 7
STOP
Tabela 3.1: Frame de bits gerado pela porta serial em MODO 1 Neste modo o baud rate ´e gerado pelo contador/temporizador 1. A cada 16 (SMOD=1) ou 32 (SMOD=0) transbordamentos (overflows) ´e enviado um pulso para o circuito serial. A figura 3.5 ilustra o esquema do gerador do baud rate e tamb´em apresenta algumas f´ormulas para o c´alculo do valor a ser programado no contador/temporizador.
Figura 3.5: Esquema para a gera¸ca˜o do Baud Rate (BR) em MODO 1 Usando o contador/temporizador 1 programa-se qualquer baud rate. Na grande maioria dos casos tem-se o baud rate e ´e buscado o valor N a ser programado no contador/temporizador 1 (o mais cˆomodo ´e usar o modo 2 - auto recarga). Um problema que sempre existe ´e o erro gerado pela aproxima¸ca˜o do valor a ser programado no contador/temporizador. Isto provoca a gera¸ca˜o de baud rates ligeiramente diferentes. Exemplo: Usando um cristal de 3,575611 MHz, qual ´e 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). Observa¸ ca ˜o: a transferˆencia do dado recebido para o registro SBUF (e RB8, que guarda o stop bit) e a ativa¸ca˜o do flag RI somente acontecer´a se: RI = 0 e (SM2= 0 ou o bit de parada =1).
P´agina 68
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Le˜ ao Filardi
Modo 2 (ass´ıncrono, 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 ´e ilustrado na tabela 3.2. START
Bit 0
Bit 1
Bit 2
Bit 3
Bit 4
Bit 5
Bit 6
Bit 7
TB8
STOP
Tabela 3.2: Frame de bits gerado pela porta serial em MODO 2 O u ´ nico controle que se tem sobre o baud rate ´e atrav´es 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 3.6 ilustra o esquema para gera¸ca˜o do baud rate no modo 2.
Figura 3.6: Esquema para a gera¸ca˜o do Baud Rate (BR) em MODO 2 Na transmiss˜ao o bit 8 ´e copiado do bit TB8. Na recep¸ca˜o o bit 8 ´e copiado para o bit RB8. Os bits TB8 e RB8 est˜ao no registro SCON. O dado recebido somente ´e carregado no SBUF (e RB8) se: RI=0 e (SM2=0 ou bit 9 (stop bit) = 1).
P´agina 69
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Le˜ ao Filardi
Modo 3 (ass´ıncrono, 9bits, baud rate vari´ avel) ´ idˆentico ao modo 2, exceto que a gera¸ca˜o do baud rate ´e idˆentico ao modo1. A tabela 3.3 e E figura 3.7 ilustra o frame de bits e a gera¸ca˜o do baud rate. START
Bit 0
Bit 1
Bit 2
Bit 3
Bit 4
Bit 5
Bit 6
Bit 7
TB8
STOP
Tabela 3.3: Frame de bits gerado pela porta serial em MODO 3
Figura 3.7: Esquema para a gera¸ca˜o do Baud Rate (BR) em MODO 3
3.1.4
Cuidados com a Porta Serial
Nos quatro modos a transmiss˜ao se inicia quando ´e escrito um byte em SBUF. A recep¸ca˜o ´e habilitada quando REN=1 (no MODO 0 exige-se tamb´em RI=0). N˜ao se esque¸ca de que somente existe uma u ´ nica interrup¸ca˜o dedicada a` porta serial, portanto ela ´e gerada por duas condi¸co˜es: a)T´ermino da transmiss˜ao de um byte → flag TI b)T´ermino da recep¸ca˜o de um byte → flag RI Deve-se testar os flags RI e TI para determinar se a interrup¸ca˜o foi por transmiss˜ao ou por recep¸ca˜o. Os flags RI e TI devem ser apagados por software. Um outro cuidado muito importante ´e com a gera¸ca˜o do baud rate. Muitas vezes n˜ao se consegue a comunica¸ca˜o serial devido a` imprecis˜ao do baud rate. Portanto o problema a seguir ´e proposto: Programar o contador/temporizador 1 para gerar 9600 bauds para a porta serial operando em modo 3, sendo que o cristal ´e de 4 MHz. Solu¸ca˜o: N = 4000000/(384*9600) = 1,085 (SMOD=0). Na solu¸ca˜o calculou-se que N=1,085 mas somente podem ser programados n´ umeros interos; assim, caso se aproxime para 1, o baud rate gerado ser´a de BR=4000000/384=10416,7. Ser´a que ir´a funcionar bem com esse baud rate ? Para responder esta pergunta ´e necess´ario compreender o que acontece com a transmiss˜ao serial. Esta transmiss˜ao ´e ass´ıncrona, quer dizer, pode iniciar em qualquer instante; o inicio ´e caracterizado pela presen¸ca de um bit de partida (START). Uma vez iniciada, deve-se garantir a dura¸ca˜o de cada bit. Para cada byte ´e transmitido um bit de partida, os bits de dados e um ou dois bits de parada. O que se deve buscar ´e garantir que n˜ao haja um erro muito grande neste frame de bits. A figura 3.8 ilustra o caso da porta serial operando em modo 3. P´agina 70
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Le˜ ao Filardi
Figura 3.8: Erros provocados pela diferen¸ca no baud rate A fase mais critica ´e a recep¸ca˜o do u ´ ltimo bit porque poder´a apresentar uma defasagem muito grande (rotuladas de E1 e E2 na figura). N˜ao se pode especificar um valor limite para esses erros pois diversos fatores, particulares para cada caso, precisam ser levados em considera¸ca˜o. Como um valor pr´atico e que funciona na grande maioria dos casos arbitra-se que o valor do erro, para o u ´ ltimo bit, deve ser menor que 40% da dura¸ca˜o de um bit (usando BR exato). |
11 40 1 11 − |≤ ∗ BRp BR 100 BR
A equa¸ca˜o pode ser simplificada para: |
11 11 1 − |≤ BRp BR 27, 5 ∗ BR
Como pode ser verificado, com um cristal de 4Mhz n˜ao se conseguir´a transmitir a 9600 pois o baud rate ser´a muito grande. |
11 1 11 − |≤ 10416, 7 9600 27, 5 ∗ 9600 8,167 µs≤3,788µs→falso
P´agina 71
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Le˜ ao Filardi
3.1.5
Comunica¸ c˜ ao entre v´ arios 8051
Figura 3.9: Comunica¸ca˜o entre v´arios 8051 Os modos 2 e 3 permitem interligar v´arios 8051, sendo um mestre e v´arios escravos. Nestes modos temos: *1 start bit; *8 bits de dados; *um nono bit que vai para o bit RB8 ( na recep¸ca˜o) ou pode ser escolhido 0 ou 1 na transmiss˜ao escrevendo-se em TB8; *1 stop bit Note que se SM2 = 1 e RB8 = 1, a interrup¸ca˜o da serial ser´a atendida. O algoritmo de comunica¸ca˜o consiste em: 1)No in´ıcio, todos os escravos est˜ao com SM2 = 1 2)Quando o mestre quiser enviar dados para algum escravo, ele escrever´a 1 em seu bit TB8 e ent˜ao enviar´a serialmente o endere¸co do escravo desejado, e como teremos todos os bits RB8 em 1, todos escravos ser˜ao interrompidos para verificar se ´e seu o endere¸co enviado. 3)O escravo selecionado zerar´a o seu bit SM2 e estar´a preparado para receber os dados, os quais ter˜ao agora o nono bit (RB8) em 0. 4)Os demais escravos permanecer˜ao com SM2 em 1 e, dessa forma, n˜ao ser˜ao mais interrompidos pois os dados tˆem RB8 = 0. 5)Em resumo, o mestre envia endere¸cos com o nono bit em 1 e os dados com o nono bit em 0, portanto, se o mestre desejar se comunicar com outro escravo basta enviar o novo endere¸co com o nono bit em 1. P´agina 72
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Le˜ ao Filardi
3.1.6
Comunica¸ c˜ ao serial entre o 8051 e o PC
Devido a` diferen¸ca de tens˜ao entre os n´ıveis TTL e os usados no padr˜ao RS-232C (PC), ´e necess´ario usar circuitos conversores para interfacear o microcontrolador com a porta serial do PC. A convers˜ao pode ser feita atrav´es de circuitos transistorizados discretos (veja as figuras 11.10,11.11 e 11.12 e leia a se¸ca˜o 11.4) ou atrav´es de circuitos integrados como o 1488 (conversor de TTL para RS-232C) e o 1489 (conversor de RS-232C para TTL). A seguir est˜ao os esquemas dos dois integrados e o esquema b´asico de interliga¸ca˜o entre o 8051 e a serial do PC.
Figura 3.10: Esquema de liga¸ca˜o entre o computador(PC) e o 8051
P´agina 73
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Le˜ ao Filardi
3.1.7
Exerc´ıcios
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 ´e o mais adequado e TB8=1 ser´a usado para gerar um bit de parada. A transmiss˜ao ser´a feita por interrup¸ca˜o, quer dizer, a cada byte transmitido haver´a uma interrup¸ca˜o. O contador/temporizador 1 ser´a programado para modo 2 (auto-recarga). SCON
TMOD
SM0 1
GATE 0
IE
EA 1
SM1 1
SM2 0
C/*T 0
M1 1
-
-
ES 1
REN 0
M0 0
ET1 0
TB8 1
RB8 0
GATE 0
EX1 0
TI 0
C/*T 0
ET0 0
EX0 0
C´alculo 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 AJMP
RESET INIC
ORG AJMP
SINT SERIAL
ORG MOV MOV MOV SETB MOV MOV MOV SETB SJMP
50H TMOD,#20H TH1,#BR_9600 TL1,#BR_9600 TR1 SCON,#0C8H IE,#90H A,#"0" TI $
ORG 100H CLR MOV INC CJNE MOV
TI SBUF,A A A,#"Z"+1,SER1 A,#"0"
;
; INIC:
;TIMER 1 EM MODO 2 ;PROGRAMAR BAUD RATE ;INICIAR TIMER 1 ;MODO 3 COM TB8=1 ;HAB INTERRUP SERIAL ;PRIMERO ASCII ;TX PRIMEIRO ASCII ;LOOP INFINITO
; SERIAL:
; SER1: ; RETARDO: ; AQUI:
ACALL RETI
RETARDO
MOV
R7,#0
DJNZ RET
R7,AQUI
;APAGAR FLAG ;TRANSMITIR ;FOI O ULTIMO ? ;REINICIALIZAR ;ATRASAR TRANSMISSAO
; END
P´agina 74
M1 0
RI 0
M0 0
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Le˜ ao Filardi
RX SER O circuito dever´a responder aos seguintes comandos que chegam pela porta serial: 1 → acender todos os leds R → acender led vermelho A → acender led amarelo V → acender led verde
0 → apagar todos os leds r → apagar led vermelho a → apagar led amarelo v → apagar led verde
Estes comandos v˜ao 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=0SEG 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 MOV TH1,#BR_9600 MOV TL1,#BR_9600 SETB TR1 MOV SCON,#0D0H MOV IE,#90H CLR CHEGOU ; ESPERA: JNB CHEGOU,ESPERA CLR CHEGOU ; CJNE A,#"0",LB1 CLR LED_VERMELHO CLR LED_AMAR CLR LED_VERDE SJMP ESPERA ; LB1: CJNE A,#"1",LB2 SETB LED_VERMELHO SETB LED_AMAR SETB LED_VERDE SJMP ESPERA ; LB2: CJNE A,#"R",LB3 SETB LED_VERMELHO SJMP ESPERA ; LB3: CJNE A,#"r",LB4 CLR LED_VERMELHO SJMP ESPERA ; LB4: CJNE A,#"A",LB5 SETB LED_AMAR SJMP ESPERA
P´agina 75
;TIMER 1 EM MODO 2 ;PROGRAMAR BAUD RATE ;INICIAR TIMER 1 ;MODO 3 COM REN=1 ;HAB INTERRUP SERIAL ;APAGAR FLAG
;AGUARDAR UM COMANDO
;CHEGOU 0
;CHEGOU 1
;CHEGOU R
;CHEGOU r
;CHEGOU A
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Le˜ ao Filardi
; LB5: CJNE CLR SJMP
A,#"a",LB6 LED_AMAR ESPERA
;CHEGOU a
CJNE SETB SJMP
A,#"V",LB7 LED_VERDE ESPERA
;CHEGOU V
CLR SJMP
LED_AMAR ESPERA
;CHEGOU v
CLR MOV SETB RETI
RI A,SBUF CHEGOU
;APAGAR FLAG DE INTERRUP ;COLOCAR DADO NO Acc
; LB6:
: LB7:
; SERIAL:
END
3.2 3.2.1
Programa¸ c˜ ao em Assembly Introdu¸ c˜ ao te´ orica
Este parte da apostila ´e de fundamental importˆancia para quem deseja adquirir conhecimentos b´asicos em programa¸ca˜o (software). Aqui, ´e ensinado passo a passo o procedimento da elabora¸ca˜o de programas simples e com loops; utilizando a linguagem Assembly aplicada aos microcontroladores da fam´ılia MCS-Sl da Intel. Uma vez que n´os aprendemos e praticamos as t´ecnicas de programa¸ca˜o ensinadas, poderemos aplicar tal metodologia de implementa¸ca˜o de programas a qualquer outra linguagem de programa¸ca˜o, seja ela de baixo, m´edio ou alto n´ıvel. Existem muitas linguagens de programa¸ca˜o que podem ser utilizadas na programa¸ca˜o de sistemas inteligentes, utilizando mierocontroladores, al´em do Assembly (n´ıvel baixo), tais como as linguagens estruturadas de programa¸ca˜o C (n´ıvel m´edio), BASIC e PL/M (n´ıvel alto). A escolha de uma delas na elabora¸ca˜o de um projeto de software ´e muito importante ´e envolve o conhecimento t´ecnico especializado. A caracter´ıstica de uma linguagem de n´ıvel baixo, como o Assembly, ´e a de apresentar o mesmo conjunto de instru¸co˜es que aquele definido pelo fabricante da fam´ılia de microprocessadores ou microcontroladores, com a qual se deseja desenvolver os projetos de programa. Isso permite um total controle sobre os registradores intemos do dispositivo e as posi¸co˜es de mem´oria e, conseq¨ uentemente, s˜ao gerados programas muito mais compactos em rela¸ca˜o a`s outras linguagens. Assim, sempre que existirem limita¸co˜es de mem´oria (pouca mem´oria) e limita¸co˜es de velocidade de processamento (m´axima velocidade de processamento), recomenda-se a utiliza¸ca˜o da linguagem de programa¸ca˜o de n´ıvel baixo, ou seja, o Assembly. Portanto, pelas pr´oprias caracter´ısticas dos microcontroladores, ´e muito comum a utiliza¸ca˜o do Assembly na elabora¸ca˜o de projetos de equipamentos inteligentes. Em contrapartida, a u ´ nica desvantagem da linguagem Assembly em rela¸ca˜o a`s outras linguagens ´e sua caracter´ıstica de ser rica em detalhes, solicitando dos programadores um conhecimento bastante grande sobre o dispositivo a ser programado. A caracter´ıstica de uma linguagem de n´ıvel m´edio, como o C, ´e a de apresentar os aspectos de uma linguagem de n´ıvel baixo (manipula¸ca˜o bit a bit ou byte a byte dos registradores internos e das posi¸co˜es de mem´oria), como tamb´em as caracter´ısticas de uma linguageni de n´ıvel alto, que definimos a seguir. Atualmente, essa ´e uma das linguagens de programa¸ca˜o mais utilizadas em projetos de equipamentos inteligentes. P´agina 76
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Le˜ ao Filardi
A caracter´ıstica de uma linguagem de n´ıvel alto ´e a de ser muito mais pr´oxima da linguagem do ser humano. Trata-se de uma linguagem descritiva, cujas instru¸co˜es s˜ao palavras escritas em inglˆes e que est˜ao muito longe das instru¸co˜es em Assembly. Cada instru¸ca˜o de uma linguagem de n´ıvel alto ´e representada por muitas instru¸co˜es de uma linguagem de n´ıvel baixo. Programar utilizando uma linguagem de n´ıvel alto ´e muito mais f´acil que programar com uma linguagem de n´ıvel baixo ou m´edio. Mas quando se utiliza uma linguagem de programa¸ca˜o de n´ıvel alto, s˜ao gerados programas maiores e com menor velocidade de processamento. Outra desvantagem da linguagem de n´ıvel alto, que muitas vezes ´e interpretada como vantagem, ´e a de n˜ao exigir do programador o conhecimento completo e detalhado do dispositivo que se deseja programar. Um programa em c´odigo de m´aquina (c´odigo-objeto) ´e composto por bytes que representam as ´ a linguagem que o microcontrolador sabe e pode executar. Assim, seminstru¸co˜es do dispositivo. E pre que for desenvolvido um programa em uma determinada linguagem de programa¸ca˜o, ´e necess´ario fazer a compila¸ca˜o desse programa para transform´a-lo em linguagem de m´aquina. O programa em linguagem de m´aquina deve ser simulado por meio de um simulador (AVSIM5l, Pinnacle etc.) ou gravado em uma mem´oria para verificar seu funcionamento por meio da utiliza¸ca˜o do pr´oprio hardware do produto. A seguir inicia-se o estudo das t´ecnicas de programa¸ca˜o em Assembly para a fam´ılia de microcontroladores MCS-51 da Intel.
3.2.2
Estrat´ egias de elabora¸ c˜ ao de programas
´ muito importante para um programador, antes de implementar um programa, seguir uma deE terminada metodologia. A seguir, ´e descrita uma metodologia de elabora¸ca˜o de programas que ´e independente da linguagem de programa¸ca˜o.
Pr´ e-requisitos do t´ ecnico que desenvolver´ a o projeto a)Conhecer a estrutura interna (hardware) do dispositivo com que se deseja desenvolver o projeto; b)Conhecer o conjunto de instru¸co˜es do dispositivo.
Viabilidade do projeto a)Obter e entender claramente as especifica¸co˜es do cliente (desejos do cliente, caracter´ısticas do produto e do sistema, modo de funcionamento etc.); b)Elaborar diferentes estrat´egias de solu¸co˜es para o projeto. Isso pode ser feito utilizando-se diagramas de fluxo de dados (DFD), diagramas de blocos, desenhos etc.; c)Elaborar a viabilidade do projeto com rela¸ca˜o ao hardware e ao software para verificar a possibilidade de sua implementa¸ca˜o junto ao cliente. Algumas perguntas s˜ao utilizadas para garantir a viabilidade do projeto: Quais s˜ao as necessidades de hardware? Qual ser´a o custo final do produto (o cliente pagar´a por esse valor)? Qual ser´a a quantidade de equipamentos a ser fabricada (a f´abrica comporta essa quantidade)? Como ser˜ao feitas as entregas do produto? Existem fornecedores de componentes no Brasil? Quais componentes devem ser importados? Existem concorrentes? etc.; d)Escolher a melhor solu¸ca˜o junto com o cliente, ou seja, aquela que utilizar´a o menor n´ umero de componentes e a que apresenta maior velocidade de processamento. Isso afeta diretamente o custo final do hardware e traz uma maior flexibilidade funcional do produto. P´agina 77
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Le˜ ao Filardi
Implementa¸ ca ˜o do projeto a)Elaborar o fluxograma do programa em Assembly: os fluxogramas devem ser implementados desde o n´ıvel de ’macrodetalhamento’ at´e o n´ıvel de ’microdetalhamento’. Um fluxograma representando o n´ıvel de ’macrodetalhamento’ deve conter as id´eias e os objetivos dentro dos blocos representativos. Um fluxograma representando o n´ıvel de ’microdetalhamento’ deve utilizar as representa¸co˜es simb´olicas dos mnemˆonicos das instru¸co˜es dentro dos blocos representativos. Exemplo: dentro de um bloco do fluxograma, representar (A) ← (B): significa a instru¸ca˜o MOV A,B; b)A partir do fluxograma, gerar o programa-fonte na linguagem de programa¸ca˜o escolhida (arquivo em c´odigo ASCII que cont´em as instru¸co˜es que comp˜oem o programa); c)Compilar o programa-fonte para gerar o arquivo bin´ario que corresponde ao programa em c´odigos de m´aquina; d)Fazer a linkagem dos arquivos bin´arios para agrupar de maneira organizada, os diferentes blocos de programa que comp˜oem o programa final; e)Efetuar a simula¸ca˜o do programa para verificar seu funcionamento e corrigir os poss´ıveis erros de l´ogica. Nessa fase, n˜ao ´e necess´ario 0 hardware do produto; f)Realizar a grava¸ca˜o da EPROM, inser¸ca˜o no hardware do produto e teste f´ısico de sua funcionalidade; g)Efetuar a emula¸ca˜o do programa (´e necess´ario um sistema emulador) para corrigir erros de l´ogica ou eventuais falhas de algum componente, utilizando o pr´oprio hardware do produto; h)Fazer testes r´apidos de bancada para verificar o funcionamento do produto final; i)Realizar testes de longa dura¸ca˜o (confiabilidade), em condi¸co˜es de estresse’, para a homologa¸ca˜o do produto.
3.2.3
Fluxogramas
Essa ferramenta de programa¸ca˜o ´e fundamental para a implementa¸ca˜o de qualquer rotina de um ´ por meio dessa ferramenta que se pode observar como foi impleprograma de microcomputador. E mentada a estrat´egia de solu¸ca˜o de uma necessidade de programa¸ca˜o elaborada por um programador. O fluxograma representa como o fluxo de informa¸co˜es ser´a processado pelo microprocessador.
P´agina 78