Vous êtes sur la page 1sur 136

ESCOLA TCNICA ESTADUAL GETLIO C O M P ETN C IA EM ED UC A O P B LIC A P R O F IS VARGAS S IO N A L

Es c o la T c n ic a Es t a d u a l G e t lio Va rg a s

PROFESSOR: MILTON BARREIRO JUNIOR

Microcontrolador 8051 Teoria e Prtica

So Paulo 2006

Microcontrolador 8051 Teoria e Prtica

ii

ESCOLA TCNICA ESTADUAL GETLIO VARGAS

PROFESSOR: MILTON BARREIRO JUNIOR

Microcontrolador 8051 Teoria e Prtica

Apostila sobre Microcontroladores famlia 8051, apresentada aos cursos de Eletrnica, Telecomunicaes e Automao Industrial da Escola Tcnica Estadual Getlio Vargas, com o propsito de auxiliar nas aulas tericas e prticas.

So Paulo 2006
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

iii

SUMRIO

1 INTRODUO........................................................................................... 1 2 ARQUITETURA BSICA DE UM MICROCONTROLADOR GENRICO.. 2 3 A FAMLIA 8051......................................................................................... 3 3.1 Organizao de Memria................................................................ 4 3.2 Memria de Programa..................................................................... 6 3.3 Memria de Dados.......................................................................... 8 3.4 Conjunto de Instrues da Famlia 8051....................................... 10 3.5 Registrador da palavra de controle (Program Status Word)......... 10 3.6 Modos de Endereamento............................................................ 11 3.7 Instrues Aritmticas................................................................... 12 3.8 Instrues Lgicas........................................................................ 14 3.9 Transferncia de Dados Interna e Externa................................... 15 3.10 Instrues Booleanas.................................................................. 17 3.11 Instrues de Salto..................................................................... 18 3.12 Oscilador Interno......................................................................... 20 3.13 Estrutura de Interrupes............................................................ 21 4 DESCRIO DO HARDWARE................................................................ 24 4.1 Registradores de funo especial (SFR)...................................... 24 4.2 Acumulador (ACC)......................................................................... 25 4.3 Registrador B (B)............................................................................ 25 4.4 Registrador da palavra de controle (PSW).................................... 25
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

iv

4.5 Stack Pointer (SP) e Data Pointer (DPTR)..................................... 26 4.6 Buffer Serial (SBUF)....................................................................... 26 4.7 Ports de I/O (P0, P1, P2, P3)........................................................ 28 4.8 Registradores de Timer e de Controle........................................... 29 4.9 Estrutura e operao dos ports de I/O........................................... 32 4.10 Acesso memria externa.......................................................... 35 4.11 Temporizadores e Contadores..................................................... 35 4.12 Modos de operao..................................................................... 36 4.13 Interface Serial............................................................................. 38 4.14 Modos de Operao..................................................................... 38 4. 15 Registrador de Controle.............................................................. 43 4.16 Baud Rates................................................................................... 43 4.17 Interrupes................................................................................. 44 4.18 Estrutura de prioridades............................................................... 46 4.19 Interrupes externas.................................................................. 46 4.20 Circuitos de Controle.................................................................... 47 4.21 Reset............................................................................................ 47 4.22 Clock............................................................................................ 48 4.23 Operao passo a passo............................................................. 49 4.24 Descrio da pinagem................................................................. 50 5 PROGRAMAO E SIMULAO............................................................ 52 5.1 Compilao E Linkagem............................................................ 52

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

5.2 Diretivas (Ou Pseudo-Instrues).................................................. 53 5.3 Uso Do Compilador E Do Linker (Passo A Passo)........................ 54 5.4 Simulador dos Microcontroladores da famlia 8051....................... 55 5.5 Operao bsica do simulador...................................................... 56 6 TABELA DE INSTRUES COMPLETA................................................. 58 7 ESQUEMA DA CPU MNIMA PARA TESTE E CARREGAMENTO DE PROGRAMA.............................................................................................................. 70 8 PROGRAMA TESTE DO SISTEMA MNIMO........................................... 71 9 REFERNCIAS BIBLIOGRFICAS......................................................... 72 APNDICE A............................................................................................................. 73 APNDICE B............................................................................................................. 80 ANEXO 1................................................................................................................... 84

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

1 Introduo

Podemos considerar os microcontroladores, como sendo uma CPU dedicada e incorporada em um s chip, ou seja, todos os perifricos que nos microprocessadores se encontravam em chips independentes, assim como memrias, temporizadores, portas de comunicao serial, dispositivos de entrada/sada, esto presentes em um nico componente. Isso torna o projeto mais compacto, mais dinmico e com o custo final reduzido, devido aos dispositivos integrados em um s chip. O chip a ser apresentado nessa apostila ser o microcontrolador da famlia 8051, o qual ser estudado com mais detalhes nos captulos a seguir.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

2 Arquitetura bsica de um microcontrolador genrico

Um microcontrolador genrico composto pelos seguintes blocos: Unidade Central de Processamento (CPU); Memria de Programa (ROM ou EPROM); Memria de dados (RAM); Linhas de I/O (PORTs); Controle de interrupes; Gerador de clock; Temporizadores (Timers) e Contadores (counters).

representada na figura abaixo constituio clssica de um microcontrolador contendo os blocos citados e suas respectivas interligaes. As diferenas bsicas entre os diversos tipos de microcontroladores disponveis no mercado so relacionadas capacidade e tipos de memrias, na quantidade de ports disponveis, velocidade de operao, e alguns recursos especficos como por exemplo, portas seriais, maior nmero de contadores, opo de baixo consumo, entre outros. Existem tambm, os componentes chamados derivativos que, como o prprio nome diz, so microcontroladores derivados dos tipos mais comuns (8048 e 8051), ou seja, a clula bsica o microcontrolador e este acrescido de outros componentes de acordo com as necessidades.
External Interrupt Timer 1 Interrupt Control 4K ROM 128 Bytes RAM Timer 0

Counter Inputs

BUS
CPU

OSC

BUS Control

4 I/O Ports

Serial Port

TXD P0 P1 P2 P3

RXD

Address / Data

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

3 A Famlia 8051

Quando temos vrios microcontroladores utilizando uma mesma clula, chamamos esse conjunto de componentes de famlia. Desta forma temos vrias famlias como, por exemplo, a famlia do 8048, do 8051, do 8096, entre outras. Vamos tratar aqui da famlia do 8051, que ser utilizado em nossas aplicaes. A tabela abaixo descreve os principais componentes dessa famlia: Nome do Chip 8051 80C51 80CL51 8052 80C52 83C528 83C652 83C751 83C452 80C452 8032 80C32 80C528 80C652 87C52 87C528 87C652 87C751 87C452 Verso sem ROM 8031 80C31 Verso EPRO M 8751 87C51 Bytes de ROM 4K 4K 4K 8K 8K 32K 8K 2K 8K Bytes de RAM 128 128 128 256 256 512 256 64 256 Timers 16 Bits 2 2 2 3 3 3+1 2 1 2 Tipo de Circuito NMOS HMOS SACMOS NMOS CMOS CMOS CMOS CMOS CMOS

O elemento bsico desta famlia o chip 8051, cujo diagrama interno serviu como ilustrao quando falamos sobre um microcontrolador genrico. Os outros componentes desta famlia esto descritos nos manuais dos fabricantes. Atualmente, a tendncia mundial no uso de componentes de baixo consumo, torna sensvel o desenvolvimento de projetos baseados na tecnologia CMOS, facilitando assim a interligao de seus blocos. Todos os componentes que apresentarem um C em seu cdigo (80C31, 87C452, etc) pertencem a esta famlia, a qual representa o que existe de mais avanado em microcontroladores de 8 bits, permitindo a continuidade de sua linha de produo por um longo perodo. As caractersticas desta famlia so:

CPU de 8 bits com conjunto de instrues otimizado para aplicaes de controle de processos;

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

Capacidade de processamento Booleano (manipulao de bit individualmente); 32 linhas de I/O bidirecionais e individualmente endereveis; 128 bytes de RAM on-chip (mnimo); Dois contadores / temporizadores programveis de 16 bits; Interface serial full-duplex; Estrutura de interrupes com at 5 entradas permitindo 2 nveis de prioridade; Gerador de clock; Mnimo de 4Kbytes de memria de programa (ROM ou EPROM); Capacidade de endereamento externo de at 64Kbytes.

3.1 Organizao de Memria

O 8051 possui intervalos de endereos separados para a memria de programa e para a memria de dados. Esta separao lgica permite que os dados acessados pelos endereos de 8 bits sejam armazenados e manipulados mais rapidamente. possvel tambm enderear 16 bits, utilizando para isso, o registrador DPTR, que ser estudado posteriormente. A figura abaixo ilustra a estrutura de memria utilizada num microcontrolador 8051:

Nota: a RAM externa no endereada diretamente pela CPU. O endereo de acesso deve estar em um registrador usado pela CPU como ndice.
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

A memria de programa do tipo ROM e no podemos escrever dados nela. Podemos ter at 64Kbytes de memria, e normalmente encontramos pelo menos 4K de memria interna no chip em forma de ROM, EPROM ou OTP (One Time Program). Os tipos OTP representam uma opo economicamente atraente, pois so mais baratos comparados aos do modelo EPROM, e podem ser programados pelo usurio. Nas verses ROMLESS, esta memria encontra-se externa ao microcontrolador. O pulso de leitura para a memria externa o sinal PSEN (Program Store Enable). A memria de dados ocupa um espao de endereamento separado da memria de programa. At 64Kbytes de memria externa podem ser endereados, e a CPU gera sinais de read e write, necessrios durante o acesso memria externa. 3.2 Memria de Programa

A figura abaixo mostra o mapa da parte inferior da memria de programa. Aps o reset, a CPU comea a executar as instrues a partir do endereo 0000H.

(0033H) 002BH 0023H Interrupt Locations 001BH 0013H 000BH RESET 0003H 0000H 8 Bytes

Como pode ser visto na figura, cada interrupo alocada num endereo fixo da memria de programa. A interrupo direciona o contador de programa da CPU para o seu respectivo endereo, onde se encontra a rotina de interrupo, conforme controle proporcionado pelo vetor de interrupes. Os primeiros 4Kbytes de memria podem estar localizados no chip, ou num chip (ROM ou EPROM) externo. O controle de acesso interno/externo feito pelo
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

sinal EA (External Access). O sinal de strobe para acesso memria externa o sinal PSEN, ativo apenas quando da ocorrncia de acessos externos (EA ligado a terra), no sendo, portanto utilizado quando se utiliza apenas a rea de memria interna. A configurao de hardware necessria para acesso memria externa ilustrada a seguir. Note que 16 linhas de I/O (port 0 e port 2) so dedicadas transio de sinais durante buscas memria externa. O port 0 opera como um barramento de dados endereo multiplexado, emitindo o byte low do program counter como endereo e aguarda o recebimento do byte de cdigo da memria de programa. Durante o tempo em que o byte low est vlido no port 0, o sinal ALE coloca este byte no latch de endereos, enquanto o port 2 emite o byte alto de endereos. O sinal PSEN pulsa, e o cdigo de byte lido pelo microcontrolador.

MCS-51 P0 P1 __ EA ALE Latch P3 P2 _____ PSEN

EPROM Instr.

Address

___ OE

O endereo de memria de programa sempre de 16 bits, mesmo quando a quantidade de memria externa inferior 64Kbytes. Desta forma, sempre que utilizarmos memria externa, dois ports (port 0 e port 2) sero sacrificados em funo do endereamento das mesmas. possvel utilizarmos tambm os portos que foram sacrificados, porm, no uma operao to confortvel.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

3.3 Memria de dados

A figura abaixo mostra o hardware necessrio para o acesso memria RAM externa.

MCS-51 With Intenal ROM P0 P1 __ EA ALE

RAM Data VCC Latch Address

P2 ___ RD ___ WR P3 I/O PAGE BITS

___ WE

___ OE

A CPU, neste caso est executando um programa a partir da ROM interna. O port 0 serve como um barramento multiplexado de dados/endereo para a RAM, e 3 linhas do port 2 so utilizadas para as pginas da RAM. Os sinais de RD e WR so gerados pela CPU para comandar as operaes. Podemos enderear at 64Kbytes de memria RAM, em endereos de 1 ou 2 bytes. Os endereos de 1 byte so geralmente utilizados em conjunto com 1 ou mais linhas de I/O, para definir a pgina que est sendo utilizada na RAM. Endereos de 2 bytes, quando utilizados demandam que o port 2 gere o byte alto de endereos. A memria de dados interna est mapeada como indica a figura a seguir. O espao de memria est dividido em 3 blocos, normalmente denominados, Lower 128, Upper 128 e SFR (Special Function Register). A memria de dados interna tem sempre 1 byte de endereamento apenas, o que significa que temos um mximo de 256 bytes de memria interna.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

FFH Upper 128 80H 7FH Lower 128 0 Accessible By indirect Addressing Only Accessible By direct Addressing Only

FFH

80H Special Function Registers

Accessible By direct And indirect Addressing

Ports, Status and Control bits Timer, Registers Stack Pointer Accumulator, etc...

Entretanto, os modos de endereamento permitem o uso de at 384 bytes utilizando um truque simples. Atravs de endereamento direto, acessamos um

espao de memria e atravs de endereamento indireto, acessamos um espao de memria diferente. Desta forma, os registradores de funo especial (SFR) e os ltimos 128 bytes (Upper Space) so acessados nos mesmos endereos (de 80H at FFH) apesar de serem fisicamente separados. Nas clulas bsicas 8051, a rea de memria alta no existe no chip, desta forma, consideramos apenas a rea de memria baixa (Lower Space) para as nossas experincias (melhores referencias a estas reas altas podem ser encontradas nos manuais dos fabricantes). Os primeiros 128 bytes de memria interna esto mapeados como indica a figura abaixo:

7FH

30H Bank select bits em PSW 11 10 01 00 2FH 20H 18H 10H 08H 0 1FH 17H 0FH 07H Reset value of stack pointer 4 Banks of 8 registers R0 R7 Bit-Addressable Space (Bit Addresses 0 7F)

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

10

Os primeiros 32 bytes esto agrupados em 4 bancos de 8 registradores, chamados R0 at R7. Dois bits no registrador da palavra de controle (PSW) selecionam qual o banco de registradores est em uso. Este recurso permite um uso mais eficiente do espao de cdigo. Os prximos 16 bytes acima do banco de registradores formam o bloco conhecido como memria enderevel por bit (bit addressable space). O conjunto de instrues do 8051 inclui vrios tipos de instrues de um s bit, e os 128 bits presentes nessa rea podem ser diretamente endereados por estas instrues. Todos os bytes nos primeiros 128 bytes de memria podem ser endereados direta ou indiretamente. Os prximos 128 bytes s podem ser acessados indiretamente nos dispositivos que os possuem. A rea de memria acima de 128 bytes constitui o registrador de funes especiais (SFR) cuja descrio detalhada faremos posteriormente. 3.4 Conjunto de Instrues da famlia 8051

Todos os membros da famlia 8051 executam o mesmo conjunto de instrues. Este conjunto composto por instrues otimizadas para aplicaes de controle, facilitando as operaes de dados atravs de vrios modos de endereamento. Capacita ainda a operao de variveis de um bit, permitindo operao em sistemas que demandam processamento booleano. Vamos descrever rapidamente o modo de operao de vrias das instrues contidas neste conjunto. Maiores informaes podem ser encontradas nos manuais dos fabricantes, os quais descrevem detalhadamente o conjunto de instrues. 3.5 Registrador da palavra de controle (Program Status Word)

O registrador da palavra de controle (PSW) contm vrios bits de status que indicam o estado atual da CPU. A tabela a seguir indica a posio dos bits dentro do registrador. CY AC F0 RS1 RS0 OV P CY (PSW7): Carry flag, indica vai um nas operaes aritmticas. AC (PSW6): Auxiliary carry flag, auxilia nas operaes de adio.
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

11

F0 (PSW5): RS1 (PSW4): RS0 (PSW3): OV (PSW2): (PSW1): P (PSW0):

Flag de uso geral. Seleo do banco de registradores. Seleo do banco de registradores. Overflow em operaes aritmticas. Flag definvel pelo usurio. Flag de paridade

O bit de carry, entre outras funes serve como vai um em operaes ari tmticas, e tambm como acumulador para um nmero de operao booleana. Os bits RS0 e RS1 so utilizados para selecionar um entre quatro bancos de registradores, disponveis nos primeiros 128 bytes de RAM. O bit de paridade indica a quantidade de bits em um no acumulador: se P=1, o acumulador contm um nmero mpar de uns; se P=0, o nmero de uns no acumulador par. Dois bits do PSW esto disponveis e podem ser utilizados como flags de uso geral. O PSW encontra-se localizado na rea denominada SFR, no endereo D0H. 3.6 Modos de endereamento

Podemos ter seis modos distintos de endereamento no 8051. Estes modos so adequados s operaes de controle.

Endereamento direto: Neste modo, o operando especificado por 8 bits de endereo na instruo. Somente a RAM interna e os SFRs podem ser ace ssados diretamente.

Endereamento indireto: No modo indireto, a instruo especifica um registrador que contm o endereo do operando. Ambas as memrias, interna e externa podem ser acessadas desta forma. O registrador de endereo, para operaes de 8 bits, pode ser R0 ou R1, ou ainda o Stack Pointer. Endereos de 16 bits podem ser acessados somente pelo Data Pointer.

Instrues de registrador: Os bancos de registradores contm os registradores de R0 at R7, que podem ser acessados por certas instrues que levam a especificao do registrador junto com o opcode da instruo. As instrues que acessam os registradores dessa forma so eficientes, pois eliminam o byte de endereo. Quando a instruo executada, um dos oito regis-

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

12

tradores do banco selecionado acessado e a seleo do banco feita por dois bits (RS0 e RS1) no PSW.

Instrues de registrador especfico: Algumas instrues so especificadas para certos registradores, por exemplo, as instrues que operam com acumulador ou Data Pointer no necessitam um byte de endereo para apontlas, pois o prprio opcode faz isso.

Constantes imediatas: Podemos carregar um registrador com uma constante, diretamente por um simples comando, como por exemplo, mov A, #100, que coloca no acumulador o valor 100 (decimal).

Endereamento indexado: Somente a memria de programa (ROM) pode ser acessada desta forma e somente pode ser lida. Este modo de endereamento destinado leitura de tabelas. Um registrador de 16 bits (DPTR ou PC) indica o endereo de base da tabela e o acumulador carregado com o valor da tabela.

3.7 Instrues aritmticas

O conjunto de instrues aritmticas listado na tabela a seguir. A tabela indica o modo de endereamento que pode ser utilizado com cada instruo, para acessar o byte operando. Por exemplo, a instruo Add A, <byte>; pode ser escrita como:

Add A, 7FH Add A, @R0 Add A, R7 Add A, #127

(endereamento direto) (endereamento indireto) (endereamento por registrador) (constante imediata)

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

13

Mnemnico ADD A, <byte> ADDC A, <byte> SUBB A, <byte> INC A INC <byte> INC DPTR DEC A DEC <byte> MUL AB DIV AB DA A

Operao A = A + <byte> A = A + <byte> + C A = A - <byte> - C A=A+1 <byte> = <byte> + 1 DPTR = DPTR + 1 A=A-1 <byte> = <byte> - 1 BeA=BxA A = INT [A/B] B = MOD [A/B] Ajuste decimal

Modo de Endereamento Dir / Ind / Reg / Imm Dir / Ind / Reg / Imm Dir / Ind / Reg / Imm Acumulador Dir / Ind / Reg Data Pointer Acumulador Dir / Ind / Reg Acumulador e B Acumulador e B Acumulador

Tempo de Execuo 1 1 1 1 1 2 1 1 4 4 1

