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

APOSTILA MICROPROCESSADORES, Esquemas de Microprocessadores

apostila de microprocessadores

Tipologia: Esquemas

2023

Compartilhado em 21/10/2023

lethicia-araujo-1
lethicia-araujo-1 🇧🇷

2 documentos

1 / 51

Toggle sidebar

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

Não perca as partes importantes!

bg1
O Microcontrolador 8051
Notas de Aula do Prof. Alexandre Balbinot 1
NOTAS DE AULA 06
MICROCONTROLADOR
8051
SUMÁRIO DO VOLUME NOTAS DE AULA 06
1 INTRODUÇÃO AOS MICROCONTROLADORES
2 PROGRAMANDO EM LINGUAGEM ASSEMBLY - 8051
3 INSTRUÇÕES: JUMPS, LOOPS E CALL
4 DESCRIÇÃO DOS PINOS DO 8051 E UTILIZAÇÃO DAS PORTAS DE I/O
5 MODOS DE ENDEREÇAMENTO DO 8051
6 INSTRUÇÕES ARITMÉTICAS E LÓGICAS
7 INSTRUÇÕES PARA PROGRAMAR APENAS UM BIT
8 TIMER/COUNTER
9 COMUNICAÇÃO SERIAL
10 INTERRUPÇÃO
11 INTERFACEAMENTO DE DISPOSITIVOS AO 8051: LCD, AD, MOTOR DE PASSO,
TECLADOS, MEMÓRIA EXTERNA, 8255A
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

Pré-visualização parcial do texto

Baixe APOSTILA MICROPROCESSADORES e outras Esquemas em PDF para Microprocessadores, somente na Docsity!

NOTAS DE AULA 06

MICROCONTROLADOR

SUMÁRIO DO VOLUME NOTAS DE AULA 06

1 INTRODUÇÃO AOS MICROCONTROLADORES

2 PROGRAMANDO EM LINGUAGEM ASSEMBLY - 8051

3 INSTRUÇÕES: JUMPS, LOOPS E CALL

4 DESCRIÇÃO DOS PINOS DO 8051 E UTILIZAÇÃO DAS PORTAS DE I/O

5 MODOS DE ENDEREÇAMENTO DO 8051

6 INSTRUÇÕES ARITMÉTICAS E LÓGICAS

7 INSTRUÇÕES PARA PROGRAMAR APENAS UM BIT

8 TIMER/COUNTER

9 COMUNICAÇÃO SERIAL

10 INTERRUPÇÃO

11 INTERFACEAMENTO DE DISPOSITIVOS AO 8051: LCD, AD, MOTOR DE PASSO,

TECLADOS, MEMÓRIA EXTERNA, 8255A

NOTAS DE AULA

06

MICROCONTROLADOR 8051

VOL. 01

SUMÁRIO

1 INTRODUÇÃO AOS MICROCONTROLADORES

2 PROGRAMANDO EM LINGUAGEM ASSEMBLY - 8051

3 INSTRUÇÕES: JUMPS, LOOPS E CALL

4 DESCRIÇÃO DOS PINOS DO 8051 E UTILIZAÇÃO DAS PORTAS DE I/O

1 INTRODUÇÃO AOS MICROCONTROLADORES

Ao contrário dos microprocessadores, como por exemplo, o 8085 e o 80x86 (apenas citando a família Intel), os microcontroladores tipicamente integram RAM, ROM e I/O, assim como, a CPU no mesmo circuito integrado. Por outro lado, o espaço para armazenamento de programas é limitado (comparando com os microprocessadores) e normalmente o conjunto de instruções é desenvolvido em número inferior aos microprocessadores.

  1. consumo de potência. Deve ser levado em conta, principalmente em sistemas baseados em bateria;
  2. capacidade de memória interna: RAM e ROM;
  3. o número de pinos de I/O e timer’s internos;
  4. facilidade em realizar upgrade para outras versões;
  5. custo por unidade;
  6. facilidade na sua utilização (programação, montadores existentes, compiladores C, etc...).

1.1 Introdução ao μμC 8051

A família (^) μC-51 (a Intel denomina de MCS-51) pode ser dividida em três grupos principais:

Características internas (on-board) 8051 8031 8751 4KB de ROM 128B de RAM 32 pinos de I/O 2 counter/timers de 16 bits 6 fontes de interrupção 1 porta serial duplex 1 processador booleano de bits

