Apresentação do PowerPoint - Páginas Pessoais

Propaganda
SISTEMAS MICROCONTROLADOS
UTFPR
Código: EL54E
Turma: N11/E11
Prof. Sérgio Moribe
Colaboração:
Prof. Heitor S. Lopes
Prof. Rubens Alexandre de Faria
Email: [email protected]
Site: pessoal.utfpr.edu.br/smoribe
Linguagem do Microcontrolador.


Um microprocessador/microcontrolador é
um elemento eletrônico, desenvolvido
para executar tarefas específicas, com
linguagem de comando específica.
Esta linguagem de comando específica é
a linguagem de máquina, que é
inteiramente constituida de números
binários (bits), sendo definida pelo
fabricante do chip.
PROF. SÉRGIO MORIBE - UTFPR
2
Linguagem do Microcontrolador.





Para facilitar, criou-se a Linguagem Assembly, que
possue a mesma estrutura e conjunto de instruções,
porem utiliza nomes (mnemônicos) e símbolos no lugar
dos números.
A conversão da Ling. Assembly para a ling. de máquina
é feita pelo “assemblador” (montador = assembler)
A linguagem assembly ainda é específica para cada
tipo de CPU, sendo considerada uma linguagem de
baixo nível.
Para tornar a programação mais próxima da linguagem
humana, criou-se as linguagens de alto nível, como
Pascal, Basic, C, ....
A conversão desta linguagem para linguagem de
máquina/assembly é feita pelo “compilador”.
PROF. SÉRGIO MORIBE - UTFPR
3
Ling. Assembly 8051 – Modos de Endereçamento.
O 8051 apresenta 111 tipos de instruções, sendo
49 de um byte, 45 de dois bytes e 17 de três
bytes. Levando-se em contas as variações de
cada tipo, chega-se a 255 instruções.
 Para aprendermos como funcionam todas estas
instruções, precisamos entender bem apenas 8
modos de endereçamento:
1) Registrador
2) Direto
3) Indireto
4) Imediato
5) Relativo
6) Absoluto
7) Longo
8) Indexado

PROF. SÉRGIO MORIBE - UTFPR
4
Modo de Endereçamento Imediato:
Significam que o código da instrução já é codificado
imediatamente junto com uma constante, chamado
dado imediato.
 Constantes do tipo imediato são precedidos do sinal #
Este tipo de instrução é codificado em 2 Bytes ou em 3
Bytes quando se usa o DPTR.
Exemplos:
 MOV A,#30h
; A ← 30h
 MOV DPTR,#20FFh ;
DPTR ← 20FFh, DPH ← 20h e DPL ← FFh

PROF. SÉRGIO MORIBE - UTFPR
5
Modo de Endereçamento Registrador:

Permite o acesso aos registros R0 a R7 do
banco de registros em uso (working
registers), definido pelos bits de controle RS1
e RS0 existentes no registro de função
especial PSW.
Exemplos:
 MOV A,R0
 DEC R0
; A ← R0
; R0 ← R0 – 1
Este tipo de instrução é codificado em 1 byte.
Importante! Precisa saber qual Banco de
Registradores de trabalho (working register)
está ativo.
PROF. SÉRGIO MORIBE - UTFPR
6
MAIS DETALHES DA RAM INTERNA
PROF. SÉRGIO MORIBE - UTFPR
7
Modo de Endereçamento Direto:

Referem-se diretamente ao endereço ou
mnemônico (apelido) dos registradores
internos da RAM.
Exemplos:
 MOV A,P3
 MOV 30H,A
; A ← P3
; 30H ← A
Este tipo de instrução é codificado em 2 Bytes
PROF. SÉRGIO MORIBE - UTFPR
8
Modo de Endereçamento Indireto:




Nesse caso o endereço da posição de memória
onde será efetuada a operação é indicado de
forma indireta pelos registros R0 ou R1 ou pelo
registro DPTR. Os registros R0, R1 e DPTR
atuam como ponteiros nessas instruções.
R0 e R1 ponteiros para endereços de 8 bits
DPTR um ponteiro para endereços de 16 bits.
Os ponteiros são precedidos pelo símbolo @,
para indicar endereçamento indireto.
Este tipo de instrução é codificado em 1 Bytes
PROF. SÉRGIO MORIBE - UTFPR
9
Modo de Endereçamento Indireto:
Exemplos:
Supondo:
 Que na posição 30h da RAM interna temos o valor 5Ah
 Que R1 = 30h
 Se executarmos a instrução:
 MOV A,@R1 ;
A ← (R1) = A ← (30h) = A ← 5Ah
Move para A o conteúdo da memória apontada por R1
PROF. SÉRGIO MORIBE - UTFPR
10
Modo de Endereçamento Indireto:
Exemplos:
Supondo:
 Que na posição 2000h da RAM externa temos o valor
A9h
 Que DPTR = 2000h, DPH = 20h e DPL = 00h
 Se executarmos a instrução:
 MOVX A,@DPTR ;
A ← (DPTR) = A ← (2000h) = A ← A9h
Move para A o conteúdo da memória apontada por DPTR
PROF. SÉRGIO MORIBE - UTFPR
11
Modo de endereçamento da RAM interna.
PROF. SÉRGIO MORIBE - UTFPR
12
Modo de Endereçamento Relativo:

Permite realizar um salto em relação a
posição do PC. Esse endereço relativo
(Offset) é um dado de 8 bits sinalizado, isto
é, realiza um salto relativo ao endereço que
está o PC de -128 a +127
Este tipo de instrução é codificado em 2 Bytes.
PROF. SÉRGIO MORIBE - UTFPR
13
Ex. Endereçamento Relativo - Nicolosi
PROF. SÉRGIO MORIBE - UTFPR
14
Modo de Endereçamento Absoluto:
Instruções ACALL e AJMP, permitem desvio de até
2 Kbytes relativo em apenas 2 bytes de código.
 A memória é dividida em 32 páginas de 2 Kbytes
absolutos.
 O endereçamento relativo de destino às instruções
ACALL e AJMP deve estar dentro da mesma
página de 2 kbytes em que o código deles está
gravado.
Este tipo de instrução é codificado em 2 Bytes.

PROF. SÉRGIO MORIBE - UTFPR
15
PROF. SÉRGIO MORIBE - UTFPR
16
PROF. SÉRGIO MORIBE - UTFPR
17
Modo de Endereçamento Longo:


Instruções LCALL e LJMP, permitem desvio de até
16 bits que mapeia todo o espaço disponível de
endereços (64Kbytes).
A desvantagem dessas instruções é que elas
ocupam 3 bytes de programa.
Este tipo de instrução é codificado em 3 Bytes.
PROF. SÉRGIO MORIBE - UTFPR
18
Modo de Endereçamento Indexado:
São instruções cujo endereço de destino depende
não só do endereço inserido na instrução, mas
também do conteúdo de A (index) naquele instante.
Este tipo de instrução é codificado em 1 Byte

Exemplo: Supondo que na ROM tenha uma tabela de
valores Bytes e voce queira o terceiro valor da
mesma que é 33h, então:
MOV
DPTR,#TABELA
MOV
A,#03
MOVC A,@A+DPTR
; A ← (A+DPTR) = 33h
PROF. SÉRGIO MORIBE - UTFPR
19
Endereçamentos Combinados ou Misto
Apresentamos algumas combinações de
endereçamento possíveis:








MOV R0,20h
MOV 30h,R4
MOV R1,#40h
MOV 60h,#55h
MOV @R1,#33h
MOV 50h,@R1
MOV @R0,50h
MOV 40h,50h
;Registrador e Direto
;Direto e Registrador
;Registrador e Imediato
;Direto e Imediato
;Indireto e Imediato
;Direto e Indireto
;Indireto e Direto
;Direto e Direto
PROF. SÉRGIO MORIBE - UTFPR
20
Conjunto de Instruções
O conjunto das instruções do 8051 é dividido
em 5 grupos:





Transferência de dados,
Operações lógicas,
Operações aritméticas,
Manipulação de variáveis booleanas (Bits)
Controle de programa (Desvios)
PROF. SÉRGIO MORIBE - UTFPR
21
Simbologia utilizada:










Rn ==> Indica Registro R0 a R7 genericamente.
Ri ==> Indica Registro R0 ou R1
@ ==> Significa "endereçamento indireto"
#Dado ==> Indica valor constante de 8 bits.
#Dado 16 ==> Indica valor constante de 16 bits.
Direto ==> Indica um endereço de memória de 8 bits
(256 posições internas - RAM interna e Registros de
Função Especial ).
Bit ==> Endereço direto do bit.
End 11 ==> Endereço de destino de 11 bits.
End 16 ==> Endereço de destino de 16 bits.
rel ==> Indica que endereçamento é relativo.
PROF. SÉRGIO MORIBE - UTFPR
22
Instruções de Transferência
PROF. SÉRGIO MORIBE - UTFPR
23
Instruções Lógicas
PROF. SÉRGIO MORIBE - UTFPR
24
Instruções Aritméticas
PROF. SÉRGIO MORIBE - UTFPR
25
Instruções Manipulação de Bit
PROF. SÉRGIO MORIBE - UTFPR
26
Instruções de Desvio
PROF. SÉRGIO MORIBE - UTFPR
27
Instruções que afetam os Flags do PSW
PROF. SÉRGIO MORIBE - UTFPR
28
Detalhes de algumas Instruções:
Instruções PUSH e POP
SP (Stack Pointer) 81h = Apontador de Pilha:
Registrador de função especial de 8 bits que contem
o endereço do topo da Pilha.
O armazenamento na pilha, então é feita indiretamente
pelo SP.
Pilha (Stack) : Área especial de memória RAM para
armazenamento temporário de dados e
endereços. Utiliza estrutura LIFO (Last In First Out).
A Pilha deve ser montada na RAM interna e quando
se tem o RESET o SP ← 07h.
Para utilizar o Banco de Registradores 1, recomendase carregar SP na inicialização com um endereço
mais no fim da memória RAM para formar a pilha

PROF. SÉRGIO MORIBE - UTFPR
29
Definindo posição da Pilha
PROF. SÉRGIO MORIBE - UTFPR
30
Instrução PUSH 00h - Empilhar
PROF. SÉRGIO MORIBE - UTFPR
31
Instrução POP 01h - Desempilhar
PROF. SÉRGIO MORIBE - UTFPR
32
Instrução XCH A,@R0

Troca os conteúdos do A e da posição de
memória endereçada por R0
Por exemplo: A = 3Ch, R0 = 20h e (20h) = A4h
Após:
XCH
A,@R0
A = A4h, R0 = 20h e (20h) = 3Ch
PROF. SÉRGIO MORIBE - UTFPR
33
Instrução MOVX – RAM externa
Se A = xx DPTR = 1200h e (1200h) = 5Bh
MOVX A,@DPTR ; le RAM externa
A = 5Bh
DPTR = 1200h
Se A = 55h DPTR = 2000h (2000h) = xx
MOVX @DPTR,A ;escreve na RAM externa
A = 55h
DPTR = 2000h
PROF. SÉRGIO MORIBE - UTFPR
(2000h) = 55
34
Instrução MOVC – Lê ROM
Permite ler dados pré-gravados na ROM,
geralmente tabela de dados fixos.
Se A = 03h
DPTR = 0400h
MOVC A,@A+DPTR
A = B3h
(0403h) = B3h
;lê da ROM
DPTR = 0400h
(0403h) = B3h
PROF. SÉRGIO MORIBE - UTFPR
35
Instrução ADDC
Supondo A = 3Ah , R0 = 55h e Cy= 1
ADDC A,R0
A ← A + R0 + Cy
A = 90h
PROF. SÉRGIO MORIBE - UTFPR
36
Instrução SUBB