Os tempos de execuo indicados consideram um clock de 12MHz. Todas as instrues aritmticas so executadas num tempo de 1 s com exceo da instruo INC DPTR que consome 2s, e as instrues de multiplicao e diviso que so efetuadas em 4s. Perceba que qualquer byte no espao de memria interno pode ser incrementado ou decrementado sem o uso do acumulador. Inclusive o registrador de 16 bits DPTR pode ser incrementado desta forma. A instruo MUL AB opera com os registradores A e B e pe o resultado (16 bits) nos registradores B (byte high) e A (byte low) concatenados. A instruo DIV AB divide A por B e coloca o quociente (resultado da diviso inteiro em 8 bits) no acumulador e o resto (8 bits) no registrador B. Devido s suas caractersticas, a operao de diviso mais utilizada em converses de radicais e operaes de deslocamento programveis, do que na diviso aritmtica propriamente dita. A instruo de ajuste decimal DA A utilizada na aritmtica BCD, quando utilizamos esta aritmtica, as operaes ADD e ADDC devem, obrigatoriamente, ser seguidas por uma operao de ajuste decimal, para que os resultados continuem em

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

14

BCD. Note que o ajuste decimal no converte o nmero binrio em BCD, mas corrige os erros de aproximao ocorridos nos registradores. 3.8 Instrues lgicas A tabela a seguir mostra uma lista de instrues lgicas do 8051. Modos de Operao Dir / Ind / Reg / Imm Direto Direto Dir / Ind / Reg / Imm Direto Direto Dir / Ind / Reg / Imm Direto Direto Acumulador Acumulador Acumulador Acumulador Acumulador Acumulador Acumulador Tempo de Execuo 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 1

Mnemnico ANL A, <byte> ANL <byte>, A ANL <byte>, #DATA ORL A, <byte> ORL <byte>, A ORL <byte>, #DATA XRL A, <byte> XRL <byte>, A XRL <byte>, #DATA CLR A CPL A RL A RLC A RR A RRC A SWAP A

Operao A = A and <byte> <byte> = <byte> and A <byte> = <byte> and #DATA A = A or <byte> <byte> = <byte> or A <byte> = <byte> or #DATA A = A xor <byte> <byte> = <byte> xor A <byte> = <byte> xor #DATA A = 00H A = not A Roda Acum. esquerda 1 bit Roda Acum. esquerda c/ carry Roda Acum. direita 1 bit Roda Acum. direita c/ carry Swap nibbles in A

Todos os modos de endereamento podem ser utilizados e as instrues so executadas em tempo de 1 a 2 s. Estas instrues podem ser executadas em qualquer byte de memria interna ou na rea de SFR. O conjunto de instrues permite que sejam realizadas todas as operaes lgicas e ainda a instruo SWAP A, que inverte os nibbles alto e baixo do acumulador, operao til quando operamos com o cdigo BCD.
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

15

3.9 Transferncia de dados interna e externa

A tabela a seguir mostra as instrues disponveis para movimentao de dados entre os espaos de memria interna. Mnemnico MOV A, <fonte> MOV <dest>, A MOV <dest>, <fonte> MOV DPTR, #DATA PUSH <fonte> POP <dest> XCH A, <byte> XCHD A, @RI Operao A = <fonte> <dest> = A <dest> = <fonte> DPTR = 16 bit Const INC SP: MOV @SP, <fonte> MOV <dest>, @SP: DEC SP Acc e <byte> trocam os dados Acc e <byte> trocam os nibbles baixos Modo de Endereamento Dir / Ind / Reg / Imm Dir / Ind / Reg Dir / Ind / Reg / Imm Constante imediata Direto Direto Dir / Ind / Reg Indireto Tempo de Execuo 1 1 2 2 2 2 1 1

A instruo MOV <dest>, <fonte> permite que os dados sejam transferidos entre quaisquer dos registradores da RAM interna ou dos SFR, sem o uso do acumulador, lembrando que os 128 bytes superiores podem ser acessados apenas por endereamento indireto e os SFR apenas por endereamento direto. A rea de stack reside na prpria RAM interna e as instrues de PUSH primeiro incrementam o stack pointer, ento copia o byte no stack. As instrues de PUSH e POP usam apenas o endereamento direto para identificar o byte que est sendo manipulado, enquanto que o stack acessado por endereamento indireto atravs do registrador SP. Isto significa que o stack vai para os 128 bytes altos (se existirem) mas no para a rea de SFR. Nos dispositivos onde no est implementado a rea alta, os bytes PUSHed so perdidos e os bytes POPed so indete rminados.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

16

As transferncias de dados incluem movimentaes em 16 bits, que podem ser utilizadas para inicializar o Data Pointer (DPTR), para o uso de tabelas na memria de programa, ou para acesso memria de dados externa. A instruo XCH A, <byte> resulta na troca dos dados entre o acumulador e o byte endereado. A instruo XCHD A, @RI similar, com a diferena que apenas os nibbles baixos esto envolvidos na operao. Esta instruo facilita a manipulao de dados, de forma a economizar instrues nos programas. A memria externa pode ser acessada por endereamento indireto, utilizando 8 ou 16 bits de endereo. A escolha recai no uso de endereamento de um byte, atravs de @Ri, onde Ri pode ser R0 ou R1 do banco de registradores selecionado, ou um endereo de 2 bytes (16 bits) colocado no Data Pointer (DPTR). A desvantagem do uso do endereamento de 16 bits est no fato de que, se utilizarmos um pequeno espao de memria, ainda assim o port 2 ser inteiramente indisponibilizado para uso. No endereamento de 8 bits, sacrificamos apenas algumas linhas do port 2. A tabela abaixo indica as instrues de movimentao de dados em memria externa. Todas as instrues so executadas em 2s, com um clock de 12MHz. Largura do Endereo 8 Bits 8 Bits 16 Bits 16 Bits Mnemnico MOVX A, @Ri MOVX @Ri, A MOVX A, @DPTR MOVX @DPTR, A Operao L RAM Externa (Ri) Escreve RAM Externa (Ri) L RAM Externa (DPTR) Escreve RAM Externa (DPTR)

Em todos os acessos RAM externa, utilizamos sempre o acumulador como registrador intermedirio. Os pulsos de READ ou WRITE so ativos somente durante a execuo da instruo MOVX. Normalmente estes sinais esto inativos e se no forem utilizados, podem ser configurados como linhas de I/O extra. Existem ainda duas instrues que esto disponveis para leitura de tabelas na memria de programa. Estas instrues permitem apenas a leitura de dados na memria de programa (ROM), no permitindo a atualizao dos mesmos. O mnemnico MOVC (mov constant), e pode se apresentar de duas formas:

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

17

MOVC A, @A + DPTR MOVC A, @A + PC

A diferena est no registrador auxiliar utilizado durante a leitura, que pode ser o DPTR ou o PC. A primeira instruo permite o acesso a tabelas de at 256 itens, sendo que o DPTR indica o incio da tabela, e o acumulador indica o off-set do endereo desejado. Com a variao (incremento) do acumulador, podemos ler a tabela inteira mantendo o DPTR fixo. A outra instruo, utiliza o acumulador como base de endereamento e o PC como off-set, de forma que a leitura de tabelas deve ser feita por sub-rotinas como a que se segue:

MOV A, valor inicial CALL tabela A rotina tabela seria: tabela: MOVC A, @A + PC RET Este tipo de tabela pode conter at 255 itens, lembrando que neste caso, no podemos utilizar o valor 0 da tabela, que variar entre 1 e 255. Um valor colocado no off-set 0 no ser lido.

3.10 Instrues Booleanas

A famlia 8051 contm um processador booleano completo. Um processador booleano consiste num elemento que permite a manipulao direta de um nico bit dentro da palavra que pode ser de 8 ou mais bits (byte). A RAM interna contm 128 bits endereveis e o espao SFR contm mais 128. Todos os ports so bits end ereveis, e cada um pode ser tratado como um port separado. As instrues que acessam esses bits no so apenas seqncias de desvios condicionais, mas um completo conjunto de instrues como indicado na tabela abaixo:

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

18

Mnemnico ANL C, bit ANL C, /bit ORL C, bit ORL C, /bit MOV C, bit MOV bit, C CLR C CLR bit SETB C SETB bit CPL C CPL bit JC REL JNC REL JB bit, REL JNB bit, REL JBC bit, REL

Operao C = C and bit C = C and not bit C = C or bit C = C or not bit C = bit bit = C C=0 bit = 0 C=1 bit =1 C = not C bit = not bit Jump If C = 1 Jump If C = 0 Jump If bit = 1 Jump If bit = 0 Jump If bit = 1 : CLR bit

Tempo de Execuo 2 2 2 2 1 2 1 1 1 1 1 1 2 2 2 2 2

Este tipo de operao de bit no facilmente obtido em arquiteturas de microprocessador. Todos os bits so acessados diretamente nos endereos 00H at 7FH na rea dos 128 bytes inferiores e de 80H at FFH no espao SFR. Desta forma podemos com as instrues de programa, implementar circuitos lgicos dentro do microcontrolador, evitando o uso de circuitos discretos ou PALs. 3.11 Instrues de Salto

Podemos utilizar 3 tipos de instrues de desvio, quando endereamos um programa no microcontrolador. Estas instrues diferem entre si no formato do endereo de destino. A instruo SJMP (Short Jump) composta por dois bytes, constituindo um byte de opcode e um byte de off-set. Este fato limita o espao de endereamento em valores de -127 at +127 bytes em torno da instruo seguinte ao SJMP.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

19

Quando utilizamos a instruo LJMP (Long Jump) temos um comprimento de 3 bytes, que consiste de dois bytes de endereo e um byte de opcode, permitindo o endereamento de 64Kbytes de memria de programa. A instruo AJMP (Absolute Jump) codificada em 2 bytes sendo que o endereo formado por 11 bits e os 5 bits restantes utilizados no opcode. A tabela abaixo indica as instrues de salto disponveis. Mnemnico JMP end JMP @A + DPTR CALL end RET RETI NOP Operao Salto para end Salto para A + DPTR Chama subrotina no endereo end Retorno de subrotina Retorno de interrupo Sem operao Tempo de Execuo 2 2 2 2 2 1

Em todos os casos, o programador especifica o endereo de destino para o assembler da mesma forma, por um label ou uma constante de 16 bits. O assembler colocar o endereo de destino no formato correto para cada instruo, e se o formato no comportar o valor, aparecer a mensagem Destination out of range. Temos ainda as instrues LCALL, que permite a chamada de subrotinas em qualquer posio dos 64Kbytes de memria, e ACALL, que se utiliza do mesmo formato de endereamento de 11 bits utilizado no AJMP. As subrotinas devem ser finalizadas com o comando RET, e deve-se lembrar que cada chamada necessita de um RET, sem o qual o programa se perde. A instruo RETI utilizada como retorno da rotina de interrupo. A nica diferena entre a instruo RET e a RETI, que a RETI informa ao sistema de controle de interrupo que a interrupo em progresso foi atendida. Os saltos acima listados so chamados de saltos incondicionais, pois no dependem de nenhuma verificao de condies anteriores. Os chamados saltos condicionais, dependentes da verificao de certos bits de controle, e esto listados a seguir:

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

20

Mnemnico

Operao

Modo de Endereamento

Tempo de Execuo 2 2 2 2 2

JZ rel JNZ rel DJNZ <byte>, rel CJNE A, <byte>, rel CJNE <byte>, #DATA, rel

Salto se A=0 Salto se A no 0 Decrementa e salta se no 0 Salta se A diferente de <byte> Salta se <byte> diferente de #DATA

Acumulador Acumulador Direto Registrador Direto Imediato Indireto Registrador

No existe bit de zero no registrador PSW, portanto as instrues JZ e JNZ devem testar o dado do acumulador para estas condies. A instruo DJNZ adequada para controle de loops, pois sua configurao de dupla funo (decrementa e testa) torna fcil a execuo de loops. A instruo CJNE pode ser utilizada para controle de loops ou para teste condicional de bytes, na forma de maior que ou menor que, pois existe a indica o de maior ou menor pelo bit de CARRY, localizado no PSW. 3.12 Oscilador Interno

Todos os membros da famlia 8051 possuem um oscilador interno que pode ser utilizado como fonte de clock para a CPU, bastando para isso que se implemente a configurao abaixo:

MCS-51 HMOS or CHMOS XTAL2 Quartz Cristal or ceramic ressonator C1 C2 XTAL1 VSS

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

21

Se ao invs de utilizarmos o oscilador interno, utilizamos outro gerador qualquer (para sincronizar com outros circuitos, por exemplo) devemos ter o cuidado de interligar a entrada no pino certo. Este fato importante, pois este pino muda conforme o tipo de chip utilizado, por exemplo, com chips HMOS (8051) devemos ligar a entrada de clock ao pino XTAL2, enquanto que em circuitos CMOS (80C51), o clock deve ser colocado no pino XTAL1. A figura abaixo indica a correta

montagem destas entradas nos diversos componentes.


MCS-51 HMOS or CHMOS XTAL2 External Clock Signal MCS-51 HMOS Only XTAL2 (IC) MCS-51 CHMOS Only XTAL2

External Clock Signal

XTAL1 VSS

XTAL1 VSS

External Clock Signal

XTAL1 VSS

3.13 Estrutura de Interrupes

A famlia 8051 atende a cinco entradas de interrupes distintas, duas externas, duas relativas aos dois timers, e uma relativa ao canal serial interno. Cada interrupo pode ser habilitada ou desabilitada individualmente, setando ou resetando um bit no registrador denominado IE (Interrupt Enable) dentro do SFR. Este registrador contm ainda um bit que habilita todas as interrupes, e sua estrutura completa mostrada abaixo. O bit em 0 desabilita a interrupo e o bit em 1 habilita a interrupo. EA ES ET1 EX1 ET0 EX0

EA (IE.7) Habilita todas as interrupes globais quando em 1; ES (IE.4) Interrupo do port serial; ET1 (IE.3) Interrupo do timer 1; EX1 (IE.2) Interrupo externa 1; ET0 (IE.1) Interrupo do timer 0; EX0 (IE.0) Interrupo externa 0.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

22

Cada fonte de interrupo pode ser programada quanto sua prioridade de atendimento, por um outro registrador localizado na rea de SFR e denominado IP (Interrupt Priority). A rotina de prioridade de interrupo determina que se uma interrupo de baixo nvel estiver sendo executada, esta pode ser interrompida por uma interrupo de alto nvel, sendo continuada aps o trmino da mesma. O contrrio no verdadeiro, ou seja, uma interrupo de alto nvel no interrompida por uma interrupo de nvel inferior, nem igual ao dela. Se duas interrupes de mesmo nvel so recebidas simultaneamente, uma sequncia de pool interna determina qual ser atendida em primeiro lugar. A figura abaixo ilustra o contedo do registrador IP. O Bit em 0 desabilita a interrupo e o bit em 1 habilita a interrupo. PS PT1 PX1 PT0 PX0

PS (IP.4) Prioridade de interrupo do canal serial; PT1 (IP.3) Prioridade de interrupo timer 1; PX1 (IP.2) Prioridade de interrupo externa 1; PT0 (IP.1) Prioridade de interrupo do timer 0; PX0 (IP.0) Prioridade de interrupo externa 0. Quando em operao, todos os flags de interrupo esto retidos no sistema de controle de interrupo durante o estado de cada ciclo de mquina. As amostras so pooladas durante o ciclo seguinte, e se uma delas se encontrar setada, o sistema de interrupo gera um LCALL para o endereo apropriado na memria de programa, a menos que outra condio bloqueie a interrupo. Esta LCALL gerada por hardware resulta na transferncia do contedo do registrador PC para o Stack e recarrega o PC com o primeiro endereo da rotina de interrupo. Cada rotina de uma dada interrupo comea num endereo fixo. Somente o PC transferido automaticamente para o stack, ento devemos nos lembrar de salvar os registradores importantes em cada rotina de interrupo. Salvando apenas o PC, torna-se mais simples a aplicao destas rotinas nas funes mais comuns de controle, onde no necessitamos grandes recursos de software, pois precisamos apenas setar um pino, ou recarregar um timer, ou ler um canal serial, por exemplo.
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

23

A figura a seguir indica como atuam os registradores no controle do hardware de interrupo:

IE Register ____ INT0 0 IT0 1 IE0

IP Register

High Priority Interrupt

TF0

____ INT1

0 IT1 1 IE1

Interrupt Pooling Sequence

TF1

RI TI Low Priority Interrupt

Individual Enables

Global Disables

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

24

4 Descrio do Hardware

A descrio a seguir mostra as caractersticas construtivas do microcontrolador 8051. 4.1 Registradores de funo especial (Special Function Register SFR)

A figura abaixo indica a disposio do registrador de funes especiais (SFR). Na rea de SFR, nem todos os endereos esto ocupados, de forma que estes endereos no esto implantados no chip. Estes espaos destinam-se a acessrios que encontramos em outros componentes da famlia.

Vamos descrever os nomes e funes de cada registrador.


Endereo Funo Endereo Funo Endereo Funo Endereo Funo Endereo Funo Endereo Funo Endereo Funo Endereo Funo Endereo Funo Endereo Funo F8H F9H FAH FBH FCH FDH FEH FFH

F0H B E8H

F1H

F2H

F3H

F4H

F5H

F6H

F7H

E9H

EAH

EBH

ECH

EDH

EEH

EFH

E0H ACC D8H

E1H

E2H

E3H

E4H

E5H

E6H

E7H

D9H

DAH

DBH

DCH

DDH

DEH

DFH

D0H PSW C8H T2CON C0H

D1H

D2H

D3H

D4H

D5H

D6H

D7H

C9H

CAH RCP2L C2H

CBH RCP2H C3H

CCH TL2 C4H

CDH TH2 C5H

CEH

CFH

C1H

C6H

C7H

B8H IP B0H P3

B9H

BAH

BBH

BCH

BDH

BEH

BFH

B1H

B2H

B3H

B4H

B5H

B6H

B7H

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

25

Endereo Funo Endereo Funo Endereo Funo Endereo Funo Endereo Funo Endereo Funo

A8H IE A0H P2 98H SCON 90H P1 88H TCON 80H P0

A9H

AAH

ABH

ACH

ADH

AEH

AFH

A1H

A2H

A3H

A4H

A5H

A6H

A7H

99H SBUF 91H

9AH

9BH

9CH

9DH

9EH

9FH

92H

93H

94H

95H

96H

97H

89H TMOD 81H SP

8AH TL0 82H DPL

8BH TL1 83H DPH

8CH TH0 84H

8DH TH1 85H

8EH

8FH

86H

87H PCON

4.2 Acumulador (ACC) (Registrador A)

O acumulador o registrador onde se processam a maioria das operaes de um processador, comumente encontradas num microprocessador de 8 bits.

4.3 Registrador B (B)

um registrador utilizado durante as operaes de multiplicao e diviso, podendo ser utilizado como registrador de uso geral em outras operaes.

4.4 Registrador da palavra de controle (PSW)

chamado de Program Status Word e contm basicamente, os flags de controle de fluxo do programa. Por isso utilizado em desvios e saltos condicionais, sendo tambm alterado na maioria das instrues. Seu contedo indicado na figura abaixo.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

26

CY

AC

F0

RS1

RS0

OV

CY (PSW7): Carry flag, indica vai um nas operaes aritmticas. AC (PSW6): Auxiliary carry flag, auxilia nas operaes de adio. F0 (PSW5): Flag de uso geral. RS1 (PSW4): Seleo do banco de registradores em uso. RS0 (PSW3): Seleo do banco de registradores em uso. OV (PSW2): Overflow em operaes aritmticas. (PSW1): Flag definvel pelo usurio. P (PSW0): Flag de paridade, indica o nmero de bits em 1 no acumulador. RS0 0 0 1 1 RS1 0 1 0 1 Banco Selecionado Banco 0 Banco 1 Banco 2 Banco 3 Endereo 00H at 07H 08H at 0FH 10H at 17H 18H at 1FH

