Anda di halaman 1dari 108

Escola de Engenharia Eltrica e de Computao Universidade Federal de Gois

NOTAS DE AULA MICROPROCESSADORES E MICROCONTROLADORES

Prof. Dr. Jos Wilson Lima Nerys

Goinia, 2011

Notas de Aula 2011

A vida a soma de todas as suas escolhas Albert Camus


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

Notas de Aula 2011

SUMRIO
1 Introduo a Microprocessadores ...................................................................................... 5 1.1 1.2 1.3 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 3 3.1 3.2 3.3 3.4 3.5 3.6 3.7 4 4.1 4.2 4.3 5 5.1 5.2 6 6.1 6.2 7 7.1 7.2 Conceitos Iniciais....................................................................................................... 5 Um pouco de Histria ............................................................................................... 8 Sistema de Numerao ............................................................................................ 14 Arquiteturas RISC, CISC e Hbrida ...................................................................... 18 Arquitetura 8085, 8088/86, 8051 e PIC................................................................... 20 Registradores Principais 8085, 8088/8086, 8051 .................................................... 23 Princpio de Funcionamento 8085, 8088/86, 8051 .................................................. 25 Formato das Instrues ........................................................................................... 30 Modos de Endereamento e Grupos de Instrues ................................................ 33 Registradores de Flags do 8085, 8088/86 e 8051..................................................... 34 Funcionamento da Pilha no 8085, 8051 e 8088/86 ................................................. 38 Memrias ROM e RAM.......................................................................................... 43 Os Registradores de Funes Especiais .................................................................. 45 Instrues Gerais do Microcontrolador 8051 ........................................................ 46 Instrues de Comparao, Deciso e de Desvio .................................................... 48 Operaes com bit ................................................................................................... 49 Diretivas de programao ....................................................................................... 49 Programas Exemplos .............................................................................................. 50 Princpio de Funcionamento e Habilitao ............................................................ 54 Endereos Desvio das Interrupes ........................................................................ 55 Programas Exemplos com Interrupo .................................................................. 56 Princpio de Funcionamento e Modos de Operao .............................................. 59 Programas Exemplos usando Temporizadores ...................................................... 62 Noes Bsicas de Comunicao Serial .................................................................. 70 Roteiros de Programas usando Comunicao Serial ............................................. 74 Expanso de Memria............................................................................................. 80 Mapeamento de Memria ....................................................................................... 81
Escola de Engenharia Eltrica e de Computao Universidade Federal de Gois Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

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

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

Interrupes ..................................................................................................................... 54

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

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

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

Notas de Aula 2011

Dispositivos para Entrada, Sada e Acionamentos Eltricos ............................................ 85 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 Teclado .................................................................................................................... 85 Display de 7-Segmentos........................................................................................... 89 Display LCD ............................................................................................................ 92 Sensores de Presena ............................................................................................... 98 Medio de Velocidade ........................................................................................... 99 Motor de Corrente Contnua ................................................................................ 100 Motor de Passo ...................................................................................................... 104 Lmpada Incandescente ....................................................................................... 107

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

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

Notas de Aula 2011

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

Diodo

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

Flip-flop

O flip-flop, em especial, pelo princpio de funcionamento e os dois estados na sada (baixo/alto) usado para compor 1 bit, que a unidade bsica de todos os componentes de um microprocessador e na construo de um tipo de memria chamada de memria esttica. Dentre os componentes internos de um microprocessador destaca-se: registradores, contadores, somadores, codificadores e decodificadores. Todos eles encapsulados em uma nica pastilha, e adequadamente conectados e sincronizados no funcionamento, integram um microprocessador, Fig. 1.2.

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

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

Notas de Aula 2011

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

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

Notas de Aula 2011

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

16 bits (2 bytes) formam 1 word e 2 words formam 1 word dupla (Double Word) ou Dword.
Bit15 Bit14 Bit13 Bit12 B11 Bit10 Byte superior (High Byte) Bit9 1 word Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Byte Inferior (Low Byte) Bit1 Bit0

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

Notas de Aula 2011

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

1.2 Um pouco de Histria


4000 A.C BACO Inveno do baco pelos babilnios. Instrumento usado para realizar operaes aritmticas, onde cada coluna representa uma casa decimal. Era o principal instrumento de clculo do sculo XVII e usado at hoje. Data da mesma poca do baco o octograma chins Yin Yang, o qual tido como a primeira representao binria dos nmeros de 0 a 7. Foi criado pelo imperador chins Fou-Hi para representar a interao entre as duas energias que juntas so o fundamento da totalidade.

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

Notas de Aula 2011

baco

Octograma chins Yin Yang

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

Tabela de logaritmos

Pascaline

Calculadora de 4 funes de Leibniz

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

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

Notas de Aula 2011

10

Tear de Vaucanson

Tear de Jacquard

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

Mquina de diferenas

Mquina analtica

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

Notas de Aula 2011

11

Mquina de Herman Hollerith

Computador Z4

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

Colosso

Mark I

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

Notas de Aula 2011

12

Vlvula

Transistor

Circuito Integrado

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

Notas de Aula 2011

13

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

Notas de Aula 2011

14

seus antecessores e consome 20% menos energia. A potncia dissipada de 5,5 W. Frequncia de clock de 1,66 GHz. Observa-se, ao longo da linha de tempo, um aumento no nmero de transistores nos microprocessadores e uma reduo no tamanho desses componentes (tecnologia empregada). A reduo no tamanho dos transistores resulta no aumento da velocidade de operao e tambm na reduo das conexes internas, alm de permitir a insero de um nmero cada vez maior de transistores numa nica pastilha. O aumento da capacidade de integrao de transistores resulta ainda na reduo do consumo de energia eltrica e do custo dos microprocessadores. H um postulado que diz que o gate de um transistor no pode ser menor do que a largura correspondente a 10 tomos. A previso de pesquisadores da Intel que a dimenso do gate dos transistores alcanar esse valor por volta do ano 2017.

1.3 Sistema de Numerao


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

O Sistema BCD o sistema em que se combina o sistema binrio e o sistema decimal. utilizado como formato de sada de instrumentos. Utiliza 2 dgitos: 0 e 1 que so dispostos em grupos de 4 dgitos,
Escola de Engenharia Eltrica e de Computao Universidade Federal de Gois Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

15

utilizados para representar um dgito decimal (nmero 0 at 9). A representao de um nmero maior que 9 deve ser feita por outro grupo de 4 bits, com a ponderao dada pelo sistema decimal. Exemplo: 97310 = 1001 0111 0011. Note a diferena entre este valor e o valor do nmero binrio 1001 0111 0011 2 = 241910 1.3.4 Sistema Octal

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

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

1.3.6

Converso de Base

O sistema hexadecimal mais fcil de trabalhar que o sistema binrio e utilizado na codificao de programas no microprocessador. Na converso de hexadecimal para binrio, cada dgito hexadecimal convertido em 4 dgitos binrios equivalentes. Na converso de binrio para hexadecimal, cada grupo de 4 dgitos binrios convertido em 1 dgito hexadecimal equivalente. Exemplos: 7 D 3 F16 (7D3FH)= 0111 1101 0011 11112 10100001101110002 = 1010 0001 1011 10002 = A 1 B 816 ou A1B8H Um algoritmo para a converso de base pode ser obtido. A diviso termina quando o quociente zero. Um exemplo de decimal para hexadecimal dado.

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

Notas de Aula 2011

16

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

Valor = r1 .B+ r0 Representao: r1 r0 Se q2 = 0 Valor = q0 B+ r0 ; q0= q1 .B + r1; q1= q2 .B + r2 = 0.B + r2 = r2

Da, q0= r2 .B + r1 e Valor = (r2 .B + r1 ) B+ r0 . Logo, Valor = r2 B2 + r1 B + r0 Representao: r2 r1 r0 1.3.7 Representao de Nmeros Positivos e Negativos

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

Fig. 1.11 Crculo para um nmero de 4 bits


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

Notas de Aula 2011

17

Valor Simtrico de um Nmero Nmero binrio: a = (complemento de 1 de a) + 1 = complemento de 2 de a = 2n a Nmero decimal: a = (complemento de 9 de a) + 1 = complemento de 10 de a = 10n a Subtrao Usando Adio Nmero binrio: a b = a + (complemento de 2 de b) a b = a + (2n b) Exemplo para um nmero binrio de 4 dgitos: a 1 = a + (24 1) = a + (10000 0001) = a + 1111 a 3 = a + (24 3) = a + (10000 0011) = a + 1101 Se a = 1001 (910) a 1 = 1001 0001 = 1000 a 3 = 1001 0011 = 0110 ou a 1 = 1001 + 1111 = 1 1000 (despreza-se o quinto dgito) a 3 = 1001 + 1010 = 1 0110 (nmero de 4 dgitos) Subtrao Usando Adio Nmero decimal: a b= a + (complemento de 10 de a) a b = a + (10n b) Exemplo para um nmero decimal de 2 dgitos: a 1 = a + (102 1) = a + (100 1) = a + 99 a 3 = a + (102 3) = a + (100 3) = a + 97 Se a = 94 a 1 = 94 1 = 93 a 3 = 94 3 = 91 ou a 1 = 94 + 99 = 1 93 (despreza-se o terceiro dgito) a 3 = 94 + 97 = 1 91 (o nmero de 2 dgitos)

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

Notas de Aula 2011

18

Arquitetura e Princpio de Funcionamento de Microprocessadores


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

Notas de Aula 2011

19

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

Fig. 2.1 Etapas de execuo nas arquiteturas RISC e CISC O pipeline uma tcnica usada para acelerar a execuo de instrues. A cada ciclo de clock, enquanto uma instruo est na etapa de execuo, a instruo seguinte est sendo buscada. O resultado global que, a cada ciclo, uma nova instruo iniciada e uma instruo encerrada. No caso mostrado a seguir a instruo B faz referncia memria e, assim, enquanto a instruo A necessita de apenas um ciclo para busca e um para execuo, a instruo B precisa de um ciclo para busca e dois para execuo. Ciclos Busca da Instruo Execuo da Instruo Referncia Memria 1 A 2 B A 3 C B 4 D C B 5 E D

Caso a instruo B interfira na etapa de execuo da instruo C (por exemplo, usando o mesmo registrador ou quando a instruo C precisa do resultado da instruo B) necessrio aguardar o trmino da instruo B antes de executar a instruo C. Ciclos Busca da Instruo Execuo da Instruo Referncia Memria 1 A 2 B A 3 C B 4 NOP NOP B 5 D C 6 E D

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

Notas de Aula 2011

20

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

2.2 Arquitetura 8085, 8088/86, 8051 e PIC


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

Fig. 2.2 Estrutura interna do microprocessador 8085 (CISC)

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

Na comparao entre o microprocessador 8086/88 e o 8085 a principal diferena est nos registradores de 16 bits do 8086/88, em contraste com os registradores de 8 bits do 8085. Outra
Escola de Engenharia Eltrica e de Computao Universidade Federal de Gois Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

21

diferena fundamental que o 8086 possui unidade de busca independente da unidade de execuo, o que permite buscar uma nova instruo (e colocar numa fila) antes de terminar de executar a instruo anterior. No 8085 a busca da prxima instruo feita aps a execuo da instruo anterior. Busca-se a primeira instruo, executa-se essa instruo e ento busca-se a prxima instruo. A Tabela 2.1 mostra algumas caractersticas desses microprocessadores. Dentre elas destaca-se a diferena bsica entre o 8086 e o 8088, que o barramento externo de 8 bits do 8088, o que permite o interfaceamento com perifricos de 8 bits e com estruturas previamente construdas para o 8085.
Tabela 2.1 Comparao entre os microprocessadores 8085 e 8086/88 Caracterstica Barramento de endereo Capacidade de endereamento de memria Barramento de dados Manipulao de STRINGS Registradores Internos Uso de segmentao para endereamento Aritmtica Decimal completa Microprocessador 8085 16 bits 65.536 ( 64 kB ) 8 bits No 8 bits e 16 bits No No Microprocessador 8088 20 bits 1.048.576 ( 1 MB ) Interno: 16 bits Externo: 8 bits Sim 16 bits Sim Sim Unidades Independentes: Unidade de Interfaceamento com Barramento (BIU) responsvel pela Busca e Unidade de Execuo (EU) Microprocessador 8086 20 bits 1.048.576 ( 1 MB ) Interno: 16 bits Externo: 16 bits Sim 16 bits Sim Sim Unidades Independentes: Unidade de Interfaceamento com Barramento (BIU) responsvel pela Busca e Unidade de Execuo (EU)

Etapas de Busca e Execuo

Em sequncia: Busca Executa

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

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

Notas de Aula 2011

22

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

Fig. 2.5 Estrutura do microcontrolador da famlia PIC 16F8X (RISC) Escola de Engenharia Eltrica e de Computao Universidade Federal de Gois Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

23

2.3 Registradores Principais 8085, 8088/8086, 8051


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

Notas de Aula 2011

24

Tabela 2.2: Principais Registradores Especiais Endereos individuais dos Bits e Mnemnico Registrador Endereo denominaes de alguns bits Latch da Porta 0 P0 80 H 87 86 85 84 83 82 81 Apontador de Pilha SP 81 H Apontador de Dados DPTR 82H 83H LSB do Apontador de Dados DPL 82 H MSB do Apontador de Dados DPH 83 H Controle de Energia PCON 87 H Controle do Contador/Temporizador TCON 88 H 8F 8E 8D 8C 8B 8A 89
TF1 TR1 C/T1 TF0 M11 TR0 M01 IE1 G0 IT1 C/T0 IE0 M10

80

88
IT0 M00

Controle do Modo do Temporizador/ Contador LSB do Temporizador/Contador 0 LSB do Temporizador/Contador 1 MSB do Temporizador/Contador 0 MSB do Temporizador/Contador 1 Latch da Porta 1 Controle da Porta Serial Porta de Dados Seriais Latch da Porta 2 Habilitador de Interrupo Latch da Porta 3 Controle de Prioridade da Interrup. Registrador de Estado do Programa Acumulador Registrador B

TMOD TL0 TL1 TH0 TH1 P1 SCON SBUF P2 IE P3 IP PSW ACC ou A B

89 H 8A H 8B H 8C H 8D H 90 H 98 H 99 H A0 H A8 H B0 H B8 H D0 H E0 H F0 H

G1

97 9F
SM1

96 9E
SM2

95 9D
SM3

94 9C
REN

93 9B
TB8

92 9A
RB8

91 99
TI

90 98
RI

A7 AF
EA

A6 AE B6 BE D6
AC

A5
AD

A4 AC
ES

A3 AB
ET1

A2
AA
EX1

A1 A9
ET0

A0 A8
EX0

B7 BF D7
CY

B5 BD D5
F0

B4 BC
PS

