Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Micro MCS51 2010, Notas de estudo de Mecatrônica

Microcontrolador

Tipologia: Notas de estudo

2012

Compartilhado em 14/12/2012

jose-martins-dos-santos-junior-1
jose-martins-dos-santos-junior-1 🇧🇷

5

(9)

111 documentos

1 / 79

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Colégio Técnico de Campinas
Colégio Técnico de Campinas Colégio Técnico de Campinas
Colégio Técnico de Campinas –
Cotuca
Cotuca Cotuca
Cotuca –
Disciplina
Disciplina Disciplina
Disciplina -
--
-
TDM II
TDM IITDM II
TDM II
[Prof. Corradi – WWW.corradi.junior.nom.br] Página 1
Microcontroladores
MicrocontroladoresMicrocontroladores
Microcontroladores
Família MCS51
Família MCS51Família MCS51
Família MCS51®
®®
®
Colégio Técnico de Campinas
Colégio Técnico de Campinas Colégio Técnico de Campinas
Colégio Técnico de Campinas –
COTUCA
COTUCACOTUCA
COTUCA
Disciplina
Disciplina Disciplina
Disciplina –
TDM II
TDM IITDM II
TDM II-
--
-
Departamento Eletroeletrônica
Departamento EletroeletrônicaDepartamento Eletroeletrônica
Departamento Eletroeletrônica
Janeiro/2010
Janeiro/2010Janeiro/2010
Janeiro/2010
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f

Pré-visualização parcial do texto

Baixe Micro MCS51 2010 e outras Notas de estudo em PDF para Mecatrônica, somente na Docsity!

MicrocontroladoresMicrocontroladoresMicrocontroladoresMicrocontroladores

Família MCS51Família MCS51Família MCS51Família MCS51®®®®

Colégio Técnico de CampinasColégio Técnico de CampinasColégio Técnico de CampinasColégio Técnico de Campinas –––– COTUCACOTUCACOTUCACOTUCA

DisciplinaDisciplinaDisciplinaDisciplina –––– TDM IITDM IITDM IITDM II---- Departamento EletroeletrônicaDepartamento EletroeletrônicaDepartamento EletroeletrônicaDepartamento Eletroeletrônica

Janeiro/2010Janeiro/2010Janeiro/2010Janeiro/

MICROCONTROLADOR

A figura abaixo mostra a diferença entre um microprocessador e um microcontrolador. O microprocessador (ou CPU) é o gerenciador de um sistema microcontrolado, possui internamente a unidade lógica aritmética (ULA), registradores e a unidade de controle (UC). O microprocessador necessita de unidades de memórias (ROM e/ou RAM) e de dispositivos de entrada e saída (I/O) para se comunicar com o ambiente externo. O microcontrolador é um dispositivo que possui internamente um microprocessador, unidades de memórias e interface com o mundo externo (porta serial, porta paralela, temporizadores). Na figura abaixo o retângulo marrom corresponde ao microprocessador e retângulo azul corresponde ao microcontrolador. O microcontrolador é utilizado para sistemas dedicados, tais como: injeção eletrônica, ignição eletrônica, computador de bordo, relógios microcontrolados, sistemas de automação. Num chão de fábrica é muito utilizado o CLP, sendo que este equipamento possui internamente um microcontrolador.

FAMÍLIA MCS-

Existem vários microcontroladores disponíveis no mercado. Um dos mais utilizados se refere à família MCS-51. Estes microcontroladores possuem a vantagem de serem produzidos por vários fabricantes (Atmel, Philips, Texas...) que mantém núcleo base (core) e diferem em outras características: uns apresentam conversores analógicos digitais (A/D), outros variam na quantidade de memória, no tipo de memória (flash, eeprom ), uns possuem PWM, comunicação SPI, I^2 C, Ethernet, clocks que variam de 2 a 100 MHz.

MEMÓRIA EXTERNA

O contador de endereço do 80C51 (PC) é de 16 bits, portanto pode ser adicionado até:

64 Kbytes de memória de dados (Pinos RD e WR) 64 Kbytes de memória de programa (Pino PSEN)

A habilitação da memória externa de programa é feita através do pino EA:

EA = 0  utiliza a memória externa de programa (até 64 Kbytes) EA =1  utiliza a princípio a memória interna (4 Kbytes) e depois a memória externa.

Para o uso de memórias externas, os seguintes pinos devem ser utilizados:

Pino 17 (RD) – utilizado para leitura na memória de dados (RAM) externa. Pino 16 (WR) – utilizado para escrita na memória de dados (RAM) externa. Pino 29 (PSEN) – utilizado para leitura na memória de programa (ROM) externa. Pino 30 (ALE) – sinal para demultiplexar a porta P0 (enable latch). Pino 31 (EA) – habilita o acesso externo da memória de programa (external Access) Pinos de 1 a 8 (porta 0) – bus multiplexado endereços (A0-A7) e dados (D0-D7). Pinos de 21 a 28 (porta 2) – contém os endereços de A8 a A15.

Esquema para ligar uma ROM externa de 64 Kbytes:

Esquema para ligar uma RAM de 64 Kbytes:

Esquema simplificado para ligar uma ROM de 64 Kbytes e uma RAM de 64 Kbytes:

  1. Se o banco 0 for selecionado a instrução:

MOV A, R0 ; isto movimenta o valor que está em R0 do banco 0 (2Eh, no exemplo acima) para o acumulador (que é o principal registrador).

Neste comando teríamos:

(A)  2Eh os parênteses indicam que o valor no registrador A recebe o valor constante 2Eh.

Outra forma de acessar os valores nos registradores sem selecionar o banco seria através da sua posição de memória. Por exemplo, acessando o registrador R através de seu endereço:

MOV A, 00h ; isto movimenta o valor que está na posição de memória 00h (2Eh, no ;exemplo acima) para o acumulador (que é o principal registrador).

Neste comando teríamos:

(A)  (00h)os parênteses indicam que o valor no registrador A recebe o valor que está na posição de memória 00h (que é 2Eh).

Exercício 1) Qual os valores que serão movidos para o acumulador quando for dada a instrução: MOV A, R

e como esses valores poderiam ser acessados pela posição de memória:

Se for selecionado o banco 0:_________ ou _______________ O banco 1:_________ ou _______________ O banco 2:_________ ou _______________ O banco 3:_________ ou _______________

Exercício 2) Qual os valores que serão movidos para o acumulador:

MOV A, 15h (A)  MOV A, 0CH (A)  MOV A, 06h (A)  MOV A, 0Eh (A)  MOV A, 2Eh (A) 

REGISTRO DE FUNÇÕES ESPECIAIS (SFR)

O mapa abaixo mostra os registradores de funções especiais bem como os valores que eles assumem após o sinal de reset:

0F8h 0FFh

0F0h B

0F7h

0E8h 0EFh

0E0h ACC

0E7h

0D8h 0DFh

0D0h PSW

0D7h

0C8h 0CFh

0C0h 0C7h

0B8h IP

XX

0BFh

0B0h P

0B7h

0A8h IE

0X

0AFh

0A0h P

0A7h

98h SCON

SBUF

XXXXXXXX

9Fh

90h P

97h

88h TCON

TMOD

TL

00000000

TL

00000000

TH

00000000

TH

00000000

8Fh

80h PO

SP

DPL

00000000

DPH

00000000

PCON

0XXX

87h

Pelo mapa, temos os endereços:

P0 - Porta 0, endereço 80h P1 - Porta 1, endereço 90h P2 – Porta 2, endereço A0h P3 – Porta 3, endereço B0h

SP (stack point) – pilha, endereço 81h DPTR – ponteiro para endereçar dados externos, é dividido em DPL (82h) e DPH (83h), como cada registro possui 8 bits, o DPTR possui 16 bits, sendo possível com isso acessar 64 Kbytes de memória externa. PCON – controle de potência, endereço 87h TCON – controle do timer/contador, endereço 88h TMOD – modo de controle do timer/contador, endereço 89h

Endereço

Final

Endereço

Inicial

Registros que podem ser

acessados bit a bit

CICLO DE MÁQUINA

Na família MCS51, cada ciclo de máquina possui 6 estados (de S1 a S6), cada estado possui 2 períodos do oscilador, portanto:

1 ciclo de máquina no 8051 possui 12 períodos de clock.