4.5 Stack Pointer (SP) e Data Pointer (DPTR)

O Stack Pointer (ponteiro de pilha) incrementado antes do armazenamento dos dados em uma instruo PUSH ou CALL. Observe que o Stack pode ser alocado em qualquer regio da memria RAM, o ponteiro sempre inicializado no endereo 07H, e o Stack comea no endereo 08H. O Data Pointer consiste em dois registradores de 8 bits (DPH byte alto, e DPL byte baixo), que podem ser manipulados tanto como dois registradores separados de 8 bits como um nico de 16 bits. 4.6 Buffer Serial (SBUF)

O Buffer de dados serial (Serial data BUFfer) consiste de dois registradores separados, o buffer de transmisso e o buffer de recepo. Quando um dado colocado no buffer serial, ele vai diretamente para o buffer de transmisso serial, e quando ele chega ao buffer de recepo, ele colocado diretamente no SBUF.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

27

Existe um registrador que controla todas as operaes da interface serial chamado SCON (Serial CONtrol). Seu contedo descrito a seguir. SM0 SM1 SM2 REN TB8 RB8 TI RI

SM0 (SCON.7): Modo de operao da interface serial. SM1 (SCON.6): Modo de operao da interface serial. SM2 (SCON.5): Modo de operao da interface serial. REN (SCON.4): Habilitao de recepo. TB8 (SCON.3): o nono bit transmitido (stop bit). RB8 (SCON.2): o nono bit recebido. TI (SCON.1): Flag indicando fim de transmisso. RI (SCON.0): Flag indicando buffer de recepo cheio.

SM0 0 0 1 1

SM1 0 1 0 1

Modo 0 1 2 3

Descrio Shift Register 8 bit UART 9 bit UART 9 bit UART

Frequncia Freq. Oscilador /12 Varivel Freq. Oscilador /64 ou 32 Varivel

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

28

4.7 Portos de E/S (P0, P1, P2, P3)

Os portos P0, P1, P2 e P3 so latches dos seus respectivos portos fsicos. Escrevendo um bit 1 no SFR, o pino de sada do porto respectivo ir para 1 imediatamente. Quando este port for acessado para leitura, o estado do pino externo armazenado no registrador correspondente. A estrutura dos ports ilustrada aba ixo.
Addr/Data Control Read Latc h Int. BUS Write To Latch Read PIN

VCC Read Latc h Int. BUS Write To Latch Read PIN Address Control

VCC Interna l P1.X Pull-up PIN DP1.XQ Latch_ CL Q

P0.X PIN DP0.XQ Latch_ CL Q MU X

Port 0 Bit
Read Latc h Int. BUS Write To Latch Read PIN

Port 1 Bit

VCC Interna l P2.X Pull-up PIN

DP2.XQ Latch_ CL Q

MU X

Port 2 Bit
VCC Alternate Output Function DP3.XQ Latch_ CL Q Interna l P3.X Pull-up PIN

Read Latc h Int. BUS Write To Latch Read PIN

Port 3 Bit
Alternate Input Function

Todos os 4 ports so bidirecionais e consistem num latch (que o prprio SFR), num driver de sada e num driver de entrada. Os drivers de sada dos ports P0 e P2 e o driver de entrada do port P0, so utilizados durante o acesso memria externa.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

29

4.8 Registradores de Timer e de Controle

Os pares de registradores (TH0, TL0, e TH1, TL1) so registradores de contagem de 16 bits, nos quais programamos os valores de contagem/temporizao dos respectivos contadores. Existem outros registradores de funes especficas de controle de alguns mdulos do microcontrolador. Vamos descrever cada um desses registradores. O registrador IP (Interrupt Priority), define um dos dois nveis possveis para cada interrupo, de acordo com a descrio abaixo.

PT2

PS

PT1

PX1

PT0

PX0

PT2 (IP5): Define nvel de prioridade do timer 2 (somente no 8052). PS (IP4): Define o nvel de prioridade do port serial. PT1 (IP3): Define o nvel de prioridade do timer 1. PX1 (IP2): Define o nvel de prioridade da interrupo externa 1. PT0 (IP1): Define o nvel de prioridade do timer 0. PX0 (IP0): Define o nvel de prioridade da interrupo externa 0.

J o registrador IE (Interrupt Enable), permite a habilitao ou desabilitao individual de cada uma das fontes de interrupo. Atravs de um bit neste mesmo registrador podemos atuar sobre todas as interrupes de maneira global. EA ET2 ES ET1 EX1 ET0 EX0

EA (IE7): Desabilita todas as interrupes quando em 0. ET2 (IE5): Habilita ou desabilita a interrupo do timer 2 (somente 8052). ES (IE4): Habilita ou desabilita a interrupo do port serial. ET1 (IE3): Habilita ou desabilita a interrupo do timer 1. EX1 (IE2): Habilita ou desabilita a interrupo externa 1. ET0 (IE1): Habilita ou desabilita a interrupo do timer 0. EX0 (IE0): Habilita ou desabilita a interrupo externa 0.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

30

O registrador TMOD (Timer MODe), permite o controle do modo de operao dos timers existentes no microcontrolador, bem como a definio quanto operao como timer ou como contador. Gate (1) C/T (1) M1 (1) M0 (1) Gate (0) C/T (0) M1 (0) M0 (0) Gate: Permite o disparo do timer por hardware (gate=1), ou por software (gate=0), via registrador TCON. C/T: Em 0 opera como timer, em 1 opera como contador. M1: Modo de operao. M0: Modo de operao. M1 0 0 1 1 M0 0 1 0 1 Modo de Operao 0 Timer de 13 bits compatvel com o 8048. 1 Timer/counter de 16 bits. 2 Timer/counter de 8 bits auto reload. 3 No timer 0, TL0 define um contador de 8 bits e TH0 controlado pelos bits de controle do timer 1. O timer 1 est parado.

A operao dos timers/counters dependem tambm de um registrador denominado TCON (Timer CONtrol), utilizado para configur-lo e monitorar suas condies de funcionamento. Neste mesmo registrador encontramos os flags de interrupes externas, os quais esto ativos quando da ocorrncia da interrupo. TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TF1 (TCON.7): Flag de overflow do timer 1. Seta quando overflow. TR1 (TCON.6): Bit de disparo do timer 1. TF0 (TCON.5): Flag de overflow do timer 0. Seta quando overflow. TR0 (TCON.4): Bit de disparo do timer 0. IE1 (TCON.3): Flag da interrupo externa 1. IT1 (TCON.2): Seleciona o tipo de interrupo 1 (borda ou nvel). IE0 (TCON.1): Flag da interrupo externa 0. IT0 (TCON.0): Seleciona o tipo de interrupo 0 (borda ou nvel). O registrador de controle da interface serial SCON (Serial CONtrol), permite a programao das caractersticas funcionais da interface serial do microcontrolador. Normalmente devemos utilizar este registrador para definir que tipo de UART vamos
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

31

utilizar, e verificar o status da transmisso pelos bits de controle, presentes neste mesmo registrador. SM0 SM1 SM2 REN TB8 RB8 TI RI

SM0 (SCON.7): Modo de operao do port serial. SM1 (SCON.6): Modo de operao do port serial. SM2 (SCON.5): Usado nos modos 2 e 3 para multiprocessamento. REN (SCON.4): Habilita ou desabilita a recepo definido por soft. TB8 (SCON.3): o nono bit transmitido (stop bit) definido por soft. RB8 (SCON.2): o stop bit recebido do hardware para sinalizao. TI (SCON.1): Setado pelo hardware no fim da transmisso. RI (SCON.0): Setado pelo hardware no fim da recepo.
SM0 SM1 Modo Descrio Frequncia

0 0 1 1

0 1 0 1

0 1 2 3

Shift Register 8 bit UART 9 bit UART 9 bit UART

Freq. Oscilador /12 Varivel Freq. Oscilador /64 ou 32 Varivel

Existe ainda um registrador para controle genrico das funes de alimentao do microcontrolador. O registrador PCON (Power CONtrol) bastante utilizado quando optamos pela utilizao da tecnologia CHMOS (80C51 por exemplo), para garantir baixo consumo em circuitos alimentados por bateria, ou ainda que permaneam um grande perodo em stand-by. SMOD GF1 GF0 PD IDL

SMOD: Dobra o baud rate quando utilizamos o timer 1. GF1: Flag de uso geral. GF0: Flag de uso geral. PD: Ativa o modo de operao Power Down (s nos CHMOS). IDL: Ativa o modo de operao IDLE (s nos CHMOS).

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

32

4.9 Estrutura e operao dos ports de I/O

Os quatro ports presentes no 8051 so bidirecionais, consistindo cada um de um latch (que o prprio registrador Px no SFR), em um driver de sada e em um buffer de entrada. Para acessar a memria externa, utilizamos os ports P0 e P2, sendo que o port P0 leva os dados e endereos multiplexados, enquanto que o port P2 leva memria o restante dos endereos. Fica claro que quando utilizamos os microcontroladores sem memria interna (80C31 por exemplo) o port P2 tem seu uso restrito para endereamento. O port P3 um port multifuncional, ou seja, seus pinos no so apenas pinos de entrada e sada, mas tem diversas funes especficas, que esto listadas abaixo: P3.0 RXD entrada do port serial P3.1 TXD sada do port serial P3.2 INT0 entrada da interrupo externa 0 P3.3 INT1 entrada da interrupo externa 1 P3.4 T0 entrada do Timer/counter 0 P3.5 T1 entrada do Timer/counter 1 P3.6 WR sinal de escrita para memria externa P3.7 RD sinal de leitura para memria externa

Os portos 1, 2 e 3 so providos de resistores pull-up internos, enquanto que o port 0 apresenta sadas em open drain. Qualquer uma das linhas pode ser usada independentemente como entrada ou sada, uma vez que os ports so endereveis por bit (bit addressable). Para utilizarmos os ports como entradas, devemos colocar nvel lgico 1 no latch de entrada, para que o pino fique em nvel alto pelo resistor de pullup, mas possa ser colocado em nvel baixo pela ao de um sinal externo. No port 0, no existe o resistor de pull-up interno, de forma que torna-se obrigatrio o uso de pull-ups externos. Quando ocorre o endereamento, a estrutura do port permite que sejam colocados 1s ou 0s conforme a necessidade. A estrutura dos ports est representada a seguir, ilustrando o funcionamento dos mesmos. Para escrever um dado em um dispositivo atravs de um dos ports, devemos simplesmente mover o dado para o registrador respectivo no SFR. Devemos lembrar sempre que os valores de corrente fornecidos pelos ports so da ordem de mil iMilton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

33

ampres, de forma que precisamos de drivers de corrente na maioria dos casos. Os resistores pull-up internos fornecem baixos valores de corrente e na maioria dos projetos determinamos a ativao dos dispositivos de sada em nveis baixos, pois neste caso a corrente pode ser significativamente maior. Os buffers de sada dos ports 1, 2 e 3 fornecem corrente suficiente para 4 cargas TTL cada um, enquanto que o port 0 pode fornecer corrente para at 8 cargas TTL. Algumas instrues de leitura no port, realizam uma leitura no latch (registrador), enquanto outras realizam a leitura diretamente no pino do CI. As instrues que realizam a leitura no latch, lem este valor, processam, e depois se for necessrio rescrevem-no no latch. So chamadas de read-modify-write, e esto listadas a seguir: ANL E lgico ORL Ou lgico XRL Ou Exclusivo lgico JBC Jump se bit =1 e limpa o bit CPL Complementa o bit INC Incremento DEC Decremento DJNZ Decrementa e salta se no zero MOV, Px,y, C Move carry bit para o bit y do port x CLR Px,y Limpa bit y do port x SETB Px,y Seta bit y do port x

A razo pela qual as instrues acima so direcionadas preferencialmente ao latch evitar uma m interpretao do nvel lgico no pino. Um exemplo disso quando utilizamos transistores na sada dos microcontroladores, e escrevemos nvel 1 na base do mesmo. A tenso neste pino pode ser confundida com nvel 0 facilmente, enquanto que se a mesma for lida no latch, representar o valor real do sinal no pino.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

34

Addr/Data Control Read Latch Int. BUS Write To Latch Read PIN

VCC Read Latch P0.X PIN Int. BUS Write To Latch Read PIN

VCC Internal Pull-up P1.X PIN D P1.X Q Latch _ CL Q

D P0.X Q Latch _ CL Q

MUX

Port 0 Bit
Address Control Read Latch Int. BUS Write To Latch Read PIN

Port 1 Bit

VCC Internal Pull-up P2.X PIN

D P2.X Q Latch _ CL Q

MUX

Port 2 Bit
VCC Alternate Output Function Internal Pull-up P3.X PIN

Read Latch Int. BUS Write To Latch

D P3.X Q Latch _ CL Q

Port 3 Bit

Read PIN

Alternate Input Function

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

35

4.10 Acesso memria externa

Podemos ter dois tipos de acesso memria externa, acesso memria de programa externa (ROM, EPROM) e acesso memria de dados externa (RAM). Acessos ROM externa utilizam o sinal PSEN como strobe de leitura, enquanto que utilizamos o sinal RD ou WR como strobe quando acessamos a memria RAM. Buscas memria externa de programa utilizam sempre endereos de 16 bits, e os acessos memria de dados podem utilizar 8 ou 16 bits de endereo. Quando utilizamos acessos de 16 bits, o byte alto de endereo exibido pelo porto 2, que fica indisponvel como port de I/O genrico. Quando utilizamos acessos em 8 bits, o valor do port 2 existente no latch do seu respectivo SFR mantido de forma que podemos implementar um sistema de gerenciamento com facilidade. Em qualquer dos casos, o port 0 contm o byte baixo de endereos multiplexado com os dados, e nesta funo utilizamos um dos FETs internos com pull-up de forma que no se orna necessria a adio de pull-up externo (se forem realizadas apenas operaes de busca na memria, o que no muito comum). O sinal de ALE deve ser utilizado para capturar o endereo vlido no latch externo. Durante qualquer acesso memria externa, escrito o byte 0FFH no latch do port 0 (SFR), destruindo a informao presente neste port, portanto, devemos salvar qualquer informao til existente no port 0 antes de acessar a memria externa. A memria de programa externa acessada sempre em duas condies: quando o sinal EA estiver ativo (nvel baixo), ou o contador de programa PC apresentar um nmero maior do que 0FFFH.

4.11 Temporizadores e Contadores

O microcontrolador 8051 tem 2 temporizadores/contadores de 16 bits, timer 0 e timer 1. Os dois podem ser programados para operar como temporizadores ou contadores independentemente. Na funo de timer, o registrador incrementado a cada ciclo de mquina, de forma que podemos imaginar o timer como um contador de ciclos de mquina. Como um ciclo de mquina consiste de 12 perodos do oscilador, podemos calcular facilmente a frequncia do nosso timer.
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

36

Na funo de contador, o registrador incrementado a cada transio de 1 para 0 no correspondente pino de entrada. Desta forma, cada leitura toma o tempo de dois ciclos de mquina, limitando a frequncia mxima de amostragem a 1/24 da frequncia de clock. 4.12 Modos de operao Podemos ter quatro modos distintos de operao dos timers selecionados pelo registrador TMOD.

Modo 0: No modo 0, o timer um contador de 8 bits com um divisor por 32, executando na realidade, um timer de 13 bits, compatvel com o timer do 8048, como indicado na figura abaixo:
Osc 12 C/T = 0 TL1 TH1 (5 bits) (8 bits) T1 Pin TR1 C/T = 1 Control TF1 Interrupt

Gate ___ Int1 Pin

Neste modo, quando o contador passa de todos os bits em 0, o flag respectivo TFx setado no registrador TCON. O disparo do timer feito por outro bit no

registrador TCON, o bit TRx (Timer Run). O bit Gate, presente no registrador TMOD permite o uso de uma interrupo conjuntamente com o timer. Devemos lembrar

sempre de programar TMOD antes de programar TCON para disparo do timer. O registrador de 13 bits consiste nos 8 bits de THx e nos 5 bits mais baixos de TLx, sendo os 3 bits restantes do registrador TLx ignorados.

Modo 1: No modo 1, os timer se comportam da mesma forma que no modo 0, exceto pelo fato de que os registradores agora utilizam a totalidade dos 16 bits disponveis para cada um dos contadores.
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

37

Modo 2: O modo 2 configura o registrador do timer como um contador de 8 bits (TLx) com recarga automtica, como mostrado na figura abaixo:
Osc 12 C/T = 0 TL1 (8 bits) T1 Pin TR1 C/T = 1 Control Reload TF1 Interrupt

Gate ___ Int0 Pin

TH1 (8 bits)

Quando ocorre o overflow de TLx, o flag TLx setado e o contedo de TLx recarregado com o valor de THx, que deve ser anteriormente carregado por software. O valor de THx permanece inalterado.

Modo 3: O modo 3 deve ser utilizado quando necessitamos de um outro contador no 8051. Quando ativamos o modo 3, estabelecemos dois contadores separados, um para o THx e outro para o TLx. O timer procedente de TLx utiliza para seu controle, os bits C/T, Gate, TR0, INTx e TFx, relativos ao timer 0, enquanto que o timer relativo ao registrador THx, utiliza os bits de controle relativos ao timer 1. A figura abaixo ilustra a lgica de atuao deste modo.
Osc 12 1/12 Freq. Osc

1/12 Freq. Osc C/T = 0 TL0 (8 bits) T0 Pin TR0 C/T = 1 Control TF0 Interrupt

Gate ___ Int0 Pin 1/12 Freq. Osc Control TH0 (8 bits) TR1 TF1 Interrupt

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

38

4.13 Interface Serial

A interface serial presente no microcontrolador do tipo full-duplex, pode transmitir e receber dados simultaneamente, com buffer de recepo, ou seja, pode comear a receber um segundo byte antes de ler o primeiro byte do buffer. Os buffers de transmisso e recepo so comandados pelo registrador SBUF no SFR. Escrita no SBUF carrega o buffer de transmisso, enquanto que leituras no SBUF acessam um registrador de recepo separado fisicamente. A interface serial pode operar em 4 modos distintos, e em qualquer dos modos a transmisso iniciada por qualquer instruo que utilize o SBUF como registrador de destino. A recepo se d quando chega um dado no SBUF. 4.14 Modos de Operao

Podemos operar com a interface serial interna do microcontrolador, de quatro modos diferentes:

Modo 0: Neste modo, os dados manipulados entram pelo pino RXD, enquanto que o pino TXD utilizado como sada. Temos ento a transmisso de 8 bits, sendo que o primeiro bit o LSB, e a frequncia de baud rate fixa em 1/12 da frequncia do oscilador. A transmisso iniciada por qualquer instruo que utilize o SBUF como registrador de destino. Imediatamente aps esta instruo, colocado um bit 1 na nona posio do shift register e o bloco de controle de transmisso comea a transmisso. Os bits de dados so deslocados para a direita e so colocados zeros nas posies desocupadas, at que se chegue no MSB. Esta condio avisa para o bloco de controle que deve ser efetuado um deslocamento, e em seguida setada a flag TI. Todo este processo ocorre no tempo de 10 ciclos de mquina. A recepo comea quando a condio REN igual a 1 e o flag RI igual a 0. Os dados recebidos so deslocados e aps a chegada do ltimo bit, o flag de r ecepo RI setado, indicando que existem dados no buffer de recepo. A figura abaixo ilustra o processo.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

39

8051 Internal BUS TB8 Write to SBUF D S Q CL SBUF RXD P3.0 ALT Output Function Shift

Zero Detector

Start S6 TX Clock Serial Port Interrupt RX Clock REN __ RI Start