B3 BB
PT1

B2 BA
PX1

B1 B9
PT0

B0 B8
PX0

D4
RS1

D3
RS0

D2
OV

D1 E1 F1

D0
P

E7 F7

E6 F6

E5 F5

E4 F4

E3 F3

E2 F2

E0 F0

Na regio de registradores de propsito geral verifica-se que h quatro bancos de registradores, cada um com 8 registradores. Os registradores de cada banco so denominados de R0 a R7. Os bits responsveis pela seleo do R0 do banco 0 ou R0 do banco 3, por exemplo, so os bits RS1 e RS0 do registrador especial PSW (Program Status Word), mostrado a seguir, e que tambm contm as flags do 8051. As flags sero comentadas em uma seo posterior. PSW (Program Status Word) FD OV RS1 RS0 RS1 0 0 1 1 RS0 0 1 0 1 Banco Selecionado 0 1 2 3

CY

AC

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

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

Notas de Aula 2011

25

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

2.4 Princpio de Funcionamento 8085, 8088/86, 8051


2.4.1 Microprocessador 8085

A execuo de uma instruo no microprocessador 8085 comea com a busca da instruo na memria e na decodificao dessa instruo. Isso ocorre em trs ciclos de clock.

Fig. 2.7 Ciclos de Mquina e de Instruo do 8085

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

Notas de Aula 2011

26

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

Fig. 2.8 Ciclos de Mquina e de Instruo do 8085

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

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

Notas de Aula 2011

27

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

2.4.2

Microcontrolador 8051

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

Tclock
E o ciclo de mquina :

1 f clock

1 12MHz

T(ciclo de mquina) = 12*T(clock) = 1 s S1 S2 S3 S4 S5 S6

Ciclo de mquina
Fig. 2.9 Ciclo de mquina do 8051

A Tabela 2.3 mostra algumas instrues e o nmero de ciclos de mquina necessrios para sua execuo. V1 um endereo de desvio dentro da faixa de endereos permitidos. A seo de ajuda do
Escola de Engenharia Eltrica e de Computao Universidade Federal de Gois Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

28

simulador PEQui apresenta a codificao de cada instruo e o nmero de ciclos de clock para sua execuo.
Tabela 2.3 Algumas instrues e o nmero de ciclos de mquina

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

Nmero de ciclos de mquina 1 2 2 2 4

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

Nmero de ciclos de mquina 1 2 2 1 4

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

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

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

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

Notas de Aula 2011

29

Fig. 2.10 Segmentao da memria em regies

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

Exemplos de formao de endereo absoluto a partir dos registradores de segmento e offset: Exemplo 1: Segmento CS = 2000H; Offset IP = 2000H Representao: CS:IP = 2000H:2000H Endereo Absoluto (ou Fsico) = 20000H + 02000H = 22000H Segmento SS = 4000H; Offset SP = 2000H Representao: SS:SP = 4000H:2000H Endereo Absoluto (Fsico) = 40000h + 02000h = 42000h

Exemplo 2:

A segmentao da memria tem a vantagem de permitir o armazenamento de diferentes tipos de informao (cdigos, dados, pilha...) em diferentes reas da memria, possibilitando o a manipulao de diferentes conjuntos de dados, por exemplo, em um ambiente multitarefa, onde um programa atende a
Escola de Engenharia Eltrica e de Computao Universidade Federal de Gois Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

30

vrias entradas de dados. Outra vantagem a possibilidade de armazenamento e realocao de programas dentro da memria que vai de (00000 H a FFFFF H).

2.5 Formato das Instrues


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

O microprocessador 8085 apresenta instrues com trs formatos diferentes: instrues de 1, 2 ou 3 bytes, como ilustrado na Tabela 2.4. Tabela 2.4 Formato geral das instrues do 8085 Caractersticas O byte da instruo o prprio cdigo de operao (opcode)

Tipo de instruo 1 byte

2 bytes

O primeiro byte o opcode e o segundo byte o dado de 8 bits necessrio para a instruo O primeiro byte o opcode; o segundo e o terceiro bytes correspondem a um dado de 16 bits

3 bytes

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

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

Instruo MOV A,C ADD B RLC MVI A,35H ADI 05H ORI 01H LDA 2030H STA 2050H LXI H,2080H

1 byte (opcode) 79 H 80 H 07 H 3E H C6 H F6 H 3A H 32 H 21 H

2 byte (menos significativo)

3 byte (mais significativo)

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

35 H 05 H 01 H 30 H 50 H 80 H 20 H 20 H 20 H

3A 30 20 32 50 20 21 80 20

2.5.2

Formato das Instrues do 8051

O microcontrolador 8051 tambm apresenta instrues com trs formatos de 1, 2 e 3 bytes, mas h diferenas de codificao para cada tipo, como mostrado na Fig. 2.12.

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

Notas de Aula 2011

31

Fig. 2.12 Formato das instrues do 8051

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

Instruo RLC A CLR A CLR C ADD A,Rn ADD A,R0 ADD A,R1 MOV A,Rn MOV A,R0

Codificao 0011:0011 1110:0100 1100:0011 0 0 1 0 : 1 r r r (rrr = 000 a 111) 0010:1000 0010:1001 1 1 1 0 : 1 r r r (rrr = 000 a 111) 1110:1000
Tabela 2.7 Codificao de instrues de 2 bytes

Cdigo Assembly (H) 33 E4 C3 2X (X = 8 a F) 28 29 EX (X = 8 a F) E8

Instruo ADD A,#dado ADD A,#35H MOV A,#dado MOV A,#35H SJMP Relativo SJMP 80H (*)

Codificao 0 0 1 0 : 0 1 0 0 | d7 d6 d5 d4 : d3 d2 d1 d0 0010:0100|0011:0101 0 1 1 1 : 0 1 0 0 | d7 d6 d5 d4 : d3 d2 d1 d0 1110:0100|0011:0101 1 0 0 0 : 0 0 0 0 | r7 r6 r5 r4 : r3 r2 r1 r0 1000:0000|0010:1110

Cdigo Assembly (H) 24 XX 24 35 74 XX 74 35 80 XX 80 2E

AJMP end 11 bits a10 a9 a8 0 : 0 0 0 1 | d7 d6 d5 d4 : d3 d2 d1 d0 XX XX AJMP 620 H 1100:0001|0010:0000 C1 20 * Supondo que a instruo SJMP 80H esteja na posio 50 H, aps a execuo da mesma o contador de programa PC estar apontando para a posio 52 H, uma vez que esta instruo tem 2 bytes. Assim, o endereo relativo na codificao da instruo 80 H 52 H = 2E H. Um endereo de 11 bits pode acessar 2048 posies diferentes de memria (211 = 2048). Assim, o endereo de 11 bits varia de 0 a 2047 ou de 000 H a 7FF H. Para o endereo 620 H tem-se:
Escola de Engenharia Eltrica e de Computao Universidade Federal de Gois Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

32

620 H = 0 1 1 0 | 0 0 1 0 | 0 0 0 0 b a10 = 1, a9 = 1 e a8 = 0 Da: a10 a9 a8 0: 0 0 0 1 1 1 0 0 : 0 0 0 1 = C1 H (primeiro byte da instruo) E o segundo byte da instruo 20 H.
Tabela 2.8 Codificao de instrues de 3 bytes Instruo LCALL End.16 bits LCALL 0100 H LJMP End.16 bits LCALL 0125 H DJNZ direto,relativo DJNZ 01H,$ Codificao 0 0 0 1:0 0 1 0 | a15 a14 a13 a12:a11 a10 a9 a8 | a7 a6 a5 a4:a3 a2 a1 a0 0001:0010|0000:0001|0000:0000 0 0 0 0:0 0 1 0 | a15 a14 a13 a12:a11 a10 a9 a8 | a7 a6 a5 a4:a3 a2 a1 a0 0000:0010|0000:0001|0010:0101 1 1 0 1:0 1 0 1 | a7 a6 a5 a4 : a3 a2 a1 a0 | r7 r6 r5 r4 : r3 r2 r1 r0 1 1 0 1:0 1 0 1 | 0 0 0 0 : 0 0 0 1 | 1 1 1 1 : 1 1 0 1 Cdigo Assembly (H) 12 XX XX 12 01 00 02 XX XX 02 01 25 D5 XX XX D5 01 FD

Na instruo DJNZ 01H,$, na Tabela 2.8, o registrador 01 H decrementado em 1 e, caso o resultado no seja zero, o programa volta para o incio da instruo. O valor FD H da codificao ( 3 na notao de complemento de 2) o valor que adicionado ao endereo atual (PC aps a execuo desta instruo), para obter o endereo de desvio. Como a instruo de 3 bytes, adicionando-se 3 ao endereo no final da instruo, volta-se para o incio. 2.5.3 Formato das Instrues do 8086/8088

As instrues de transferncia de dados do microprocessador 8086/8088 possui o formato mostrado na Fig. 2. 13. Ela composta de 4 bytes, onde o primeiro byte traz o opcode e a definio com relao a manipulao de byte ou Word.
7 opcode 2 1 s 0 w 7 postbyte 0 7 data 0 7 data if sw=01 1 s 0 w 0

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

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

As Tabelas 2.9 e 2.10 mostram, respectivamente, o efeito dos bits s e w na operao e a subdiviso do segundo byte da instruo (postbyte). Se a instruo manipular byte, o ltimo da instruo no utilizado. S haver dados nesse byte se a instruo manipular word, o que definido atravs de s = 0 e w = 1.
s 0 0 Tabela 2.9 Bits de definio do tipo de dado w Efeito 0 A instruo manipula byte 1 A instruo manipula word Tabela 2.10 Postbyte 4 3 2 reg

7 mod

1 r/m

Se mod = 1 1, ento o operando da instruo um registrador, que identificado em r/m. Se a instruo envolver dois registradores, ento o campo reg identifica o segundo registrador.

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

Notas de Aula 2011

33

2.5.4

Formato das Instrues do PIC 16F628

As instrues do microcontrolador PIC 16F628 so compostas de 14 bits e divididas em quatro tipos: operaes com registradores orientadas por byte, operaes com registradores orientadas por bit, operaes de controle e literal e operaes de desvio. Tipo 1: Operaes com registradores orientadas por byte 12 11 10 9 8 7 6 5 4 3 2 1 OPCODE d f (endereo do registrador)

13

OPCODE Cdigo da operao d = 0 o destino do resultado o registrador W, na sada da unidade lgica e aritmtica. d = 1 o destino do resultado o registrador f, cujo endereo fornecido nos 7 primeiros bits. f Registrador de endereos de 7 bits (operando) Tipo 2: Operaes com registradores orientadas por bit 12 11 10 9 8 7 6 5 4 3 2 1 OPCODE b f (endereo do registrador) OPCODE Cdigo da operao b = 0 endereo de 3 bits f Registrador de endereos de 7 bits (operando) Tipo 3: Operaes de controle e literal 12 11 10 9 8 OPCODE OPCODE Cdigo da operao k Indica um valor constante ou literal Tipo 4: Operaes de desvio 12 11 10 9 OPCODE

13

13

5 4 3 2 k (endereo do registrador)

13

5 4 k (literal)

OPCODE Cdigo da operao k Indica um valor constante ou literal de 11 bits.

2.6 Modos de Endereamento e Grupos de Instrues


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

8085 Endereamento Imediato Por registrador Direto Indireto por registrador

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

8086/8088 Endereamento Exemplo Imediato MOV AX,1000H Por registrador MOV AX,BX Absoluto ou Direto MOV AX,[1000H] Indireto por registrador MOV AX,[BX] Indexado MOV AX,0100H[BX] Baseado MOV [BX+0100H],AX Baseado e indexado MOV AX,[BX+SI] Baseado e indexado MOV AX,[BX+SI+5] com deslocamento Strings MOVSB

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

Notas de Aula 2011

34

Tabela 2.11 Grupos de Instrues

8085 Tipo de Instruo Transferncia de dados Aritmtico Lgico Desvio Controle, Pilha e E/S Exemplo MVI A,15H MOV A,B ADD B SUB C ANA B ORI 0FH JMP 2005 H JNZ 2010 H PUSH PSW IN Porta EI

8086/8088 Tipo de Instruo Exemplo MOV AX,1000H Transferncia de dados MOV AX,BX MOV DL,23H ADD SI,DX Aritmtico SUB AX,DX NOT BX Lgico AND CX,DX Desvio Controle Strings JMP BX CLC STC MOVSB STOSW

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


2.7.1 Flags do microprocessador 8085

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

Bit 7 S

Bit 6 Z

Bit 5

Bit 4 AC

Bit 3

Bit 2 P

Bit 1

Bit 0 CY

Fig. 2.14 Registrador de flag do 8085

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

Notas de Aula 2011

35

Exemplo: A adio dos nmeros decimais 150 e 120 resulta em 270. O maior valor possvel de se armazenar em um registrador do 8085 255. A adio citada mostrada a seguir em hexadecimal e binrio. CY Acumulador Decimal Hexa bit8 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 150 96 1 0 0 1 0 1 1 0 120 78 0 1 1 1 1 0 0 0 270 10E 1 0 0 0 0 1 1 1 0 Observando o resultado da operao efetuada, conclui-se: CY = 1 Houve transporte do bit 7 para o bit 8 (fora do acumulador). P=0 H uma quantidade mpar de dgitos 1 no resultado da operao e, portanto, a flag de paridade 0.

AC = 0 No houve transporte do bit 3 para o bit 4. Z = 0 O resultado da operao diferente de zero e, portanto, Z = 0. S = 0 O bit 7 do resultado zero e, portanto, S = 0, indicando um nmero positivo para operaes com sinal. 2.7.2 Flags do microcontrolador 8051

O registrador de flags do microcontrolador 8051 faz parte dos registradores especiais. o registrador PSW (Program Status Word), mostrado a seguir. Registrador PSW Bit 7 CY Bit 6 AC Bit 5 F0 Bit 4 RS1 Bit 3 RS0 Bit 2 OV Bit 1 Bit 0 P

As flags de carry (CY), auxiliar de carry (AC) e de paridade (P) so idnticas quelas do microprocessador 8085. A flag F0 uma flag de uso geral que pode ser usada pelo programador. A flag de overflow (OV) uma flag til em operaes com nmero sinalizado representados na forma de complemento de 2. Ela setada quando h um carry do bit 7, mas no do bit 6 ou um carry do bit 6, mas no do bit 7. H duas situaes que resultam em OV setado: Se a soma de dois nmeros positivos for maior que 7F H e menor que FFH a flag de overflow indica que o nmero no deve ser interpretado como nmero negativo. Se a soma de dois nmeros negativos (bit 7 = 1) resultar em um nmero no intervalo de 00 H a 7F H (ou 100 H a 17F H, considerando a flag de carry, que sempre estar presente nessa situao), a flag de overflow indicar que o nmero no pra ser interpretado como nmero positivo.

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

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