Se for utilizado um cristal de 12 MHz, o ciclo de máquina será:

s

fcristal Mhz

Tciclo de máquina 1 μ

_ _ = 12 * = =

O 80C51 possui instruções de 1 ciclo de máquina – 1 byte (Ex.: inc A ); 2 ciclos de máquina – 2 bytes (Ex.: add a,#dado ) e 2 ciclos de máquina – 1 byte (Ex.: inc dptr ).

Abaixo é mostrado o diagrama de tempo da leitura da memória externa de programa:

Para leitura de memória externa de dados, o diagrama é mostrado abaixo:

RESET

Para iniciar o processamento, o microcontrolador necessita de um sinal de reset. Este sinal faz a CPU procurar o endereço 00h da memória de programa para iniciar o programa armazenado nela. Na família MCS51 este sinal corresponde a uma borda de descida no pino 9 (RST), que pode ser feita automaticamente através do seguinte esquema:

O valor do capacitor e do resistor pode ser calculado utilizando o tempo de carga no capacitor e considerando que seja necessário:

10 ms  para estabilizar a tensão de alimentação 10 ms  para partida do oscilador 24 períodos de clock para inicialização do sistema.

No diagrama de tempo, vr corresponde a tensão de referência (3,5 V – acima deste valor é considerado nível alto). Considerando que seja utilizado um cristal de 1 MHz, o período do clock será:

s

MHz

Tcristal 106

Portanto seria necessário um tempo de 20,024 ms (10 m + 10 m + 24 * 1 μs).

A tensão no capacitor é dada por:

Vr = Vcc * e − t^ RC Aplicando ln em ambos os lados da equação

RC

t

Vr Vcc e RC Vcc V e Vr V

t

ln 3 , 5 ln 5

ln( ) ln( ) ln( ) 5 3 , 5

t RC

t RC

(ln 5 ln 3 , 5 )

Como o tempo t é conhecido (20,024 ms), será necessário assumir um valor para o

capacitor (C = 10 μF) e calcular o valor do Resistor:

3 6

R k

R

t RC

− −

Valor comercial R = 6k8.

MOV A, @R

Neste caso o conteúdo de R0 (06h) é transformado em posição de memória, e o valor desta posição (B2h) é transferido para o acumulador, portanto A = B2h

(A) ((R0)) substituindo o conteúdo de R (A)(06h) substituindo o conteúdo da posição de memória 06h (A)  B2h Note que para indicar esta operação deve existir o caractere @ antes dos registradores (ou R0 ou R1).

Endereçamento indexado : utilizado para leitura de dados em tabela ou memória externa de programa. A posição da memória é obtida por um endereço base + um índice. É utilizada a instrução MOVC. Ex:

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

Nos dois exemplos o acumulador é o índice e o endereço base é dado por DPTR ou PC.

(A)  ((A)+(DPTR)) (A)  ((A)+(PC))

No primeiro caso o conteúdo do acumulador é somado ao conteúdo do DPTR (endereço base), isto fornece a nova posição da memória, e o conteúdo desta nova posição é transferido para o acumulador.

Endereçamento específico : utilizado para transferir dados entre cpu e memória de dados externa. É utilizada a instrução MOVX. Ex:

MOVX A, @DPTR MOVX A, @Ri

O valor de DPTR é transformado em endereço e o conteúdo deste endereço é transferido ao acumulador

(A)  ((DPTR)) (A)  ((Ri))

Conjunto de Instruções da família MCS

Abreviaturas utilizadas:

A ou Acc acumulador, sendo A o registro e Acc o endereço direto, ou dir endereço da RAM interna Rn um dos registradores: R0, R1, R2, R3, R4, R5, R6 e R7. @Ri R0 ou R1, usado para endereçamento indireto.

A família MCS51 possui 111 instruções, sendo:

24 instruções aritméticas 25 instruções lógicas 28 instruções de transferência de dados 17 instruções booleanas 17 instruções de desvios

INSTRUÇÕES ARITMÉTICAS

São instruções de soma, subtração, multiplicação, divisão, incremento e decremento:

ADIÇÃO:

As somas são todas realizadas entre acumulador e outro operando, e o resultado são sempre transferidos para o acumulador

comando byte s

CM C CA 0V descrição

ADD A, Rn 1 1

X X X

(A)  (A) + (Rn) ADD A, direto

(^2 1) (A)  (A) + (posição de memória) ADD A, @Ri (^1 1) (A)  (A) + (conteúdo da posição indicado por Ri) ADD A, #dado 2 1 (A)  (A) + valor do dado

Na tabela acima:

Bytes se referem ao número de posição que a instrução ocupa na memória de programa. Quantos menos bytes forem utilizados, menos memória de programa será utilizada. CM – ciclo de máquina – indica quantos ciclos de máquina à instrução utiliza. Lembre-se no 80C51 cada ciclo de máquina corresponde a 12 períodos de clock. Quanto menos ciclo de máquina utilizar, mais rápida será a execução do programa. C – flag de carry se estiver marcado com X, o flag será afetado. CA – flag de carry auxiliar. OV – flag de overflow.

ADIÇÃO COM CARRY:

Aqui o acumulador é somado com outro operando e com o flag de carry (que pode ser 1 ou 0):

comando byte s

CM C CA 0V descrição

ADDC A, Rn 1 1

X X X

(A)  (A) + (Rn) + (C) ADDC A, direto 2 1 (A)  (A) + (pos. de memória) + (C) ADDC A, @Ri 1 1 (A)  (A) + (conteúdo da posição indicado por Ri) + (C) ADDC A, #dado 2 1 (A)  (A) + (C) + valor do dado

INCREMENTO DE 8 BITS

É sempre incrementado de uma unidade o operando

comando byte s

CM C CA 0V descrição

INC A 1 1

(A)  (A) + 1

INC Rn (^1 1) (Rn)  (Rn) + 1 INC direto 2 1 (pos. memória)  (pos.memória)+ INC @Ri 1 1 ((Ri))  ((Ri)) + 1

DECREMENTO DE 8 BITS

É sempre decrementado de uma unidade o operando

comando byte s

CM C CA 0V descrição

DEC A 1 1

(A)  (A) - 1

DEC Rn (^1 1) (Rn)  (Rn) - 1 DEC direto 2 1 (pos. memória)  (pos.memória)- DEC @Ri 1 1 ((Ri))  ((Ri)) - 1

INCREMENTO DE 16 BITS

Existe apenas incremento de 16 bits, não existe decremento de 16 bits

comando byte s

CM C CA 0V descrição

INC DPTR 1 2 - - - (DPTR)  (DPTR) + 1

AJUSTE DECIMAL

Instrução para operação em BCD. Válido apenas após as instruções ADD ou ADDC.

comando byte s

CM C CA 0V descrição

DA A 1 1

X X -

Converte o conteúdo do acumulador em BCD

Exemplo:

Supondo: A = 56h (0101 0110) representando o valor 56 BCD R1 = 6 (0110 0111) representando o valor 67 BCD C = 1 Se for feita a adição:

ADDC A, R1 ; soma o valor do acumulador com o valor de R1 + o carry, ; resultando em A = BEh, com AC = C = 0. DA A ; ajuste para BCD, A = 24h e C = 1.

INSTRUÇÕES LÓGICAS

São instruções que realizam as operações lógicas AND (E), OR (OU) e XOR (OU-EXCLUSIVO) entre o acumulador (ou uma posição de memória) e outro operando.

E LÓGICO (AND)

O resultado de uma operação AND só será verdadeiro (1) se os dois operandos forem verdadeiros (1). Ex:

resultado AND = 0101 0100

comando byte s

CM C CA 0V descrição

ANL A, Rn 1 1


(A)  (A) AND (Rn) ANL A, direto (^2 1) (A)  (A) AND (direto) ANL A, @Ri (^1 1) (A)  (A) AND ((Ri)) ANL A, # dado (^2 1) (A)  (A) AND dado ANL direto, A 2 1


(direto)  (direto) AND (A) ANL direto, #dado

(^3 2) (direto)  (direto) AND (dado)

OU LÓGICO (OR)

O resultado de uma operação OR será verdadeiro (1) se um dos dois operandos for verdadeiro (1). Ex:

resultado OR = 0111 1101

comando byte s

CM C CA 0V descrição

ORL A, Rn 1 1


(A)  (A) OR (Rn) ORL A, direto 2 1 (A)  (A) OR (direto) ORL A, @Ri (^1 1) (A)  (A) OR ((Ri)) ORL A, # dado 2 1 (A)  (A) OR dado ORL direto, A 2 1


(direto)  (direto) OR (A) ORL direto, #dado

3 2 (direto)  (direto) OR (dado)

OU-EXCLUSIVO (XOR)

O resultado de uma operação XOR será verdadeiro (1) se um dos operandos for verdadeiro (1) e o outro operando for falso (0). Ex:

0101 1100 0111 0101 resultado OR = 0010 1001

INSTRUÇÕES DE MOVIMENTO DE DADOS

PERMUTAÇÃO DE BYTE

É a troca de conteúdo entre os operandos:

comando byte s

CM C CA 0V descrição

XCH A, Rn 1 1


(A)  (Rn) e (Rn)  (A) XCH A, direto 2 1 (A)(direto)e (direto) (A) XCH A, @Ri (^1 1) (A)((Ri) e ((Ri))  (A)

TRANSFERÊNCIA DE DADOS

As transferências de dados permitidas são mostradas na tabela abaixo:

comando byte s

CM C CA 0V descrição

MOV A, Rn 1 1

(A)  (Rn) MOV A, direto (^2 1) (A)  (direto) MOV A, @Ri 1 1 (A)  ((Ri)) MOV A, #dado (^2 1) (A)  dado

MOV Rn, A (^1 1) (Rn)  (A) MOV Rn, direto (^2 2) (Rn)  (direto) MOV Rn, #dado (^2 1) (Rn)  dado

MOV direto, A 2 1 (direto)  (A) MOV direto, Rn (^2 2) (direto)  (Rn) MOV direto, direto

3 2 (direto)  (direto)

MOV direto, @Ri (^2 2) (direto)  ((Ri)) MOV direto, #dado (^3 2) (direto)  dado

MOV @Ri, A 1 2 ((Ri)) (A) MOV @Ri, direto (^2 2) ((Ri))  (direto) MOV @Ri, #dado 2 1 ((Ri)) dado

MOV DPTR, #da16 3 2 Move p/ DPTR o dado de 16 bits

Nota-se pela tabela acima que com o acumulador e com o endereço de memória são possíveis todas as transferências de dados. O mesmo não ocorre com os registradores, por exemplo, não é permitida a instrução: MOV R1, R4, isto é, não é permitido mover o conteúdo entre registradores.

PERMUTAÇÃO DE NIBBLE

Esta troca ocorre entre os nibbles baixo do acumulador e a memória interna

comando byte s

CM C CA 0V descrição

XCHD A, @Ri 1 1 - - -

OPERAÇÕES COM A PILHA

comando byte s

CM C CA 0V descrição

PUSH direto 2 2 - - - Armazena o conteúdo na pilha POP direto 2 2 - - - Tira o conteúdo da pilha

Para guardar ou retirar o conteúdo do acumulador na pilha, deve-se colocar o endereço do acumulador (Acc). Ex: PUSH ACC POP ACC

TRANSFERÊNCIA DE DADOS COM A MEMÓRIA EXTERNA DE DADOS

É possível fazer a transferência de dados usando endereçamento de 16 bits (DPTR), ou com endereçamento de 8 bits (@Ri). A instrução utilizada neste caso é MOVX:

comando byte s

CM C CA 0V descrição

MOVX A, @Ri 1 2 - - - Leitura da memória externa MOVX A, @DPTR 1 2 - - - Leitura da memória externa MOVX @Ri, A 1 2 - - - Escrita em memória MOVX @DPTR, A 1 2 - - - Escrita em memória

TRANSFERÊNCIA DE DADOS COM A MEMÓRIA EXTERNA DE PROGRAMA

Também, é possível fazer a transferência de dados usando endereçamento de 16 bits (DPTR), ou com endereçamento de 8 bits (@Ri). A instrução utilizada neste caso é MOVC:

comando byte s

CM C CA 0V descrição

MOVC A, @A+DPTR 1 2 - - - Leitura da memória externa MOVC A, @A + PC 1 2 - - - Leitura da memória externa