TX Control
TI

Shift Send TXD P3.1 ALT Output Function

RI

Receive

Shift 1 1 1 1 1 1 1 0 Input Shift Register Shift

RX Control

Shift Clock RXD P3.0 ALT Input Function

Load SBUF

SBUF

Read SBUF

8051 Internal BUS

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

40

10 Ciclos de Mquina ALE Write to SBUF S6P2

Send Shift

Transmit D0 TXD (Shift Clock) TI S3P1 D1 S6P1 D2 D3 D4 D5 D6 D7

Write to SCON (Clear RI) RI Receive Receive Shift RXD (Data In) TXD (Shift Clock) D0 S5P2 D1 D2 D3 D4 D5 D6 D7

Modo 1: Dez bits so recebidos pelo pino RXD, ou transmitidos pelo pino TXD; um start bit (0), 8 bits de dados (LSB primeiro), e um stop bit. Na recepo, o stop bit vai para a posio RB8 no registrador SCON, e o baud rate determinado pelo timer 1, na maioria dos casos (podem ser utilizados tambm o timer 2 ou ambos no 8052). A transmisso ocorre da mesma forma que no modo anterior, exceto ao fato de que no existe uma linha de clock sincronizando os dois circuitos. Este sincronismo funo de bits de start e stop, presentes em cada transmisso. Aps a transmisso do ltimo bit (stop bit) o flag TI setado no registrador SCON. A recepo iniciada com a deteco da transio de 1 para 0 na linha RXD, indicando a presena do start bit na linha. Para esta funo, a linha RXD amostrada a uma taxa de 16 vezes a frequncia determinada para o baud rate. Aps esta deteco, o sinal comea a ser deslocado a partir da frequncia gerada pelo timer 1. Quando for recebido o ltimo bit (stop bit), este colocado em RB8, e o flag TI setado. A figura a seguir ilustra o diagrama de sinais da recepo do modo 1.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

41

Timer 1 Overflow

Timer 2 Overflow TB8

8051 Internal BUS

2 SMOD 0 0 TCLK 0 RCLK 1 1 1

Write to SBUF D S Q CL SBUF TXD Shift

Zero Detector

Start 16 TX Clock 16 Sample 1 to 0 Transition Detector

TX Control
TI

Shift Data ____ Send Serial Port Interrupt

RX Clock RI Start

Load SBUF Shift 1FFH

RX Control

Bit Detector

Input Shift Register (9 bits) RXD Load SBUF Shift

SBUF

Read SBUF

8051 Internal BUS

TX Clock Write to SBUF ____ Send S1P1 Data Shift TXD TI RX Clock RXD Bit detector sample times Shift RI +16 Reset Start bit D0 D1 D2 D3 D4 D5 D6 D7 Stop bit

Transmit

Start bit D0 D1 D2 D3 D4 D5 D6 D7

Stop bit

Receive

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

42

Modos 2 e 3: Nestes dois modos so transmitidos 11 bits pelo pino TXD, ou recebemos 11 bits atravs do pino RXD: um start bit 0, 8 bits de dados (LSB primeiro), um nono bit pr ogramvel e um stop bit 1. A diferena entre os modos 2 e 3 que no modo 3 a fr equncia de baud rate varivel, enquanto que no modo 2 a frequncia fixa em 1/32 ou 1/64 da frequncia do oscilador. Os processos de transmisso e recepo dos dados so semelhantes aos outros modos anteriormente mostrados. A figura abaixo ilustra o processo.

8051 Internal BUS TB8 Write to SBUF Phase 2 Clock (1/2 freq. osc.) D S Q CL SBUF TXD Shift

Zero Detector Mode 2 Start Smod = 1 2 Smod = 0 (Smod is PCON.7) 16 Sample 1 to 0 Transition Detector RX Clock RI Start 16

Stop bit gen TI

TX Control
TX Clock

Shift Data ____ Send Serial Port Interrupt

Load SBUF Shift 1FFH

RX Control

Bit Detector

Input Shift Register (9 bits) RXD Load SBUF Shift

SBUF

Read SBUF

8051 Internal BUS

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

43

TX Clock Write to SBUF ____ Send S1P1 Data Shift TXD TI Stop bit gen RX Clock RXD Bit detector sample times Shift RI +16 Reset Start bit D0 D1 D2 D3 D4 D5 D6 D7 TB8 Stop bit

Transmit

Start bit D0 D1 D2 D3 D4 D5 D6 D7 RB8 7

Stop bit

Receive

4. 15 Registrador de Controle

O controle da interface serial feito pelo j descrito registrador SCON, com a atuao do registrador PCON, (utilizando o bit SMOD). Por este registrador podemos monitorar o funcionamento da interface serial pelos bits TI, RI, TB8 e RB8, que indicam o estado da interface serial nas operaes de transmisso ou recepo. 4.16 Baud Rates

A taxa de transmisso (baud rate), tem seus valores definidos de acordo com o modo de operao estabelecido para o interface serial. No modo 0, o baud rate fixo e tem seu valor estabelecido como sendo 1/12 da frequncia do oscilador. No modo 2, a frequncia pode ter dois valores distintos, dependendo do valor do bit SMOD no registrador PCON. Se SMOD for igual a 0, o baud rate igual a 1/64 da frequncia do oscilador, se o SMOD for igual a 1, o baud rate passa a ser 1/32 da frequncia do oscilador. Quando utilizamos o timer 1 como gerador de baud rate, o baud rate nos modos 1 e 3 tem seu valor determinado pela taxa de overflow do prprio timer 1, obedecendo a frmula: Baud rate = [(2Smod)/32] x (timer 1 overflow rate)
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

44

A interrupo do timer 1 deve ser desabilitada neste caso para evitar sinalizao indevida. O timer pode ser configurado para operao como timer ou como contador em qualquer um dos trs modos. O modo mais comumente utilizado o modo de operao como timer de auto-recarga. A frmula para se obter diretamente a frequncia do baud rate a seguinte: Baud Rate = {[(2Smod)/32] x [Fosc./[12 x (256 - TH1)]]} A tabela abaixo indica os valores mais utilizados a partir de uma dada frequncia de cristal, e os valores de recarga dos timers para facilitar a programao.
Baud Rate 19,2K 9,6K 4,8K 2,4K 1,2K 137,5 110 110 Freq. Osc. 11,059 MHz 11,059 MHz 11,059 MHz 11,059 MHz 11,059 MHz 11,968 MHz 6 MHz 12 MHz SMOD 1 0 0 0 0 0 0 0 Modo 2 2 2 2 2 2 2 1 Valor de Recarga FDH FDH FAH F4H E8H 1DH 72H FEEBH

Devemos observar os valores de mxima frequncia para cada um dos modos, e respeit-los, pois o uso de frequncias acima destes valores acarretariam perdas de informao na comunicao serial. A tabela abaixo indica estas frequncias:
Modo 0 1e3 2 Frequncia Mxima 1 MHz 62,5 KHz 375 KHz

4.17 Interrupes

Os microcontroladores da famlia 8051 so providos de 5 fontes de interrupo, como mostradas na figura a seguir. As interrupes externa INT0 e INT1 podem ser ativadas por nvel lgico ou por transio (borda), dependendo para isto, dos bits IT0 e IT1 no registrador TCON. Os flags que indicam a presena da interrupo nos pinos
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

45

externos so IE0 e IE1 no mesmo registrador TCON. Quando uma interrupo externa recebida, o respectivo flag limpo quando a rotina de servio vetorada para o endereo da interrupo, somente se a interrupo for do tipo ativa por transio. Se a interrupo for ativa por nvel , o dispositivo externo que solicitou a interrupo se encarrega do seu controle.

____ INT0

0 IT0 1 IE0

TF0

____ INT1

0 IT1 1 Interrupt Sources IE1

TF1

RI TI

TF2 EXF2

8052 only

As interrupes dos timers so geradas quando houver overflow dos mesmos, e so reestabelecidas ao seu estado inativo por hardware quando a interrupo j se encontrar devidamente vetorada. A interrupo da interface serial gerada por um OU lgico entre os flags de RI e TI, e estes flags no so limpos aps o vetoramento da interrupo, devendo ser feito este procedimento por software, aps o recebimento ou transmisso do dado. Todos os bits que geram interrupo podem ser habilitados ou no pelo registrador de habilitao de interrupo IE. Os vetores de endereo das interrupes, ou seja, os endereos para qual o PC direcionado quando ocorre uma interrupo so fixos e seus valores so indicados a seguir:

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

46

Fonte IE0 TF0 IE1 TF1 Serial

Endereo 0003H 000BH 0013H 001BH 0023H

4.18 Estrutura de prioridades

Cada uma das fontes de interrupo pode ser individualmente programada para atender a um dos dois possveis nveis de interrupo, mediante um bit especfico no registrador IP. Colocando um valor 0 no bit correspondente, definimos esta interrupo como de menor prioridade, e vice-versa. Quando temos duas interrupes de mesma prioridade, no mesmo instante, elas sero atendidas pelo pool select que realizado na seguinte ordem: IE0 TF0 IE1 TF1 Serial 4.19 Interrupes externas

As fontes externas de interrupo podem ser programadas para serem ativadas por nvel ou por borda, desde que os pinos de interrupo externa sejam amostrados uma vez a cada ciclo de mquina, a entrada de interrupo deve manter-se estvel por pelo menos 12 perodos do oscilador para que a interrupo seja reconhecida. No caso da interrupo ser ativa por transio, deve-se manter em um nvel por um ciclo de mquina e mudar para outro nvel, mantendo-se nele por outro ciclo de mquina. Aps o reconhecimento, o flag IEx setado no registrador TCON sendo automaticamente resetado pela CPU quando a rotina de servio da interrupo chamada. Se a interrupo ativa por nvel, este nvel deve ser mantido pelo tempo necessrio para que seja reconhecida a interrupo, e depois deve ser desativada antes que a rotina de tratamento da interrupo se complete, para evitar que outro pedido de interrupo seja gerado.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

47

4.20 Circuitos de Controle

Existem outros circuitos que devem ser considerados quando da elaborao do hardware de um microcontrolador. Alm dos j citados circuitos de decodificao de dados/endereos, utilizado para acesso a memria externa, pull-ups e buffers nas linhas de dados e endereos, alguns merecem especial cuidado e ateno na construo. 4.21 Circuito de Reset

A entrada do reset se d pelo pino RST, quando este mantido em nvel alto por pelo menos dois ciclos de mquina, aps o circuito do oscilador comear a funcionar. Logo aps o reset, os valores colocados nos registradores so os indicados abaixo:
Fonte PC Acc B PSW SP DPTR P0-P3 IP IE TMOD TCON TH0 TL0 TH1 TL1 SCON SBUF PCON (HMOS) PCON (CHMOS) Endereo 0000H 00H 00H 00H 07H 0000H FFH XXX00000b 0XX00000b 00H 00H 00H 00H 00H 00H 00H Indeterminado 0XXXXXXXb 0XXX0000b

Normalmente utilizamos um circuito conhecido como Power On Reset, para que o microcontrolador seja inicializado ao ligarmos o equipamento. O circuito abaixo ilustra um exemplo tpico de circuito para uma tenso de 5Vcc, e frequncia de 10MHz. Devemos notar que para os circuitos CHMOS, devido caractersticas construtivas do

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

48

dispositivo, no se faz necessrio o uso do resistor externo, simplificando ainda mais o circuito.

Vcc 10F 8K2 Rst

8K2

805 1
Vss

4.22 Circuito de Clock

Podemos utilizar o oscilador interno ao microcontrolador como indicado anteriormente neste mesmo manual. Devemos utilizar um cristal com as seguintes caractersticas: Co (Shunt Capacitance) mx. 7pF Cl (Load Capacitance) 30 pF (10%) Potncia 1mW

A resistncia equivalente em srie depende da frequncia do cristal, tendo seus valores prticos demarcados no grfico a seguir:
600

ESR in Ohms

500 400 300 200 100 0 0 4 8 12 16 20

Crystal Frequency in MHz


Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

49

4.23 Operao passo a passo

Este modo de operao muito til durante a construo de programas, e desenvolvimento do hardware, para solucionar eventuais problemas surgidos no decorrer destes processos. Podemos entender esta operao, lembrando o funcionamento da j conhecida estrutura das interrupes do microcontrolador. Quando uma interrupo est em progresso, outra interrupo de mesmo nvel no pode ser ativada simultaneamente. O fato que a prxima interrupo s ocorre aps a execuo de pelo menos uma instruo do programa interrompido, de forma que, colocando a interrupo INT0 (por exemplo) em nvel baixo e acrescentando algumas linhas de programa nas rotinas de tratamento da interrupo. As linhas so as seguintes:
JNB P3.2,$ ; aguarda at que a interrupo v para alto JB P3.2,$ ; aguarda at que a interrupo v para baixo RETI ; volta e executa uma instruo

Desta forma, quando a INT0 ativada em nvel baixo, a CPU vai para a rotina de tratamento da interrupo e fica at que o sinal INT0 pulse (de baixo para alto e novamente para baixo). Desta forma ela executa o comando de retorno da interrupo, executa uma instruo e imediatamente retorna a rotina de interrupo, permanecendo nesta at que o sinal INT0 pulse novamente. Esta uma forma simples de acompanhar a execuo das rotinas de um programa passo a passo, mas normalmente vamos executar estas rotinas atravs de um software de simulao apropriado, onde sero detectadas as principais falhas na programao.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

50

4.24 Descrio da pinagem

A figura abaixo ilustra a pinagem do controlador 8051 nas duas formas de encapsulamento mais comuns:

43 P0.0 AD0

42 P0.1 AD1

41 P0.2 AD2

P1.4

P1.3

P1.2

P1.3 P1.4 P1.5 P1.6 P1.7 Rst

4 5 6 7 8 9 Pin (DIP)

37 P0.2 AD2
6 5 4 3 2

36 P0.3 AD3 35 P0.4 AD4 34 P0.5 AD5 33 P0.6 AD6 32 P0.7 AD7 31 EA / Vpp* 30 ALE /Prog 29 PSE * N A15 28 P2.7 27 P2.6 A14 26 P2.5 A13 25 P2.4 A12 24 P2.3 A11 23 P2.2 A10 22 P2.1 A9 21 P2.0 A8 P1.5 P1.6 7 8

NC

38 P0.1 AD1

44 Vcc

** T2EX P1.1 P1.2

39 P0.0 AD0

40 P0.3 AD3

** T2 P1.0

40 Vcc

Index Corner

P1.1 T2EX ** P1.0 T2 **

39 P0.4 AD4 38 P0.5 AD5 37 P0.6 AD6 36 P0.7 AD7 Pad (LCC, PLCC) 35 EA / Vpp* 34 NC 33 ALE / Prog 32 PSE * N A15 31 P2.7 30 P2.6 A14 29 P2.5 A13
WR P3.6 18 RD P3.7 19 XTAL2 20 XTAL1 21 Vss 22 NC 23 P2.0 A8 24 P2.1 A9 25 P2.2 A10 26 P2.3 A11 27 P2.4 A12 28

P1.7 9 Rst 10 RXD P3.0 11 NC 12 TXD P3.1 13 INT0 P3.2 14 INT1 P3.3 15 T0 P3.4 16 T1 P3.5 17

RXD P3.0 10 TXD P3.1 11 INT0 P3.2 12 INT1 P3.3 13 T0 P3.4 14 T1 P3.5 15 WR P3.6 16 RD P3.7 17 XTAL2 18 XTAL1 19 Vss 20 * EPROM Only ** 8052/8032 Only

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

51

A descrio da pinagem deste componente, no invlucro DIP dada abaixo:

Pino 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

Descrio Port 1, Dado 0 Port 1, Dado 1 Port 1, Dado 2 Port 1, Dado 3 Port 1, Dado 4 Port 1, Dado 5 Port 1, Dado 6 Port 1, Dado 7 Entrada de Reset Port 3, Dado 0 (RXD da interface serial interna) Port 3, Dado 1 (TXD da interface serial interna) Port 3, Dado 2 (Interrupo externa INT0) Port 3, Dado 3 (Interrupo externa INT1) Port 3, Dado 4 (Entrada do Timer 0) Port 3, Dado 5 (Entrada do Timer 1) Port 3, Dado 6 (Sinal de escrita para memria exemploterna) Port 3, Dado 7 (Sinal de leitura para memria externa) Entrada do cristal do oscilador Entrada do cristal do oscilador Alimentao Terra Port 2, Bit0 (Endereo A8) Port 2, Bit1 (Endereo A9) Port 2, Bit2 (Endereo A10) Port 2, Bit3 (Endereo A11) Port 2, Bit4 (Endereo A12) Port 2, Bit5 (Endereo A13) Port 2, Bit6 (Endereo A14) Port 2, Bit7 (Endereo A15) Sinal PSEN (Program Search Enable) Sinal ALE (Address Latch Enable) *Prog no 8751 Sinal EA (External Access) *Tenso de Prog no 8751 Port 0, Bit 7 (Dado 7) Port 0, Bit 6 (Dado 6) Port 0, Bit 5 (Dado 5) Port 0, Bit 4 (Dado 4) Port 0, Bit 3 (Dado 3) Port 0, Bit 2 (Dado 2) Port 0, Bit 1 (Dado 1) Port 0, Bit 0 (Dado 0) Alimentao de +5V

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

52

5 PROGRAMAO E SIMULAO 5.1 COMPILAO E LINKAGEM Um programa escrito em linguagem assembly (PROGRAMA FONTE), no pode ser diretamente processado pelo microcontrolador do sistema, devendo primeiramente ser traduzido para a sua linguagem de mquina, com o uso de tabelas ou por meio de um programa destinado para tal tarefa chamado de COMPILADOR, que fornece ento como sada o PROGRAMA OBJETO. Define-se COMPILADOR como um programa aplicativo que transforma um arquivo constitudo por cdigos ASCII (PROGRAMA FONTE: obrigatoriamente com extenso .ASM), gerado normalmente por um editor de textos, em um arquivo bin rio que contm os bytes correspondentes s instrues (cdigos de mquina) do microcontrolador. Como resultado da compilao so criados dois arquivos: - Arquivo de mesmo nome, porm com a extenso .OBJ (PROGRAMA OBJETO). - Arquivo de mesmo nome, porm com a extenso .LIST, que corresponde a um arquivo texto que mostra o resultado da compilao, contendo para cada linha de programa, o cdigo de mquina correspondente instruo, sendo muito til na depurao de erros de compilao. A linkagem tem a finalidade de reunir, em um nico arquivo, todos as rotinas escrita em um ou vrios arquivos diferentes. Aps a linkagem so gerados dois arquivos: - Arquivo de mesmo nome, sem extenso, usado pelo programa simulador. - Arquivo de mesmo nome, porm com a extenso .HEX, usado por gravadores de memrias e microcontroladores e tambm pelo programa simulador. PROGRAMA COMPILADOR PROGRAMA LINKER PROGRAMA FONTE .ASM
Milton Barreiro Junior ETE Getlio Vargas

OBJETO .OBJ

EXECUTVEL .HEX

Microcontrolador 8051 Teoria e Prtica

53

O compilador, o Linker e o Simulador usados no laboratrio so produzidos p ela AVOCET.

5.2 DIRETIVAS (ou PSEUDO-INSTRUES) de Compilao Alm das instrues pertencentes ao microcontrolador em questo, a linguagem assembly possui ainda algumas instrues especiais, pseudo-instrues ou diretivas, que so usadas apenas para a estruturao do programa. Estas instrues especiais, que no so traduzidas para o cdigo de mquina por no pertencerem ao conjunto de instrues do microcontrolador escolhido, possuem apenas funes especiais no programa como: definir smbolos, estabelecer o endereo inicial do programa, reservar rea de memria etc, no sendo, portanto, processadas. PSEUDO-INSTRUES MAIS USADAS ORG (ORIGIN) Formato: Pseudo-instruo operando ORG endereo Funo: Usado para o endereo inicial de memria, no qual o programa ou um trecho de programa ser armazenado. Exemplo: ORG 0100H Assim o programa objeto ser carregado na memria a partir do endereo 0100H DB (DEFINE BYTE) Formato: Pseudo-instruo operando DB byte Funo:
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