Notas de Aula 2011

36

Fig. 2.15 Carry-in e carry-out Tabela 2.12 Determinao da flag OV

CY_IN 0 0 1 1

CY_OUT 0 1 0 1

OV = (XOR) 0 1 1 0

Exemplo 1: Os nmero 64 H e 2C H esto no intervalo 00 H a 7F H e, portanto, so nmeros positivos nas operaes com nmero sinalizado. No entanto, a soma desses nmero resulta em 90 H, que est na faixa de 80 H a FF H, ou seja, nmero negativo nas operaes com nmero sinalizado. Nesse caso, a flag de overflow (OV) setada, para indicar que o resultado um nmero positivo fora da faixa de magnitude dos nmeros positivos. Verifica-se na ilustrao a seguir que h transporte do bit 6 para o bit 7, mas no h do bit 7 para bit 8. CY bit8 Acumulador bit4 bit3 0 0 0 1 1 0

Decimal 100 44 140

Hexa 64 2C 90

bit7 0 0 1

bit6 1 0 0

bit5 1 1 0

bit2 1 1 0

bit1 0 0 0

bit0 0 0 0

Exemplo 2: Se o nmero 01 H for adicionado ao resultado anterior (90 H) o resultado 91 H, dentro do intervalo de 80 H a FF H, no entanto, no h flag de overflow (OV = 0) porque, na operao com nmeros sinalizados, foram adicionados um nmero positivo (01 H) e um nmero negativo (90 H). Verifica-se na ilustrao a seguir que no h transporte do bit 6 para o bit 7, nem do bit 7 para i bit 8, ou seja, ambos, carry-in e carry-out so zero, resultando em OV = 0. CY bit8 Acumulador bit4 bit3 1 0 0 0 1 0

Decimal 140 01 141

Hexa 90 01 91

bit7 1 0 1

bit6 0 0 0

bit5 0 0 0

bit2 0 0 0

bit1 0 0 0

bit0 0 1 1

Exemplo 3: Os nmero 80 H e 85 H esto no intervalo 80 H a FF H e, portanto, so nmeros negativos nas operaes com nmero sinalizado. No entanto, a soma desses nmeros resulta em 05 H (ou 105 H, levando-se em conta a flag de carry CY, fora do acumulador). O resultado dentro do acumulador est na faixa de 00 H a 7F H, ou seja, nmero positivo nas operaes com nmero sinalizado. Nesse caso, a flag de overflow (OV) setada para indicar que o resultado no um nmero positivo. Verifica-se na ilustrao a seguir que h transporte do bit 7 para o bit 8, mas no h do bit 6 para bit 7. CY bit8 Acumulador bit4 bit3 0 0 0 0 0 0

Decimal 128 133 261

Hexa 80 85 1 05

bit7 1 1 0

bit6 0 0 0

bit5 0 0 0

bit2 0 1 1

bit1 0 0 0

bit0 0 1 1

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

Notas de Aula 2011

37

2.7.3

Flags do microprocessador 8086/8088

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

Fig. 2.16 Flags do microprocessador 8086/8088

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

Fig. 2.17 Transporte do bit 7 e do bit 15

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

Notas de Aula 2011

38

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

D Flag de Direo determina se as operaes com strings vo incrementar ou decrementar os registradores de indexao (SI e DI). D = 1 SI e DI sero decrementados, ou seja, a string ser acessada a partir do endereo mais alto em direo ao mais baixo. D = 0 SI e DI sero incrementados, ou seja, a stringser acessada a partir do endereo mais baixo em direo ao mais alto.

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


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

Fig. 2.18 Pilha no 8085 e no 8086/8088

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

Notas de Aula 2011

39

Fig. 2.19 Pilha no 8051

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

POP reg16 carrega registrador de 16 bits com contedo da pilha 1. 2. 3. 4. O contedo apontado por SP copiado para o byte menos significativo O valor de SP incrementado em 1 O contedo apontado por SP + 1 copiado para o byte mais significativo O valor de SP incrementado em 1

No microprocessador 8085 os registradores de 16 bits (reg16) que podem ser armazenados na pilha so formados por dois registradores de 8 bits, como mostrado na Tabela 2.13, onde so indicados os registradores envolvidos para a instruo PUSH.
Tabela 2.13 Operaes PUSH no 8085

Instruo PUSH PUSH PSW PUSH B PUSH D PUSH H

Registradores A e Flags BeC DeE HeL

No microprocessador 8086/8088 os registradores j so de 16 bits e, assim, as instrues PUSH armazena um registrador por vez, como por exemplo, nas instrues PUSH AX e PUSH CS.
Escola de Engenharia Eltrica e de Computao Universidade Federal de Gois Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

40

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

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

Notas de Aula 2011

41

Microcontrolador 8051

As sees anteriores j apresentaram uma breve introduo ao microcontrolador da famlia 8051. A partir desta seo feito o estudo desse microcontrolador visando aplicaes diversas, tais como acionamento de motor de passo, motor de corrente contnua e lmpadas e uso de teclado, display de 7segmentos, display LCD e sensor de presena. Ao longo dos ltimos anos, na disciplina de microprocessadores, j foram utilizadas vrias verses da famlia 8051. A Tabela 3.1 mostra as verses utilizadas e algumas caractersticas das mesmas.
Tabela 3.1: Algumas verses de microcontroladores da famlia 8051 Memria interna Frequncia Memria de Memria de Memria de de Clock Programa Dados (RAM) Dados (EEPROM) No tem 128kB/256kB No tem 12 MHz ROM 128kB/256kB No tem 12 MHz 4kB/8kB EPROM128kB/256kB No tem 12 MHz 4kB/8kB Flash 128kB/256kB No tem 24 MHz 4kB/8kB Flash 256kB 2 kB 24 MHz 4kB/8kB Flash 256kB No tem 33 MHz 4kB/8kB

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

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

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

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

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

Notas de Aula 2011

42

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

Fig. 3.2: Conexo do cristal oscilador

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

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

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

Notas de Aula 2011

43

3.1 Memrias ROM e RAM


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

Fig. 3.4: Memrias ROM interna e externa

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

Fig. 3.5: Memrias RAM interna e externa

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

Notas de Aula 2011

44

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

Fig. 3.6: Detalhes da Parte baixa da memria RAM interna Escola de Engenharia Eltrica e de Computao Universidade Federal de Gois Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

45

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

3.2 Os Registradores de Funes Especiais


A Tabela 3.3 uma repetio da Tabela 2.2. Ela mostra os principais Registradores Especiais, que ficam localizados na regio de 80h a FF h. Os registradores dessa regio, com endereos de final 0 ou 8, so endereveis por byte ou por bit. Os demais, apenas por byte. A tabela mostra tambm os bits individuais desses registradores de final 0 e 8.
Tabela 3.3: Principais Registradores Especiais Endereos individuais dos Bits e Mnemnico Registrador Endereo denominaes de alguns bits Latch da Porta 0 P0 80 H 87 86 85 84 83 82 81 Apontador de Pilha SP 81 H Apontador de Dados DPTR 83H 82H LSB do Apontador de Dados DPL 82 H MSB do Apontador de Dados DPH 83 H SMOD Controle de Energia PCON 87 H Controle do Contador/Temporizador TCON 88 H 8F 8E 8D 8C 8B 8A 89
TF1 TR1 C/T1 TF0 M11 TR0 M01 IE1 G0 IT1 C/T0 IE0 M10

80

88
IT0 M00

Controle do Modo do Temporizador/ Contador LSB do Temporizador/Contador 0 LSB do Temporizador/Contador 1 MSB do Temporizador/Contador 0 MSB do Temporizador/Contador 1 Latch da Porta 1 Controle da Porta Serial Porta de Dados Seriais Latch da Porta 2 Habilitador de Interrupo Latch da Porta 3 Controle de Prioridade da Interrup. Registrador de Estado do Programa Acumulador Registrador B

TMOD TL0 TL1 TH0 TH1 P1 SCON SBUF P2 IE P3 IP PSW ACC ou A B

89 H 8A H 8B H 8C H 8D H 90 H 98 H 99 H A0 H A8 H B0 H B8 H D0 H E0 H F0 H

G1

97 9F
SM1

96 9E
SM2

95 9D
SM3

94 9C
REN

93 9B
TB8

92 9A
RB8

91 99
TI

90 98
RI

A7 AF
EA

A6 AE B6 BE D6
AC

A5
AD

A4 AC
ES

A3 AB
ET1

A2
AA
EX1

A1 A9
ET0

A0 A8
EX0

B7 BF D7
CY

B5 BD D5
F0

B4 BC
PS

B3 BB
PT1

B2 BA
PX1

B1 B9
PT0

B0 B8
PX0

D4
RS1

D3
RS0

D2
OV

D1 E1 F1

D0
P

E7 F7

E6 F6

E5 F5

E4 F4

E3 F3

E2 F2

E0 F0

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

Notas de Aula 2011

46

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

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

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

3.3 Instrues Gerais do Microcontrolador 8051


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

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

MOV A,DIRETO

Copia no acumulador o contedo do registrador cujo endereo direto. MOV A,15H Copia no acumulador o contedo do registrador R5 (15H), do banco 2. Copia no acumulador o contedo do registrador reg, sendo reg = R0, R1, ..., R7 , do banco de registradores que estiver ativo. MOV A,R6 Copia no acumulador o contedo do registrador R6.

MOV A,REG

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

Notas de Aula 2011

47

Instruo MOV dir2,dir1

Descrio e exemplos Copia no registrador cujo endereo dir2 o contedo do registrador cujo endereo dir1. MOV 02H,05H Copia em R2 (02H) o contedo do registrador R5 (05). Carrega registrador R0 com valor 20h Copia o valor 55h na posio apontada pelo registrador R0, ou seja, endereo 20H, que a primeira posio acima do banco de registradores. Carrega registrador de 16 bits dptr com valor 200H Carrega acumulador com o contedo da posio apontada por a + dptr. Se, por exemplo, A = 04H, ento carrega acumulador com o contedo da posio 204H. Adiciona o contedo do registrador reg ao contedo do acumulador. ADD A,R1 Se A = 07 H e R1 = 03 H, ento, aps a instruo, a = 0AH. Adiciona o contedo do registrador de endereo direto ao contedo do acumulador: A = A + (direto) ADD A,10H Se A = 07 H e 10H = 03 H, ento, aps a instruo, A = 0AH. Adiciona ao contedo do acumulador o valor dado: A = A + dado ADD A,#04h Se a = 07 H, ento, aps a instruo, A = 0BH. Adiciona ao contedo do acumulador o contedo da posio apontada por Rn. A = A + ((Rn)). MOV R0,#20h ADD A,@R0 Se A = 07 H e registrador 20H = #03H, ento, aps a instruo, A = 0AH. Subtrai o contedo do acumulador do DADO. A = A DADO. SUBB A,#05H Se A = 07 H, ento, aps a instruo, A = 02 H. Rotaciona o contedo do acumulador para a esquerda (rotate left). Por exemplo, se originalmente A= 21 H (0010 0001b), aps a instruo, tem-se: A = 42 H (0100 0010b). Rotaciona o contedo do acumulador para a direita (rotate right). Por exemplo, se originalmente A= 8C H (1000 1100b), aps a instruo, tem: A = 46 H (0100 0110b). Incrementa contedo do registrador reg. Por exemplo, se R1 = 05H, ento INC R1 resulta em R1 = 06 H. Decrementa contedo do registrador reg. Por exemplo, se R2 = 0B H, ento DEC R2 resulta em R2 = 0A H. Complementa o contedo do acumulador. Por exemplo, se originalmente, A = 55 H, ento, aps a instruo, A = AA H. Faz a troca dos nibbles do acumulador, ou seja, o nibble mais significativo passa a ocupar os quatro primeiros bits do acumulador e o nibble menos significativo passa a ocupar os quatro ltimos bits. Por exemplo, se originalmente, A = 35 H, aps a instruo, A = 53 H. Faz o ajuste decimal do acumulador. Adiciona 6 ao dgito que esteja no intervalo de A a F. Por exemplo, se originalmente A = 7A H, aps a instruo torna-se A = 80 H. Multiplica o contedo de A pelo contedo de B. O resultado est em B A. O resultado da multiplicao um nmero de 16 bits, por isso precisa de dois registradores para o resultado. MUL AB se A = 25 H e B = 30 H, aps a instruo, tem-se: B = 06 H e A = F0 H, pois o resultado da multiplicao : 6F0 H

MOV R0,#20H MOV @R0,#55H MOV DPTR,#200H MOVC A,@A+DPTR ADD A,REG

ADD A,DIRETO

ADD A,#DADO

ADD A,@Rn

SUBB A,#DADO

RL A

RR A INC REG DEC REG CPL A

SWAP A

DA A

MUL AB

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

Notas de Aula 2011

48

Instruo DIV AB

Descrio e exemplos Divide o contedo de A pelo contedo de B. A recebe o quociente e B o resto. DIV AB se A = CA H (202) e B = 19 H (25), aps a instruo, tem-se: A = 08 H e B = 02, pois a diviso em decimal (202/25) resulta em quociente 8 e resto 2. Faz uma operao AND entre acumulador e DADO. A = A (AND) DADO. ANL A,#0FH se originalmente A = 35 H, aps a instruo torna-se: A = 05H. Faz uma operao OR entre o acumulador e DADO. A = A (OR) DADO. ORL A,#20H se originalmente A = 07 H, aps a instruo torna-se: A = 27 H.

ANL A,#DADO ORL A,#DADO

3.4 Instrues de Comparao, Deciso e de Desvio


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

Instruo SJMP DESVIO AJMP DESVIO LJMP DESVIO JNZ DESVIO

Descrio e exemplos Desvio incondicional curto (Short Jump) relativo. Pula at 127 bytes para a frente e at 128 bytes para trs. Instruo de desvio para distncias correspondentes a at 2048 bytes. Endereo de 11 bits. Desvio incondicional longo, para qualquer posio da memria de programa. Endereo de 16 bits. Instruo de desvio condicional: Jump IF Not Zero. Pula para desvio se a operao anterior no resultar em zero. Verifica automaticamente a flag de zero. Chamada de subrotina. Desvia para o endereo onde a subrotina est localizada. Ao encontrar a instruo RET, retorna para a instruo que vem logo aps a chamada de subrotina. Desvio condicional para a posio indicada por desvio. Desvia se a flag de CARRY estiver setada. Desvio condicional para a posio indicada por desvio. Desvia se a flag de CARRY no estiver setada. Decrementa registrador reg e pula para a posio desvio se o resultado no for zero. uma combinao das instrues DEC e JNZ do microprocessador 8085. MOV R5,#10 V1: DJNZ R5,V1 O registrador R5 decrementado at tornar-se zero Compara contedo do acumulador com dado e pula para a posio V1 se no forem iguais. MOV A,#00H V1: INC A CJNE A,#20H,V1 Compara o contedo de A com 20 hexadecimal e, caso no seja igual pula para V1 para incrementar A. Quando for igual, pula para a prxima linha.