Não tem ROM interna e usa memória externa para armazenagem de programa.

O mesmo que o 8051, exceto que a ROM é uma UV-EPROM.

Obs.: 8052, 8032, 8752 (^) ‡ são versões expandidas (on-board): 8KB de ROM, 256B de RAM e 3 timers. Versões CMOS (baixa potência): 80C51, 80C31 e 87C51.

Características 8051 8052 8031 ROM (interna) 4KB 8KB 0KB RAM 128 256 128 Timers 2 3 2 Pinos de I/O 32 32 32 Porta Serial 1 1 1 Fontes de Interrupção 6 8 6 Obs.: Programas desenvolvidos no 8051 rodam no 8052, mas o inverso não.

Diagrama de blocos do μμC 8051.

Outras famílias do (^) μC8051:

  1. (^) μC8751: este (^) μC possui somente uma memória interna UV-EPROM de 4KB;
  2. Família Atmel (da Atmel Corporation ): popular versão do (^) μC8051 que possui internamente uma memória ROM no formato de flash memory. A sua vantagem é que esta memória pode ser apagada rapidamente (na ordem de segundos e não é necessário usar um apagador de ROM) quando comparado a 20 minutos ou mais na versão μC8751.^ Para^ eliminar^ a^ necessidade^ de^ um^ programador^ de^ PROM^ a^ Atmel apresentou uma versão AT89C51 cuja memória interna pode ser programa através da porta serial (RS232C) do IBM PC;
  3. Família Dallas Semiconductor : na versão ROM interna é no formato de uma NV- RAM (a programação desta memória pode ser realizada através da porta serial).

2 PROGRAMANDO EM LINGUAGEM ASSEMBLY: uma introdução ao 8051

2.1 Registros básicos

Na CPU, os registros (normalmente chamados de registradores no 80x86) são usados para armazenar informações temporariamente (dados e endereços). A maioria dos registros do 8051 são de 8 bits (no 8051 só existe um tipo de dado: de 8 bits). Os registros mais comumente utilizados no 8051 são listados abaixo ( posteriormente estudaremos os outros registros e os endereços de cada um dos registros ).

Alguns registros de 8 bits do 8051:

Alguns registros de 16 bits do 8051:

Nomes: A (^) ‡ Acumulador (^) ‡ Usado em todas as instruções aritméticas e lógicas.

DPTR ‡ Apontador de Dados PC (^) ‡ Contador de Programas

Comparação básica entre o μμC8051 e o μμP80x86. μμ P 80x86 μμ C 8051 Registradores de 8 bits AL, AH, BL, BH, CL, CH, DL, DH A, B, R0, R1, R2, R3, R4, R5, R6, R7 (R0- R7 ‡ 4 banc os de registros) Registradores de 16 bits (apontador de dados) BX, SI, DI DPTR Contador de Programas (PC) IP (16 bits) PC (16 bits) Entrada MOV DX, endereço da porta IN AL, DX

MOV A, Pn ; (n = 0 a 3)

Saída MOV DX, endereço da porta OUT DX, AL

MOV Pn, A ; (n= 0 a 3)

Loop DEC CL JNZ Rótulo

DJNZ R3, Rótulo (usando R0 a R7) Pilha (Stack Pointer) SP (16 bits) PUSH ‡ empilha e decrementa SP POP ‡ desempilha e incrementa SP

SP (8 bits) PUSH ‡ empilha e incrementa o SP POP ‡ desempilha e decrementa o SP Movimento de dados Do segmento de código MOV AL, CS:[SI] MOVC A, @A+PC Do segmento de dados MOV AL, [SI] MOVX A, @DPTR Da RAM MOV AL, [SI] ; usar somente SI, DI ou BX MOV A, @R0 ; usar somente R0 ou R Para a RAM MOV [SI], AL MOV @R0, A

a) Instrução MOV

MOV destino, fonte ; copia o operando fonte para o operando destino

Exemplos: MOV A, #55H ; A fl 55H, ou seja, carrega o valor 55H no registro A MOV R0, A ; copia o conteúdo de A para R0 (ao ser processado: A=R0=55H)

MOV R1, A ; copia o conteúdo de A para R1 (ao ser processado: A=R0=R1=55H) MOV R2, A ; copia o conteúdo de A para R ; (ao ser processador: A=R0=R1=R2=55H) MOV R3, #95H ; carrega o valor 95H em R3 (ao ser processado: R3 = 95H) MOV A, R3 ; copia o conteúdo de R3 para A (ao ser processador: A = R3 = 93H)