54

O byte do operando carregado diretamente na posio de memria escolhida pelo ORG. Exemplo: ORG 0050H DB 3FH DB 1AH Assim os bytes 3FH e 1AH foram armazenados nas posies de memria 0050H e 0051H respectivamente. END Formato: Pseudo-instruo END Funo: Indica o final do programa.

5.3 USO DO COMPILADOR E DO LINKER (PASSO A PASSO) OBS: Comandos digitados na linha de prompt do DOS. 1. Com o NE ou EDIT escrever um programa em assembly nomeado obrigatoriamente com a extenso .ASM (criando assim programa fonte). OBS: No editor de textos deve-se obrigatoriamente reservar as colunas de 1 a 6 para os labels ou tags que representam os endereos do programa, de entrada de loops, chamada de sub-rotinas etc. 2. Com o X8051 (compilador) obter os arquivos com extenso .OBJ (progr ama objeto) e .LST (listagem) da seguinte forma:

X8051 [ENTER] Listing Destination (..........): D [ENTER] Generate cross reference [ENTER] Input file name:.........nome do arquivo.ASM [ENTER]
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

55

Output file name: ...... nome do arquivo [ENTER]


3. Com o LINK ligar o arquivo .OBJ, gerando um arquivo .HEX da seguinte forma:

LINK [ENTER] Input file name: ........ .OBJ [ENTER] Enter offset for ....... [ENTER] Input file name: [ENTER] Output file name: [ENTER] Options (..........): H [ENTER]
4. No simulador:

Load Avocet .... .HEX Simulation F1 (total) F10 (passo a passo)


5.4 Simulador dos Microcontroladores da famlia 8051 ****** TELA DE ENTRADA DO SIMULADOR: ******

Deve-se selecionar uma opo em funo da cpu escolhida para o projeto.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

56

****** TELA DE SIMULAO: ******

5.5 Operao bsica do simulador

Para uma rpida ambientao com o programa simulador, apresentada uma seqncia de testes para as principais teclas e/ou comandos: Visualizao geral da tela, visando reconhecer os seus principais campos (coloridos) e funes correspondentes. Teclas: ESC CTRL C Comandos: Help Commands Display Simulation Avocet Registration Load Avocet Quit Exit setUp Cursor Yes No View Memory-map
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

57

Symbols Alpha Registers Data Bit SFR eXecute Seqncia para carregar um arquivo no simulador e informaes sobre a simulao: Load Avocet ... .OBJ Help Simulation Teclas para a simulao F1: executa o programa inteiro. F10: executa um programa instruo por instruo. F9: volta para a condio anterior, aps a execuo de uma instruo.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

58

6 Tabela de Instrues completa

Temos na tabela a seguir o set de instrues do 8051, indicando o seu opcode, conforme j explicado, o nmero de bytes da instruo, os perodos de clock necessrios e os flags afetados. Temos a seguinte codificao na tabela: @ significa endereado pelo valor de ...; #Dado indica valor constante de 8 bits; #Dado 16 indica valor constante de 16 bits; Direto indica um endereamento de memria de 8 bits (primeiras 256 rel indica que o endereamento relativo; ? indica depende do resultado ou da operao; - indica no afetado; 1 indica setado; 0 indica zerado.
Flags afetados CY AC 0V -

posies interna ou externas)

Opcode 00

Mnemnico NOP

Funo Nenhuma operao Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Desvia para qualquer posio da memria de programa. Desloca acumulador direita
b7 b0

Bytes 1

Pulsos 12

01

AJMP End11

24

02

LJMP End16

24

03

RR A

12

04 05 06 07 08 09 0A 0B

INC A INC Direto INC @R0 INC @R1 INC R0 INC R1 INC R2 INC R3

Soma 1 ao acumulador Soma 1 posio de memria Soma 1 RAM endereada por R0 Soma 1 RAM endereada por R1 Soma 1 ao contedo de R0 Soma 1 ao contedo de R1 Soma 1 ao contedo de R2 Soma 1 ao contedo de R3

1 2 1 1 1 1 1 1

12 12 12 12 12 12 12 12

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

59

Opcode 0C 0D 0E 0F 10

Mnemnico INC R4 INC R5 INC R6 INC R7 JBC bit, rel

Funo Soma 1 ao contedo de R4 Soma 1 ao contedo de R5 Soma 1 ao contedo de R6 Soma 1 ao contedo de R7 Desvia se o bit endereado estiver setado e depois zera o bit Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Chama sub-rotina em qualquer posio da memria de programa Desloca o acumulador direita atravs do carry
b7 b0 Cy

Bytes 1 1 1 1 3

Pulsos 12 12 12 12 24

Flags afetados CY AC 0V -

11

ACALL End11

24

12

LCALL End16

24

13

RRC A

12

14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20

DEC A DEC Direto DEC @R0 DEC @R1 DEC R0 DEC R1 DEC R2 DEC R3 DEC R4 DEC R5 DEC R6 DEC R7 JB bit, rel

21

AJMP End11

22

RET

Subtrai 1 do acumulador Subtrai 1 da posio de memria Subtrai 1 da RAM endereada por R0 Subtrai 1 da RAM endereada por R1 Subtrai 1 do contedo de R0 Subtrai 1 do contedo de R1 Subtrai 1 do contedo de R2 Subtrai 1 do contedo de R3 Subtrai 1 do contedo de R4 Subtrai 1 do contedo de R5 Subtrai 1 do contedo de R6 Subtrai 1 do contedo de R7 Desvio se o bit endereado estiver setado Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Retorne da sub-rotina Desloca o acumulador esquerda
b7 b0

1 2 1 1 1 1 1 1 1 1 1 1 3

12 12 12 12 12 12 12 12 12 12 12 12 24

24

24

23

RL A

12

24 25

ADD A, #Dado ADD A, Direto

Soma o dado ao acumulador Soma o contedo da posio de memria ao acumulador

2 2

12 12

? ?

? ?

? ?

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

60

Opcode 26

Mnemnico ADD A, @R0

Funo Soma o contedo da RAM endereada por R0 ao acumulador Soma o contedo da RAM endereada por R1 ao acumulador Soma o contedo de R0 ao acumulador Soma o contedo de R1 ao acumulador Soma o contedo de R2 ao acumulador Soma o contedo de R3 ao acumulador Soma o contedo de R4 ao acumulador Soma o contedo de R5 ao acumulador Soma o contedo de R6 ao acumulador Soma o contedo de R7 ao acumulador Desvia se o bit endereado estiver zerado Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Retorne da interrupo Desloca o acumulador esquerda atravs do carry
Cy b7 b0

Bytes 1

Pulsos 12

Flags afetados CY AC 0V ? ? ?

27 28 29 2A 2B 2C 2D 2E 2F 30

ADD A, @R1 ADD A, R0 ADD A, R1 ADD A, R2 ADD A, R3 ADD A, R4 ADD A, R5 ADD A, R6 ADD A, R7 JNB bit, rel

1 1 1 1 1 1 1 1 1 3

12 12 12 12 12 12 12 12 12 24

? ? ? ? ? ? ? ? ? -

? ? ? ? ? ? ? ? ? -

? ? ? ? ? ? ? ? ? -

31 32

ACALL End11 RETI

2 1

24 24

33

RLC A

12

34 35

ADDC A, #Dado ADDC A, Direto

36

ADDC A, @R0

37 38 39 3A

ADDC A, @R1 ADDC A, R0 ADDC A, R1 ADDC A, R2

Soma o dado e o carry ao acumulador Soma o contedo da posio de memria e o carry ao acumulador Soma o contedo da RAM endereada por R0 e o carry ao acumulador Soma o contedo da RAM endereada por R1 e o carry ao acumulador Soma o contedo de R0 e o carry ao acumulador Soma o contedo de R1 e o carry ao acumulador Soma o contedo de R2 e o carry ao acumulador

2 2

12 12

? ?

? ?

? ?

12

1 1 1 1

12 12 12 12

? ? ? ?

? ? ? ?

? ? ? ?

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

61

Opcode 3B 3C 3D 3E 3F 40

Mnemnico ADDC A, R3 ADDC A, R4 ADDC A, R5 ADDC A, R6 ADDC A, R7 JC rel

Funo Soma o contedo de R3 e o carry ao acumulador Soma o contedo de R4 e o carry ao acumulador Soma o contedo de R5 e o carry ao acumulador Soma o contedo de R6 e o carry ao acumulador Soma o contedo de R7 e o carry ao acumulador Desvia se o carry estiver setado Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Ou entre acumulador e m emria; resultado na memria Ou entre dado e memria

Bytes 1 1 1 1 1 2

Pulsos 12 12 12 12 12 24

Flags afetados CY AC 0V ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -

41

AJMP End11

24

42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50

ORL Direto, A ORL Direto, #Dado ORL A, #Dado

2 3 2 2 1 1 1 1 1 1 1 1 1 1 2

12 24 12 12 12 12 12 12 12 12 12 12 12 12 24

51

52 53

Ou entre dado e acumulador Ou entre memria e acum uORL A, Direto lador Ou entre a RAM endereada ORL A, @R0 por R0 e o acumulador Ou entre a RAM endereada ORL A, @R1 por R1 e o acumulador Ou entre o contedo de R0 e ORL A, R0 o acumulador Ou entre o contedo de R1 e ORL A, R1 o acumulador Ou entre o contedo de R2 e ORL A, R2 o acumulador Ou entre o contedo de R3 e ORL A, R3 o acumulador Ou entre o contedo de R4 e ORL A, R4 o acumulador Ou entre o contedo de R5 e ORL A, R5 o acumulador Ou entre o contedo de R6 e ORL A, R6 o acumulador Ou entre o contedo de R7 e ORL A, R7 o acumulador Desvia se o carry estiver zeraJNC rel do Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 ACALL End11 primeiros bits MSB do OpCode so os bits MSB do endereo) E entre acumulador e mem ANL Direto, A ria; resultado na memria ANL Direto, #dado E entre dado e memria

24

2 3

12 24

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

62

Opcode 54

Mnemnico ANL A, #Dado

Funo

Bytes 2 2 1 1 1 1 1 1 1 1 1 1 2

Pulsos 12 12 12 12 12 12 12 12 12 12 12 12 24

Flags afetados CY AC 0V -

E entre dado e acumulador E entre memria e acumula55 ANL A, Direto dor E entre RAM endereada por 56 ANL A, @R0 R0 e acumulador E entre RAM endereada por 57 ANL A, @R1 R1 e acumulador E entre o contedo de R0 e o 58 ANL A, R0 acumulador E entre o contedo de R1 e o 59 ANL A, R1 acumulador E entre o contedo de R2 e o 5A ANL A, R2 acumulador E entre o contedo de R3 e o 5B ANL A, R3 acumulador E entre o contedo de R4 e o 5C ANL A, R4 acumulador E entre o contedo de R5 e o 5D ANL A, R5 acumulador E entre o contedo de R6 e o 5E ANL A, R6 acumulador E entre o contedo de R7 e o 5F ANL A, R7 acumulador Desvia se o acumulador for 60 JZ rel zero Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits 61 AJMP End11 MSB do OpCode so os bits MSB do endereo) Ou exclusivo entre acumulador e memria; resultado na 62 XRL Direto, A memria XRL Direto, #Da- Ou exclusivo entre dado e 63 do memria Ou exclusivo entre dado e 64 XRL A, #Dado acumulador Ou exclusivo entre memria 65 XRL A, Direto e acumulador Ou exclusivo entre RAM en66 XRL A, @R0 dereada por R0 e acumulador Ou exclusivo entre RAM en67 XRL A, @R1 dereada por R1 e acumulador Ou exclusivo entre contedo 68 XRL A, R0 de R0 e acumulador Ou exclusivo entre contedo 69 XRL A, R1 de R1 e acumulador Ou exclusivo entre contedo 6A XRL A, R2 de R2 e acumulador Ou exclusivo entre contedo 6B XRL A, R3 de R3 e acumulador Ou exclusivo entre contedo 6C XRL A, R4 de R4 e acumulador Milton Barreiro Junior ETE Getlio Vargas

24

2 3 2 2 1 1 1 1 1 1 1

12 24 12 12 12 12 12 12 12 12 12

Microcontrolador 8051 Teoria e Prtica

63

Opcode 6D 6E 6F 70

Mnemnico XRL A, R5 XRL A, R6 XRL A, R7 JNZ rel

Funo Ou exclusivo entre contedo de R5 e acumulador Ou exclusivo entre contedo de R6 e acumulador Ou exclusivo entre contedo de R7 e acumulador Desvia se o acumulador no for zero Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Ou entre o bit endereado e o carry Desvia para o endereo obtido da soma do acumulador e do DPTR Mova o dado para o acumulador Mova o dado para a memria

Bytes 1 1 1 2

Pulsos 12 12 12 24

Flags afetados CY AC 0V -

71

ACALL End11

24

72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80

ORL C, bit JMP @A+DPTR MOV A, #Dado MOV Direto, #Dado MOV @R0, #Dado MOV @R1, #Dado

2 1 2 3 2 2 2 2 2 2 2 2 2 2 2

24 24 12 24 12 12 24 24 24 24 24 24 24 24 24

? -

81

82

83

Mova dado para RAM endereada indiretamente por R0 Mova dado para RAM endereada indiretamente por R1 Mova o dado para o registro MOV R0, #Dado R0 Mova o dado para o registro MOV R1, #Dado R1 Mova o dado para o registro MOV R2, #Dado R2 Mova o dado para o registro MOV R3, #Dado R3 Mova o dado para o registro MOV R4, #Dado R4 Mova o dado para o registro MOV R5, #Dado R5 Mova o dado para o registro MOV R6, #Dado R6 Mova o dado para o registro MOV R7, #Dado R7 SJMP rel Desvio curto relativo Desvia para outro endereo numa fai-xa de 2Kbytes da AJMP End11 atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) E entre o bit endereado e o ANL C, bit carry Soma A + PC obtendo um endereo de 16 bits na memria MOVC A, @A+PC de programa; carrega o acumulador com esta memria

24

24

24

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

64

Opcode 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90

Mnemnico DIV AB MOV Direto1, Direto2 MOV Direto, @R0 MOV Direto, @R1 MOV Direto, R0 MOV Direto, R1 MOV Direto, R2 MOV Direto, R3 MOV Direto, R4 MOV Direto, R5 MOV Direto, R6 MOV Direto, R7 MOV DPTR, #Dado 16 ACALL End11

Funo Divide A e B; resultado: A inteiro e B resto Mova o contedo da memria direta2 para a memria direta1 Mova RAM endereada por R0 para memria Mova RAM endereada por R1 para memria Mova registro R0 para memria Mova registro R1 para memria Mova registro R2 para memria Mova registro R3 para memria Mova registro R4 para memria Mova registro R5 para memria Mova registro R6 para memria Mova registro R7 para memria Mova dado de 16 bits para o DPTR Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Mova o carry para o bit endereado Soma A + DPTR obtendo um endereo de 16 bits na memria de programa; carrega o acumulador com esta memria Subtrai o dado e o borrow do acumulador Subtrai o contedo da posio de memria e o borrow do acumulador Subtrai o contedo da RAM endereada por R0 e o borrow do acumulador Subtrai o contedo da RAM endereada por R1 e o borrow do acumulador Subtrai o contedo de R0 e o borrow do acumulador Subtrai o contedo de R1 e o borrow do acumulador Subtrai o contedo de R2 e o borrow do acumulador

Bytes 1 3 2 2 2 2 2 2 2 2 2 2 3

Pulsos 48 24 24 24 24 24 24 24 24 24 24 24 24

Flags afetados CY AC 0V 0 ? 0 -

91

24

92

MOV bit, C MOVC A, @A + DPTR SUBB A, #Dado SUBB A, Direto

24

93

24

94 95

2 2

12 12

? ?

? ?

? ?

96

SUBB A, @R0

12

97 98 99 9A

SUBB A, @R1 SUBB A, R0 SUBB A, R1 SUBB A, R2

1 1 1 1

12 12 12 12

? ? ? ?

? ? ? ?

? ? ? ?

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

65

Opcode 9B 9C 9D 9E 9F A0

Mnemnico SUBB A, R3 SUBB A, R4 SUBB A, R5 SUBB A, R6 SUBB A, R7 ORL C, /bit

Funo Subtrai o contedo de R3 e o borrow do acumulador Subtrai o contedo de R4 e o borrow do acumulador Subtrai o contedo de R5 e o borrow do acumulador Subtrai o contedo de R6 e o borrow do acumulador Subtrai o contedo de R7 e o borrow do acumulador Ou entre o complemento do bit endereado e o carry Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Mova o bit endereado para o carry Soma 1 ao registro DPTR Multiplica A e B; resultado: BA Mova a memria para a RAM endereada por R0 Mova a memria para a RAM endereada por R1 Mova memria para o registro R0 Mova memria para o registro R1 Mova memria para o registro R2 Mova memria para o registro R3 Mova memria para o registro R4 Mova memria para o registro R5 Mova memria para o registro R6 Mova memria para o registro R7 E entre o complemento do bit endereado e o carry Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Inverte o estado do bit endereado Inverte o estado do carry

Bytes 1 1 1 1 1 2

Pulsos 12 12 12 12 12 24

Flags afetados CY AC 0V ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -

A1

AJMP End11

24

A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0

MOV C, bit INC DPTR MUL AB

2 1 1

12 24 48

? 0

MOV @R0, Direto MOV @R1, Direto MOV R0, Direto MOV R1, Direto MOV R2, Direto MOV R3, Direto MOV R4, Direto MOV R5, Direto MOV R6, Direto MOV R7, Direto ANL C, /bit

2 2 2 2 2 2 2 2 2 2 2

24 24 24 24 24 24 24 24 24 24 24

B1

ACALL End11

24

B2 B3

CPL bit CPL C

2 1

12 12

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

66

Opcode B4 B5

Mnemnico CJNE A, #Dado rel CJNE A, Direto rel CJNE @R0, #Dado rel CJNE @R1, #Dado rel CJNE R0, #Dado rel CJNE R1, #Dado rel CJNE R2, #Dado rel CJNE R3, #Dado rel CJNE R4, #Dado rel CJNE R5, #Dado rel CJNE R6, #Dado rel CJNE R7, #Dado rel PUSH Direto

Funo Compara e desvia se o acumulador for diferente do dado Compara e desvia se o acumulador for diferente da memria endereada Compara e desvia se a RAM endereada por R0 for diferente do dado Compara e desvia se a RAM endereada por R1 for diferente do dado Compara e desvia se o registro R0 for diferente do dado Compara e desvia se o registro R1 for diferente do dado Compara e desvia se o registro R2 for diferente do dado Compara e desvia se o registro R3 for diferente do dado Compara e desvia se o registro R4 for diferente do dado Compara e desvia se o registro R5 for diferente do dado Compara e desvia se o registro R6 for diferente do dado Compara e desvia se o registro R7 for diferente do dado Incrementa o SP e ento coloca a memria no Stack Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Zera o bit endereado Zera o carry Troca os nibbles do acumulador. Equivale a 4 RR A ou 4 RL A
b7 b6 b5 b4 b3 b2 b1 b0 b3 b2 b1 b0 b7 b6 b5 b4

Bytes 3 3

Pulsos 24 24

Flags afetados CY AC 0V ? ? -

B6

24

B7 B8 B9 BA BB BC BD BE BF C0

3 3 3 3 3 3 3 3 3 2

24 24 24 24 24 24 24 24 24 24