LCALL SUBROT

JC DESVIO JNC DESVIO

DJNZ REG,DESVIO

CJNE A,#DADO,V1

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

Notas de Aula 2011

49

O cdigo da instruo LJMP INICIO 020030, onde 02H o opcode da instruo e 0030H o endereo de desvio, ou seja, a posio de incio do programa, para execuo da instruo MOV A,#35H. Endereo 0000 0000 0030 0030 0032 0035 0037 0040 0040 0042 Codificao Rtulo Mnemnico $MOD51 ORG 00H LJMP INICIO

020030

7435 75F045 8009

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

2453 020030

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

3.5 Operaes com bit


As instrues mostradas a seguir so algumas das instrues usadas nas operaes com bit, ao invs de byte. O bit pode ser de um registrador especial (daqueles que permitem controle individual por bit) ou da regio da memria RAM que vai do endereo 20H at 2FH.
Instruo JB BIT,DESVIO Descrio e exemplos Desvia para a posio desvio, caso o bit esteja setado. JB LIGADO,DESLIGA Se o bit ligado = 1, ento o programa desvia para a posio deliga. Desvia para desvio, caso o bit NO esteja setado. JNB LIGADO,LIGA Se o bit ligado = 0, ento o programa desvia para a posio liga. Seta o bit. SETB LIGADO Torna o bit ligado igual a 1. Limpa o bit CLR LIGADO Torna o bit ligado igual a zero

JNB BIT,DESVIO

SETB BIT CLR BIT

3.6 Diretivas de programao


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

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

Notas de Aula 2011

50

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

3.7 Programas Exemplos


(a) Programa que faz uma contagem hexadecimal crescente ininterrupta de 00 H a FF H.
Mnemnico $MOD51 ORG 00H LJMP INICIO ORG 30H INICIO: MOV A,#00H VOLTA: MOV P1,A INC A SJMP VOLTA END Rtulo Comentrio sobre o Efeito da Operao Incluso de arquivo com variveis pr-definidas A prxima instruo estar no endereo 00h Pula para o endereo indicado com o rtulo inicio A prxima instruo estar no endereo 30h Carrega acumulador com valor 00h Transfere para a porta P1 o contedo do acumulador Incrementa o contedo do acumulador Pula para o endereo indicado pelo rtulo volta Instruo obrigatria no fim de todo programa

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

Rtulo

Mnemnico

Comentrio sobre o Efeito da Operao


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

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

VOLTA2: MOV P1,A


DJNZ ACC,VOLTA2 SJMP VOLTA END

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

Notas de Aula 2011

51

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


Mnemnico $MOD51 ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#2FH MOV A,#00H VOLTA: MOV P1,A ADD A,#01H DA A CJNE A,#60H,VOLTA SJMP INICIO END Rtulo Comentrio sobre o Efeito da Operao Incluso de arquivo com variveis pr-definidas A prxima instruo estar no endereo 00h Pula parainicio A prxima instruo estar no endereo 30h Carrega apontador de pilha SP com valor 2Fh Carrega acumulador com valor 00h Transfere contedo do acumulador para porta P1 Adiciona 01 ao contedo do acumulador Faz o ajuste decimal do contedo do acumulador Compara contedo do acumulador com 60h. Caso seja diferente, volta Pula para inicio Instruo obrigatria no fim de todo programa

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

Rtulo

Mnemnico

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

No. ciclos 1 1 2 2 2

No. vezes 1 10 1000 10 1

Tempo de atraso

Comentrio sobre o Efeito da Operao

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

1 s

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

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

Notas de Aula 2011

52

(d) Programa que faz uma contagem decimal decrescente interrupta de 59 a 0. Acrescente a subrotina de atraso dada anteriormente.
Mnemnico $MOD51 ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#2FH MOV A,#60H VOLTA: ADD A,#99 DA A MOV P1,A CJNE A,#00H,VOLTA SJMP INICIO END Rtulo Comentrio sobre o Efeito da Operao Inclui biblioteca pr-definida A prxima instruo ser alocada no endereo 00h Pula para o incio do programa A prxima instruo ser alocada no endereo 30h Define a pilha na posio 2Fh da memria RAM Carrega acumulador com valor 60h Aciona 99 ao acumulador Corrige para decimal Transfere contedo do acumulador para a Porta P1 Se contedo de A for diferente de 0 pula para volta Pula (Short Jump) para inicio

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

Rtulo

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

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

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

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

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

Notas de Aula 2011

53

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

Rtulo

Mnemnico $MOD51 ORG 00H LJMP INICIO

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

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

Dados que comeam com letra devem ser precedidos de 0

Ultimo dado de interesse da tabela Valor usado para indicar fim da tabela

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

Notas de Aula 2011

54

Interrupes
4.1 Princpio de Funcionamento e Habilitao
Interrupo o processo pelo qual a execuo de um programa interrompida para a execuo de um outro processamento que pode ser solicitado por uma das trs fontes abaixo: Interrupo por software (instruo) Interrupo pedida por perifrico externo Interrupo pedida por perifrico interno (temporizador/contador, porta serial) O microcontrolador 8051 pode ser interrompido de cinco maneiras diferentes: Pela interrupo externa INTO\ - pino 12 (P3.2) Pelo timer/counter (temporizador/contador) interno TIMER0 Pela interrupo externa INT1\ - pino 13 (P3.3) Pelo timer/counter (temporizador/contador) interno TIMER1 Pelo canal de comunicao serial (Pinos 10 e 11 = P3.0 e P3.1)

O pedido de interrupo pode ou no ser atendido, de acordo com a condio de certos registradores. No 8051 os registradores que comandam a interrupo so Registrador de Habilitao: IE (Interrupt Enable) = Reg. A8h Registrador de Prioridades: IP (Interrupt Priority) = Reg. B8h Registrador de Controlador: TCON (Timer Control) = Reg. 88h Registrador IE: (Reg. A8h) EA (Enable All)
Bit 7 EA Bit 6 x Bit 5 x Bit 4 ES Bit 3 ET1 Bit 2 EX1 Bit 1 ET0 Bit 0 EX0

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

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

Registrador IP: (Reg. B8h)

Bit 7 x

Bit 6 x

Bit 5 x

Bit 4 PS

Bit 3 PT1

Bit 2 PX1

Bit 1 PT0

Bit 0 PX0

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

Notas de Aula 2011

55

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

Menor prioridade

As interrupes externas podem ser ajustadas para serem detectadas por nvel 0 ou pela transio do nvel 1 para o nvel 0. O ajuste feito atravs o registrador TCON, dado abaixo. Registrador TCON: (Reg. 88h)
Controle do Temporizador TF1 TR1 TF0 TR0 Bit 3 IE1 Bit 2 IT1 Bit 1 IE0 Bit 0 IT0

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

4.2 Endereos Desvio das Interrupes


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

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

Notas de Aula 2011

56

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

4.3 Programas Exemplos com Interrupo


1. Programa com interrupo externa 0. Quando a interrupo INT0 solicitada atravs do pino P3.2 o processamento desviado para a posio 03 h da memria ROM e, em seguida, desviado para uma subrotina que manda uma contagem crescente para a porta P1.
Rtulo Mnemnico $MOD51 ORG 00H LJMP INICIO ORG 03H LJMP ATENDE ORG 30H INICIO: MOV SP, #2FH MOV IE, #81H MOV TCON, #01H MOV A, #00H CJNE A,#01H, $ SJMP FIM ATENDE: MOV P1,A INC A LCALL ATRASO CJNE A,#00H,ATENDE MOV A,#01H RETI ATRASO: MOV R0,#10 REPETE: MOV R1,#100 DJNZ R1, $ DJNZ R0, REPETE RET FIM: NOP END Habilita a interrupo externa 0 (EA = 1 e EX0 = 1) INT0\ reconhecida pela transio de 1 para 0 (IT0 = 1). Poderia ser SETB IT0 Aguarda interrupo. Enquanto a 01h, fica aguardando nessa linha. O caractere $ indica desvio para a mesma linha. Subrotina de atendimento da interrupo INT0. Faz P1 = a Incrementa valor de A Chama subrotina de atraso Compara a com 00h. Se for diferente, vai para atende Quando a = 00h, na linha anterior, ento faz A = 01h, nesta linha. Retorna da subrotina de interrupo Subrotina de atraso de tempo Repete a instruo que decrementa r1 at zerar r1 Comentrio sobre o Efeito da Operao

Endereo de desvio quando h um pedido da interrupo INT0 (pino P3.2). Quando h um pedido de interrupo atravs do pino P3.2, desvia para atende

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

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

Notas de Aula 2011

57

2. Programa com as interrupes externas 0 e 1. Neste programa, quando a interrupo INT0 acionada atravs do pino P3.2, o processamento desviado para uma subrotina que faz uma contagem crescente na porta P1. Quando a interrupo INT1 solicitada atravs do pino P3.3, uma contagem decrescente enviada tambm para a porta P1. Lembrar de guardar o acumulador na pilha em cada atendimento de subrotina, uma vez que ele utilizado nas duas subrotinas.
Rtulo Mnemnico $MOD51 ORG 00H LJMP INICIO ORG 03H LJMP ATENDE0 ORG 13H LJMP ATENDE1 ORG 30H INICIO: MOV SP, #2fH MOV IE, #85H MOV TCON, #05H MOV A, #00H SJMP $ ATENDE0: PUSH ACC MOV A,#00H V1: MOV P1,A INC A LCALL ATRASO CJNE A,#00H,V1 POP ACC RETI ATENDE1: PUSH ACC MOV A,#0ffH V2: MOV p1,A LCALL ATRASO DEC A CJNE A,#0FFH,V2 POP ACC RETI ATRASO: MOV R0,#10 REPETE: MOV R1,#100 DJNZ R1, $ DJNZ R0, REPETE RET END Decrementa contedo do acumulador Compara A com FFh. Se for diferente desvia para V2 Recupera contedo do acumulador que foi guardado na pilha Habilita interrupes externas 0 e 1 (EA = 1, EX0 = 1 e EX1 = 1) INT0 e INT1 por transio de 1 para 0 (IT0 = 1 e IT1 = 1). Aguarda interrupo em um lao infinito Incio da subrotina de atendimento da interrupo 0. Faz acumulador igual a zero Contedo de A transferido para a porta P1 Incrementa acumulador Chama subrotina de atraso de tempo Compara acumulador com 00h. Se for diferente desvia para V1 Recupera da pilha o contedo do acumulador retorna de subrotina de interrupo Incio da subrotina de atendimento da interrupo 1. Comentrio sobre o Efeito da Operao

Desvia para a subrotina de atendimento da interrupo INT0 Desvia para a subrotina de atendimento da interrupo INT1

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

Notas de Aula 2011

58

3. Este programa funciona como o anterior, mas ao invs de uma contagem crescente e uma decrescente, ele faz um deslocamento esquerda dos bits da porta P1 para um pedido de INT0 e um deslocamento direita dos mesmos bits para um pedido de INT1.
Rtulo Mnemnico $MOD51 ORG 00H LJMP INICIO ORG 03H LJMP ATENDE0 ORG 13H LJMP ATENDE1 ORG 30H INICIO: MOV SP, #2FH MOV IE, #85H MOV TCON, #05H MOV A, #00H SJMP $ ATENDE0: PUSH ACC MOV A,#01H V1: MOV P1,A LCALL ATRASO RL A CJNE A,#01H,V1 POP ACC RETI ATENDE1: PUSH ACC MOV A,#80H VOLTA2: MOV P1,A LCALL ATRASO RR A CJNE A,#80H,VOLTA2 POP ACC RETI ATRASO: MOV R0,#10 REPETE: MOV R1,#100 DJNZ R1, $ DJNZ R0, REPETE RET END Habilita interrupes externas 0 e 1 (EA = 1, EX0 = 1 e EX1 = 1) INT0 e INT1 por transio de 1 para 0 (IT0 = 1 e IT1 = 1). Acumulador assume o valor inicial 00. aguarda interrupo num loop infinito nessa linha Subrotina de atendimento da interrupo 0. Guarda acumulador na pilha O bit 0 do acumulador assume o valor 1. Os demais so zero. Transfere para a porta P1 o contedo do acumulador Chama subrotina de atraso de tempo Rotaciona para a esquerda o contedo do acumulador Compara acumulador com 01h. Se for diferente desvia para V1 Recupera da pilha o contedo do acumulador retorna de subrotina de interrupo Subrotina de atendimento da interrupo 1. Guarda acumulador na pilha O bit 7 do acumulador assume o valor 1. Os demais so zero. Transfere para a porta P1 o contedo do acumulador Chama subrotina de atraso de tempo Rotaciona para a direita o contedo do acumulador Compara A com 80h. Se for diferente desvia para V2 Recupera da pilha o contedo do acumulador Retorna de subrotina de interrupo Desvia para a subrotina de atendimento da interrupo INT1 Desvia para a subrotina de atendimento da interrupo INT0 Comentrio sobre o Efeito da Operao

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

Notas de Aula 2011

59

Temporizadores e Contadores do 8051


5.1 Princpio de Funcionamento e Modos de Operao

O 8051 tem dois temporizadores/contadores de 16 bits que podem trabalhar em 4 modos distintos, mostrados na Tabela 5.1. Tabela 5.1: Modos de operao dos temporizadores 0 e 1
Modo 0 1 2 3 Descrio Contador/Temporizador de 13 bits (8 bits com divisor de frequncia de at 32 vezes). Pode contar at 8192 = 32 x 255. Contador/Temporizador de 16 bits (pode contar at 65535) Contador/Temporizador de 8 bits com recarga automtica 2 contadores/temporizadores independentes de 8 bits. Esse modo no vale para o Contador/Temporizador 1, que fica inativo nesse modo.

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

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

Notas de Aula 2011

60

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

Tabela 5.2: Descrio dos bits do registrador T2CON.

Bit
T2F

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

EXF2

RCLK

TCLK

EXEN2 TR2 C/T2\

CP/RL2\

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

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

Notas de Aula 2011

61

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

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

O temporizador 2 pode ser programado para uma contagem crescente ou decrescente quando configurador no modo de 16 bits com recarga automtica. Esta seleo feita atravs do bit DCEN (habilitao de contagem decrescente) do registrador especial T2MOD (registrador C9H).
T2MOD Bit 7 X Bit 6 X Bit 5 X Bit 4 X Bit 3 X Bit 2 X Bit 1 T2OE Bit 0 DCEN