Pode-se observar que:

Exemplos:

(a) MOV A, #25H ; carrega 25H no acumulador MOV R2, #34H ; carrega 34H no registro R ADD A, R2 ; soma o conteúdo do R2 com o conteúdo de A e armazena o resultado

; em A ( A = A + R2) (b) o que ocorre? MOV R5, #25H MOV R7, #34H MOV A, #0H ADD A, R ADD A, R

(c) o que ocorre? MOV A, #25H ADD A, #34H

2.2 Introdução a Linguagem Assembly do 8051

Cabe ressaltar, que a montagem de um programa assembly para o 8051, é similar a montagem de um programa em assembly para o 80x86, ou seja, desenvolve-se um arquivo fonte (programa fonte) (^) ‡ realiza-se a montagem (^) ‡ realiza-se a ligação. As diferenças que ocorrem é no uso do montador assembler e as instruções utilizadas para se chegar ao programa executável (basta verificar a documentação do montador assembler utilizado). A estrutura básica de um programa assembly segue no exemplo abaixo:

; início do programa ORG 0H ; Início na localização 0 (origem) – ORG (^) ‡ diretiva MOV R5, #25H MOV R7, #34H MOV A, # ADD A, R ADD A, R ADD A, #12H AQUI: SJMP AQUI ; uso de um salto e seu correspondente rótulo (fica neste ; rótulo). SJMP = Short Jump END ; fim do programa

Percebe-se que a estrutura do programa para o 8051 é extremamente similar a estrutura do programa para o processador 80x86. O programa é constituído de Pseudo-instruções (DIRETIVAS: ORG, END, etc), instruções (os mnemônicos: ADD, MOV, SJMP, etc) e endereços (rótulos). Da mesma forma que no microprocessador 80x86, as instruções para o montador assembler do microcontrolador 8051 consiste de 4 campos:

[Rótulo:] mnemônico [operandos] ;[comentários] ; [ ] = é opcional

2.3 Montagem e execução do 8051

Os três passos básicos de um programa são: criar (arquivo fonte) (^) ‡ montar (^) ‡ executa-lo. Os passos básicos são: 1°) usar um editor de texto (este editor precisa estar apto a criar arquivos ASCII, como por exemplo, o EDIT do DOS). O arquivo fonte precisa ter a extensão .ASM ou .SRC (fonte) dependend o do montador usado; 2°) o arquivo Exemplo.ASM contém o programa fonte. O montador assembler do 8051 monta o programa fonte, ou seja, converte o arquivo fonte no correspondente código de máquina. O montador gera dois arquivos básicos: .obj e .lst;

2.4 O Contador de programa (PC) e a ROM no 8051

Contador de Programa (PC): o PC aponta para o endereço da próxima instrução a ser executada. Como a CPU realiza a busca (ciclo de fetch) do opcode na ROM, o PC é incrementado para apontar para a próxima instrução. Este registro no 8051 é de 16 bits, logo, indica que o 8051 pode acessar a memória de programa (ROM) de faixa de endereço de 0000H a FFFFH, ou seja, um total de 64KB.

Observe que quando o microprocessador é ligado ou após um RESET (Vcc no pino de RESET), o PC é inicializado para 0000H (PC (^) fl 0000H), ou seja, irá realizar o primeiro ciclo de fetch na posição de memória 0000H o que significa que o programa desenvolvido deve estar armazenado na primeira posição de memória da ROM (utiliza-se para isto ORG 0H).

Vamos novamente examinar o arquivo .lst fornecido anteriormente:

Endereço da ROM Linguagem de Máquina Linguagem Assembly 0000 7D25 MOV R5, #25H 0002 7F34 MOV R7, #34H 0004 7400 MOV A, # 0006 2D ADD A, R 0007 2F ADD A, R 0008 2412 ADD A, #12H 000A 80FE AQUI: SJMP AQUI

Após o programa ser armazenado na ROM de um membro da família 8051, o opcode e operando são colocados na localidade 0000H da ROM como mostrado na tabela abaixo.

Endereço Código 0000 7D 0001 25 0002 7F 0003 34 0004 74 0005 00 0006 2D 0007 2F 0008 24 0009 12 000A 80 000B FE