? ? ? ? ? ? ? ? ? -

C1

AJMP End11

24

C2 C3

CLR bit CLR C

2 1

12 12

C4

SWAP A

12

C5 C6

XCH A, Direto XCH A, @R0

C7

XCH A, @R1

Troca memria com o acumulador Troca a RAM indiretamente endereada por R0 com o acumulador Troca a RAM indiretamente endereada por R1 com o acumulador

2 1

12 12

12

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

67

Opcode C8 C9 CA CB CC CD CE CF D0

Mnemnico XCH A, R0 XCH A, R1 XCH A, R2 XCH A, R3 XCH A, R4 XCH A, R5 XCH A, R6 XCH A, R7 POP Direto

Funo Troca entre si o contedo do acumulador e o registro R0 Troca entre si o contedo do acumulador e o registro R1 Troca entre si o contedo do acumulador e o registro R2 Troca entre si o contedo do acumulador e o registro R3 Troca entre si o contedo do acumulador e o registro R4 Troca entre si o contedo do acumulador e o registro R5 Troca entre si o contedo do acumulador e o registro R6 Troca entre si o contedo do acumulador e o registro R7 Retira dado do stack e coloca na memria, depois decrementa SP Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo) Seta o bit endereado Seta o carry Ajuste decimal do acumulador Decrementa a memria e desvia se for diferente de zero Troca nibble menos significativo do acumulador com a RAM endereada indiretamente por R0 entre si Troca nibble menos significativo do acumulador com a RAM endereada indiretamente por R1 entre si Decrementa o registro R0 e desvia se for diferente de zero Decrementa o registro R1 e desvia se for diferente de zero Decrementa o registro R2 e desvia se for diferente de zero Decrementa o registro R3 e desvia se for diferente de zero Decrementa o registro R4 e desvia se for diferente de zero Decrementa o registro R5 e desvia se for diferente de zero Decrementa o registro R6 e desvia se for diferente de zero Decrementa o registro R7 e desvia se for diferente de zero

Bytes 1 1 1 1 1 1 1 1 2

Pulsos 12 12 12 12 12 12 12 12 24

Flags afetados CY AC 0V -

D1 D2 D3 D4 D5

ACALL End11 SETB bit SETB C DA A DJNZ Direto, rel

2 2 1 1 3

24 12 12 12 24

1 ? -

? -

D6

XCHD A, @R0

12

D7

XCHD A, @R1

12

D8 D9 DA DB DC DD DE DF

DJNZ R0, rel DJNZ R1, rel DJNZ R2, rel DJNZ R3, rel DJNZ R4, rel DJNZ R5, rel DJNZ R6, rel DJNZ R7, rel

2 2 2 2 2 2 2 2

24 24 24 24 24 24 24 24

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

68

Opcode E0

Mnemnico

Funo

Bytes 1

Pulsos 24

Flags afetados CY AC 0V -

E1

E2

E3 E4 E5 E6

E7 E8 E9 EA EB EC ED EE EF

F0

F1

F2

F3

Mova RAM externa indiretaMOVX A, @DPTR mente endereada pelo DPTR (16 bits) para o acumulador Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits AJMP End11 MSB do OpCode so os bits MSB do endereo) Mova RAM endereada indiretamente por R0 (8 bits) para o MOVX A, @R0 acumulador Mova RAM endereada indireMOVX A, @R1 tamente por R1 (8 bits) para o acumulador CLR A Faz o acumulador = zero Mova memria para o acumuMOV A, Direto lador Mova RAM endereada indiretamente por R0 para o acumuMOV A, @R0 lador Mova RAM endereada indireMOV A, @R1 tamente por R1 para o acumulador Mova registro R0 para o acuMOV A, R0 mulador Mova registro R1 para o acuMOV A, R1 mulador Mova registro R2 para o acuMOV A, R2 mulador Mova registro R3 para o acuMOV A, R3 mulador Mova registro R4 para o acuMOV A, R4 mulador Mova registro R5 para o acuMOV A, R5 mulador Mova registro R6 para o acuMOV A, R6 mulador Mova registro R7 para o acuMOV A, R7 mulador Mova o acumulador para a RAM externa indiretamente MOVX @DPTR, A endereada pelo DPTR (16 bits) Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 ACALL End11 primeiros bits MSB do OpCode so os bits MSB do endereo) Mova acumulador para RAM externa indiretamente endereMOVX @R0, A ada por R0 (endereo 8 bits) Mova acumulador para RAM MOVX @R1, A externa indiretamente endereada por R1 (endereo 8 bits)

24

24

1 1 2 1

24 12 12 12

1 1 1 1 1 1 1 1 1

12 12 12 12 12 12 12 12 12

24

24

24

24

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

69

Opcode F4 F5 F6

Mnemnico CPL A MOV Direto, A MOV @R0, A

Funo Inverte o estado dos bits do acumulador Mova acumulador para memria Mova o acumulador para a RAM indiretamente endereada por R0 Mova o acumulador para a RAM indiretamente endereada por R1 Mova o acumulador para o registro R0 Mova o acumulador para o registro R1 Mova o acumulador para o registro R2 Mova o acumulador para o registro R3 Mova o acumulador para o registro R4 Mova o acumulador para o registro R5 Mova o acumulador para o registro R6 Mova o acumulador para o registro R7

Bytes 1 2 1

Pulsos 12 12 12

Flags afetados CY AC 0V -

F7 F8 F9 FA FB FC FD FE FF

MOV @R1, A MOV R0, A MOV R1, A MOV R2, A MOV R3, A MOV R4, A MOV R5, A MOV R6, A MOV R7, A

1 1 1 1 1 1 1 1 1

12 12 12 12 12 12 12 12 12

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

70

7 Esquema da CPU mnima para teste e carregamento de programa

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

71

8 Programa teste do sistema mnimo

;************************************************************** ; PROGRAMA TESTE ;************************************************************** ORG 0000H LJMP INICIO ORG 0050H INICIO: MOV MOV MOV MOV MOV MOV MOV RR TMOD,#11H TCON,#00H A,#11111110B P0, A P1, A P2, A P3, A A DELAY ;Define endereo de incio

;Define endereo de incio de execuo ;Configura T0 e T1 no modo 1 ;Configura TCON ;Carrega ACC com 11111110 (binrio) ;Carrega ACC nos PORTS ;P0, P1, P2 e P3

VOLTA:

;Rotaciona ACC para direita ;Chama rotina de tempo de 1s (PARA CLOCK

ACALL DE 12MHz)

LJMP VOLTA ;************************************************************** ; Rotina de Tempo de 1s ;************************************************************** DELAY: REP: MOV MOV MOV SETB JNB CLR DJNZ CLR RET END R0, #20 TH1, #3CH TL1, #0AFH TR1 TF1, $ TF1 R0, REP TR1 ;Carrega valor 20 (decimal) em R0 ;Carrega Timer 1 ;Com 3CAF (hexa) para contagem de 50ms ;Incio de contagem ;Testa se houve overflow em Timer 1 ;Reseta flag de overflow ;Repete temporizao se necessrio ;Desliga contagem

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

72

9 Referncias Bibliogrficas

- Aplicaes Prticas do Microcontrolador 8051 (Teoria Geral Detalhada) Vidal Pereira da Silva Junior Editora rica - Apostila de Microcontroladores Famlia MCS 51 (Conceitos, Aplicaes e Projetos) Professor Wilson Ruiz Centro Federal de Educao Tecnolgica de So Paulo (CEFET SP) - Apostila CURSO de MICROCONTROLADORES 8051 KIT STATION51 (Apostila Terica) Professor Elmo Dutra da Silveira Filho Centro Tecnolgico de Mecatrnica SENAI - Apontamentos de aulas - Laboratrio de Microcontroladores Famlia 8051 Denys E. C. Nicolosi Editora rica - Manuais de Microcontoladores Famlia 8051 dos fabricantes: INTEL ATMEL - The 8051 Microcontroller Architecture, Programming and Applications Kenneth J. Ayala Western Carolina University

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

73

APNDICE A

EXERCCIO / EXEMPLO 1 Projetar um sistema de controle de um elevador para 3 nveis, baseado no microcontrolador 8051, com as seguintes caractersticas: Entradas do sistema: P0 e INT0

Sadas do Sistema: P1

Nota: 1 S e desejvel possvel associar-se o primeiro andar da tabela anterior ao andar trreo de um edifcio, deslocando-se tambm os outros nveis, sem alteraes no funcionamento da soluo fornecida como exemplo a seguir.
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

74

2 Assim que o sistema iniciado o elevador desloca-se para o primeiro andar com a porta fechada e l chegando abre a porta. 3 O elevador somente desloca-se com a porta fechada. 4 Quando a cabine est parada, sua porta conecta-se mecanicamente com a porta do respectivo andar e assim ambas tero o mesmo movimento. 5 Os botes de comando do elevador esto no interior da cabine, no existindo botes externos ao lado da porta de entrada, assim o usurio s pode entrar no elevador se este estiver parado no andar, sendo o destino escolhido pelo mesmo dentro da cabine (limitao inicialmente adotada para a simplificao do exemplo). 6 O LED aceso indica a presena da cabine no respectivo andar. 7 Normalmente no recomendvel uma freqncia de clock infer ior a 3MHz para aplicaes reais, ms nesse problema, onde um dos objetivos a determinao de um intervalo de tempo e a visualizao do funcionamento de um dos TEMPORIZADORES atravs do simulador, esta freqncia fica estabelecida em 120KHz. (valor escolhido em funo da aplicao). 8 O tempo gasto pela porta no movimento de abrir e fechar deve ser de 5 segundos e determinado pelo TIMER0 (vide descrio do clculo no cabealho do programa).

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

75

;************************************************************************************************ ; Exerccio / Exemplo 3: Controle Do Elevador 05/11/2002 02:45h

;Freqncia Do Timer = (Freqncia Do Clock) / 12 = 120k / 12 = 10k Hz E O Seu Perodo = 0,1x10-3 Segundos ; assim para um tempo de 5 segundos temos: 5 / 0,1x10-3 = valor da contagem = 50000 ; 65535 50000 + 1 = 15536 = 3cb0h = Valor A Ser Carregado Inicialmente No Contador / Temporizador ;************************************************************************************************ ORG 0000H LJMP INICIO ORG 0003H LJMP INT0 ORG 000BH LJMP TIMER0 ORG 0050H INICIO: MOV SP, #0030H ;estabelece o ponteiro da pilha MOV IE, #10000011B ;habilita INT0 e TIMER0 MOV IP, #00000001B ;define prioridade alta p/ INT0 e baixa p/ TIMER0 MOV TCON, #00000000B ;INT0 ativa por nvel 0 e TIMER0 desligado MOV TMOD, #00000001B ;funo de temporizao com controle do TIMER0 feito pelo bit TR0 ;modo 1 de operao CLR P1.1 ;para o elevador CLR P1.0 MOV TH0, #3CH ;valor inicial para a contagem / temporizao MOV TL0, #0B0H CLR 00 ;inicializa um bit enderevel para ser a FLAG DO TIMER0

;************************************************************************************************** Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

76

O sistema (elevador) est sendo iniciado

;************************************************************************************************** JB P0.4, L25 ;verifica se o elevador j estava no 1o andar. ACALL DESCER ;leva o elevador inicialmente para o trreo. L1: JNB P0.4, L1 ;espera chegar no 1o andar ACALL PARAR L25: SETB P1.4 ;acende led indicador de 1o andar CLR P1.5 ;apaga led indidador de 2o andar CLR P1.6 ;apaga led indicador de 3o andar ;************************************************************************************************** ; O elevador est no 1o andar

;************************************************************************************************** ANDAR_1: JB P0.1, L2 ;testa chamada para o 2o andar JB P0.2, L3 ;testa chamada para o 3o andar AJMP ANDAR_1 ;volta para esperar uma chamada L2: L4: ACALL SUBIR ;movimenta o elevador para o 2o andar JNB P0.5, L4 ;espera chegar no 2o andar ACALL PARAR SETB P1.5 ;acende o led indicador de 2o andar LJMP ANDAR_2 L3: L5: ACALL SUBIR ;movimenta o elevador para o 3o andar JNB P0.6, L5 ;espera chegar no 3o andar ACALL PARAR SETB P1.6 ;acende o led indicador de 3o andar LJMP ANDAR_3 ;************************************************************************************************ Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

77

O elevador est no 2o andar

;************************************************************************************************ ANDAR_2: JB P0.0, L6 ;testa chamada para o 1o andar JB P0.2, L7 ;testa chamada para o 3o andar AJMP ANDAR_2 ;volta para esperar uma chamada L6: L8: ACALL DESCER ;movimenta o elevador para o 1o andar JNB P0.4, L8 ;espera chegar no 1o andar ACALL PARAR SETB P1.4 ;acende o led indicador de 1o andar LJMP ANDAR_1 L7: L9: ACALL SUBIR ;movimenta o elevador para o 3o andar JNB P0.6, L9 ;espera chegar no 3o andar ACALL PARAR SETB P1.6 ;acende o led indicador de 3o andar LJMP ANDAR_3 ;************************************************************************************************ ; O elevador est no 3o andar

;************************************************************************************************ ANDAR_3: JB P0.0, L10 ;testa chamada para o 1o andar JB P0.1, L11 ;testa chamada para o 2o andar AJMP ANDAR_3 ;volta para esperar uma chamada L10: L12: ACALL DESCER ;movimenta o elevador para o 1o andar JNB P0.4, L12 ;espera chegar no 1o andar ACALL PARAR SETB P1.4 ;acende o led indicador de 1o andar LJMP ANDAR_1 Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

78

L11: L13:

ACALL DESCER ;movimenta o elevador para o 2o andar JNB P0.5, L13 ;espera chegar no 2o andar ACALL PARAR SETB P1.5 ;acende o led indicador de 2o andar LJMP ANDAR_2

;************************************************************************************************ ; sub-rotina: SUBIR

;************************************************************************************************ SUBIR: CLR P1.4 ;apaga todos os leds CLR P1.5 CLR P1.6 CLR P1.2 ;fecha a porta SETB TR0 ;liga o timer0 L20: JNB 00, L20 ;espera o trmino da temporizao CLR 00 ;reseta a FLAG DO TIMER0 SETB P1.1 ;sobe o elevador CLR P1.0 RET ;************************************************************************************************ ; sub-rotina: DESCER

;************************************************************************************************ DESCER: CLR P1.4 ;apaga todos os leds CLR P1.5 CLR P1.6 CLR P1.2 ;fecha a porta SETB TR0 ;liga o timer0 Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

79

L21:

JNB 00, L21 ;espera o trmino da temporizao CLR 00 ;reseta a FLAG DO TIMER0 CLR P1.1 ;desce o elevador SETB P1.0 RET

;************************************************************************************************ ; sub-rotina: PARAR

;************************************************************************************************ PARAR: CLR P1.1 ;para o elevador CLR P1.0 SETB P1.2 ;abre a porta SETB TR0 ;liga o timer0 L22: JNB 00, L22 ;espera o trmino da temporizao CLR 00 ;reseta a FLAG DO TIMER0 RET TIMER0: CLR TR0 ;desliga o timer0 MOV TH0, #3CH ;valor inicial para a contagem / temporizao MOV TL0, #0B0H SETB 00 ;seta a FLAG DO TIMER0 RETI ;retorna para o programa INT0: CLR P1.1 ;para o elevador CLR P1.0 SETB P1.2 ;abre a porta L23: JNB P3.2, L23 ;espera o trmino da situao de emergncia RETI END Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

80

APNDICE B

PROCEDIMENTO PARA GRAVAO DO 8051

1 C ONSIDERAES INICIAIS

Este gravador s funciona para os microcontroladores, baseados no microcontrolador 8051, da srie AT89SXX. Os microcontroladores suportados pelo software de gravao so: AT89S51: 4Kbytes de memria flash AT89S52: 8Kbytes de memria flash AT89S53: 12Kbytes de memria flash AT89S8252

2 MATERIAIS NECESSRIOS

Placa de circuito impresso, conforme figura da pgina 69.

3 OBTENO DO SOFTWARE

O software utilizado se chama AEC_ISP v3.0 e pode ser obtido gratuitamente (mediante cadastro) no site do fornecedor: www.aec-electronics.co.nz

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

81

4 UTILIZAO DO SOFTWARE

Este programa baseado no estilo dos programas DOS, mas roda perfeitamente em ambiente Windows (at mesmo no XP). Ao executar o programa AEC_ISP.EXE, a seguinte tela ir abrir:

Sua funo gravar o arquivo .hex gerado por qualquer compilador para 8051 no microcontrolador, conforme os passos descritos a seguir: a) Aps ter o programa simulado e funcionando deve-se carregar o arquivo .hex o qual foi compilado conforme descrio em captulo anterior; b) Aps compilar o programa, copie o arquivo .hex criado para pasta onde est localizado o programa AEC_ISP.EXE; c) Execute o programa e selecionar a opo (J) Setup para configur-lo. Configure-o de acordo com a prxima tela. Lembre-se de modificar a opo (9)device onde voc deve selecionar o tipo de microcontrolador a ser programado. A etapa de configurao s deve ser feita uma vez. Para as prximas gravaes, pode-se pular este passo, desde que o microcontrolador a ser programado seja o mesmo (possua o mesmo cdigo), e ao terminar de configurar, aperte (S) Save setup para salvar as definies;

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

82

d) Coloque o microcontrolador no soquete, conecte o gravador na porta paralela, e ligue a fonte de alimentao; e) Na tela de opes selecione (A) Load hex file to flash buffer;

f) Digite o nome do arquivo que voc copiou para a pasta do programa; g) Finalmente selecione (E) Program. O software ir iniciar a gravao e verificao do programa, conforme a tela a seguir. Ao terminar saia do software e desconecte todos os equipamentos;

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

83

h) Pronto, o circuito j pode ser testado.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

84

ANEXO 1 DISPLAY LCD 01 INTRODUO Os mdulos LCD so interfaces de sada muito til em sistemas microprocessados. Estes mdulos podem ser grficos e a caracter. Os mdulos LCD grficos so encontrados com resulues de 122x32, 128x64, 240x64 e 240x128 dots pixel, e geralmente esto disponveis com 20 pinos para conexo. Os LCD comuns (tipo caracter) so especificados em nmero de linhas por colunas e so encontrados nas configuraes previstas na Tabela 1.

Tabela 1 - Mdulos LCD disponveis Os mdulos podem ser encontrados com LED backlight (com uma iluminao de fundo) para facilitar as leituras durante a noite. Neste caso, a alimentao deste led faz se normalmente pelos pinos 15 e 16 para os mdulos comuns e 19 e 20 para os mdulos grficos, sendo os pinos 15 e 19 para ligao ao anodo e os pinos 16 e 20 para o catodo. A corrente de alimentao deste led varia de 100 a 200mA, dependendo do modelo. Estes mdulos utilizam um controlador prprio, permitindo sua interligao com com outras placas atravs de seus pinos, onde deve ser alimentado o mdulo e interligado o barramento de dados e controle do mdulo com a placa do usurio.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

85

Naturalmente que alm de alimentar e conectar os pinos do mdulo com a placa do usurio dever haver um protocolo de comunicao entre as partes, que envolve o envio de bytes de instrues e bytes de dados pelo sistema do usurio. A Tabela 2 descreve cada pino do mdulo ou do display para conexo deste a outras placas:

Tabela 2 - Pinagem dos Mdulos LCD

Assim como em um rdio relgio todo mdulo LCD permite um ajuste na intensidade da luz emitida ou ajuste de contraste, isto possvel variando-se a tenso no pino 3. A Figura 1 mostra um circuito tpico e recomendado pela maioria dos fabricantes para efetuar este ajuste. Alguns fabricantes recomenda o uso de um resistor de 4K7 em srie com o potencimetro de 10K.

Figura 1 - Detalhe do controle de contraste do mdulo LCD


Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