Tabela 5.3: Descrio dos bits do registrador T2MOD.

Bit
T2OE DCEN

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

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

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

Notas de Aula 2011

62

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

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

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

5.2 Programas Exemplos usando Temporizadores


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

Notas de Aula 2011

63

Rtulo

Mnemnico $MOD51 ORG 00H LJMP INICIO

Comentrio sobre o Efeito da Operao Carrega biblioteca de definies Pula para o incio do programa

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

Faz apontador de pilha SP = 2FH Temporizador 0 no modo de 16 bits (modo 1) e temporizador 1 no modo 0 Dispara temporizador 0 Dispara temporizador 1 Lao infinito

Exemplo 2: Programa em que o temporizador 0, no modo 1, faz uma contagem ininterrupta de 10.000 pulsos (de 55535 a 65535) e gera uma onda quadrada no pino P1.0. Observar no simulador a evoluo dos registradores TH0 e TL0 e a mudana de estado do pino P1.0.
Rtulo Mnemnico $MOD51 ORG 00H LJMP INICIO Comentrio sobre o Efeito da Operao Carrega biblioteca de definies Pula para o incio do programa

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

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

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

10 ms

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

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

Notas de Aula 2011

64

Rtulo

Mnemnico $MOD51 ORG 00H LJMP INICIO ORG 0BH MOV TH0,#0D8H MOV TL0,#0EFH CLR TF0 CPL P1.0 RETI

Comentrio sobre o Efeito da Operao Carrega biblioteca de definies Pula para o incio do programa Endereo da interrupo do temporizador 0 Carrega TH0/TL0 com valor hexadecimal D8EFH = 55.535 decimal Limpa flag de final de contagem Complementa o pino 0 da porta P1 Gera onda quadrada no pino P1.0

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

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

Exemplo 4: Programa que gera onda quadrada no pino P1.0 e cuja subrotina de atraso de tempo utiliza o temporizador 1 no modo 1. Se o cristal oscilador for de 12 MHz o tempo de atraso corresponder a aproximadamente 1 s.
Rtulo Mnemnico $MOD51 ORG 00H LJMP INICIO Comentrio sobre o Efeito da Operao

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

Temporizador 1 no modo de 16 bits (modo 1) Complementa o bit 0 da porta P1 Chama subrotina de atraso de tempo

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

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

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

Notas de Aula 2011

65

1,0 s

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

Exemplo 5: Uso do temporizador 1 no modo 2, com interrupo. Nesse exemplo, a cada vez que o temporizador 1 chega ao final da contagem (FFH), h um desvio para a subrotina atende1, onde o pino 0 da porta P1 complementado e o valor de recarga TH1 tambm complementado. Observar que a onda gerada no pino P1.0 possui tempo ligado diferente do tempo desligado, devido complementao de TH1 a cada interrupo (Gerao de sinal PWM: Modulao de Largura de Pulso).
Rtulo Mnemnico $MOD51 ORG 00H LJMP INICIO ORG 1BH LJMP ATENDE1 ORG 30H INICIO: MOV SP, #2FH MOV IE,#88H MOV TMOD,#20H MOV TH1,#3FH MOV TL1,TH1 SETB TR1 SJMP $ ATENDE1: CPL P1.0 CLR TF1 MOV A,TH1 CPL A MOV TH1,A RETI END Comentrio sobre o Efeito da Operao

Endereo de desvio para a interrupo do temporizador 1. Desvia para subrotina de atendimento de interrupo do temporizador 1

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

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

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

Notas de Aula 2011

66

255 s

192 s 63 s

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

Exemplo 6: O programa gera uma onda modulada no pino P1.0 (sinal PWM) usando o temporizador 1 no modo 2, com interrupo. A interrupo externa 0 usada para aumentar o tempo ligado de P1.0 e a externa 1 usada para diminuir o tempo ligado. Ambas so por transio. Na subrotina de interrupo externa 0 o perodo ligado TON incrementado e seu complemento transferido para TOFF. Na subrotina da interrupo externa 1 o perodo ligado TON decrementado e seu complemento transferido para TOFF.
Rtulo Mnemnico $MOD51 TON EQU 0AH TOFF EQU 0BH ORG 00H LJMP INICIO ORG 03H LJMP EXTERNA0 ORG 13H LJMP EXTERNA1 ORG 1BH LJMP ATENDE1 ORG 30H INICIO: MOV SP, #2FH MOV IE,#8DH MOV TCON,#05H MOV TMOD,#20H MOV TH1,#3FH MOV A,TON CPL A MOV TOFF,A CLR P1.0 MOV TL1,TON MOV TH1,TOFF SETB TR1 SJMP $ ATENDE1: CLR TF1 JB P1.0,DESLIGA LIGA: SETB P1.0 MOV TH1,TON RETI Endereo de desvio para a interrupo externa 0 Desvia para a subrotina de atendimento da interrupo externa 0 Endereo de desvio para a interrupo externa 1 Desvia para a subrotina de atendimento da interrupo externa 1 Endereo de desvio para a interrupo do temporizador 1. Desvia para subrotina de atendimento de interrupo do temporizador 1 Comentrio sobre o Efeito da Operao Registrador 0AH recebe o nome de TON (Tempo ligado de P1.0) Registrador 0BH recebe o nome de TOFF (Tempo desligado de P1.0)

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

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

Notas de Aula 2011

67

DESLIGA: CLR P1.0 MOV TH1,TOFF RETI EXTERNA0: INC TON MOV A,TON CPL A MOV TOFF,A RETI EXTERNA1: DEC TON MOV A,TON CPL A MOV TOFF,A RETI END

Desliga pino P1.0 Carrega TH1 com o prximo valor de recarga

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

Diminui o tempo ligado do pino P1.0 Carrega acumulador com valor do tempo ligado Complementa o tempo ligado Carrega o tempo desligado com o complemento do tempo ligado

Exemplo 7: Uso do temporizador 1 no modo 2, com interrupo. O programa gera no pino P1.0 uma onda cujos tempos ligado e desligado variam devido ao incremento do valor de recarga TH1. Na subrotina de atendimento da interrupo do temporizador 1 o valor de recarga TH1 incrementado a cada final de contagem. Assim, a recarga seguinte est incrementada em uma unidade. Assim, a contagem comea sempre uma unidade a mais que a anterior e o perodo da onda quadrada diminui a cada nova contagem.
Rtulo Mnemnico $MOD51 ORG 00H LJMP INICIO ORG 1BH LJMP ATENDE1 ORG 30H INICIO: MOV SP, #2FH MOV IE,#88H MOV TMOD,#20H MOV TH1,#00H MOV TL1,TH1 SETB TR1 SJMP $ ATENDE1: CLR TF1 CPL P1.0 INC TH1 RETI END Comentrio sobre o Efeito da Operao

Endereo de desvio para a interrupo do temporizador 1. Desvia para a subrotina que atende o temporizador 1.

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

Exemplo 8: Uso do temporizador 1 no modo 2, com interrupo. O programa gera no pino P1.0 uma onda cujos tempos ligado e desligado variam devido variao do valor de recarga TH1.
Rtulo Mnemnico $MOD51 ORG 00H LJMP INICIO ORG 1BH LJMP ATENDE1 Comentrio sobre o Efeito da Operao

Endereo de desvio para a interrupo do temporizador 1. Desvia para a subrotina que atende o temporizador 1.

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

Notas de Aula 2011

68

ORG 30H INICIO: MOV SP, #2FH MOV IE,#88H MOV TMOD,#20H MOV TH1,#00H MOV TL1,TH1 CLR F0 SETB TR1 SJMP $ ATENDE1: CPL P1.0 CLR TF1 JB F0,DECREM INC TH1 MOV A,TH1 CJNE A,#0FAH,SAI SETB F0 RETI DECREM: DEC TH1 MOV A,TH1 CJNE A,#05H,SAI CLR F0 SAI: NOP RETI END

Habilita a interrupo do temporizador 2 Temporizador 1 no modo de recarga automtica (modo 2) Carrega registrador de recarga TH1 com valor 00h Transfere para TL1 o contedo de TH1. TL1 o contador no modo 2. Flag que indica se TH1 est sendo incrementado (F0 = 0) ou decrementado D incio contagem do temporizador 1 Fica num loop infinito, saindo a cada fim de contagem do temporizador 1 Complementa o bit zero da porta P1 a cada fim de contagem do TEMP1 Limpa a flag de final de contagem Se F0 = 1, decrementa TH1 Incrementa valor de recarga TH1 Transfere TH1 para acumulador para verificar se j alcanou FAH Enquanto TH1 menor que FAH continua aumentando TH1 Seta flag que indica se TH1 deve ser incrementado ou decrementado

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

Exemplo 9: O programa usa a interrupo externa 0, por transio, para alternar entre os modos 0 e 1 a operao do temporizador 0. A flag F0, do registrador especial PSW (F0 = PSW.5), usada para a alternncia entre os dois modos de operao.
Rtulo Mnemnico $MOD51 ORG 00H LJMP INICIO ORG 03H LJMP MUDA ORG 0BH CPL P1.0 CLR TF0 RETI ORG 30H INICIO: MOV SP,#2FH MOV TMOD,#00H MOV IE,#83H MOV TCON,#01H SETB TR0 SJMP $ MUDA: CPL F0 JB F0, MODO_UM MODO_ZERO: MOV TMOD,#00H RETI MODO_UM: MOV TMOD,#01H RETI END Comentrio sobre o Efeito da Operao

Endereo de desvio para a interrupo externa 0 Desvia para a subrotina que define o modo de operao do temporizador Endereo de desvio para a interrupo do temporizador 0 Gera uma onda quadrada no pino P1.0. Perodo depende do modo 0 ou 1 Limpa a flag de final de contagem

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

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

Notas de Aula 2011

69

Exemplo 10: O programa usa o temporizador 2 para gerar uma onda quadrada no pino P1.0 a cada 50.000 pulsos. Os registradores relacionados ao temporizador 2 so definidos no incio do programa porque no esto presentes na biblioteca MOD51.
Rtulo Mnemnico $MOD51 T2MOD EQU RCAP2L EQU RCAP2H EQU TR2 BIT TF2 BIT ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#2FH MOV T2MOD,#01H MOV RCAP2H,#3CH MOV RCAP2L,#0AFH SETB TR2 V1: JNB TF2,V1 CPL P1.0 CLR TF2 SJMP V1 END Comentrio sobre o Efeito da Operao 0C9H ; Registrador de Configurao do Temporizador 2 0CAH ; Byte Inferior do registrador de recarga do Temporizador 2 0CBH ; Byte Superior do registrador de recarga do Temporizador 2 0CAH ; Bit de disparo do Temporizador 2 (=T2CON.2) 0CFH ; Bit que indica fim de contagem do Temporizador 2 (=T2CON.7)

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

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

50 ms

Fig. 5.8: Onda quadrada gerada pelo temporizador 2

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

Notas de Aula 2011

70

Comunicao Serial
6.1 Noes Bsicas de Comunicao Serial

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

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

Fig. 6.1: Pacote de informaes na comunicao serial assncrona

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

Notas de Aula 2011

71

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

No projeto de irrigao desenvolvido na EEEC/UFG dois pacotes de informao so utilizados: no primeiro pacote cada byte de dados (presso numa tubulao de gua) do transmissor 1 enviado juntamente com seu complemento. O primeiro byte um byte que indica incio dos dados (foi escolhido o byte 13h) e o ltimo byte indica fim do pacote (foi escolhido o byte 01h).

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

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

Notas de Aula 2011

72

Tabela 6.1: Cdigos ASCII

Tabela 6.2: Registrador de Controle da Comunicao Serial

(SCON) =

SM0 SM1 SM2 REN TB8

RB8

TI

RI

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

Notas de Aula 2011

73

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

Baud rate 2 SMOD *

f osc (bits / s) 64

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

Baud rate

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

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

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

Notas de Aula 2011

74

Tabela 6.3: Taxas de transmisso mais comuns

Baud Rate (bits/seg) Modo 0 Mx: 1MHz Modo 2 Mx: 375K Modo 1, 3: 62,5K 19,2K 9,6K 4,8K 2,4K 1.2K 137,5 110 110

Freq. Osc. (MHz) 12 12 12 11,059 11,059 11,059 11,059 11,059 11,059 6 12

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

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

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

6.2 Roteiros de Programas usando Comunicao Serial


1. No programa a seguir a porta serial configurada no modo 0 e usada para transmitir uma contagem crescente decimal, que tambm enviada para a porta P1, onde um conjunto de LEDs pode ser usado para mostrar a contagem. O pino P3.0 (RxD) usado para a transmisso dos dados e o pino P3.1 (TxD) usado para a frequncia de clock.
Rtulo Mnemnico $MOD51 ORG 00H LJMP INICIO Comentrio sobre o Efeito da Operao

ORG 30H INICIO: MOV SP,#2FH MOV R0,#00H V1: MOV SBUF,R0 JNB TI,$ MOV P1,R0 MOV A,R0 ADD A,#01 DA A MOV R0,A LCALL ATRASO SJMP V1 ATRASO: MOV R4,#100 V2: MOV R5,#250 DJNZ R5,$ DJNZ R4,V2 RET END

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

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

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

Notas de Aula 2011

75

1 s f = 1 MHz

Bit menos significativo

Fig. 6.2: Transmisso sncrona de contagem crescente

2. O programa a seguir equivalente ao anterior, mas utiliza o modo 1 (assncrono) de comunicao serial com baud rate de 9600 bps. Nesse caso, o cristal oscilador de 11,0592 MHz, o que resulta (da Tabela 6.3) em um valor de recarga TH1 = FDH, para o temporizador 1 no modo 2 (recarga automtica).
Rtulo Mnemnico $MOD51 ORG 00H LJMP INICIO Comentrio sobre o Efeito da Operao

ORG 30H INICIO: MOV SP,#2FH


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

SJMP V1 ATRASO: MOV R4,#100 V2: MOV R5,#250 DJNZ R5,$ DJNZ R4,V2 RET END

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

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

Notas de Aula 2011

76

104 s f = 9600 Hz

Bit de start

Bit de stop

Fig. 6.3: Transmisso assncrona de contagem crescente

3. No programa a seguir o microcontrolador recebe dados via serial no modo 1, com taxa de recepo de 4800 bps, usando interrupo. O dado recebido enviado para a porta P1. A frequncia do cristal oscilador de 11,0592 MHz. Assim, da Tabela 2, tem-se o valor de recarga TH1 = FAH, para o temporizador 1 no modo 2 (recarga automtica). Caso o programa seja executado no laboratrio, use o HyperTerminal do microcomputador, configurado para 4800 bps e 8 bits de dados para transmitir os dados para o microcontrolador.
Rtulo Mnemnico0 $MOD51 ORG 00H LJMP INICIO ORG 23H CLR RI MOV A,SBUF RETI ORG 30H INICIO: MOV SP,#2FH
MOV SCON,#40H MOV IE,#90H MOV TMOD,#20H MOV TL1,#0FAH MOV TH1,#0FAH MOV A,#00H SETB TR1 SETB REN V1: MOV P1,A SJMP V1
0 0

