











































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
apostila de microprocessadores
Tipologia: Esquemas
1 / 51
Esta página não é visível na pré-visualização
Não perca as partes importantes!
NOTAS DE AULA
06
MICROCONTROLADOR 8051
VOL. 01
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.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:
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 :
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.
Banco de Registros (o Banco 0 é o default):
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):
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.