86

2 INTERFACE COM CPU Os mdulos LCD so projetados para conectar-se com a maioria das CPUs disponveis no mercado, bastando para isso que esta CPU atenda as temporizaes de leitura e escrita de instrues e dados, fornecido pelo fabricante do mdulo. A Figura 2 mostra um exemplo de diagrama de tempos tpico requeridos para operao de escrita no mdulo LCD, estes tempos variam em funo do clock da CPU do usurio.

Figura 2 - (a) Escrita no LCD (b) Ciclo de Escrita da CPU 8051 A Tabela 3 a seguir mostra a relao entre a freqncia da CPU e a temporizao de leitura/escrita da maioria dos mdulos LCD. Em geral, podemos conectar o barramento de dados da CPU ao barramento do mdulo, mapeando-o convenientemente na placa de usurio, e efetuarmos uma operao normal de leitura/escrita sem mais problemas.

Tabela 3 - Relao clock da CPU x Temporizao do Mdulo LCD

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

87

A Figura 3 mostra um exemplo de conexo de uma placa baseada nos microcontroladores da linha Intel de 8 bits (8051), ao mdulo LCD. Neste caso como os sinais A0 e A1 esto conectados aos pinos 4 e 5, teremos ento 04 (quatro) endereos distintos para comunicao entre a CPU e o mdulo LCD. A Tabela 4 mostra estes endereos.

Figura 3 - Sistema baseado na CPU 8051 com mdulo LCD


Endereo 4000 4001 4002 4003 R/W 0 0 1 1 RS 0 1 0 1 Descrio Instruo Escrita no mdulo Dados Escrita no mdulo Instruo Leitura no mdulo Dados Leitura no mdulo

Tabela 4 - Endereamento do mdulo LCD para Figura 3


Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

88

O exemplo apresentado na Figura 3 refere-se conexo do mdulo LCD com comunicao/transmisso de 8 bits, mas podemos conectar o mdulo com transmisso a cada 4 bits, conforme mostrado na Figura 4. Neste caso no utilizamos os pinos 7, 8, 9 e 10. Isto muito til quando a CPU do usurio possui poucos pinos de I/O, caso tpico da linha de microprocessadores PIC, como por exemplo o Basic Stamp. Agora surge a dvida, um mesmo mdulo pode conectar-se com 8 ou 4 bits? como isto possvel? Ocorre que o mdulo LCD quando alimentado necessita de algumas instrues de inicializao que identificar qual a forma de transmisso de dados que ser estabelecida entre a CPU e o mdulo.

Figura 4 - Modulo LCD comunicando-se com 4 bits

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

89

03 PROGRAMAO / INSTRUES

Tabela 5 - Conjunto de instrues do mdulo LCD A Tabela 5 apresenta o conjunto de instrues, levando-se em considerao que a comunicao com o mdulo seja com barramento de 8 bits (fixado durante a inicializao)
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

90

. Para o caso desta comunicao ocorrer com apenas 4 bits (nible), os 8 dados ou instrues sero enviados por nible. sendo enviado o nible mais significativo primeiro. Por exemplo para limpar o display, escreve-se o nible 0000 e depois 0001. A Tabela 6 traz um resumo das instrues mais usadas na comunicao com os mdulos LCD.

Tabela 6 - Instrues mais comuns

3.1 DESCRIO DETALHADA DAS INSTRUES 3.1.1 Limpa Display

Esta instruo escreve o caracter ASCII 32 que corresponde ao branco ou barra de espao em todos os endereos da DDRAM apagando a mensagem que estiver es-

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

91

crita. O cursor retorna ao endereo zero, ou seja, posio mais a esquerda da primeira linha. 3.1.2 Cursor Home

Faz retornar o cursor para a posio mais a esquerda da primeira linha e faz voltar posio original mensagens previamente deslocadas. O contedo da DDRAM permanece inalterado. 3.1.3 Fixa o modo de operao

Esta instruo tem efeito somente durante a leitura ou escrita de dados, portanto, deve ser ativada na inicializao. -Estabelece o sentido de deslocamento do cursor (X=0 p/ esquerda, X=1 p/ direita) -Estabelece se a mensagem deve ou no ser deslocada com a entrada de um novo caracter S=1 SIM, S=0 NO. Exemplo: X=1 e S=1 => mensagem desloca p/ direita. 3.1.4 Controle do Display

A mensagem fica aparente quando D=1 e desaparece quando D=0, porm o contedo da DDRAM fica inalterado. O cursor fica aparente quando C=1 e desaparece quando C=0, porm as propriedades de escritas vigentes permanecem inalteradas. O cursor quando aparente liga a ltima linha que compem o caracter, exceto quando B=1, que apresenta em alternncia com uma matriz com todos os pontos negros em inMilton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

92

tervalos de 0,4 segundos. Quando B=1 e C=0, obteremos a ativao intermitente de uma matriz completa (todos os pontos da matriz). 3.1.5 Deslocamento do Cursor ou da Mensagem

Desloca o cursor ou a mensagem sem que para isso tenha que escrever ou ler dados do display. Utilizado para posicionamento dos dados no display.

3.1.6 Estabelece o modo de utilizao do Mdulo LCD

Y estabelece o modo de comunicao. Se Y=1 estabelece 8 bits e quando Y=0 ser 4 bits, enviados em duas operaes, com os 4 bits (Nible) mais significativos sendo enviados primeiro. N fixa o nmero de linhas: N=0 para uma linha e N=1 para duas ou mais linhas. F fixa o tipo da matriz: F=0 para matriz 7x5 ou 8x5 e F=1 para matriz 10x5 (somente possvel quando apresentando em uma linha). 3.1.7 Endereamento da CGRAM CGRAM uma regio da memria RAM destinada para criao de caracteres especiais, como por exemplo: , , etc.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

93

Estabelece o endereo da CGRAM no contador de endereos (AC) como um nmero binrio AAAAAA e aps isto os dados sero escritos ou lidos pela CPU neste endereo. Cada caracter especial ocupa 8 endereos na CGRAM. 3.1.8 Endereamento da DDRAM

Estabelece o endereo da DDRAM no contador de endereos (AC) como um nmero binrio AAAAAAA e aps isto os dados sero escritos ou lidos pela CPU neste endereo. Para os display de uma linha AAAAAAA varia de 80H a CFH. J para todos os display de duas linhas varia de 80H a A7H para a primeira linha e de C0H a E7H para a segunda linha. 3.1.9 Busy Flag (BF)

Busy Flag ou o bit 7 indica ao sistema onde est conectado o mdulo LCD, se o controlador do mdulo est ocupado com alguma operao interna (BF=1), e neste caso, no aceita nenhuma instruo at que BF volte para 0. Alm disso, permite a leitura do contedo do contador de endereos (AC) expressa por AAAAAAA. O contador de endereos pode conter tanto endereo da CGRAM como da DDRAM, depende neste caso, da instruo anterior. 3.1.10 Escrita de dados na DDRAM ou CGRAM

Escreve o byte AAAAAAAA tanto na CGRAM como na DDRAM, dependendo da instruo anterior (que define o endereo). Aps a escrita, o endereo automatica-

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

94

mente incrementado ou decrementado de uma unidade dependendo do modo escolhido (ver item 3.1.3). 3.1.11 Leitura de dados na DDRAM ou CGRAM

Faz uma leitura na CGRAM ou na DDRAM, dependendo da instruo anterior (que define o endereo). importante que precedendo a esta leitura seja executado a instruo de estabelecimento do endereo da CGRAM ou DDRAM, pois caso contrrio o dado lido invlido.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

95

3.2 TABELAS DE ENDEREOS DOS CARCTERES NA DDRAM A seguir resumiremos os endereos da DDRAM (em hexadecimal) dos caracteres da maioria dos mdulos LCD disponveis no mercado.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

96

OBS: Para os mdulos de 04 linhas estamos considerando que existe um outro pino de habilitao (como o pino 6) para as duas ltimas linhas, portando outros endereos de hardware. Antes de enviar uma instruo para escrita de dados no display, enviar antes uma de endereamento na DDRAM, com o endereo onde deve ser escrito o caracter, tipo um gotoxy(). 3.3 TABELAS DE ENDEREOS DOS CARCTERES NA CGRAM Os caracteres especiais previamente programado, durante a inicializao, podem ser utilizados a qualquer tempo como se fossem caracteres normais, lembrando que os endereos bases em hexadecimal para gravao dos caracteres especiais, na maioria dos mdulos LCD, so respectivamente: 40, 48, 50, 58, 60, 68, 70 e 78. Cada caracter especial ocupa 8 (oito) endreos.

Tabela 7 - Caracter especial {} na CGRAM Isto significa que para utilizarmos o caracter gravado no endereo base 50, durante a inicializao ou reset do sistema, teremos que escrevermos 8 bytes entre os endereos 50 e 57, para construirmos o caracter. Para ilustrar este procedimento, supor que queiramos construir o caracter {} no endereo base 50. Neste caso, devemos construir o mapa deste caracter especial como mostrado na Tabela 7 (supondo estar trabalhando com matriz 7x5 e com auto incremento de endereo a cada escrita). Observe que o ltimo endereo sempre ser 00, pois esta posio sempre ocupada pelo cursor.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

97

4 INICIALIZAO DOS MDULOS LCD Toda vez que alimentamos o mdulo LCD deve ser executado o procedimento de inicializao, que consiste no envio de uma seqncia de instrues para configurar o modo de operao para execuo de um dado programa de interfaceamento. Em muitos display este procedimento ocorre automaticamente, dentro de condies especficas que envolve temporizaes mnimas referente a transio do nvel lgico 0 para 1, ao ligarmos a fonte. Em caso de dvidas, recomendamos o envio destas instrues aps o reset do sistema.

a) Inicializao para sistemas 8 bits de dados (5 instrues) Entre as duas primeiras instrues recomendamos um delay de 15 mS. As demais instrues podem ser escritas aps checar o Busy Flag.

b) Inicializao para sistemas 4 bits de dados (5 instrues) Entre as quatro primeiras instrues recomendamos um delay de 15 mS. As demais instrues podem ser escritas aps checar o Busy Flag. Estes bits (nible) devem estar conectados aos pinos 11, 12.13 e 14.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

98

5 ROTEIRO PARA PROGRAMAO A seguir passaremos a descrever um resumo dos procedimentos para utilizao de um mdulo ou display LCD: 1_ Ao energizar o mdulo ajuste o potencimetro de controle do brilho ou contraste at obter a visualizao da matriciao na primeira linha para mdulo de duas linhas ou at a matriciao de meia linha para mdulos de uma linha. 2_ Alguns mdulos de uma linha s funcionam com a instruo 38 ao invs de 30, conforme instrues de inicializao. 3_ O sinal de Enable (pino 6) dever ser gerado conforme a temporizao mostrada na Figura 2. Os cdigos de dados ou de instrues s sero processados pelo processador do mdulo aps a descida do sinal do Enable. 4_ Para ajustar a velocidade de comunicao entre a CPU do usurio e o mdulo LCD existem duas possibilidades: Intercalar uma rotina de atraso de aproximadamente 15 mS entre as instrues. Fazer a leitura do Busy Flag antes do envio de cada instruo e s enviar quando o mesmo for 0. Neste caso, a nica exceo ser durante a inicializao. 1_ Durante a inicializao enviar a seqncia correta das instrues de inicializao conforme item 3.4 2_ Para programar caracteres na CGRAM, faa inicialmente o endereamento da mesma. 3_ Aps a escrita de dados na CGRAM envie a instruo 01, para posicionar o cursor. 4_ Para escrever os caracteres especiais previamente gravados na CGRAM, utilize os cdigos de 00 at 07 correspondente aos endereos bases de 40, 48 at 78 em hexa.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

99

6 COMANDOS TEIS

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

100

Obs: Aps o endereamento da CGRAM, o cursor se desloca para a primeira posio da segunda linha (ou metade), portanto recomendado enviar a instruo 01 ou limpa display e cursor home.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

101

7 CUIDADOS ESPECIAIS COM MDULOS LCD a ) MANUSEIO Somente retire o mdulo de sua embalagem protetora imediatamente antes de sua instalao No guarde os mdulos em recintos de alta temperatura e alta umidade. A temperatura de armazenamento dever estar compreendida entre 5 e 30 oC. O LCD coberto por uma lmina plstica polarizada a qual no pode ser riscada. Cuidado em seu manuseio. Para a limpeza da lmina utilize cotonetes embebido em benzina. No utilize outros tipos de solventes. Observe cuidadosamente os procedimentos de controle anti-esttico quando manusear os mdulos. Eles incorporam circuitos integrados CMOS LSI os quais so sensveis descarga eletrosttica. No toque nos terminais do conector, trilhas do circuito impresso e/ou terminais do CI. b) INSTALAO Nunca desmonte o mdulo Use uma estao de solda aterrada para soldagem de conectores ou terminais. montador dever tambm ser convenientemente aterrado. Sempre que o projeto o permita, instale o mdulo atrs de uma janela protetora de plstico ou vidro. Somente retire a fita adesiva que protege a lmina plstica frontal imediatamente antes de seu uso.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

102

8 OPERAO Nunca instale ou desconecte o mdulo com sua alimentao ligada. Sempre opere os mdulos respeitando sua gama de temperatura de operao. Observe cuidadosamente os valores das tenses de alimentao e os nveis dos sinais de controle. Ajuste a tenso no pino 3 (V0) para obter o contraste mais conveniente para uma dada aplicao.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

103

9 Software de Teste do LCD

;****************** Programa de Escrita em LCD ******************* ;* ;* ;* POR: MILTON BARREIRO JUNIOR DATA: JUNHO DE 2006 * * *

;************************************************************************

;******************** Declarao de Variveis *********************** ;* DEFINIO DOS I/O'S DE CONEXO DO LCD *

;************************************************************************ DISPLAY RS RW EN EQU EQU QUE EQU P2 P3.5 P3.6 P3.7 ;Define port P2 como bits de dados do LCD ;Define P3.5 como bit RS do LCD ;Define P3.6 como bit RW do LCD ;Define P3.7 como bit EN do LCD

ORG

0000H

LJMP START

ORG START: MOV

0050H SP, #40H ;Ajusta Stack Pointer

;************************** Parmetros do LCD ************************** ;* DEFINE MODO DE OPERAOO DO LCD *

;**************************************************************************** CLR CLR CLR MOV EN RS RW A, #38H ;Bit EN=0 ;Bit RS=0 ;Bit RW=0 ;Define LCD como matriz 7x5 pixels e 8 bits de dados ;Escreve comando no LCD #0EH ;Liga LCD e ativa cursor ;Escreve comando no LCD #06H ;Cursor deslocando para a direita

LCALL CMD MOV A,

LCALL CMD MOV A,

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

104

LCALL CMD MOV A, #01H

;Escreve comando ;Limpa LCD ;Escreve comando

LCALL CMD

;******************************** Escreve no LCD ******************************* ;* ROTINA DE ESCRITA DE MENSAGENS NO LCD *

;*********************************************************************************** WRITE: MOV A, #80H ;Posiciona LCD no primeiro caractere na primeira linha ;Escreve comando ;Movimenta inicio da tabela da primeira mensagem para ;Escreve primeira mensagem #0C0H ;Posiciona LCD no primeiro caractere da segunda linha ;Escreve comando ;Movimenta inicio da tabela da segunda mensagem para ;Escreve segunda mensagem

LCALL CMD MOV o DPTR LCALL MSG MOV A, DPTR, #MSG1

LCALL CMD MOV o DPTR LCALL MSG LJMP WRITE DPTR, #MSG2

;************************* Escreve Comandos no LCD ************************* ;* ENVIA COMANDOS DE ESCRITA NO LCD *

;*********************************************************************************** CMD: SETB EN CLR MOV RS DISPLAY,A ;Esse bloco de instrues ;responsvel pela escrita de ;comandos e dados no LCD

LCALL DELAY CLR EN

LCALL DELAY RET

MSG: WRCHAR:

MOV

R1, MOV

#00H A, R1

INC

R1 @A+DPTR #'$', NEXTCHAR

MOVC A, CJNE A, RET

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

105

NEXTCHAR:

SETB EN SETB RS MOV DISPLAY,A

LCALL DELAY CLR EN

LCALL DELAY LJMP WRCHAR ;******************************** Rotina de Delay ******************************** ;* ROTINA QUE CONTA TEMPO DE 10mS PARA ESCRITA NO LCD * ;*********************************************************************************** DELAY: MOV MOV MOV CLR MOV TMOD, #11H ;Essa rotina tem como objetivo ;contar tempo de 10mS de atrazo ;para que o LCD seja capaz de ;ler comandos e dados

TCON, #00H TH0, TL0, TF0 #0D8H #0F0H

SETB TR0 JNB CLR CLR RET TF0, TF0 TR0 $

;****************************** Tabela de Mensagens ************************** ;* ;* MENSAGENS A SEREM ESCRITAS NO LCD DEVEM SER ESCRITAS NO FINAL DO PROGRAMA * *

;*********************************************************************************** MSG1: MSG2: DB DB END " " TESTE DO LCD OK $" $" ;Tabela da primeira mensagem ;Tabela da segunda mensagem ;Fim de programa

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

106

10 Software de teste do teclado

; ROTINA DE LEITURA DE TECLADO MATRICIAL 4X3, KIT ETE JORGE STREET ; CONFIGURAO DO TECLADO ; P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 ; L4 L3 L2 L1 C3 C2 C1 -

TECLADO MARCTEC

EQU EQU

P1 23H

;DEFINIR END PORT ONDE EST O TECLADO ;MARCADOR DE MEMORIA

; OBS: ALTERA REGS A, ACC E R7

MOV SP,#40H ; ********************** EXEMPLO DE ROTINA DE LEITURA DE TECLADO ******************** VOLTA: LCALL VETEC CJNE A, LJMP VOLTA ESC: MOV P3, A #0FH, ESC

LJMP VOLTA ;********************************************************************************************************* ;*********** SUBROTINAS DO TECLADO (COLOCAR NO FINAL DO PROGRAMA) ********** ; RETORNO TECLA ACIONADA OU OFH SEM TECLA VETEC: MOV NOP NOP MOV A, TECLADO #0FH, VETEC1 TECLADO, #0FH

CJNE A, RET VETEC1: LCALL DETEC PUSH ACC LCALL ESTEC POP RET ACC

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

107

DETEC: DETEC1:

MOV MOV NOP NOP MOV

MARCTEC, TECLADO,

#7FH MARCTEC

A,

TECLADO MARCTEC, MARCTEC VETEC0

CJNE A, MOV RR MOV A, A

MARCTEC,

CJNE A, RET VETEC0: MOV MOV MOV VETECA: MOV

#0F7H, DETEC1

MARCTEC,

DPTR, #TABTEC R7, A, #00H R7 @A+DPTR MARCTEC, R7 VETECB

MOVC A, CJNE A, MOV RET VETECB: INC R7 A,

SJMP VETECA ESTEC: MOV R0, #02H

LCALL AT50R0 VESTEC: MOV NOP NOP MOV A, TECLADO #0FH, VESTEC TECLADO, #0FH

CJNE A, RET

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

108

;****************************** SUBROTINA DE ATRASO 50MS X R0 ****************************** AT50R0: MOV MOV MOV TH0, TL0, #3CH #0B0H

TMOD, #11H

SETB TR0 CLR ATR1: JNB TF0 TF0, ATR1 AT50R0

DJNZ R0, CLR CLR RET TF0 TR0

;********************************************************************************************************* ;**************** TABELA DE TECLAS (COLOCAR NO FINAL DO PROGRAMA) *************** TABTEC: DB 7BH,0EDH,0EBH,0E7H,0DDH,0DBH,0D7H,0BDH,0BBH,0B7H,7DH,77H ;********************************************************************************************************* END