Comentrio sobre o Efeito da Operao

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

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

END

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

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

Notas de Aula 2011

77

208 s f = 4800 Hz

1 0

1 0

1 1

0 0

Bit de start

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

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

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

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

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

; Rotaciona para a esquerda o contedo do acumulador

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

Notas de Aula 2011

78

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

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

Notas de Aula 2011

79

Expanso e Mapeamento de Memria

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

Tabela 7.1: Descrio dos bits do registrador WMCON. Bit Descrio


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

EEMEN DPS

WDTRST RDY/BSY\

WDTEN

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

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

Notas de Aula 2011

80

Rtulo

Mnemnico

Comentrio sobre o Efeito da Operao

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

; Apontador de pilha SP = 2FH ; Habilita interrupo externa 0. IE = 1 0 0 0 0 0 0 1 b ; Interrupo externa 0 por transio ; Carrega DPTR com endereo inicial da memria EEPROM

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

7.1 Expanso de Memria


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

Fig. 7.1: Memria externa com endereo inicial de 6000H Escola de Engenharia Eltrica e de Computao Universidade Federal de Gois Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

81

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

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

As linhas de endereo so usadas para habilitar a sada do latch (OE\). No entanto, outros sinais de controle esto envolvidos no processo. O sinal de ALE usado para habilitar o latch (74LS573) e os sinais de READ (RD\) e WRITE (WR\) so usados na habilitao de leitura e escrita da memria EEPROM. A Tabela 7.2 mostra as vrias possibilidades de alocao da memria EEPROM da Fig. 7.1 no espao de 64 K, usando as trs linhas de endereo disponveis A13, A14 e A15 e a Tabela 7.3 mostra o estado da memria a partir do sinal de controle RD\, conectado ao pino de habilitao de sada da memria (OE\) e do sinal WR\, conectado ao pino de habilitao de escrita na memria (WE\).
A15 A15\ A15\ A15\ A15\ A15 A15 A15 A15 A14 A14\ A14\ A14 A14 A14\ A14\ A14 A14 A13 A13\ A13 A13\ A13 A13\ A13 A13\ A13 Tabela 7.2: Regies de memria Endereo Inicial Endereo Final 0000H 1FFFH 2000H 3FFFH 4000H 5FFFH 6000H 7FFFH 8000H 9FFFH A000H BFFFH C000H DFFFH E000H FFFFH Regio 0 1 2 3 4 5 6 7

RD\ 0 0 1 1

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

7.2 Mapeamento de Memria


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

Notas de Aula 2011

82

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

RW 0 0 1 1

RS 0 1 0 1

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

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

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

Notas de Aula 2011

83

Fig. 7.4: Decodificador 74LS138 Tabela 7.5: Tabela-Verdade do decodificador 74LS138

E1 1 0 0 0 0 0 0 0 0

E2 1 0 0 0 0 0 0 0 0

Entradas E3 A2 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1

A1 0 0 1 1 0 0 1 1

A0 0 1 0 1 0 1 0 1

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

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

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

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

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

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

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

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

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

Notas de Aula 2011 Rtulo Mnemnico $MOD51 ORG 00H LJMP INICIO Comentrio sobre o Efeito da Operao

84

ORG 30H INICIO: MOV SP,#2FH MOV DPTR,#0000H MOV R7,#00 V1: PUSH DPH PUSH DPL MOV DPTR,#TEXTO MOV A,R7 MOVC A,@A+DPTR CJNE A,#0FFH,V2 SJMP FIM V2: POP DPL POP DPH MOVX @DPTR,A INC R7 INC DPTR SJMP V1

; Apontador de pilha SP = 2FH ; Endereo inicial da memria ; Valor inicial do contador de leitura do texto ; Guarda na pilha o byte superior do DPTR relativo memria externa ; Guarda na pilha o byte inferior do DPTR relativo memria externa ; Carrega DPTR com endereo inicial da tabela texto ; Carrega acumulador com valor atual do contador ; Carrega acumulador com o contedo da posio A+DPTR da tabela ; Verificar se j chegou o final da tabela. Se no, envia caractere para memria ; Desvia para final do programa ; Recupera da pilha o byte inferior do DPTR relativo memria externa ; Recupera da pilha o byte superior do DPTR relativo memria externa ; Envia para a memria externa o caractere lido da tabela ; Incrementa contador de leitura da tabela ; Incrementa apontador DPTR da memria externa ; Volta para ler o caractere seguinte do texto

TEXTO: DB ESTUDAR MICROCONTROLADORES EH GRATIFICANTE DB 0FFH FIM: NOP END

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

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

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

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

Notas de Aula 2011

85

Dispositivos para Entrada, Sada e Acionamentos Eltricos

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

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

(a)

C1 1 4 7

C2 2

C3 3 L1 5 8 0 6 L2 9 L3

#
L4
(b)

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

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

Notas de Aula 2011

86

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

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

Fig. 8.2: Circuito do decodificador do teclado

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

Notas de Aula 2011

87

Deve-se observar que o cdigo do teclado lido atravs do nibble superior da porta P3 (P3.4, P3.5, P3.6, P3.7), o que significa que dever haver uma troca de nibbles (SWAP A) antes de mostrar o dado atravs do nibble inferior da porta P1. Deve-se observar ainda que o dado mostrado apenas no nibble inferior da porta P1. Assim, antes de enviar o dado para a porta, feita uma operao AND com 0FH para eliminar qualquer lixo presente no nibble superior . Teclado 1: O teclado est conectado porta P2 e lido por varredura. A tecla digitada mostrada em P1.
Rtulo Mnemnico $MOD51 LINHA_L1 EQU LINHA_L2 EQU LINHA_L3 EQU LINHA_L4 EQU COLUNA_C1 COLUNA_C2 COLUNA_C3 ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#2FH VARREDURA: SETB LINHA_L1 SETB LINHA_L2 SETB LINHA_L3 SETB LINHA_L4 Comentrio sobre o Efeito da Operao P2.0 P2.1 P2.2 P2.3

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

; Apontador de pilha SP = 2FH ; Preparao para cada varredura

; VERIFICA AS TECLAS DA LINHA 1 CLR LINHA_L1 ; Limpa linha L1 do Teclado JB COLUNA_C1,TC2 ; Verifica se a Tecla 1 foi pressionada. MOV P1,#01H ; Tecla 1 foi pressionada SJMP VARREDURA TC2: JB COLUNA_C2,TC3 MOV P1,#02H SJMP VARREDURA TC3: JB COLUNA_C3,TC4 MOV P1,#03H SJMP VARREDURA ; Verifica se a Tecla 2 foi pressionada ; Tecla 2 foi pressionada

; Verifica se Tecla 3 foi pressionada ; Tecla 3 foi pressionada

; VERIFICA AS TECLAS DA LINHA 2 TC4: CLR LINHA_L2 ; Limpa linha L2 do Teclado JB COLUNA_C1,TC5 ; Verifica se a Tecla 4 foi pressionada. MOV P1,#04H ; Tecla 4 foi pressionada SJMP VARREDURA TC5: JB COLUNA_C2,TC6 MOV P1,#05H SJMP VARREDURA TC6: JB COLUNA_C3,TC7 MOV P1,#06H SJMP VARREDURA ; Verifica se a Tecla 5 foi pressionada ; Tecla 5 foi pressionada

; Verifica se Tecla 6 foi pressionada ; Tecla 6 foi pressionada

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

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

Notas de Aula 2011 TC8: JB COLUNA_C2,TC9 MOV P1,#08H SJMP VARREDURA TC9: JB COLUNA_C3,TCA MOV P1,#09H SJMP VARREDURA ; Verifica se a Tecla 8 foi pressionada ; Tecla 8 foi pressionada

88

; Verifica se Tecla 9 foi pressionada ; Tecla 9 foi pressionada

; VERIFICA AS TECLAS DA LINHA 4 TCA: CLR LINHA_L2 ; Limpa linha L4 do Teclado JB COLUNA_C1,TC0 ; Verifica se a Tecla * foi pressionada. MOV P1,#0AH ; Tecla * foi pressionada SJMP VARREDURA TC0: JB COLUNA_C2,TCB MOV P1,#00H SJMP VARREDURA TCB: JB COLUNA_C3,NADA MOV P1,#0BH SJMP VARREDURA NADA: LJMP VARREDURA END ; Verifica se a Tecla 0 foi pressionada ; Tecla 0 foi pressionada

; Verifica se Tecla # foi pressionada ; Tecla # foi pressionada

Teclado 2: A tecla digitada mostrada em P1 sem converso, ou seja, o cdigo liberado pelo decodificador para cada tecla digitada mostrado.
Rtulo Mnemnico $MOD51 ORG 00H LJMP INICIO ORG 13H LJMP ATENDE_UM ORG 30H INICIO: MOV SP,#2FH MOV IE,#84H MOV TCON,#04H SJMP $ ATENDE_UM: MOV A,P3 SWAP A ANL A,#0FH MOV P1,A RETI END Comentrio sobre o Efeito da Operao

; Endereo da interrupo externa 1 ; Desvia para a subrotina de atendimento

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

Teclado 3: A tecla digitada mostrada em P1 aps converso, ou seja, para cada cdigo liberado pelo teclado, buscado numa tabela de converso o cdigo a ser mostrado em P1.
Rtulo Mnemnico $MOD51 ORG 00H LJMP INICIO ORG 13H LJMP ATENDE_UM ORG 30H INICIO: MOV SP,#2FH Comentrio sobre o Efeito da Operao

Endereo da interrupo externa 1 Desvia para a subrotina de atendimento

Apontador de pilha SP = 2FH

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

Notas de Aula 2011 MOV IE,#84H MOV TCON,#04H MOV DPTR,#TABELA SJMP $ ATENDE_UM: MOV A,P3 SWAP A ANL A,#0FH MOVC A,@A+DPTR MOV P1,A RETI TABELA: DB 01H DB 02H DB 03H DB 0FFH DB 04H DB 05H DB 06H DB 0FFH DB 07H DB 08H DB 09H DB 0FFH DB 0CH DB 00H DB 0EH END Habilita interrupo externa 1 Interrupo INT1 por transio Carrega DPTR com endereo de incio da TABELA Aguarda interrupo em um lao infinito Acumulador recebe cdigo da tecla digitada H inverso entre os nibbles superior e inferior O lixo do nibble superior removido Carrega A com cdigo convertido com o uso da TABELA Mostra em P1 cdigo da tecla digitada, convertido pela TABELA Retorna de subrotina de interrupo

89

; TECLA DIGITADA: 1 SADA: 0 H (0000) ; TECLA DIGITADA: 2 SADA: 1 H (0001) ; TECLA DIGITADA: 3 SADA: 2 H (0010) ; NENHUMA TECLA SADA: 3 H (0011)-> NO EXISTENTE ; TECLA DIGITADA: 4 SADA: 4 H (1000) ; TECLA DIGITADA: 5 SADA: 5 H (0101) ; TECLA DIGITADA: 6 SADA: 6 H (0110) ; NENHUMA TECLA: SADA: 7 H (0111)-> NO EXISTENTE ; TECLA DIGITADA: 7 SADA: 8 H (1000) ; TECLA DIGITADA: 8 SADA: 9 H (1001) ; TECLA DIGITADA: 9 SADA: A H (1010) ; NENHUMA TECLA: SADA: B H (1011)-> NO EXISTENTE ; TECLA DIGITADA: * SADA: C H (1100) ; TECLA DIGITADA: 0 SADA: D H (1101) ; TECLA DIGITADA: # SADA: E H (1110)

8.2 Display de 7-Segmentos


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

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

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

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

Notas de Aula 2011

90

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

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

comum

a
a

comum

a
a

comum

a
a

comum

a
a

f
g
e

f
g

f
g

f
g

c
DP

c
DP

c
DP

c
DP

d
e

d
c
DP

d
c
DP

d
c
DP

d
comum

d
comum

d
comum

d
comum

DP

4
Display 4 P1.7

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

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

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

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

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

Notas de Aula 2011 V1: MOVC A,@A+DPTR MOV P1,A INC R7 LCALL ATRASO SJMP V3 ATRASO: MOV R4,#20 V5: MOV R5,#250 V4: MOV R6,#250 DJNZ R6,$ DJNZ R5,V4 DJNZ R4,V5 RET DIGITO: DB 3FH DB 06H DB 5BH DB 4FH DB 66H DB 6DH DB 7DH DB 07H DB 7FH DB 67H END ; Carrega A com cdigo que equivale ao nmero desejado ; Transfere para P1 o cdigo de cada nmero (de 0 a 9) ; Incrementa contador usado na leitura da tabela DIGITO ; Chama subrotina de atraso de tempo ; Retorna leitura do prximo dgito ; Carrega registrador R4 com valor decimal 20 ; Carrega registrador R5 com valor decimal 250 ; Carrega registrador R6 com valor decimal 250 ; Aguarda registrador R6 zerar ; Decrementa R5. Enquanto no for zero, volta para recarregar R6 ; Decrementa R4. Enquanto no for zero, volta para recarregar R5 ; Retorna de subrotina de atraso de tempo ; Cdigo para mostrar o nmero 0 no display ; Cdigo para mostrar o nmero 1 no display ; Cdigo para mostrar o nmero 2 no display ; Cdigo para mostrar o nmero 3 no display ; Cdigo para mostrar o nmero 4 no display ; Cdigo para mostrar o nmero 5 no display ; Cdigo para mostrar o nmero 6 no display ; Cdigo para mostrar o nmero 7 no display ; Cdigo para mostrar o nmero 8 no display ; Cdigo para mostrar o nmero 9 no display

91

Display 2: mostrada em um conjunto de 4 displays de 7-segmentos uma contagem decimal crescente de 0000 a 9999. O byte mais significativo da contagem guardado em R1 e o byte menos significativo guardado em R0. Cada dado sempre enviado para o display atravs do nibble inferior da porta P1. O nibble superior da porta P1 usado para a escolha do display para mostrar milhar, centena, dezena ou unidade.
Rtulo Mnemnico $MOD51 ORG 00H LJMP INICIO Comentrio sobre o Efeito da Operao

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

Apontador de pilha SP = 2FH Byte inferior da contage Byte superior da contagem Contador Chama subrotina que faz a contagem decimal Chama subrotina que mostra a contagem nos displays

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

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

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