Instrução de subtração sempre subtrai o
segundo operando e o Cy do Acumulador
Supondo A = A7h R0 = 4Bh e Cy = 1
SUBB A,R0
A ← A – R0 – Cy
A = 5Bh
PROF. SÉRGIO MORIBE - UTFPR
37
Instrução MUL AB
Multiplicação
Supondo A = B5h e B = 3Dh
MUL AB
AxB
B ← Resultado MSB A ← Resultado LSB
B = 2Bh
A = 21h

PROF. SÉRGIO MORIBE - UTFPR
38
Instrução DIV AB
Divisão:
Supondo A = E2h B = 34h
DIV AB
A/B
A ← Resultado parte inteira
B ← Resto da divisão
A = 04h
B = 12h

PROF. SÉRGIO MORIBE - UTFPR
39
Instrução DA A


Faz um ajuste decimal para operações com
números BCD (Binary Coded Decimal).
Deve ser utilizada logo após a operação
aritmética.
Supondo A = 85h
ADD A,R1
DA A
R1 = 46h
; A = CBh
; A = 31h
PROF. SÉRGIO MORIBE - UTFPR
e Cy = 1
40
Instrução SETB

“Seta” o Bit
SETB
SETB
23h
P3.2
; bit (23h) = 1
;P3.2 = 1
PROF. SÉRGIO MORIBE - UTFPR
41
Instrução JNB bit,rel


Salta se o bit não for “1”, ou seja, se estiver em “0”
Obs. Endereçamento Relativo (+127 a -128)
JNB P2.1,fim
.
.
.
.
fim: .
PROF. SÉRGIO MORIBE - UTFPR
42
Instrução CJNE


Compara e salta se forem diferentes
Não altera nenhum operando, altera
apenas o flag Cy.
CJNE
R0,#55h,diferente
diferente:
PROF. SÉRGIO MORIBE - UTFPR
43
Instruções LCALL / RET



SUBROTINAS: Em um programa é comum a
existência de funções específicas que podem
ser requeridas várias vezes.
Para evitar codificação redundante, reduzir o
espaço ocupado e melhorar a estrutura do
programa, criam-se as subrotinas.
Chamar subrotina implica em mudar o fluxo
normal de execução, processar a subrotina e
voltar ao ponto do programa imediatamente
posterior à instrução de chamada.
PROF. SÉRGIO MORIBE - UTFPR
44
Instrução LCALL


Chamada de Subrotina
Supondo SP = 07h e uma subrotina de
nome SBTRN no endereço 056Fh
Depois de LCALL SBTRN
(08) = PCL (09) = PCH
SP = 09h PC = 056Fh
PROF. SÉRGIO MORIBE - UTFPR
45
Instrução RET


Retorno de Subrotina
Supondo o retorna da subrotina
SBTRN do exemplo anterior
.
.
RET
SP = 07h
PC = SP(PCH PCL)
PROF. SÉRGIO MORIBE - UTFPR
46
Documentação da Subrotina


Toda subrotina criada deve ser precedida por
uma documentação em forma de cabeçalho.
A documentação deve ter a informação
suficiente para que outro programador possa
utilizar a subrotina sem a necessidade de
olhar o código fonte.
PROF. SÉRGIO MORIBE - UTFPR
47
Exemplo Documentação de Subrotina
;**********************************************************
;Nome: LimpaMem
;Descrição: Zera um bloco de memória RAM interna.
;Par. Entrada: R0 = Endereço inicial do bloco
;
R1 = Número de bytes do bloco
;Par. Saída: R0 = Endereço final do bloco + 1
;Altera: R0, R1
;**********************************************************
LimpaMem: MOV @R0,#00 ;Zera memória
INC R0
;Próximo endereço
DJNZ R1,LimpaMem ;Zera todo bloco
RET
PROF. SÉRGIO MORIBE - UTFPR
48
Download