11 Rotina exemplo de transmisso serial

;******************************** Programa de Transmisso Serial ********************************** ;* ;* POR: MILTON BARREIRO JUNIOR DATA: OUTUBRO DE 2006 * *

;********************************************************************************************************* ;************************************* Declarao de Variveis *************************************** ;* CONFIGURAO DO CANAL SERIAL E TAXA DE TRANSMISSO *

;********************************************************************************************************* ORG 0000H

LJMP START

ORG START: MOV MOV

0050H SP, #40H ;Ajusta Stack Pointer ;Zera Flags dos Timers

TCON, #00H

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

109

MOV para clculo da Taxa) MOV no modo 1 MOV MOV MOV

PCON, #00H TMOD, #21H TH1, TL1, #152 #152

;Define PCON.7 como ZERO (SMOD = 0 ;Configura Timer 1 no modo 2 e Timer 0 ;Carrega TH1 e TL1 com 152d ;para 300bps de Taxa ;Configura Canal Serial no modo 1

SCON, #40H

SETB TR1 ;*************************************** Rotina de Transmisso ************************************** DENOVO: PROXIMO: MOV CLR DPTR, #MSG A @A+DPTR #'$', ENVIA

MOVC A, CJNE A,

LJMP DENOVO ENVIA: MOV JNB CLR INC SBUF, A TI, TI DPTR $

LJMP PROXIMO ;********************************************************************************************************* ;*********************************** Tabela de String a Transmitir *********************************** MSG: DB " Teste de Transmisso Serial $" ;Tabela da primeira mensagem

;******************************************************************************************************** END ;Fim de programa

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

110

12 Programa exemplo converso BCD para 7 Segmentos

;**************** PROGRAMA CONVERSO BCD PARA 7 SEGMENTOS ****************** ;* POR: MILTON BARREIRO JUNIOR EM: JUNHO DE 2006 *

;***************************************************************************************************** ;***************************************************************************************************** ;* ROTINA DE CONVERSO DE BCD PARA 7 SEGMENTOS *

;***************************************************************************************************** CONVERTE: ANL MOV A, #00001111B ;ACC Recebe o valor BCD ;a ser convertido de ;para 7 Segmentos

DPTR, #TABDISP @A+DPTR

MOVC A, RET

;***************************************************************************************************** ;***************************************************************************************************** ;* TABELA DE CONVERSO DECIMAL E HEXADECIMAL PARA 7 SEGMENTOS *

;***************************************************************************************************** TABDISP: DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB END Milton Barreiro Junior ETE Getlio Vargas 11000000B 11111001B 10100100B 10110000B 10011001B 10010010B 10000010B 11111000B 10000000B 10011000B 11001000B 10000011B 11000110B 10100001B 10000110B 11000000B ;Tabela ;de ;valores ;para ;display ;7 segmentos ;anodo ;comum ;que ;vai ;de ;zero a nove em decimal, ;at ;F ;em ;Hexadecimal ;Indica fim de programa ao compilador

Microcontrolador 8051 Teoria e Prtica

111

13 Exemplo didtico de um frequencmetro (0 999Hz)

;*********************** PROGRAMA FREQUENCMETRO ************************* ;* ;* ESSE FREQUENCMETRO MEDE E INDICA VALORES AT 999Hz POR: MILTON BARREIRO JUNIOR EM: NOVEMBRO DE 2006 * *

;****************************************************************************************** ;UFREQ ;DFREQ ;CFREQ EQU EQU EQU R1 R2 R3 ;Incremento de unidade ;Incremento de dezena ;Incremento de centena

;****************************************************************************************** ;* RESERVA ENDEREOS DOS VETORES DE INTERRUPES *

;****************************************************************************************** ORG 0000H ;Busca linha de inicio

LJMP INICIO ORG 000BH

LJMP INTT0 ORG 0013H

;Vetor de Int Timer 0

LJMP INTE1

;Vetor de Int Ext 1

;******************************************************************************************* ;* CARREGA VALORES INICIAIS DAS VARIVEIS *

;******************************************************************************************* ORG INICIO: MOV 0050H IP, #00000010B ;Prioriza Int T0 ;Habilita Int T0 ;Habilita Int EX1 ;Habilita Int Global #40H ;Ajusta Stack Pointer ;Configura T0 e T1 no Modo 1 ;Modo de atuao das Interrupes ;Carrega inicio de contagem para ;timer 0 contar 50mS

SETB ET0 SETB EX1 SETB EA MOV MOV MOV MOV MOV SP,

TMOD, #11H TCON, #00000101B TH0, TL0, #3CH #0B0H

SETB TR0

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

112

;***************************************************************************************** ;* ROTINA DE RESET DO FREQUENCMETRO *

;***************************************************************************************** MOV MOV MOV MOV MOV MOV MOV R0, R1, R2, R3, R4, R5, R6, #00H #00H #00H #00H #00H #00H #00H

;***************************************************************************************** ;* ;* ROTINA DE MULTIPLEXAO DOS DISPLAYS MOSTRA VALORES DE FREQUENCIA MEDIDA * *

;***************************************************************************************** DISPLAY: MOV A, R4 ;Carrega no ACC valor de Unidade de Segundos ;Converte Decimal para 7 Segmentos ;Desliga Displays no utilizados A ;Mostra Unidade de Segundos ;Liga Digito Unidade de Segundos ;Tempo Display ativo ;Carrega no ACC valor de Dezena de Segundos ;Converte Decimal para 7 Segmentos ;Desliga Displays no utilizados A ;Mostra Dezena de Segundos ;Liga Digito Dezena de Segundos ;Tempo Display ativo ;Carrega no ACC valor dos Minutos ;Converte Decimal para 7 Segmentos ;Desliga Displays no utilizados A ;Mostra Minutos ;Liga Digito Minutos ;Tempo Display ativo

LCALL CONVERTE SETB P2.2 MOV CLR P0, P2.0

ACALL TEMPO MOV A, R5

LCALL CONVERTE SETB P2.0 MOV CLR P0, P2.1

ACALL TEMPO MOV A, R6

LCALL CONVERTE SETB P2.1 MOV CLR P0, P2.2

ACALL TEMPO LJMP DISPLAY Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

113

;****************************************************************************************** ;* TRATAMENTO DA INTERRUPO DO TIMER 0 E CRONMETRO *

;****************************************************************************************** INTT0: CLR MOV MOV TR0 TH0, TL0, #3CH #0B0H ;Trata interrupo Int T0 ;para base de tempo de 1s

SETB TR0 INC R0

CJNE R0, MOV MOV MOV MOV MOV MOV A, R4, A, R5, A, R6,

#20, R1 A R2 A R3 A

SAI

MOV MOV MOV MOV

R0, R1, R2, R3,

#00H #00H #00H #00H

SAI:

RETI

;****************************************************************************************** ;* TRATAMENTO DA INTERRUPO EXTERNA INT_1 *

;****************************************************************************************** INTE1: INC R1 #10, #00 ESC

CJNE R1, MOV INC R1, R2

CJNE R2, MOV INC R2, R3

#10, #00

ESC

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

114

CJNE R3, MOV ESC: RETI R3,

#10, #00

ESC

;****************************************************************************************** ;* ROTINA DE CONVERSO DE BCD PARA 7 SEGMENTOS *

;****************************************************************************************** CONVERTE: ANL MOV A, #00001111B ;Rotina de ;Converso ;Decimal para 7 Segmentos

DPTR, #TABDISP @A+DPTR

MOVC A, RET

;****************************************************************************************** ;* TEMPO DE AMOSTRAGEM DOS DGITOS *

;****************************************************************************************** TEMPO: MOV MOV CLR TH1, TL1, TF1 #0D8H #0F0H ;Carrega inicio de contagem para ;timer 1 contar 10mS

SETB TR1 JNB RET ;****************************************************************************************** ;* TABELA DE CONVERSO DECIMAL E HEXADECIMAL PARA 7 SEGMENTOS * ;****************************************************************************************** TABDISP: DB DB DB DB DB DB DB DB DB DB DB 11000000B 11111001B 10100100B 10110000B 10011001B 10010010B 10000010B 11111000B 10000000B 10011000B 11001000B ;Tabela ;de ;valores ;para ;display ;7 segmentos ;anodo ;comum ;que ;vai ;de TF1, $

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

115

DB DB DB DB DB

10000011B 11000110B 10100001B 10000110B 11000000B

;zero a nove em decimal, ;at ;F ;em ;Hexadecimal

END

;Indica fim de programa ao compilador

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

116

14 Exemplo de rotina para teclado matricial 4x4

;************************ Programa de Teclado Matricial ************************ ;* ;* ;* POR: MILTON BARREIRO JUNIOR DATA: OUTUBRO DE 2006 FONTE: www.8052.com * *

;************************************************************************************ ;******************** CONFIGURAO DO TECLADO (MATRIZ 4X4) ********************* ; ;P1.0 ---------------------------\ ; ;P1.1 -----------------------\ ; ;P1.2 -------------------\ ; ;P1.3 ---------------\ ; ; ;P1.7 -------------- 1 - 2 - 3 - A --; ;P1.6 -------------- 4 - 5 - 6 - B --; ;P1.5 -------------- 7 - 8 - 9 - C --; ;P1.4 -------------- * - 0 - # - D --; ; ;************************************************************************************* ;********************** Define o Port e Memoria das Teclas ********************* KBOARD MEMKEY EQU EQU P1 R1 ;Teclado Matricial em P1 ;Memria de tecla pressionada | | | | | | | | | | | | | |

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

117

;************************************************************************************* MOV SP, #40H ;Ajusta STACK POINTER

;******************* Loop de Leitura do Teclado Matricial ********************** KEY_B: LCALL BUSCA CJNE A, LJMP START SAIDA: MOV P3, A #0FH, SAIDA

LJMP KEY_B ;************************************************************************************* ;************************ SUBROTINAS DO TECLADO ************************* ; ; devem ser inserida no final do programa RETORNA TECLA ACIONADA OU OFH SEM TECLA ACIONADA

;************************************************************************************* BUSCA: MOV NOP NOP NOP NOP MOV tura RET A, KBOARD #0FH, SELECT ;Le teclado e salva no Acumulador ;Se valor lido igual 0Fh, retorna para loop de leiKBOARD, #0FH ;Carrega P1 com 0FH

CJNE A,

SELECT:

LCALL LOOP PUSH A LCALL DEBOU POP RET A

LOOP: LOOP1:

MOV MOV NOP NOP

MEMKEY, KBOARD,

#7FH MEMKEY

NOP Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

118

NOP MOV A, KBOARD MEMKEY, MEMKEY PROCURA

CJNE A, MOV RR MOV A, A

MEMKEY,

CJNE A, RET

#0F7H, LOOP1

PROCURA:

MOV MOV MOV

MEMKEY,

DPTR, #TABKEY R7, A, #00H R7 @A+DPTR MEMKEY, R7 PROXIMA

NOVO:

MOV

MOVC A, CJNE A, MOV RET A,

PROXIMA:

INC

R7

LJMP NOVO ;******************************************************************************* ;************************** DEBOUNCE DE 50mS ************************** DEBOU: MOV MOV MOV TH0, TL0, #3CH #0B0H

TMOD, #11H

SETB TR0 CLR JNB CLR CLR RET ;****************************************************************************** TF0 TF0, TF0 TR0 $

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

119

;************************** TABELA DE TECLAS *************************** TABKEY: DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB 0EBH 77H 7BH 7DH 0B7H 0BBH 0BDH 0D7H 0DBH 0DDH 0E7H 0EDH 7EH 0BEH 0DEH 0EEH ;Tecla 0 ;Tecla 1 ;Tecla 2 ;Tecla 3 ;Tecla 4 ;Tecla 5 ;Tecla 6 ;Tecla 7 ;Tecla 8 ;Tecla 9 ;Tecla * ;Tecla # ;Tecla A ;Tecla B ;Tecla C ;Tecla D

;***************************************************************************** END ;Final do Programa

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

120

15 Programa exemplo de controle digital de temperatura

;**************************************************** ; ; ; ; ; ; ; ; Autores: Alessander Martins Leite Flvio Roberto dos Santos Marcio Litwin Camargo Controle digital de temperatura Software implementado por alunos do curso de Automao Industrial do CEFET (2006)

;**************************************************** ORG MOV MOV 0000H PSW, #10H R1, #3CH ;Temperatura=60 Graus Celsius ;Inicio do programa

LJMP COMECO ORG 0030H

COMECO:

MOV CLR CLR CLR

SP, P2.5 P2.6 P2.7

#40H

LCALL INIC_LCD LCALL CLEAR_LCD LCALL TEXTOS LCALL LINHA2 LCALL TESTOC LCALL POS0 LCALL SET_TEMP LCALL VER_TEMP

LJMP $ Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

121

;**************************************************** ; Inicializa Display LCD

;**************************************************** INIC_LCD: SETB P2.5 CLR MOV P2.7 P0, #38H

LCALL TEMPO0 CLR P2.5

LCALL ESPERA_LCD

SETB P2.5 CLR MOV P2.7 P0, #0C0H

LCALL TEMPO0 CLR P2.5

LCALL ESPERA_LCD

SETB P2.5 CLR MOV P2.7 P0, #06H

LCALL TEMPO0 CLR P2.5

LCALL ESPERA_LCD

RET

;**************************************************** ; Rotina para limpar o LCD

;**************************************************** CLEAR_LCD: SETB P2.5 CLR MOV P2.7 P0, #01H

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

122

LCALL TEMPO0 CLR P2.5

LCALL ESPERA_LCD

RET

;**************************************************** ; Rotina para mudar para linha 2 do LCD

;**************************************************** LINHA2: SETB P2.5 CLR MOV P2.7 P0, #0C0H

LCALL TEMPO0 CLR P2.5

LCALL ESPERA_LCD

RET

;**************************************************** ; ; Rotina para mudar de posio para ajustar a temperatura

;**************************************************** POS0: PUSH A SETB P2.5 CLR MOV P2.7 P0, #8CH

LCALL TEMPO0 CLR P2.5

LCALL ESPERA_LCD POP A

RET

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

123

;**************************************************** ; ; Rotina para mudar de posio para controlar a temperatura

;**************************************************** POS1: PUSH A SETB P2.5 CLR MOV P2.7 P0, #0CCH

LCALL TEMPO0 CLR P2.5

LCALL ESPERA_LCD POP A

RET

;**************************************************** ; Rotina TEMPO0 (1 segundo)

;**************************************************** TEMPO0: MOV MOV MOV PSW, #18H R0, #02H

TMOD, #01H

NAO_AC0:

MOV MOV

TH0, TL0,

#0FFH #0FAH

SETB TR0

ESP0:

JNB CLR CLR

TF0, TF0 TR0

ESP0

DJNZ R0, MOV

NAO_AC0

PSW, #10H

RET Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

124

;**************************************************** ; Rotina TEMPO1

;****************************************************

TEMPO1: MOV MOV

MOV R0,

PSW, #18H #01H

TMOD, #01H

NAO_AC1:

MOV MOV

TH0, TL0,

#0FFH #0FAH

SETB TR0

ESP1:

JNB CLR CLR

TF0, TF0 TR0

ESP1

DJNZ R0,

NAO_AC1

MOV

PSW, #10H

RET

;**************************************************** ; Rotina de texto (ajuste)

;****************************************************

TEXTOS: AS: MOV

MOV A,

DPTR, #TEMPERATURAS #00H @A+DPTR

MOVC A, JZ FIMS

LCALL ESCRT INC JMP DPTR AS

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

125

FIMS:

RET

;**************************************************** ; Rotina de texto (controle)

;****************************************************

TEXTOC: AC: MOV

MOV A,

DPTR, #TEMPERATURAC #00H @A+DPTR

MOVC A, JZ FIMC

LCALL ESCRT INC JMP DPTR AC

FIMC:

RET

;**************************************************** ; Rotina de texto

;****************************************************

AU_TS: AT:

MOV MOV

DPTR, #ATEMPERATURA A, #00H @A+DPTR

MOVC A, JZ AFIM

LCALL ESCRT INC JMP DPTR AT

AFIM:

RET

;**************************************************** ; Rotina para setar a temperatura

;**************************************************** Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

126

SET_TEMP:

MOV MOV MOV

PSW, #10H R0, A, #11H @R0

LCALL ASCI LCALL ESCR

RET

ESCR:

MOV MOV

PSW, #10H R0, #17H

ESCRV:

SETB P2.5 SETB P2.7 MOV ADD MOV A, A, P0, @R0 #30H A

LCALL TEMPO0 CLR P2.5

LCALL ESPERA_LCD DEC R0 #14H, ESCRV

CJNE R0,

LCALL TEMPO0

RET

;**************************************************** ; Rotina de escrita

;****************************************************

ESCRT:

SETB P2.5 SETB P2.7 MOV P0, A

LCALL TEMPO0 Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

127

CLR

P2.5

LCALL ESPERA_LCD

RET

;**************************************************** ; Rotina de espera LCD

;****************************************************

ESPERA_LCD: SETB P2.5 SETB P2.6 CLR MOV ESP: P2.7 P0, #0FFH

LCALL TEMPO1 JB CLR CLR CLR P0.7, P2.5 P2.7 P2.6 ESP

RET

;**************************************************** ; Rotina que le P3 e converte para ASCII

;****************************************************

VER_TEMP:

MOV MOV

A,

P3

PSW, #10H

LCALL VER_C LCALL ASCI LCALL POS1 LCALL ESCR LCALL M_T_S

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

128

JMP

VER_TEMP

;**************************************************** ; Rotina para alterar a temperatura

;****************************************************

M_T_S:

JNB

P2.0,

AU_T

RET

AU_T:

LCALL INIC_LCD LCALL CLEAR_LCD LCALL AU_TS LCALL POS0 LCALL I_D

;**************************************************** ; Incrementa ou decrementa temperatura

;****************************************************

I_D:

MOV JNB

PSW, #10H P2.0, P2.1, P2.1, $ D_TS $

V_V:

JB JNB

LCALL MAI_T LCALL SET_TEMP LJMP I_D

MAI_T:

CJNE R1,

#0FFH, MAI_TN

RET

MAI_TN:

INC

R1

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

129

RET

D_TS:

JB JNB

P2.2, P2.2,

S_TS $

LCALL MEI_T LCALL SET_TEMP LJMP I_D S_TS: JB JNB P2.0, P2.0, V_V $

LCALL COMECO

MEI_T:

CJNE R1,

#00H, MEI_TN

RET

MEI_TN:

DEC

R1

RET

;**************************************************** ; Converte para cdigo ASCII

;****************************************************

ASCI:

MOV MOV MOV MOV

PSW, #10H R5, R6, R7, #00H #00H #00H

COMPA: RET

CJNE A,

#00H, UND

UND:

DEC

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

130

INC

R5 #0AH, COMPA

CJNE R5, INC MOV R6 R5,

#00H #0AH, COMPA

CJNE R6, INC MOV R7 R6,

#00H

LJMP COMPA

;**************************************************** ; Rotina para verificar a temperatura

;****************************************************

VER_C:

MOV PUSH A PUSH 11H CJNE A, CLR POP POP P1.0 11H A

PSW, #10H

11H,

RET

N:

JZ

X #00H, DIF

CJNE R1, CLR POP POP P1.0 11H A

RET

X:

SETB P1.0 POP 11H

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

131

POP

RET

DIF:

DEC DEC JZ

A R1 X #00H, DIF

CJNE R1, CLR POP POP P1.0 11H A

RET

;**************************************************** ; Tabelas de mensagens

;****************************************************

TEMPERATURAS:

DB

"Temp_Setada:",00H

TEMPERATURAC:

DB

"Temp_Contr.:",00H

ATEMPERATURA:

DB

"Mudar_Temp.:",00H

END

Milton Barreiro Junior ETE Getlio Vargas

Vous aimerez peut-être aussi