Por exemplo, o endereço 0000H contém 7D que é o opcode para mover um valor para o registro R5, e o endereço 0001H contém o operando (neste caso é o 25H) para ser movido para o registro R5. Portanto, a instrução MOV R5, #25H tem um código de máquina 7D25, onde o 7D é o opcode e 25 o operando.

END (fim): indica ao montador o fim do arquivo fonte (.asm). Cuidado, alguns montadores utilizam a seguinte sintaxe: .END

Regras para rótulos :

  1. o primeiro caracter do rótulo precisa ter uma letras (não pode ser um número);
  2. não podem ser utilizadas palavras reservadas (instruções e diretivas).

2.6 Flags e o registro PSW (Program Status Word) no 8051

Assim como toda unidade microprocessada, o 8051 necessita de um registro de flagas (PSW) para indicar o comportamento (estado) de determinadas instruções, como por exemplo, a existência ou não de Carry.

O registro PSW é de 8 bits (somente 6 são utilizados pelo 8051 e os 2 restantes podem ser utilizados pelo usuário, ou seja, são flags definidos pelo usuário). Quatro flags são chamados de flags condicionais, pois indicam alguma condição resultante após a execução de uma determinada instrução: CY (carrr), AC (auxiliary carry), P (parity) e OV (overflow).

Flag Carry (CY): é setado quando ocorre um flag do D7 bit. Pode também ser modificado, ou seja setado ou ressetado através das instruções SETB C (seta o CY) e CLR C (limpa o CY).

Flag Auxiliar Carry (AC): é setado quando ocorre um carry do D3 ao D4 durante as operações das instruções SUB ou ADD. Este flag é normalmente usado nas instruções que realizam operações BCD.

Flag Paridade (P): indica o número de 1’s no A (acumulador) somente. Se A contém um número ímpar de 1’s, então P = 1; caso contrário, P = 0 (número par de 1’s).

Flag Overflow (OV): este flag é setado quando o resultado de uma operação com sinal é muito grande. Em geral, é usado para detectar erros.

Instruções que afetam o PSW. Instrução CY OV AC ADD X X X ADDC X X X SUBB X X X MUL 0 X DIV 0 X DA X RRC X RLC X SETB C 1 CLR C 0 CPL C X ANL C, bit X ANL C, /bit X ORL C, bit X ORL C, /bit X MOV C, bit X CJNE X X (^) ‡ pode ser 0 ou 1 dependendo do resultado obtido.

  1. um total de 80B (das localidades 30H a 7FH) são usados para leitura e escrita. São utilizados para armazenar os dados e parâmetros pelos programadores (conhecid a como área scratch pad ).

Banco de Registros (o Banco 0 é o default):

OBSERVAÇÃO: O BANCO 1 USA O MESMO ESPAÇO DA PILHA. ISTO É UM

PROBLEMA PARA O PROGRAMA. PODEMOS ALOCAR OUTRA ÁREA COMO

PILHA OU NÃO USAR O BANCO 1.

Exemplo_1: O que ocorre com as lo calidades da RAM após a execução das instruções abaixo: MOV R0, #99H ; carrega R0 com o valor 99H MOV R1, #85H ; carrega R1 com o valor 85H MOV R2, #3FH ; carrega R2 com o valor 3FH MOV R7, #63H ; carrega R7 com o valor 63H MOV R5, #12H ; carrega R5 com o valor 12H Solução: Após a execução das instruções fornecidas anteriormente temos (o banco utilizado é o default Banco 0):

  • a localidade 0 da RAM tem o valor 99H
  • a localidade 1 da RAM tem o valor 85H
  • a localidade 2 da RAM tem o valor 3FH
  • a localidade 5 da RAM tem o valor 12H
  • a localidade 7 da RAM tem o valor 63H.

Exemplo_2: Repetir o exemplo anterior utilizando os endereços da RAM no lugar do nome dos registros:

Solução: MOV 00, #99H ; carrega R0 com o valor 99H MOV 01, #85H ; carrega R1 com o valor 85H MOV 02, #3FH ; carrega R2 com o valor 3FH MOV 07, #63H ; carrega R7 com o valor 63H MOV 05, #12H ; carrega R5 com o valor 12H

Como alterar o banco a ser utilizado: como definido anteriormente o Banco 0 é o banco default quando o 8051 é ligado. Porém os outros três bancos podem ser utilizados, bastando programar os bits RS1 e RS2 do PSW.