Notas de Aula 2011 LCALL ATRASO MOV A,#0FH ANL A,R1 ORL A,#40H MOV P1,A LCALL ATRASO MOV A,#0F0H ANL A,R0 SWAP A ORL A,#20H MOV P1,A LCALL ATRASO MOV A,#0FH ANL A,R0 ORL A,#10H MOV P1,A LCALL ATRASO POP ACC DJNZ R7,DISPLAY MOV R7,#10 RET ATRASO: MOV R4,#10 V3: MOV R5,#200 DJNZ R5,$ DJNZ R4,V3 RET END Chama subrotina de atraso de tempo Este bloco separa o nibble inferior de R1 Instruo que separa o nibble inferior de R1 Junta o terceiro dgito com o comando do terceiro display Envia terceiro dgito + comando para a porta P1

92

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

Contador necessrio para uma contagem mais lenta Recarrega valor do contador

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

8.3 Display LCD


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

Fig. 8.5: Display LCD de 2 linhas por 16 colunas Tabela 8.3: Habilitao do display LCD RW RS Operao Display desabilitado 0 0 Escrita de Instruo no LCD 0 1 Escrita de Dados no LCD 1 0 Leitura de Instruo do LCD 1 1 Leitura de Dados do LCD

E 0 1 1 1 1

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

Notas de Aula 2011

93

Tabela 8.4: instrues mais comuns utilizadas para o display LCD DESCRIO MODO RS R/W Display Limpa Display com Home cursor Controle do Cursor Liga (sem cursor) Desliga Liga Desliga Desloca para Esquerda Desloca para Direita Cursor Home Cursor Piscante Cursor com Alternncia Para a esquerda Para a direita Para a esquerda Para a direita Para a esquerda Para a direita Primeira linha Segunda linha 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Sentido de deslocamento do cursor ao entrar com caractere Deslocamento da mensagem ao entrar com caractere Deslocamento da mensagem sem entrada de caractere Endereo da primeira posio

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

A Tabela 8.5 mostra o endereo em decimal de cada posio do LCD de 16 colunas x 2 linhas.
Colunas Linha 1 Linha 2 Tabela 8.5: Endereos em decimal do display LCD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207

O programa-exemplo a seguir mostra uma mensagem na primeira linha e uma contagem decimal crescente de 0000 a 9999 na segunda linha do LCD. So utilizados 8 bits para os dados e 3 bits de comando. No exemplo a porta P0 usada para os dados e os pinos P2.0, P2.1 e P2.2 so usados para os comandos. LCD 1: mostrada no display LCD uma contagem decimal crescente de 0000 a 9999. O byte mais significativo da contagem guardado em R1 e o byte menos significativo guardado em R0. Cada um dos quatro dgitos da contagem convertido para caractere ASCII e depois enviado para o LCD atravs da porta P0.
Rtulo Mnemnico $MOD51 RS EQU P2.0 RW EQU P2.1 EN EQU P2.2 Comentrio sobre o Efeito da Operao ; RS = 0 INSTRUO. RS = 1 DADO ; RW =0 ESCRITA. RW = 1 LEITURA ; PINO DE HABILITAO DO LCD

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

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

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

Notas de Aula 2011

94

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

; Chama subrotina de contagem decimal contagem de 0000 a 9999 ; Converte Dgito 4 para ASCII ; Mostra Dgito 4 no display LCD ; Converte Dgito 3 para ASCII ; Mostra Dgito 3 no display LCD ; Converte Dgito 2 para ASCII ; Mostra Dgito 2 no display LCD ; Converte Dgito 1 para ASCII ; Mostra Dgito 1 no display LCD

; Volta para o incio

; SUBROTINA DE INICIALIZAO DO DISPLAY LCD INICIA: MOV A,#38H ; Instruo que indica display de 16 colunas e 2 linhas LCALL INSTR_WR ; Chama subrotina para escrever instruo no LCD MOV A,#38H LCALL INSTR_WR MOV A,#0EH LCALL INSTR_WR MOV A,#06H LCALL INSTR_WR RET ; Instruo que indica display de 16 colunas e 2 linhas ; Chama subrotina para escrever instruo no LCD ; Instruo para ligar o cursor ; Chama subrotina para escrever instruo no LCD ; Instruo para deslocar cursor para a direita ; Chama subrotina para escrever instruo no LCD ; Retorna da subrotina de inicializao do LCD

; SUBROTINA QUE LIMPA O DISPLAY LIMPA: MOV A,#01H ; Instruo para limpar LCD LCALL INSTR_WR ; Chama subrotina para escrever instruo no LCD RET LINHA1: INC R7 MOV A,R7 MOV DPTR,#MSG1 MOVC A,@A+DPTR CJNE A,#0FFH,V1 RET V1: LCALL TEXTO_WR LCALL ATRASO_LCD SJMP LINHA1 LINHA2: MOV A,#192 LCALL INSTR_WR MOV R7,#0FFH V3: INC R7 MOV A,R7 MOV DPTR,#MSG2 MOVC A,@A+DPTR CJNE A,#0FFH,V2 RET V2: LCALL TEXTO_WR SJMP V3 INSTR_WR: SETB EN CLR RW CLR RS MOV DADOS,A CLR EN LCALL ATRASO_LCD ; Instruo para definir endereo do LCD: 192 = C0H ; Chama subrotina para escrever instruo no LCD ; Contador recebe valor FFH ; Incrementa contador ; Carrega acumulador com o contedo do contador ; DPTR recebe o endereo da mensagem MSG2 ; Acumulador recebe o cdigo do caractere do endereo A+DPTR ; Se A = 0FFH fim da mensagem. Caso contrrio, pula para V2 ; Incrementa contador ; Carrega acumulador com o contedo do contador ; DPTR recebe o endereo da mensagem MSG1 ; Acumulador recebe o cdigo do caractere do endereo A+DPTR ; Se A = 0FFH fim da mensagem. Caso contrrio, pula para V1

; Chama subrotina para escrever dados no LCD

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

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

Notas de Aula 2011 RET TEXTO_WR: SETB EN CLR RW SETB RS MOV DADOS,A CLR EN LCALL ATRASO_LCD RET CONTAGEM: MOV A,R0 ADD A,#01H DA A MOV R0,A JNC V4 MOV A,R1 ADD A,#01H DA A MOV R1,A V4: NOP RET ; Habilita LCD ; Operao de escrita no LCD ; Operao com dados ; Transfere os dados para o LCD ; Desabilita LCD ; Chama subrotina de atraso do LCD

95

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

; SUBROTINAS PARA CONVERTER VALORES EM ASCII CONVERTE4: MOV A,#0F0H ANL A,R1 SWAP A ORL A,#30H RET CONVERTE3: MOV A,#0FH ANL A,R1 ORL A,#30H RET CONVERTE2: MOV A,#0F0H ANL A,R0 SWAP A ORL A,#30H RET CONVERTE1: MOV A,#0FH ANL A,R0 ORL A,#30H RET ; Prepara a separao do nibble superior de R1 ; Separa nibble superior de R1 ; Inverte nibble superior com inferior ; Converte nibble superior de R1 em ASCII

; Prepara a separao do nibble inferior de R1 ; Separa nibble inferior de R1 ; Converte nibble inferior de R1 em ASCII

; Prepara a separao do nibble superior de R0 ; Separa nibble superior de R0 ; Inverte nibble superior com inferior ; Converte nibble superior de R1 em ASCII

; Prepara a separao do nibble inferior de R0 ; Separa nibble inferior de R0 ; Converte nibble inferior de R0 em ASCII

; SUBROTINA PARA MOSTRAR O CONTEDO DO ACUMULADOR NO LCD MOSTRA4: PUSH ACC MOV A,#202 LCALL INSTR_WR POP ACC LCALL TEXTO_WR RET ATRASO_LCD: MOV R4,#10 V6: MOV R5,#80 DJNZ R5,$ DJNZ R4,V6 RET ATRASO: MOV R4,#200 V5: MOV R5,#250 DJNZ R5,$ DJNZ R4,V5 ; Guarda dgito 4 na pilha, antes de definir endereo no LCD ; Endereo do dgito 4 ; Chama subrotina para escrever instruo no LCD ; Recupere dgito 4 da pilha ; Chama subrotina para escrever dados no LCD dgito 4

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

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

Notas de Aula 2011 RET ; Retorna de subrotina de atraso de tempo

96

MSG1: DB MICROCONTROLADOR, 0FFH MSG2: DB CONTAGEM: FIM: NOP END ,0FFH

LCD 2: A mesma contagem decimal crescente de 0000 a 9999 do exemplo anterior mostrada. No entanto, utiliza-se o mapeamento de memria do captulo 7. Os endereos para leitura e escrita de instruo e dados so dados na Tabela 7.4.
Rtulo Mnemnico $MOD51 ESCREVE_INST ESCREVE_DADO LE_INSTRUCAO LE_DADOS EQU EQU EQU EQU 4000H; 4001H; 4002H; 4003H; Comentrio sobre o Efeito da Operao

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

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

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

; Volta para o incio

; SUBROTINA DE INICIALIZAO DO DISPLAY LCD INICIA: MOV A,#38H ; Instruo que indica display de 16 colunas e 2 linhas LCALL INSTR_WR ; Chama subrotina para escrever instruo no LCD MOV A,#38H LCALL INSTR_WR MOV A,#0EH LCALL INSTR_WR MOV A,#06H LCALL INSTR_WR RET ; Instruo que indica display de 16 colunas e 2 linhas ; Chama subrotina para escrever instruo no LCD ; Instruo para ligar o cursor ; Chama subrotina para escrever instruo no LCD ; Instruo para deslocar cursor para a direita ; Chama subrotina para escrever instruo no LCD ; Retorna da subrotina de inicializao do LCD

; SUBROTINA QUE LIMPA O DISPLAY

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

Notas de Aula 2011 LIMPA: MOV A,#01H LCALL INSTR_WR RET LINHA1: INC R7 MOV A,R7 MOV DPTR,#MSG1 MOVC A,@A+DPTR CJNE A,#0FFH,V1 RET V1: LCALL TEXTO_WR LCALL ATRASO_LCD SJMP LINHA1 LINHA2: MOV A,#192 LCALL INSTR_WR MOV R7,#0FFH V3: INC R7 MOV A,R7 MOV DPTR,#MSG2 MOVC A,@A+DPTR CJNE A,#0FFH,V2 RET V2: LCALL TEXTO_WR SJMP V3 ; Instruo para definir endereo do LCD: 192 = C0H ; Chama subrotina para escrever instruo no LCD ; Contador recebe valor FFH ; Incrementa contador ; Carrega acumulador com o contedo do contador ; DPTR recebe o endereo da mensagem MSG2 ; Acumulador recebe o cdigo do caractere do endereo A+DPTR ; Se A = 0FFH fim da mensagem. Caso contrrio, pula para V2 ; Instruo para limpar LCD ; Chama subrotina para escrever instruo no LCD

97

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

; Chama subrotina para escrever dados no LCD

INSTR_WR: MOV DPTR,#ESCREVE_INST ; DPTR assume o endereo de escrita de instruo: 4000H MOVX @DPTR,A ; Transfere a instruo para o LCD LCALL ATRASO_LCD ; Chama subrotina de atraso do LCD RET TEXTO_WR: MOV DPTR,#ESCREVE_DADO ; DPTR assume o endereo de escrita de dados: 4001H MOVX @DPTR,A ; Transfere os dados para o LCD LCALL ATRASO_LCD ; Chama subrotina de atraso do LCD RET CONTAGEM: MOV A,R0 ADD A,#01H DA A MOV R0,A JNC V4 MOV A,R1 ADD A,#01H DA A MOV R1,A V4: NOP RET Carrega acumulador com valor atual do byte inferior Incrementa acumulador em uma unidade Faz o ajuste decimal do byte inferior Atualiza o valor de R0 Desvia para V2 se no houver Carry, ou seja, se R0 =< 99 Carrega acumulador com valor atual do byte superior Incrementa acumulador em uma unidade Faz o ajuste decimal do byte superior Atualiza o valor de R1

; SUBROTINAS PARA CONVERTER VALORES EM ASCII CONVERTE4: MOV A,#0F0H ANL A,R1 SWAP A ORL A,#30H RET CONVERTE3: MOV A,#0FH ANL A,R1 ORL A,#30H RET CONVERTE2: MOV A,#0F0H ; Prepara a separao do nibble superior de R1 ; Separa nibble superior de R1 ; Inverte nibble superior com inferior ; Converte nibble superior de R1 em ASCII

; Prepara a separao do nibble inferior de R1 ; Separa nibble inferior de R1 ; Converte nibble inferior de R1 em ASCII

; Prepara a separao do nibble superior de R0

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

Notas de Aula 2011 ANL A,R0 SWAP A ORL A,#30H RET CONVERTE1: MOV A,#0FH ANL A,R0 ORL A,#30H RET ; Separa nibble superior de R0 ; Inverte nibble superior com inferior ; Converte nibble superior de R1 em ASCII

98

; Prepara a separao do nibble inferior de R0 ; Separa nibble inferior de R0 ; Converte nibble inferior de R0 em ASCII

; SUBROTINA PARA MOSTRAR O CONTEDO DO ACUMULADOR NO LCD MOSTRA4: PUSH ACC MOV A,#202 LCALL INSTR_WR POP ACC LCALL TEXTO_WR RET ATRASO_LCD: MOV R4,#10 V6: MOV R5,#80 DJNZ R5,$ DJNZ R4,V6 RET ATRASO: MOV R4,#200 V5: MOV R5,#250 DJNZ R5,$ DJNZ R4,V5 RET ; Guarda dgito 4 na pilha, antes de definir endereo no LCD ; Endereo do dgito 4 ; Chama subrotina para escrever instruo no LCD ; Recupere dgito 4 da pilha ; Chama subrotina para escrever dados no LCD dgito 4

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

MSG1: DB MICROCONTROLADOR, 0FFH MSG2: DB CONTAGEM: FIM: NOP END ,0FFH

8.4 Sensores de Presena


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

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

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

Notas de Aula 2011

99

Fig. 8.7: Circuito auxiliar modulador

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

8.5 Medio de Velocidade


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

Fig. 8.8: conjunto roda de 60 furos e fotosensor

Fig. 8.9: Sinal de sada do sensor de velocidade Escola de Engenharia Eltrica e de Computao Universidade Federal de Gois Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

100

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

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

8.6 Motor de Corrente Contnua


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

Ra I
a

Rf

Va

Ra I a

Va

If

Vf
a

Va k

Ra I a

Fig. 8.10: Motor de Corrente Contnua

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

T
Vmax Vmax

Va

TON Vmax T

Va

TON

TOFF

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

Notas de Aula 2011

101

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

P1.1

BD13 9

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

Fig.8.13: Driver (ponte H) para acionamento do motor CC em ambos os sentidos Escola de Engenharia Eltrica e de Computao Universidade Federal de Gois Prof. Dr. Jos Wilson Lima Nerys jwilson@eee.ufg.br

Notas de Aula 2011

102

A Fig. 8.13 mostra uma configurao denominada de Ponte H, que permite o acionamento em ambos os sentidos. As chaves A, B, C e D so normalmente transistores do tipo MOSFET ou IGBT. Para o acionamento em um dos sentidos as chaves A e B so acionadas; para o acionamento no sentido contrrio as chaves C e D so acionadas. A lgica de acionamento dessas chaves no deve permitir o acionamento simultneo das chaves A e D e das chaves C e B, o que resultaria num curto-circuito da fonte de alimentao. O driver de acionamento em ponte H usado no laboratrio ( L298N Diagrama na Fig. 8.14) permite o acionamento de um motor com corrente de at 1,5 A atravs de dois pinos de comando e segue a lgica da Tabela 8.6. importante observar que os diodos so fundamentais para o retorno da corrente, quando qualquer uma das chaves desligada. No momento de desligamento das chaves, h energia armazenada nas indutncias do motor; sem os diodos as chaves poderiam ser danificadas por sobretenso.

Tabela 8.6: Pinos de controle da ponte H In 1 In 2 Efeito 0 0 Motor parado 0 1 Gira no sentido direto 1 0 Gira no sentido reverso 1 1 Motor parado

Fig. 8.14: Diagrama de blocos parcial do L298N

O programa-exemplo a seguir para acionamento de um motor de corrente contnua cujo driver est conectado aos pinos P1.0 e P1.1 do microcontrolador 8051. Ele permite aumentar a velocidade atravs da interrupo zero e diminuir atravs da interrupo 1. O temporizador zero usado no modo 2 (recarga automtica) para gerar um sinal de perodo constante, mas cujo intervalo de tempo em nvel alto e baixo alterado pelas interrupes. Motor: Acionamento de um motor de corrente contnua com controle de velocidade
Rtulo Mnemnicos $MOD51 SAIDA0 SAIDA1 TON TOFF LIGADO EQU P1.0 EQU P1.1 EQU 03H EQU 04H BIT 00H Comentrios ; Bit 0 de P1 para acionar o motor ; Bit 1 de P1 para acionar o motor ; Armazena periodo ligado ; Armazena periodo desligado ; Flag que indica motor ligado/desligado

ORG 00H LJMP INICIO ORG 03H LJMP AUM_VELOC ORG 0BH LJMP ATENDE_TEMP ; Interrupo INT0 aumenta velocidade ; Interrupo TEMP0 controla velocidade

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

Notas de Aula 2011

103

ORG 13H LJMP DIM_VELOC ORG 30H MOV SP,#2FH MOV IE,#87H MOV TCON,#05H MOV IP,#02H MOV TMOD,#02H MOV TON, #01H CLR SAIDA0 CLR SAIDA1 CLR LIGADO MOV TL0,TON MOV A,TON CPL A MOV TH0,A SETB TR0 SJMP $ JB LIGADO, DESLIGA SETB SAIDA0 SETB LIGADO MOV TH0,TON RETI CLR SAIDA0 CLR LIGADO MOV TH0, TOFF RETI CLR EX0 CLR CY MOV A, TON ADD A,#0AH JNC PULA MOV A,#0FEH MOV TON,A CPL A MOV TOFF, A SETB EX0 RETI CLR EX1 CLR CY MOV A, TOFF ADD A,#0AH JNC PULA2 MOV A,#0FEH MOV TOFF,A CPL A MOV TON, A SETB EX1 RETI END

; Interrupo INT1 diminui velocidade

INICIO:

; Habilita interrupes INT0, INT1 e TEMP 0 ; INT0 e INT1 so por transio ; Faz TEMP 0 com prioridade 1 ; TEMP 0 no modo 2 com recarga ; Perodo ligado TON = 01h ; Desliga motor ; Desliga motor ; Limpa flag que indica motor ligado/desligado ; TL0 = periodo ligado ; Faz A = perodo ligado ; Acha perodo desligado ; TH0 = perodo desligado ; Inicia temporizador temp0 a partir de TON ; Lao de espera infinito. ; Se motor est ligado desliga ; Liga motor, que estava desligado ; Seta flag que indica motor ligado ; TH0 = periodo ligado. Valor de recarga

ATENDE_TEMP:

DESLIGA:

; Desliga motor ; Limpa flag que indica motor ligado ; Faz A = periodo desligado

AUM_VELOC:

; Desabilitar interrupo externa zero ; Limpa flag de carry ; Faz A = periodo ligado ; Faz A = A + 10 ; Se CY = 0 desvia para pula ; Faz A = feh, se CY = 1 ; Faz periodo ligado = A ; Encontra periodo desligado ; Define periodo desligado ; Reabilita interrupo zero

PULA:

DIM_VELOC:

; Desabilitar interrupo externa 1 ; Limpa flag de carry ; Faz A = periodo desligado ; Faz A = A + 10 ; Se CY = 0, desvia para pula2 ; Faz A = FEH, se CY = 1 ; Faz periodo desligado = A ; Encontra periodo ligado ; Define periodo ligado ; Reabilita interrupo 1

PULA2:

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

Notas de Aula 2011

104

8.7 Motor de Passo


O motor de passo consiste de um estator contendo bobinas que so acionadas usando corrente contnua e um rotor de m permanente, que gira a cada mudana das bobinas acionadas. Embora nas figuras a seguir as quatro bobinas sejam mostradas como nicas (concentradas), na prtica elas so distribudas ao longo do estator. Assim, pode-se obter um passo bem pequeno entre um pedao de bobina e outro. O ngulo de passo tpico de um motor de passo 1,8o. As figuras a seguir ilustram, de maneira simplificada, o funcionamento de um motor de passo. Observe que, na figura, uma volta completa do motor alcanada aps percorrer todas as bobinas uma vez. Na prtica, uma volta completa conseguida aps uma passagem por todas as partes de cada bobina. Se cada passo for de 1,8 o, uma volta completa alcanada com 200 passos. Na Fig. 8.15 so mostrados os transistores usados no acionamento e as bobinas concentradas. A Tabela 8.7 mostra os comandos que devem ser enviados para a porta de sada de forma que o motor de passo gire de meio em meio passo e com passo completo.

Fig. 8.15: Esquema que ilustra um motor de passo Tabela 8.7: comandos para meio passo e passo completo
Passo 1 2 3 4 5 6 7 8 9 T0 1 0 0 0 0 0 1 1 1 T1 0 0 1 1 1 0 0 0 0 T2 1 1 1 0 0 0 0 0 1 T3 0 0 0 0 1 1 1 0 0 HEX 0A 02 06 04 05 01 09 08 0A Passo 1 2 3 4 5 T0 1 0 0 1 1 T1 0 1 1 0 0 T2 1 1 0 0 1 T3 0 0 1 1 0 HEX 0A 06 05 09 0A

O circuito da Fig. 8.15 o circuito tpico utilizado no acionamento de motor de passo, entretanto, h pastilhas integradas que so tambm utilizadas para essa funo. Um desses circuitos o driver ULN2004A. A estrutura interna desse componente mostrada na Fig. 8.16. Trata-se de um conjunto de transistores do tipo darlington, com capacidade de corrente de 500 mA. Cada uma das 4 bobinas do motor ligada ao terminal comum (COM), que conectado ao Vcc, e a uma das sada (OUT).

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

Notas de Aula 2011

105

(a) Fig. 8.16: Esquemtico do driver ULN2004

(b)

Para ilustrar o funcionamento do motor de passo so apresentados a seguir dois exemplos: Exemplo 1: Neste exemplo um motor de passo, conectado porta P2, acionado nos dois sentidos de rotao. Um sensor de presena no pino P3.0 define o sentido direto e um sensor no pino P3.1 define o sentido inverso.
Rtulo Mnemnico $MOD51 SENSOR1 EQU P3.0 SENSOR2 EQU P3.1 ORG 00H LJMP INICIO ORG 30H INICIO: MOV SP,#2FH CLR F0 COMECO: MOV A,#00H DECIDE: JB SENSOR1,OUTRO CLR F0 OUTRO: JB SENSOR2,V1 SETB F0 V1: JB F0, INVERSO MOV DPTR,#DIRETO SJMP FRENTE INVERSO: MOV DPTR,#INVERSO FRENTE: PUSH ACC MOVC A, @A+DPTR CJNE A,#0FFH,V2 POP ACC SJMP COMECO V2: MOV P2,A LCALL ATRASO POP ACC INC A SJMP DECIDE ATRASO: MOV R4,#3FH V4: MOV R5,#3FH Comentrio sobre o Efeito da Operao

; Apontador de pilha SP = 2FH ; Limpa flag que ser usada para definir sentido de rotao (PSW.5)

; Se SENSOR1 = 1, verificar o OUTRO sensor ; Se SENSOR1 = 0, limpa o bit F0, que indica sentido de rotao ; Se SENSOR2 = 1, pula para acionamento do motor ; Se SENSOR2 = 0, faz F0 = 1 ; Se F0 = 1, desvia para INVERSO ; Se F0 = 0, faz DPTR igual ao endereo inicial da tabela DIRETO ; Desvia para acionar o motor no modo direto ; Se F0 = 1, faz DPTR igual ao endereo inicial da tabela INVERSO ; Guarda contador da tabela ; Carrega A com contedo da tabela (endereo A + DPTR) ; Se A = FFH, chegou ao fim da tabela. Volta pro comeo ; Recupera contador da tabela

; Envia contedo da tabela para porta P2

; Carrega registrador R4 com valor hexadecimal 3FH ; Carrega registrador R5 com valor hexadecimal 3FH

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

Notas de Aula 2011 DJNZ R5,$ DJNZ R4,V4 RET DIRETO: DB 0AH DB 06H DB 05H DB 09H DB 0FFH INVERSO: DB 09H DB 05H DB 06H DB 0AH DB 0FFH END ; Aguarda registrador R5 zerar ; Decrementa R4. Enquanto no for zero, volta para recarregar R5 ; Retorna de subrotina de atraso de tempo

106

Exemplo 2: Esse exemplo usa a interrupo 1 para inverter o sentido de rotao do motor de passo. Assim, a qualquer pedido de interrupo 1 (por transio) provoca mudana no sentido de rotao.
Rtulo Mnemnico $MOD51 ORG 00H LJMP INICIO ORG 13H CPL F0 RETI ORG 30H INICIO: MOV SP,#2FH CLR F0 MOV IE,#84H MOV TCON,#04H COMECO: MOV A,#00H DECIDE: JB F0, INVERSO MOV DPTR,#DIRETO SJMP FRENTE INVERSO: MOV DPTR,#REVERSO FRENTE: PUSH ACC MOVC A, @A+DPTR CJNE A,#0FFH,V2 POP ACC SJMP COMECO V2: MOV P2,A LCALL ATRASO POP ACC INC A SJMP DECIDE ATRASO: MOV R4,#3FH V4: MOV R5,#3FH DJNZ R5,$ DJNZ R4,V4 RET DIRETO: DB 0AH DB 06H DB 05H DB 09H DB 0FFH Comentrio sobre o Efeito da Operao

; Endereo da interrupo externa 1 ; Complemeta bit usado para mudana de sentido de rotao

; Apontador de pilha SP = 2FH ; Limpa flag que ser usada para definir sentido de rotao (PSW.5) ; Habilita interrupo externa 1 ; Interrupo 1 por transio

; Se F0 = 1, desvia para INVERSO ; Se F0 = 0, faz DPTR igual ao endereo inicial da tabela DIRETO ; Desvia para acionar o motor no modo direto ; Se F0 = 1, faz DPTR igual ao endereo inicial da tabela REVERSO ; Guarda contador da tabela ; Carrega A com contedo da tabela (endereo A + DPTR) ; Se A = FFH, chegou ao fim da tabela. Volta pro comeo ; Recupera contador da tabela

; Envia contedo da tabela para porta P2

; Carrega registrador R4 com valor hexadecimal 3FH ; Carrega registrador R5 com valor hexadecimal 3FH ; Aguarda registrador R5 zerar ; Decrementa R4. Enquanto no for zero, volta para recarregar R5 ; Retorna de subrotina de atraso de tempo

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

Notas de Aula 2011

107

REVERSO: DB 09H DB 05H DB 06H DB 0AH DB 0FFH END

8.8 Lmpada Incandescente


A Fig. 8.17 mostra um circuito para acionamento de uma lmpada incandescente. necessrio apenas um bit (P1.0) para o controle da lmpada. No entanto, fundamental que esse bit seja zerado no incio do programa, uma vez que todos os bits das portas ficam em nvel alto aps o reset e deseja-se que a lmpada esteja apagada no incio do programa. utilizada uma lmpada de 20 W / 220V e um rel para o circuito de acionamento.

Fig. 8.17 Acionamento de uma lmpada incandescente

Lmpada: Acionamento de lmpada atravs de sensor de presena conectado interrupo zero. O sensor usado para acender e apagar a lmpada.
Rtulo Mnemnico $MOD51 ORG 00H LJMP INICIO ORG 03H CPL P1.0 JNB P3.2,$ RETI ORG 30H INICIO: MOV SP,#2FH CLR P1.0 MOV IE,#81H MOV TCON,#01H SJMP $ END Comentrio sobre o Efeito da Operao

; Endereo da interrupo externa 1 ; Complementa bit usado para acender/apagar a lmpada ; Lao para reduzir interferncia da trepidao da chave (debouncing)

; Apontador de pilha SP = 2FH ; Limpa bit que aciona a lmpada (Apaga a lmpada) ; Habilita interrupo externa zero ; Interrupo 0 por transio

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

Notas de Aula 2011

108

9
1.

Bibliografia
PARHAMI, Behrooz, Arquitetura de Computadores: supercomputadores, McGraw-Hill, So Paulo, 2007. de microprocessadores a

2.

TANENBAUM, Andrew S., Organizao Estruturada de Computadores, 5 ed., Pearson Prentice Hall, So Paulo, 2007. SILVA JNIOR, Vidal Pereira da, "Aplicaes Prticas do Microcontrolador 8051," rica, So Paulo, 1994. YERALAN, Sencer e AHLUWALIA, Ashutosh, "Programming and Interfacing the 8051 Microcontroller," Addison Wesley, Reading, 1995. MACKENZIE, I. Scott, The 8051 Microcontroller, Prentice Hall, New Jersey, 1995. GIMENEZ, Salvador P., Microcontrolador 8051, Prentice Hall, 2002. NICOLOSI, Denys E. C., Microcontrolador 8051 Detalhado, rica, So Paulo, 2000. FLEURY, Cludio A. e BARBACENA, Ilton L., Microcontrolador 8051, Goinia, Maro 1997.

3.

4.

5. 6. 7. 8.

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

Anda mungkin juga menyukai